안녕하세요 고수님
마음은 급하고 일은 안되고 정말 머리가 터질것 같습니다.
왜 계산이 안되는지 좀 보아 주시면 그 은혜 잊지않겠나이다......
DB : paradox
콤포넌트 : Query, DataSource, UpdateSQL, DBGrid 등등
감가상각 계산을 하고 합계를 낼려고 합니다.
그런데 합계에서 자꾸만 오류가 생기네요
합계 하나는 감가상각액, 다른 하나는 잔존가액 입니다.
잔존가액 합계(CalSum)는 잘 되는데 감가상각액 합계(Calsum1)는 왜 이상한지
1주일째 씨름하고 있는데
정말 뭐가 잘못되었는지 모르겠읍니다. 꼭 좀 봐 주십시요....
이상한점 : 감가상각액 합계(Calsum1)에 계산도 안되고 꼭 20원이 추가되어 나옴..
예) 감가상각액 레코드값 : 2,500, 1,000, 5,000, 3,000, 1,500, 2,000
정상합계액은 15000원이 출력이 되어야 하는데
현재는 63,020원이 출력됩니다..
// 감가상각 계산(정액법)
procedure TEMain.Query1CalcFields(DataSet: TDataSet);
var CurDate, curDateO, N_O : TDateTime; // 금일 , 납품일, 금일-납품일
Year, Month, Day, YearO,MonthO,DayO : Word;
calsum, calsum1 : integer;
Begin
// 현재날짜 입력
CurDate := now;
DecodeDate(CurDate, Year, Month, Day);
중략....Calfield의 계산 (Cal1, Cal2계산부분)
// 3개 필드중 하나라도 입력안되면 계산을 못하도록...
while not Query2.eof do begin
if(Query2.FieldByName('DateOffer').value = null) or
(Query2.FieldByName('Price').value = null) or
(Query2.FieldByName('Equipvalue').value = null) then
Query2.next
else begin
CurDate := Query2.FieldByName('DateOffer').Asdatetime;// 취득년
DecodeDate(Curdate, YearO, MonthO, DayO);
N_O := Year - YearO;
// 물품 구입이 감가상각년한을 초과 했는지 판단...
if N_O <= Query2.FieldByName('Equipvalue').AsInteger then begin
// 상반기 구입했을 경우 잔존가액 계산
if MonthO <=6 then begin
// 잔존가액 합계( 상반기 구입 시)
calsum := calsum + Query2.FieldByName('Price').value*
(Query2.FieldByName('Equipvalue').value-N_O)/
Query2.FieldByName('Equipvalue').value;
// 감가상각액 합계 (상반기 구입 시)
calsum1 := calsum1 + (Query2.FieldByname('Price').Value * N_O /
Query2.FieldByName('Equipvalue').Value);
end
else begin
// 하반기 구입했을 경우 잔존가액 계산
with Query2 do begin
// 잔존가액 합계 (하반기 구입시)
calsum := calsum + Query2.FieldByName('Price').value*
(Query2.FieldByName('Equipvalue').value-N_O+0.5)/
Query2.FieldByName('Equipvalue').value;
// 감가상각액 합계 (하반기 구입시)
calsum1 := calsum1 + ((Query2.FieldByname('Price').Value * (N_O + 0.5)) /
Query2.FieldByName('Equipvalue').Value);
end;
end;
end else
// 감가상각년한이 지난 잔존가액은 "0원"으로 처리
calsum := calsum + 0;
// 감가상각년한이 지난 감가상각액은 "취득가격"으로 처리
calsum1 := calsum1+Query2.FieldByName('Price').value; //<- - - 요 부분이 좀
end;
Query2.next;
end;
Edit4.text := IntToStr(calsum);
Edit4.text := formatfloat('#,##0',calsum); // 숫자에 3자리 마다 콤마삽입
Edit3.text := Inttostr(calsum1);
Edit3.text := FormatFloat('#,##0',calsum1); // 숫자에 3자리 마다 콤마삽입
end;
너무 길죠/..
항상 행복하시고 즐거운 나날 되십시요....
혹시 계산이 잘못 되는 경우는 이 때문이지 않을까요?
> end else (begin)
>
> // 감가상각년한이 지난 잔존가액은 "0원"으로 처리
> calsum := calsum + 0;
>
> // 감가상각년한이 지난 감가상각액은 "취득가격"으로 처리
>
> calsum1 := calsum1+Query2.FieldByName('Price').value; //<- - - 요 부분이 좀
>
> end;
감가상각년한이 지난 경우 잔존가액과 감각상각액 계산에서
end else begin 이 되어야 하지 않는지...
지금 소스를 보면
calsum1 := calsum1+Query2.FieldByName('Price').value;
위의 계산은 무조건 실행되는 것 같애서요.
아기코알라 wrote:
> 안녕하세요 고수님
>
> 마음은 급하고 일은 안되고 정말 머리가 터질것 같습니다.
>
> 왜 계산이 안되는지 좀 보아 주시면 그 은혜 잊지않겠나이다......
>
> DB : paradox
> 콤포넌트 : Query, DataSource, UpdateSQL, DBGrid 등등
>
>
> 감가상각 계산을 하고 합계를 낼려고 합니다.
>
> 그런데 합계에서 자꾸만 오류가 생기네요
>
> 합계 하나는 감가상각액, 다른 하나는 잔존가액 입니다.
>
> 잔존가액 합계(CalSum)는 잘 되는데 감가상각액 합계(Calsum1)는 왜 이상한지
>
> 1주일째 씨름하고 있는데
>
> 정말 뭐가 잘못되었는지 모르겠읍니다. 꼭 좀 봐 주십시요....
>
> 이상한점 : 감가상각액 합계(Calsum1)에 계산도 안되고 꼭 20원이 추가되어 나옴..
>
> 예) 감가상각액 레코드값 : 2,500, 1,000, 5,000, 3,000, 1,500, 2,000
> 정상합계액은 15000원이 출력이 되어야 하는데
> 현재는 63,020원이 출력됩니다..
>
>
> // 감가상각 계산(정액법)
> procedure TEMain.Query1CalcFields(DataSet: TDataSet);
> var CurDate, curDateO, N_O : TDateTime; // 금일 , 납품일, 금일-납품일
> Year, Month, Day, YearO,MonthO,DayO : Word;
> calsum, calsum1 : integer;
> Begin
> // 현재날짜 입력
> CurDate := now;
> DecodeDate(CurDate, Year, Month, Day);
>
> 중략....Calfield의 계산 (Cal1, Cal2계산부분)
>
> // 3개 필드중 하나라도 입력안되면 계산을 못하도록...
> while not Query2.eof do begin
> if(Query2.FieldByName('DateOffer').value = null) or
> (Query2.FieldByName('Price').value = null) or
> (Query2.FieldByName('Equipvalue').value = null) then
> Query2.next
> else begin
> CurDate := Query2.FieldByName('DateOffer').Asdatetime;// 취득년
> DecodeDate(Curdate, YearO, MonthO, DayO);
> N_O := Year - YearO;
>
> // 물품 구입이 감가상각년한을 초과 했는지 판단...
> if N_O <= Query2.FieldByName('Equipvalue').AsInteger then begin
>
> // 상반기 구입했을 경우 잔존가액 계산
> if MonthO <=6 then begin
>
> // 잔존가액 합계( 상반기 구입 시)
> calsum := calsum + Query2.FieldByName('Price').value*
> (Query2.FieldByName('Equipvalue').value-N_O)/
> Query2.FieldByName('Equipvalue').value;
>
> // 감가상각액 합계 (상반기 구입 시)
> calsum1 := calsum1 + (Query2.FieldByname('Price').Value * N_O /
> Query2.FieldByName('Equipvalue').Value);
> end
> else begin
> // 하반기 구입했을 경우 잔존가액 계산
> with Query2 do begin
>
> // 잔존가액 합계 (하반기 구입시)
> calsum := calsum + Query2.FieldByName('Price').value*
> (Query2.FieldByName('Equipvalue').value-N_O+0.5)/
> Query2.FieldByName('Equipvalue').value;
>
> // 감가상각액 합계 (하반기 구입시)
> calsum1 := calsum1 + ((Query2.FieldByname('Price').Value * (N_O + 0.5)) /
> Query2.FieldByName('Equipvalue').Value);
> end;
> end;
> end else
>
> // 감가상각년한이 지난 잔존가액은 "0원"으로 처리
> calsum := calsum + 0;
>
> // 감가상각년한이 지난 감가상각액은 "취득가격"으로 처리
>
> calsum1 := calsum1+Query2.FieldByName('Price').value; //<- - - 요 부분이 좀
>
> end;
> Query2.next;
> end;
> Edit4.text := IntToStr(calsum);
> Edit4.text := formatfloat('#,##0',calsum); // 숫자에 3자리 마다 콤마삽입
> Edit3.text := Inttostr(calsum1);
> Edit3.text := FormatFloat('#,##0',calsum1); // 숫자에 3자리 마다 콤마삽입
> end;
>
>
> 너무 길죠/..
>
> 항상 행복하시고 즐거운 나날 되십시요....