⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base2infofixadd.pas

📁 中小企业管理系统------ ERP系统原代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -