瀏覽代碼

Bug #856 本期合同计量--金额,应允许输入乘除运算符
Bug #859 变更清单,应不允许输入(0号台账类)金额
Bug #860 未输入任何数量,输入了单价的清单,调用变更令后不计算金额
Bug #861 计量台账,金额模式下不允许输入单价

MaiXinRong 9 年之前
父節點
當前提交
6e8723ba11
共有 4 個文件被更改,包括 38 次插入30 次删除
  1. 32 28
      DataModules/BillsCompileDm.pas
  2. 4 1
      DataModules/BillsMeasureDm.pas
  3. 1 0
      DataModules/StageDm.pas
  4. 1 1
      Frames/BillsMeasureFme.dfm

+ 32 - 28
DataModules/BillsCompileDm.pas

@@ -168,7 +168,7 @@ procedure TBillsCompileData.sdvBillsCompileGetText(var Text: String;
     if (Pos('Price', AColumn.FieldName) > 0) or
        (Pos('Quantity', AColumn.FieldName) > 0) then
     begin
-      if Assigned(AValue) and (AValue.AsFloat = 0) then
+      if not Assigned(AValue) or (AValue.AsFloat = 0) then
         Text := '';
     end;
   end;
@@ -276,33 +276,6 @@ end;
 procedure TBillsCompileData.sdvBillsCompileBeforeValueChange(
   AValue: TsdValue; const NewValue: Variant; var Allow: Boolean);
 begin
-  // 清单编号和项目节编号不可同时存在
-  if SameText(AValue.FieldName, 'Code') then
-  begin
-    if AValue.Owner.ValueByName('B_Code').AsString <> '' then
-      DataSetErrorMessage(Allow, '已存在清单编号,不可输入项目节编号!');
-  end
-  else if SameText(AValue.FieldName, 'B_Code') then
-  begin
-    if AValue.Owner.ValueByName('Code').AsString <> '' then
-      DataSetErrorMessage(Allow, '已存在项目节编号,不可输入清单编号!');
-  end
-  //
-  else if SameText(AValue.FieldName, 'Price') then
-  begin
-    if AValue.Owner.ValueByName('AddGatherTotalPrice').AsFloat <> 0 then
-      DataSetErrorMessage(Allow, '该清单已经开始计量,不可修改单价!');
-  end
-  // 变更清单不可修改0号台账数据
-  else if SameText(AValue.FieldName, 'OrgQuantity') or
-      SameText(AValue.FieldName, 'MisQuantity') or
-      SameText(AValue.FieldName, 'OthQuantity') then
-  begin
-    if AValue.Owner.ValueByName('IsMeasureAdd').AsBoolean then
-      DataSetErrorMessage(Allow, '变更清单不可填写0号台账数量与金额');
-  end;
-  if not Allow then Exit;
-    
   if SameText(AValue.FieldName, 'OrgQuantity') or
       SameText(AValue.FieldName, 'MisQuantity') or
       SameText(AValue.FieldName, 'OthQuantity') or
@@ -596,6 +569,7 @@ procedure TBillsCompileData.sdvBillsCompileSetText(var Text: String;
   procedure SetPrice;
   begin
     Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)));
+    ARecord.ValueByName('CalcType').AsInteger := 0;
   end;
 
   procedure DoCurChanged;
@@ -674,6 +648,36 @@ procedure TBillsCompileData.sdvBillsCompileSetText(var Text: String;
       if not Allow then Exit;
     end;
 
+    // 清单编号和项目节编号不可同时存在
+    if SameText(AValue.FieldName, 'Code') then
+    begin
+      if AValue.Owner.ValueByName('B_Code').AsString <> '' then
+        SetTextErrorHint('已存在清单编号,不可输入项目节编号!');
+    end
+    else if SameText(AValue.FieldName, 'B_Code') then
+    begin
+      if AValue.Owner.ValueByName('Code').AsString <> '' then
+        SetTextErrorHint('已存在项目节编号,不可输入清单编号!');
+    end
+    //
+    else if SameText(AValue.FieldName, 'Price') then
+    begin
+      if AValue.Owner.ValueByName('AddGatherTotalPrice').AsFloat <> 0 then
+        SetTextErrorHint('该清单已经开始计量,不可修改单价!');
+    end
+    // 变更清单不可修改0号台账数据
+    else if SameText(AValue.FieldName, 'OrgQuantity') or
+        SameText(AValue.FieldName, 'OrgTotalPrice') or
+        SameText(AValue.FieldName, 'MisQuantity') or
+        SameText(AValue.FieldName, 'MisTotalPrice') or
+        SameText(AValue.FieldName, 'OthQuantity') or
+        SameText(AValue.FieldName, 'OthTotalPrice') then
+    begin
+      if AValue.Owner.ValueByName('IsMeasureAdd').AsBoolean then
+        SetTextErrorHint('变更清单不可填写0号台账数量与金额');
+    end;
+    if not Allow then Exit;
+
     if SameText('Code', AColumn.FieldName) or
        SameText('B_Code', AColumn.FieldName) or
        SameText('Name', AColumn.FieldName) or

+ 4 - 1
DataModules/BillsMeasureDm.pas

@@ -325,7 +325,8 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
       end
       else if SameText('CurDealQuantity', AColumn.FieldName) or
           SameText('CurQcQuantity', AColumn.FieldName) or
-          SameText('CurPcQuantity', AColumn.FieldName) then
+          SameText('CurPcQuantity', AColumn.FieldName) or
+          SameText('Price', AColumn.FieldName) then
       begin
         if not vNode.CountPriceEnable then
           DataSetErrorMessage(Allow, '该清单不可输入数量单价,如需使用数量×单价计算,请先清空所有直接输入的金额!');
@@ -358,6 +359,7 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
       AValue.Owner.ValueByName(AField + 'Formula').AsString := Text;
       Text := FloatToStr(QuantityRoundTo(EvaluateExprs(Text)));
     end;
+    ARecord.ValueByName('CalcType').AsInteger := 0;
   end;
 
   procedure SetTotalPrice(const AField: string);
@@ -379,6 +381,7 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
       AValue.Owner.ValueByName(AField + 'Formula').AsString := Text;
       Text := FloatToStr(TotalPriceRoundTo(EvaluateExprs(Text)));
     end;
+    ARecord.ValueByName('CalcType').AsInteger := 1;
   end;
 
   procedure DoCurChanged;

+ 1 - 0
DataModules/StageDm.pas

@@ -278,6 +278,7 @@ begin
     sddStage.AddIndex('idxBID', 'BillsID');
 
   sddStage.FieldByName('DealQuantity').ValidChars := sddStage.FieldByName('DealQuantity').ValidChars + ArithmeticCharSet;
+  sddStage.FieldByName('DealTotalPrice').ValidChars := sddStage.FieldByName('DealQuantity').ValidChars;
 end;
 
 function TStageData.StageRecord(ABillsID: Integer): TStageRecord;

+ 1 - 1
Frames/BillsMeasureFme.dfm

@@ -333,7 +333,7 @@ object BillsMeasureFrame: TBillsMeasureFrame
         Font.Style = []
         FieldName = 'CurDealTotalPrice'
         Width = 60
-        ReadOnly = True
+        ReadOnly = False
       end
       item
         Title.Caption = #26412#26399#25968#37327#21464#26356#35745#37327'|'#25968#37327