Q&A

  • 감가상각 계산(정액법) 코딩이 힘드네요...
안녕하세요 고수님들....



바쁘신 고수님들에게 폐가 안될려고 검색하고 이틀 동안 찾고 또 보고 했는데 답을 구하지 못했읍니다. 죄송하지만 좀 보아주시면 정말정말 감사드리겠읍니다.



DB : Paradox7,

컴포넌트 : Query, UpdateSQL(직접입력), DBGrid, CalFiled(자동계산) 기타 등등



장비에 대한 감가상각을 자동으로 계산 할려고 하는데 잘 안되네요..

감가상각은 정액법으로 하는데 알고리즘은 만들었읍니다. 그런데 코딩이 안되네요.머쓱.



알고리즘은 대강 이렇읍니다.



10 A = 반입날짜

20 B = 구입가격

30 C = 감가상각년한

40 X = 잔존가액 (Calfield에 표시될 값)

50 Y = 현재날짜

60 Y-A <= C (if Yes이면 70으로, No이면100으로) // 감가년한 초과시 0원으로 계산

70 A <= 6 (if Yes이면 80으로, No이면90으로) // 상반기 구입시 기본 감가,

하반기 반입 시 기본 감가에 50% 감가

80 X = B*(C-Y+A)/C (to 110) // 기본 감가 계산 공식

90 X = B*(C-Y+A+0.5)/C (to 110) // 기본 감가의 50% 감가 공식

100 X = 0 // 감가 상각 년한 지난 장비에 대해선 0원으로 설정

110 End



아래와 같이 하면 컴파일이 안됩니다.(많은 에러 발생)

여러곳에 있는것들을 조합해놓았읍니다. 한심하다는 생각이 드시겠지만

보시고 좀 수정해주시면 안되나요?



//CalFields에 의한 계산

procedure TForm1.Query1CalcFields(DataSet: TDataSet);

var CurDate, CurDate1 : TDateTime;

Year, Month, day, Year1, Month1, Day1 : Word;

Y_A : String;

begin

CurDate := now; // 현재날짜

DecodeDate(CurDate, Year, Month, Day); // 현재날짜

CurDate1 := Query1.FieldByName('D').value; // 반입날짜

DecodeDate(Curdate1, Year1, Month1, Day1); // 반입날짜 분리



Y_A := StrToDate(Year)-StrToDate(Year1); // 현재년 - 반입년(월,일 불필요)



if Y_A <= Query1.FieldByName('P1').value then // 감가상각년한 판단

begin

if StrToDate(Month1) <= 6 then // 상반기 반입 할 경우 계산 (월만 추출)

begin

with Query1 do begin

FieldByName('Cal').value :=

FieldByName('P').value *

(FieldByName('P1').value - Y_A)/

FieldByName('P1').value;

end;

end

else begin // 하반기 반입 할 경우 계산

with Query1 do begin

FieldByName('Cal').value :=

FieldByName('P').value *

(FieldByName('P1').value - Y_A + 0.5)/

FieldByName('P1').value;

end;

end;

end

else begin

Query1.FieldByName('Cal').value := 0; // 감가상각년한 초과시 값=0원

end;

end;



보시는데 불편을 드려 죄송하고

항상 건강하시고 즐거운 코딩 하시길 바랍니다.

1  COMMENTS
  • Profile
    허접답변 2001.05.05 01:04
    허접임다.



    음.... FieldByName(필드명).value 를 사용하셨는데,

    안될건 없지만, 정확하게 AS... 를 사용해 보심이...

    AsInteger, AsString, As.... 있잖아여....

    답변은 아닙니다. 그냥....참고하세염 ^^;

    글구,,어디서 어떤 에러가 나는지를 알면 좀 더 쉬울텐데.....푸렴~~

    또, 글구, 모든 필드의 값을 변수 설정하셔서 계산하세염..

    글구, double형으로 변수 잡아서 처리하면 쉽지 않을까염......

    정확한 에러를 알려주심 함더 생각해보져.





    > //CalFields에 의한 계산

    > procedure TForm1.Query1CalcFields(DataSet: TDataSet);

    > var CurDate, CurDate1 : TDateTime;

    > Year, Month, day, Year1, Month1, Day1 : Word;

    > Y_A : String;

    > begin

    > CurDate := now; // 현재날짜

    > DecodeDate(CurDate, Year, Month, Day); // 현재날짜

    > CurDate1 := Query1.FieldByName('D').value; // 반입날짜

    > DecodeDate(Curdate1, Year1, Month1, Day1); // 반입날짜 분리

    >

    > Y_A := StrToDate(Year)-StrToDate(Year1); // 현재년 - 반입년(월,일 불필요)

    --------------------------------------------------------------------------------

    Y_A:= Year - Year1; // 이렇게 하면 안되던가요?



    >

    > if Y_A <= Query1.FieldByName('P1').value then // 감가상각년한 판단

    --------------------------------------------------------------------------------

    if Y_A <= Query1.FieldByName('P1').AsInteger then //이렇게도...쩝.



    > begin

    > if StrToDate(Month1) <= 6 then // 상반기 반입 할 경우 계산 (월만 추출)

    --------------------------------------------------------------------------------

    if Month1 <= 6 then



    > begin

    > with Query1 do begin

    > FieldByName('Cal').value :=

    > FieldByName('P').value *

    > (FieldByName('P1').value - Y_A)/

    > FieldByName('P1').value;

    > end;

    > end

    > else begin // 하반기 반입 할 경우 계산

    > with Query1 do begin

    > FieldByName('Cal').value :=

    > FieldByName('P').value *

    > (FieldByName('P1').value - Y_A + 0.5)/

    > FieldByName('P1').value;

    > end;

    > end;

    > end

    > else begin

    > Query1.FieldByName('Cal').value := 0; // 감가상각년한 초과시 값=0원

    > end;

    > end;





    아기코알라 wrote:

    > 안녕하세요 고수님들....

    >

    > 바쁘신 고수님들에게 폐가 안될려고 검색하고 이틀 동안 찾고 또 보고 했는데 답을 구하지 못했읍니다. 죄송하지만 좀 보아주시면 정말정말 감사드리겠읍니다.

    >

    > DB : Paradox7,

    > 컴포넌트 : Query, UpdateSQL(직접입력), DBGrid, CalFiled(자동계산) 기타 등등

    >

    > 장비에 대한 감가상각을 자동으로 계산 할려고 하는데 잘 안되네요..

    > 감가상각은 정액법으로 하는데 알고리즘은 만들었읍니다. 그런데 코딩이 안되네요.머쓱.

    >

    > 알고리즘은 대강 이렇읍니다.

    >

    > 10 A = 반입날짜

    > 20 B = 구입가격

    > 30 C = 감가상각년한

    > 40 X = 잔존가액 (Calfield에 표시될 값)

    > 50 Y = 현재날짜

    > 60 Y-A <= C (if Yes이면 70으로, No이면100으로) // 감가년한 초과시 0원으로 계산

    > 70 A <= 6 (if Yes이면 80으로, No이면90으로) // 상반기 구입시 기본 감가,

    > 하반기 반입 시 기본 감가에 50% 감가

    > 80 X = B*(C-Y+A)/C (to 110) // 기본 감가 계산 공식

    > 90 X = B*(C-Y+A+0.5)/C (to 110) // 기본 감가의 50% 감가 공식

    > 100 X = 0 // 감가 상각 년한 지난 장비에 대해선 0원으로 설정

    > 110 End

    >

    > 아래와 같이 하면 컴파일이 안됩니다.(많은 에러 발생)

    > 여러곳에 있는것들을 조합해놓았읍니다. 한심하다는 생각이 드시겠지만

    > 보시고 좀 수정해주시면 안되나요?

    >

    > //CalFields에 의한 계산

    > procedure TForm1.Query1CalcFields(DataSet: TDataSet);

    > var CurDate, CurDate1 : TDateTime;

    > Year, Month, day, Year1, Month1, Day1 : Word;

    > Y_A : String;

    > begin

    > CurDate := now; // 현재날짜

    > DecodeDate(CurDate, Year, Month, Day); // 현재날짜

    > CurDate1 := Query1.FieldByName('D').value; // 반입날짜

    > DecodeDate(Curdate1, Year1, Month1, Day1); // 반입날짜 분리

    >

    > Y_A := StrToDate(Year)-StrToDate(Year1); // 현재년 - 반입년(월,일 불필요)

    >

    > if Y_A <= Query1.FieldByName('P1').value then // 감가상각년한 판단

    > begin

    > if StrToDate(Month1) <= 6 then // 상반기 반입 할 경우 계산 (월만 추출)

    > begin

    > with Query1 do begin

    > FieldByName('Cal').value :=

    > FieldByName('P').value *

    > (FieldByName('P1').value - Y_A)/

    > FieldByName('P1').value;

    > end;

    > end

    > else begin // 하반기 반입 할 경우 계산

    > with Query1 do begin

    > FieldByName('Cal').value :=

    > FieldByName('P').value *

    > (FieldByName('P1').value - Y_A + 0.5)/

    > FieldByName('P1').value;

    > end;

    > end;

    > end

    > else begin

    > Query1.FieldByName('Cal').value := 0; // 감가상각년한 초과시 값=0원

    > end;

    > end;

    >

    > 보시는데 불편을 드려 죄송하고

    > 항상 건강하시고 즐거운 코딩 하시길 바랍니다.