Browse Source

Bug #892 首次金额模式计算,输入无效

MaiXinRong 9 years ago
parent
commit
27d708585a
1 changed files with 20 additions and 14 deletions
  1. 20 14
      DataModules/BillsMeasureDm.pas

+ 20 - 14
DataModules/BillsMeasureDm.pas

@@ -471,7 +471,7 @@ procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
     end;
   end;
 
-  procedure SetQuantityRec(APhaseRec: TsdDataRecord; const AType: string);
+  procedure SetQuantityRec(ANode: TBillsIDTreeNode; APhaseRec: TsdDataRecord; const AType: string);
   var
     bAllow: Boolean;
   begin
@@ -482,7 +482,10 @@ procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
           APhaseRec, StrToFloatDef(ANewText, 0), AType);
 
     if bAllow then
-    begin
+    begin 
+      if ANode.Rec.CalcType.AsInteger <> 0 then
+        ANode.Rec.CalcType.AsInteger := 0;
+        
       if CheckNumeric(ANewText) then
         APhaseRec.ValueByName(AType + 'Quantity').AsFloat := QuantityRoundTo(StrToFloatDef(ANewText, 0))
       else
@@ -494,9 +497,12 @@ procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
     end;
   end;
 
-  procedure SetTotalPriceRec(APhaseRec: TsdDataRecord; const AType: string);
-  begin
+  procedure SetTotalPriceRec(ANode: TBillsIDTreeNode; APhaseRec: TsdDataRecord; const AType: string);
+  begin 
+    if ANode.Rec.CalcType.AsInteger <> 1 then
+      ANode.Rec.CalcType.AsInteger := 1;
     APhaseRec.ValueByName(AType + 'Flag').AsInteger := 2;
+
     if CheckNumeric(ANewText) then
       APhaseRec.ValueByName(AType + 'TotalPrice').AsFloat := TotalPriceRoundTo(StrToFloatDef(ANewText, 0))
     else
@@ -506,20 +512,20 @@ procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
     end;
   end;
 
-  procedure SetNewRecValue(APhaseRec: TsdDataRecord);
+  procedure SetNewRecValue(ANode: TBillsIDTreeNode; APhaseRec: TsdDataRecord);
   begin
     if SameText(AColumn.FieldName, 'CurDealQuantity') then
-      SetQuantityRec(APhaseRec, 'Deal')
+      SetQuantityRec(ANode, APhaseRec, 'Deal')
     else if SameText(AColumn.FieldName, 'CurQcQuantity') then
-      SetQuantityRec(APhaseRec, 'Qc')
+      SetQuantityRec(ANode, APhaseRec, 'Qc')
     else if SameText(AColumn.FieldName, 'CurPcQuantity') then
-      SetQuantityRec(APhaseRec, 'Pc')
+      SetQuantityRec(ANode, APhaseRec, 'Pc')
     else if SameText(AColumn.FieldName, 'CurDealTotalPrice') then
-      SetTotalPriceRec(APhaseRec, 'Deal')
+      SetTotalPriceRec(ANode, APhaseRec, 'Deal')
     else if SameText(AColumn.FieldName, 'CurQcTotalPrice') then
-      SetTotalPriceRec(APhaseRec, 'Qc')
+      SetTotalPriceRec(ANode, APhaseRec, 'Qc')
     else if SameText(AColumn.FieldName, 'CurPcTotalPrice') then
-      SetTotalPriceRec(APhaseRec, 'Pc');
+      SetTotalPriceRec(ANode, APhaseRec, 'Pc');
   end;
 
   function CheckNodeWritable(ANode: TBillsIDTreeNode): Boolean;
@@ -576,13 +582,13 @@ begin
 
   if CheckNeedAddPhaseRecord(vNode) then
   begin
-    if Pos('Quantity', AColumn.FieldName) > 0 then
+    if (Pos('Quantity', AColumn.FieldName) > 0) or (Pos('TotalPrice', AColumn.FieldName) > 0) then
       if HasCardinalNum(ANewText) then
-        raise Exception.Create('数量列公式不可输入参数');
+        raise Exception.Create('公式不可输入参数');
     NewRec := StageData.AddStageRecord(ARecord.ValueByName('ID').AsInteger);
     vNode.StageRec := NewRec;
 
-    SetNewRecValue(NewRec);
+    SetNewRecValue(vNode, NewRec);
   end;
 end;