안녕하세요 고수님들....
바쁘신 고수님들에게 폐가 안될려고 검색하고 이틀 동안 찾고 또 보고 했는데 답을 구하지 못했읍니다. 죄송하지만 좀 보아주시면 정말정말 감사드리겠읍니다.
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;
보시는데 불편을 드려 죄송하고
항상 건강하시고 즐거운 코딩 하시길 바랍니다.
음.... 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;
>
> 보시는데 불편을 드려 죄송하고
> 항상 건강하시고 즐거운 코딩 하시길 바랍니다.