ソースを参照

合同支付,计算式计算,bqwc计算方式Bug

MaiXinRong 6 年 前
コミット
85ab289761
1 ファイル変更9 行追加4 行削除
  1. 9 4
      DataModules/PhasePayDm.pas

+ 9 - 4
DataModules/PhasePayDm.pas

@@ -3,7 +3,7 @@ unit PhasePayDm;
 interface
 
 uses
-  SysUtils, Classes, sdDB, sdProvider, ADODB, FormulaCalc;
+  SysUtils, Classes, sdDB, sdProvider, ADODB, FormulaCalc, CalcDecimal;
 
 type
   TPhasePayData = class(TDataModule)
@@ -17,6 +17,7 @@ type
     FPayFormula: TPayFormula;
 
     FBeforeChangeTotalPrice: Double;
+    FDecimal: TCalcDecimal;
 
     function CheckMinus(AID: Integer): Boolean;
     function GetFormula(AID: Integer): string;
@@ -57,6 +58,7 @@ type
     // AType表示不同类型,取值如下:
     // 1: 本期数据  2: 截止本期数据  3: 截止上期数据
     property LastestPhasePay[AType: Integer]: Double read GetLastestPhasePay;
+    property Decimal: TCalcDecimal read FDecimal;
   end;
 
 implementation
@@ -74,7 +76,10 @@ begin
   FPhaseData := APhaseData;
   FPayFormula := TPayFormula.Create(TPhaseData(FPhaseData).ProjectData);
   with TProjectData(TPhaseData(FPhaseData).ProjectData) do
+  begin
     FPayFormula.Decimal := ProjProperties.DecimalManager.DealPay;
+    FDecimal := ProjProperties.DecimalManager.DealPay;
+  end;
 end;
 
 procedure TPhasePayData.Delete(AID: Integer);
@@ -200,7 +205,7 @@ begin
       if Rec.ValueByName(sFField).AsString <> '' then
       begin
         // 初次达到起扣金额时,bqwc基数值取值为累计完成计量-起扣金额
-        if Rec.ValueByName('Pre'+sTPField).AsFloat = 0 then
+        if FDecimal.TotalPrice.RoundTo(Rec.ValueByName('Pre'+sTPField).AsFloat) = 0 then
           fTotalPrice := FPayFormula.Calculate(Rec.ValueByName(sFField).AsString, fStartedPrice)
         else
           fTotalPrice := FPayFormula.Calculate(Rec.ValueByName(sFField).AsString);
@@ -236,8 +241,8 @@ begin
     end;
   end;}
   // 计算截止数据
-  Rec.ValueByName('End' + sTPField).AsFloat := Rec.ValueByName(sTPField).AsFloat
-      + Rec.ValueByName('Pre' + sTPField).AsFloat;
+  Rec.ValueByName('End' + sTPField).AsFloat := FDecimal.TotalPrice.RoundTo(Rec.ValueByName(sTPField).AsFloat
+      + Rec.ValueByName('Pre' + sTPField).AsFloat);
 end;
 
 function TPhasePayData.GetPayablePrice(AIndex: Integer): Double;