안녕하세요 고수님들...
정말 질문 안할려고 같은 검색을 수십차례 하면서 보아왔는데.. 저의 한계를 느끼면서
고수님들께 폐를 끼치게 되었읍니다. 부디 용서하시고 좀 보아 주십시요...
콤포넌트 : Query, DBGrid, UpDateSQL, 기타 등등.
DataBase : paradox7
Table 구조
관리번호 / 장비명 / 납품일 / 구입가격 / 감가년한 / 잔존가액(CalField 계산)
1-1 / Modem / 2000-6-7 / 8000 / 8 / 7000
1-2 / PC / 2000-7-7 / 8000 / 8 / 7500
1-3 / Printer/ 2001-1-1 / 4000 / 8 / 4000
. / . / . / . / . / .
. / . / . / . / . / .
합계 / 3(총수량)/ . / 20000 / . / 18500
(바로위 작업을 해야합니다.)
합계 부분은 특정 필드의 레코드 갯수나 가격의 합을 구하는 것입니다.
이를 DBGrid의 마지막 레코드에 삽입하면 가장 좋은데...
만약 어려우면 eidt쪽에 출력해도 상관은 없읍니다.
잔존가액은 프로그램을 실행시키면 자동 계산 되고 구입연도나 가격을 변화 시키면
자동으로 계산 됩니다.
가능하면 합계나 갯수 부분을 위의 레코드가 삽입되거나 삭제 될때도 자동으로
계산이 되어지도록 하면 금상첨화가 되겠읍니다.
이렇게 할려면 어느 프로시져에 어떻게 코딩을 해야 하는지 좀 자세히 일러주시면
그 은혜 평생 잊지 않겠나이다.
읽어주셔서 감사하고 항상 행복하세요...
참고로 CalField 자동 계산 Procedure
// 잔존가액(CalField) 감가상각 계산 (정액법)
procedure TFront.Query2CalcFields(DataSet: TDataSet);
var CurDate, CurDateO, N_O : TDateTime; // 금일, 납품일, 금일-납품일
Year, Month, Day, YearO,MonthO, DayO : Word;
begin
// 현재날짜
CurDate := now;
DecodeDate(CurDate, Year,Month,Day);
// 납품일
CurDateO := Query2.FieldByName('DateOffer').value;
DecodeDate(CurDateO, YearO,MonthO,DayO);
// 현재년 - 납품년
N_O := Year-YearO;
// 현제년-납품년과 감가상각 년한 과의 비교
if N_O <= Query2.FieldByName('EquipValue').Asinteger then
begin
// 상반기(6월30일 이전) 구입품의 감가상각 계산식
if MonthO <= 6 then
begin
with Query2 do begin
FieldByName('Cal').value :=
FieldByName('Price').value *
(FieldByName('EquipValue').value - N_O)/
FieldByName('EquipValue').value;
end;
end
// 하반기(7월1일 이후) 구입품의 감가상각 계산식
else begin
with Query2 do begin
FieldByName('Cal').value :=
FieldByName('Price').value *
(FieldByName('EquipValue').value - N_O + 0.5) /
FieldByName('EquipValue').value;
end;
end;
end
// 감가상각년한이 지난 후 잔존가액은 0원( 마이너스 가격출력 금지)
else begin
Query2.FieldByName('Cal').value := 0;
end;
end;
> 안녕하세요 고수님들...
>
> 정말 질문 안할려고 같은 검색을 수십차례 하면서 보아왔는데.. 저의 한계를 느끼면서
> 고수님들께 폐를 끼치게 되었읍니다. 부디 용서하시고 좀 보아 주십시요...
>
> 콤포넌트 : Query, DBGrid, UpDateSQL, 기타 등등.
> DataBase : paradox7
>
> Table 구조
>
> 관리번호 / 장비명 / 납품일 / 구입가격 / 감가년한 / 잔존가액(CalField 계산)
> 1-1 / Modem / 2000-6-7 / 8000 / 8 / 7000
> 1-2 / PC / 2000-7-7 / 8000 / 8 / 7500
> 1-3 / Printer/ 2001-1-1 / 4000 / 8 / 4000
> . / . / . / . / . / .
> . / . / . / . / . / .
>
> 합계 / 3(총수량)/ . / 20000 / . / 18500
> (바로위 작업을 해야합니다.)
>
> 합계 부분은 특정 필드의 레코드 갯수나 가격의 합을 구하는 것입니다.
>
> 이를 DBGrid의 마지막 레코드에 삽입하면 가장 좋은데...
> 만약 어려우면 eidt쪽에 출력해도 상관은 없읍니다.
>
> 잔존가액은 프로그램을 실행시키면 자동 계산 되고 구입연도나 가격을 변화 시키면
> 자동으로 계산 됩니다.
>
> 가능하면 합계나 갯수 부분을 위의 레코드가 삽입되거나 삭제 될때도 자동으로
> 계산이 되어지도록 하면 금상첨화가 되겠읍니다.
>
> 이렇게 할려면 어느 프로시져에 어떻게 코딩을 해야 하는지 좀 자세히 일러주시면
> 그 은혜 평생 잊지 않겠나이다.
>
> 읽어주셔서 감사하고 항상 행복하세요...
>
> 참고로 CalField 자동 계산 Procedure
>
> // 잔존가액(CalField) 감가상각 계산 (정액법)
> procedure TFront.Query2CalcFields(DataSet: TDataSet);
> var CurDate, CurDateO, N_O : TDateTime; // 금일, 납품일, 금일-납품일
> Year, Month, Day, YearO,MonthO, DayO : Word;
> begin
> // 현재날짜
> CurDate := now;
> DecodeDate(CurDate, Year,Month,Day);
> // 납품일
> CurDateO := Query2.FieldByName('DateOffer').value;
> DecodeDate(CurDateO, YearO,MonthO,DayO);
> // 현재년 - 납품년
> N_O := Year-YearO;
>
> // 현제년-납품년과 감가상각 년한 과의 비교
> if N_O <= Query2.FieldByName('EquipValue').Asinteger then
> begin
> // 상반기(6월30일 이전) 구입품의 감가상각 계산식
> if MonthO <= 6 then
> begin
> with Query2 do begin
> FieldByName('Cal').value :=
> FieldByName('Price').value *
> (FieldByName('EquipValue').value - N_O)/
> FieldByName('EquipValue').value;
> end;
> end
> // 하반기(7월1일 이후) 구입품의 감가상각 계산식
> else begin
> with Query2 do begin
> FieldByName('Cal').value :=
> FieldByName('Price').value *
> (FieldByName('EquipValue').value - N_O + 0.5) /
> FieldByName('EquipValue').value;
> end;
> end;
> end
> // 감가상각년한이 지난 후 잔존가액은 0원( 마이너스 가격출력 금지)
> else begin
> Query2.FieldByName('Cal').value := 0;
> end;
>
> end;
>
글쎄요. 일단 합계를 그리드에 나타나도록 하는 건 모르겠구요.
에디트박스에 나타내는 것인데....
1. AfterOpen에서 모든 레코드를 돌면서 합계를 구함. 루프를 돌리기가 좀 그렇다면 초기 합계는 Query를 이용해서 구할 수도 있구요.
2. 변경, 추가시 : AfterScroll에서 합계를 구해야하는 필드에 대한 현재의 값을 저장
3. 변경, 추가시 : 합계를 구해야 하는 필드의 OnChange 이벤트에서 이전 값과 현재 값의 차이를 합계에 적용
4. 삭제시 : BeforeDelete 이벤트에서 현재 값을 합계에서 빼줌.
이런 식으로 하면 될 것 같네요.