Q&A

  • 정말급합니다. 꼭좀봐주십시요 ( Calfield 계산된것 합계산출입니다)..
안녕하세요 고수님



마음은 급하고 일은 안되고 정말 머리가 터질것 같습니다.



왜 계산이 안되는지 좀 보아 주시면 그 은혜 잊지않겠나이다......



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;





너무 길죠/..



항상 행복하시고 즐거운 나날 되십시요....

1  COMMENTS
  • Profile
    블랙봉 2001.07.10 18:51
    맞는 지는 모릅니다.

    혹시 계산이 잘못 되는 경우는 이 때문이지 않을까요?

    > 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;

    >

    >

    > 너무 길죠/..

    >

    > 항상 행복하시고 즐거운 나날 되십시요....