📄 base2infofixadd.pas
字号:
begin
inherited;
if CheckEdit then
begin
SaveData;
bReturn := true;
Close;
end;
end;
procedure TfrmBase2InfoFixAdd.bbNoClick(Sender: TObject);
begin
inherited;
Close;
end;
procedure TfrmBase2InfoFixAdd.edtSubjectButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
var
sSubject1: string;
begin
inherited;
sSubject1 := BaseSelect(BASE_SUBJECT, 1, edtSubject.Text);
if (sSubject1 <> '') and (sSubject1 <> '0') then
begin
DataSet.FieldByName('SubjectID').AsString := sSubject1;
DataSet.FieldByName('Subject').AsString := FieldIdToName('Subject', sSubject1, 'Name');
end;
end;
procedure TfrmBase2InfoFixAdd.edtAbateModeChange(Sender: TObject);
begin
inherited;
if edtAbateMode.ItemIndex = 3 then
begin
Label27.Caption := '预计工作量:';
Label28.Caption := '已提工作量:';
Label21.Visible := true;
edtUnit.Visible := true;
end
else
begin
Label27.Caption := '预计使用月份:';
Label28.Caption := '已计提月份:';
Label21.Visible := False;
edtUnit.Visible := False;
end;
CanUseMonth;
EditCalcDepreciation;
end;
procedure TfrmBase2InfoFixAdd.CanUseMonth;
begin
if (edtAbateMode.ItemIndex = 4) or (edtAbateMode.ItemIndex = 5) then
begin
if (Trim(edtUseMonth.Text) <> '') and (StrToInt(edtUseMonth.Text) mod 12 <>
0) then
ShowMsg('双倍余额递减法、年数总和法中预计使用月份应能被12整除!');
end;
end;
function TfrmBase2InfoFixAdd.BornValueChange(cType: Char): boolean;
var
dBorn, dAllA, dNetV, dFutuP, dFutuV: Double;
begin
dBorn := DataSet.FieldByName(edtBornValue.DataField).AsFloat;
dAllA := DataSet.FieldByName(edtAllAbate.DataField).AsFloat;
dNetV := DataSet.FieldByName(edtNetValue.DataField).AsFloat;
dFutuP := DataSet.FieldByName(edtFutuPvalue.DataField).AsFloat;
dFutuV := DataSet.FieldByName(edtFutuValue.DataField).AsFloat;
if dBorn <= 0 then
begin
if cType = 'P' then
begin
dNetV := 0.00;
dFutuP := 0.00;
end
else
if cType = 'I' then
begin
dAllA := 0.00;
dFutuV := 0.00;
end;
end
else
begin
if cType = 'P' then
begin
dNetV := dBorn - dAllA;
if dFutuP <> 0 then
dFutuV := dBorn * dFutuP / 100;
end
else
if cType = 'I' then
begin
dAllA := dBorn - dNetV;
if dBorn <> 0 then
dFutuP := dFutuV * 100 / dBorn;
end;
end;
DataSet.FieldByName(edtBornValue.DataField).AsFloat := dBorn;
DataSet.FieldByName(edtAllAbate.DataField).AsFloat := dAllA;
DataSet.FieldByName(edtNetValue.DataField).AsFloat := dNetV;
DataSet.FieldByName(edtFutuPvalue.DataField).AsFloat := dFutuP;
DataSet.FieldByName(edtFutuValue.DataField).AsFloat := dFutuV;
Result := true;
end;
procedure TfrmBase2InfoFixAdd.edtBornValueExit(Sender: TObject);
begin
inherited;
BornValueChange('P');
EditCalcDepreciation;
end;
procedure TfrmBase2InfoFixAdd.edtAllAbateExit(Sender: TObject);
begin
inherited;
BornValueChange('P');
EditCalcDepreciation;
end;
procedure TfrmBase2InfoFixAdd.edtNetValueExit(Sender: TObject);
begin
inherited;
BornValueChange('I');
end;
procedure TfrmBase2InfoFixAdd.edtFutuPvalueExit(Sender: TObject);
begin
inherited;
BornValueChange('P');
EditCalcDepreciation;
end;
procedure TfrmBase2InfoFixAdd.edtFutuValueExit(Sender: TObject);
begin
inherited;
BornValueChange('I');
end;
procedure TfrmBase2InfoFixAdd.edtUseMonthExit(Sender: TObject);
begin
inherited;
CanUseMonth;
EditCalcDepreciation;
end;
function CalcDepreciation(sAbaterMode {折旧方法}: string; dBorn {入账原值}, dAllA {累计折旧},
dNetV {净值}, dFutuP {净残值率}, dFutuV {预计净残值}, dUserM {预计使用月份},
dCountM {已计提月份}, dWorkdays {计提工作量}: Double; var dMAMod {月折旧率}, dMAVal {月折旧额}: Double): Boolean;
var
i, n: Integer;
begin
Result := True;
dMAMod := 0.00;
dMAVal := 0.00;
if (dBorn = 0) or (dUserM = 0) or (dUserM <= dCountM) then
begin
Result := False;
Exit;
end; //保证不除0错误
if (sAbaterMode = '平均年限法(一)') or ((dUserM = 12) and (sAbaterMode = '年数总和法')) then
begin
dMAMod := (1 - dFutuP * 0.01) / dUserM * 100;
dMAVal := (dBorn - dFutuV) / dUserM;
end
else
if sAbaterMode = '平均年限法(二)' then
begin
dMAVal := (dBorn - dAllA - dFutuV) / (dUserM - dCountM); //反起算的
dMAMod := dMAVal / (dBorn - dFutuV) * 100;
end
else
if sAbaterMode = '双倍余额递减法' then
begin
n := Trunc(dUserM / 12); //预计使用年
i := Trunc(dCountM / 12 + 1); //已计提年
if ((dUserM - dCountM) > 24) then
begin
dMAVal := (2 * dBorn * IntPower((n - 2), i - 1)) / (12 * IntPower((n), i));
dMAMod := dMAVal / dBorn * 100;
end
else
begin
dMAVal := (dBorn - dAllA - dFutuV) / 24; //反起算的
dMAMod := dMAVal / (dBorn - dFutuV) * 100;
end;
end
else
if sAbaterMode = '年数总和法' then
begin
n := Trunc(dUserM / 12); //预计使用年
i := Trunc(dCountM / 12); //已计提年
dMAMod := (n - i) / (n * (1 + n) / 2) / 12 * 100;
dMAVal := (dBorn - dFutuV) * dMAMod / 100;
end
else
if sAbaterMode = '工作量法' then
begin
if dWorkdays <> 0 then dMAVal := ((dBorn * (1 - dFutuP * 0.01)) / dUserM) * dWorkdays;
end
else
Result := False;
end;
procedure TfrmBase2InfoFixAdd.EditCalcDepreciation;
var
dBorn, dAllA, dNetV, dFutuP, dFutuV, dUserM, dCountM, dMAMod, dMAVal: Double;
sAbateMode: string;
begin
sAbateMode := edtAbateMode.Text;
dBorn := DataSet.FieldByName(edtBornValue.DataField).AsFloat;
dAllA := DataSet.FieldByName(edtAllAbate.DataField).AsFloat;
dNetV := DataSet.FieldByName(edtNetValue.DataField).AsFloat;
dFutuP := DataSet.FieldByName(edtFutuPvalue.DataField).AsFloat;
dFutuV := DataSet.FieldByName(edtFutuValue.DataField).AsFloat;
dUserM := DataSet.FieldByName(edtUseMonth.DataField).AsFloat;
dCountM := DataSet.FieldByName(edtCountMonth.DataField).AsFloat;
if CalcDepreciation(Trim(sAbateMode), dBorn, dAllA, dNetV, dFutuP, dFutuV, dUserM, dCountM, 0, dMAMod, dMAVal) then
begin
DataSet.FieldByName(edtMAbateMod.DataField).AsFloat := dMAMod;
DataSet.FieldByName(edtMAbateValue.DataField).AsFloat := dMAVal;
end;
end;
procedure TfrmBase2InfoFixAdd.edtCountMonthExit(Sender: TObject);
begin
inherited;
EditCalcDepreciation;
end;
procedure TfrmBase2InfoFixAdd.dxDBDateEdit1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
case KEY of
VK_DOWN: SendMsg(TWinControl(Sender).Handle, WM_KEYDOWN, VK_F4);
end;
end;
end.
//此源码由程序太平洋收集整理发布,任何人都可自由转载,但需保留本站信息
//╭⌒╮┅~ ¤ 欢迎光临程序太平洋╭⌒╮
//╭⌒╭⌒╮╭⌒╮~╭⌒╮ ︶ ,︶︶
//,︶︶︶︶,''︶~~ ,''~︶︶ ,''
//╔ ╱◥███◣═╬╬╬╬╬╬╬╬╬╗
//╬ ︱田︱田 田 ︱ ╬
//╬ http://www.5ivb.net ╬
//╬ ╭○╮● ╬
//╬ /■\/■\ ╬
//╬ <| || 有希望,就有成功! ╬
//╬ ╬
//╚╬╬╬╬╬╬╬╬╬╬╗ ╔╬╬╬╬╝
//
//说明:
//专业提供VB、.NET、Delphi、ASP、PB源码下载
//包括:程序源码,控件,商业源码,系统方案,开发工具,书籍教程,技术文档
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -