Преглед изворни кода

材料调差,计算相关

MaiXinRong пре 8 година
родитељ
комит
d060f3909a
2 измењених фајлова са 16 додато и 15 уклоњено
  1. 15 15
      DataModules/ProjectGLDm.pas
  2. 1 0
      Units/CalcDecimal.pas

+ 15 - 15
DataModules/ProjectGLDm.pas

@@ -286,9 +286,7 @@ procedure TProjectGLData.sdvProjectGLGetText(var Text: String;
         SameText('RiskRange', AColumn.FieldName)) then
     begin
       if AValue.AsFloat = 0 then
-        Text := ''
-      else
-        Text := FormatFloat('0.###', Decimal.Price.RoundTo(AValue.AsFloat));
+        Text := '';
     end;
   end;
 
@@ -301,6 +299,7 @@ procedure TProjectGLData.CalculateAll;
 begin
   CalculatePrice;
   CalculatePriceMargin;
+  CalculatePALRelas;
   RefreshGatherData;
 end;
 
@@ -374,11 +373,11 @@ begin
       with TProjectData(FProjectData).BillsMeasureData do
         BillsNode := TMeasureBillsIDTreeNode(BillsMeasureTree.FindNode(GLRec.ValueByName('BillsID').AsInteger));
       if Assigned(BillsNode.StageRec) then
-        fQuantity := fQuantity + BillsNode.StageRec.GatherQuantity.AsFloat * GLRec.ValueByName('Quantity').AsFloat;
+        fQuantity := fQuantity + Decimal.Quantity.RoundTo(BillsNode.StageRec.GatherQuantity.AsFloat * GLRec.ValueByName('Quantity').AsFloat);
     end;
 
     if fQuantity <> ARec.PM_Quantity.AsFloat then
-      ARec.PM_Quantity.AsFloat := fQuantity;
+      ARec.PM_Quantity.AsFloat := Decimal.Quantity.RoundTo(fQuantity);
   finally
     vGLs.Free;
   end;
@@ -390,7 +389,7 @@ var
 begin
   fTotalPrice := ARec.ValidDeltaPrice.AsFloat * ARec.PM_Quantity.AsFloat;
   if fTotalPrice <> ARec.PM_TotalPrice.AsFloat then
-    ARec.PM_TotalPrice.AsFloat := fTotalPrice;
+    ARec.PM_TotalPrice.AsFloat := Decimal.TotalPrice.RoundTo(fTotalPrice);
 end;
 
 procedure TProjectGLData.sddProjectGLGetRecordClass(
@@ -714,20 +713,21 @@ var
   iRec: Integer;
   RecGL: TsdDataRecord;
   vQuery: TADOQuery;
+  fCur, fPre: Double;
 begin
-  ARec.ValueByName('CurTotalPrice').AsFloat := 0;
-  ARec.ValueByName('PreTotalPrice').AsFloat := 0;
-  ARec.ValueByName('EndTotalPrice').AsFloat := 0;
-  ARec.ValueByName('AddTotalPrice').AsFloat := 0;
+  fCur := 0;
+  fPre := 0;
 
   for iRec := 0 to sddProjectGL.RecordCount - 1 do
   begin
     RecGL := sddProjectGL.Records[iRec];
-    ARec.ValueByName('CurTotalPrice').AsFloat := ARec.ValueByName('CurTotalPrice').AsFloat + RecGL.ValueByName(AFieldName).AsFloat;
-    ARec.ValueByName('PreTotalPrice').AsFloat := ARec.ValueByName('PreTotalPrice').AsFloat + RecGL.ValueByName(APreFieldName).AsFloat;
+    fCur := fCur + RecGL.ValueByName(AFieldName).AsFloat;
+    fPre := fPre + RecGL.ValueByName(APreFieldName).AsFloat;
   end;
-  ARec.ValueByName('EndTotalPrice').AsFloat := ARec.ValueByName('PreTotalPrice').AsFloat + ARec.ValueByName('CurTotalPrice').AsFloat;
-  ARec.ValueByName('AddTotalPrice').AsFloat := ARec.ValueByName('EndTotalPrice').AsFloat;
+  ARec.ValueByName('CurTotalPrice').AsFloat := Decimal.TotalPrice.RoundTo(fCur);
+  ARec.ValueByName('PreTotalPrice').AsFloat := Decimal.TotalPrice.RoundTo(fPre);
+  ARec.ValueByName('EndTotalPrice').AsFloat := Decimal.TotalPrice.RoundTo(fPre + fCur);
+  ARec.ValueByName('AddTotalPrice').AsFloat := Decimal.TotalPrice.RoundTo(fPre + fCur);
 
   with TProjectData(FProjectData) do
   begin
@@ -739,7 +739,7 @@ begin
         vQuery.SQL.Clear;
         vQuery.SQL.Add(Format(sSelectSql, [APreFieldName, AFieldName]));
         vQuery.Open;
-        ARec.ValueByName('AddTotalPrice').AsFloat := vQuery.FieldByName('AddGather').AsFloat;
+        ARec.ValueByName('AddTotalPrice').AsFloat := Decimal.TotalPrice.RoundTo(vQuery.FieldByName('AddGather').AsFloat);
       finally
         vQuery.Free;
       end;

+ 1 - 0
Units/CalcDecimal.pas

@@ -83,6 +83,7 @@ end;
 constructor TDecimal.Create;
 begin
   FLinkViewCols := TList.Create;
+  FDigit := -1;
 end;
 
 destructor TDecimal.Destroy;