Procházet zdrojové kódy

1. Bug #1316 修改本期合同计量,详细工料--本期应耗数量未实时计算
2. 调差工料,本期应耗数量应汇总分部分项处数据,而非从清单工料处计算

MaiXinRong před 10 roky
rodič
revize
2b07ff29af

+ 1 - 1
DataModules/DetailGLDm.pas

@@ -420,7 +420,7 @@ begin
     TProjectData(FProjectData).BillsCompileData.LoadLeafBillsID(AXmjID, vLeafBills);
     for i := 0 to vLeafBills.Count - 1 do
     begin
-      Rec := sddDetailGL.FindKey('idxView', VarArrayOf([Integer(vLeafBills.Items[i]), AGLID]));
+      Rec := sddDetailGL.FindKey('idxFind', VarArrayOf([Integer(vLeafBills.Items[i]), AGLID]));
       if Assigned(Rec) then
         AGLs.Add(Rec);
     end;

+ 15 - 0
DataModules/LeafXmjGlDm.pas

@@ -38,6 +38,8 @@ type
 
     function LeafXmjGLRec(AXmjID, AGLID: Integer): TLeafXmjGlRecord;
 
+    procedure LoadLeafXmjGLs(AGLID: Integer; vGLs: TList);
+
     function AddLeafXmjGl(AXmjID, AGLID: Integer): TLeafXmjGlRecord;
     procedure DeleteLeafXmjGl(AXmjID, AGLID: Integer);
   end;
@@ -320,4 +322,17 @@ begin
   Result := TLeafXmjGlRecord(sddLeafXmjGL.FindKey('idxView', VarArrayOf([AXmjID, AGLID])));
 end;
 
+procedure TLeafXmjGlData.LoadLeafXmjGLs(AGLID: Integer; vGLs: TList);
+var
+  idx: TsdIndex;
+  iRec, iFirst, iLast: Integer;
+  Rec: TsdDataRecord;
+begin
+  idx := sddLeafXmjGL.FindIndex('idxGl');
+  iFirst := idx.FindKeyIndex(AGLID);
+  iLast := idx.FindKeyLastIndex(AGLID);
+  for iRec := iFirst to iLast do
+    vGLs.Add(idx.Records[iRec]);
+end;
+
 end.

+ 9 - 10
DataModules/ProjectGLDm.pas

@@ -90,7 +90,7 @@ implementation
 uses
   ProjectData, UtilMethods, DB, Variants, PhaseData, DetailGLDm,
   BillsMeasureDm, BillsTree, sdIDTree, PhasePayDm, DateUtils, ZhAPI, Math,
-  StageLeafXmjGlDm;
+  StageLeafXmjGlDm, LeafXmjGlDm;
 
 {$R *.dfm}
 
@@ -352,22 +352,21 @@ var
   vGLs: TList;
   fQuantity: Double;
   i: Integer;
-  GLRec: TsdDataRecord;
-  BillsNode: TMeasureBillsIDTreeNode;
+  GLRec: TLeafXmjGlRecord;
+  StageRec: TStageLeafXmjGlRecord;
 begin
   vGLs := TList.Create;
   try
     fQuantity := 0;
-    with TProjectData(FProjectData).DetailGLData do
-      LoadProjectGL_DetailGLs(ARec.ValueByName('ID').AsInteger, vGLs);
+    with TProjectData(FProjectData).LeafXmjGlData do
+      LoadLeafXmjGLs(ARec.ValueByName('ID').AsInteger, vGLs);
 
     for i := 0 to vGLs.Count - 1 do
     begin
-      GLRec := TsdDataRecord(vGLs.Items[i]);
-      with TProjectData(FProjectData).BillsMeasureData do
-        BillsNode := TMeasureBillsIDTreeNode(BillsMeasureTree.FindNode(GLRec.ValueByName('BillsID').AsInteger));
-      if Assigned(BillsNode.StageRec) then
-        fQuantity := fQuantity + Decimal.Quantity.RoundTo(BillsNode.StageRec.GatherQuantity.AsFloat * GLRec.ValueByName('Quantity').AsFloat);
+      GLRec := TLeafXmjGlRecord(vGLs.Items[i]);
+      StageRec := TStageLeafXmjGlRecord(GLRec.StageRec);
+      if Assigned(StageRec) then
+        fQuantity := fQuantity + StageRec.Quantity.AsFloat;
     end;
 
     if fQuantity <> ARec.PM_Quantity.AsFloat then