Jelajahi Sumber

Bug #845 “应用调差工料至相同清单”在相同清单有调差工料时,报错。

MaiXinRong 9 tahun lalu
induk
melakukan
a5b4aeaf54
2 mengubah file dengan 17 tambahan dan 11 penghapusan
  1. 16 10
      DataModules/DetailGLDm.pas
  2. 1 1
      DataModules/PriceMarginBillsDm.pas

+ 16 - 10
DataModules/DetailGLDm.pas

@@ -102,9 +102,10 @@ var
 begin
   if HasLockedDetailGL(ABillsID) then Exit;
 
+  ClearDetailGLs(ABillsID);
+
   sddDetailGL.BeginUpdate;
   try
-    ClearDetailGLs(ABillsID);
     iNewID := GetsdDataSetNewID(sddDetailGL, 'idxID');
     for i := 0 to AGLs.Count - 1 do
     begin
@@ -116,7 +117,7 @@ begin
       Rec.Code.AsInteger := GLRec.Code.AsInteger;
       Rec.Quantity.AsFloat := GLRec.Quantity.AsFloat;
       Rec.CreatePhaseID.AsInteger := TProjectData(FProjectData).ProjProperties.PhaseCount;
-      
+
       Rec.RelaProjectGL := GLRec.RelaProjectGL;
     end;
   finally
@@ -127,14 +128,20 @@ end;
 procedure TDetailGLData.ClearDetailGLs(ABillsID: Integer);
 var
   idx: TsdIndex;
-  Rec: TsdDataRecord;
+  iFirst, iLast, iRec: Integer;
 begin
-  idx := sddDetailGL.FindIndex('idxBillsID');
-  Rec := idx.FindKey(ABillsID);
-  while Assigned(Rec) do
-  begin
-    sddDetailGL.Remove(Rec);
-    Rec := idx.FindKey(ABillsID);
+  sddDetailGL.BeginUpdate;
+  try
+    idx := sddDetailGL.FindIndex('idxBillsID');
+    iFirst := idx.FindKeyIndex(ABillsID);
+    if iFirst <> -1 then
+    begin
+      iLast := idx.FindKeyLastIndex(ABillsID);
+      for iRec := iFirst to iLast do
+        sddDetailGL.Remove(idx.Records[iRec]);
+    end;
+  finally
+    sddDetailGL.EndUpdate;
   end;
 end;
 
@@ -156,7 +163,6 @@ end;
 
 destructor TDetailGLData.Destroy;
 begin
-
   inherited;
 end;
 

+ 1 - 1
DataModules/PriceMarginBillsDm.pas

@@ -236,7 +236,7 @@ procedure TPriceMarginBillsData.AddDetailGLs(AGls: TList);
 begin
   TProjectData(FProjectData).DetailGLData.AddDetailGLs(
       sdvDetailGclBills.Current.ValueByName('RelaBillsID').AsInteger, AGls);
-  sdvDetailGclBills.RefreshFilter;
+  sdvDetailGL.RefreshFilter;
 end;
 
 procedure TPriceMarginBillsData.sdvDetailGclBillsCurrentChanged(