MaiXinRong пре 8 година
родитељ
комит
f4cae7f2b8

+ 13 - 0
DataModules/BillsMeasureDm.pas

@@ -56,6 +56,7 @@ type
 
     procedure ResetPhaseStageLink;
     procedure ResetTreeNodeStageRec;
+    procedure FreeTreeNodeStageRec;
 
     procedure ExpandNodeTo(ALevel: Integer);
     procedure ExpandXmjNode;
@@ -1017,4 +1018,16 @@ begin
   UpdateGather(stnNode.ParentID, ADiffer);
 end;
 
+procedure TBillsMeasureData.FreeTreeNodeStageRec;
+var
+  i: Integer;
+  vNode: TMeasureBillsIDTreeNode;
+begin
+  for i := 0 to BillsMeasureTree.Count - 1 do
+  begin
+    vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.Items[i]);
+    vNode.StageRec := nil;
+  end;
+end;
+
 end.

+ 1 - 1
DataModules/ProjectGLDm.dfm

@@ -166,6 +166,6 @@ object ProjectGLData: TProjectGLData
     OnGetText = sdvProjectGLGetText
     OnSetText = sdvProjectGLSetText
     Left = 56
-    Top = 136
+    Top = 144
   end
 end

+ 2 - 0
DataModules/ProjectGLDm.pas

@@ -264,6 +264,7 @@ procedure TProjectGLData.sdvProjectGLGetText(var Text: String;
   begin
     if ((Pos('Price', AColumn.FieldName) > 0) or
         (Pos('Quantity', AColumn.FieldName) > 0) or
+        (Pos('PAL', AColumn.FieldName) = 1) or
         SameText('RiskRange', AColumn.FieldName)) then
     begin
       if AValue.AsFloat = 0 then
@@ -422,6 +423,7 @@ begin
 
   CalculatePM_Quantity(Rec);
   CalculatePM_TotalPrice(Rec);
+  CalculatePALRela(Rec);
 end;
 
 procedure TProjectGLData.CalculateGLs_PM(ADetailGLs: TList);

+ 17 - 1
DataModules/StageDm.pas

@@ -43,6 +43,7 @@ type
     procedure CalculateDeal(ABillsID: Integer);
     procedure CalculateQuantityChange(ABillsID: Integer);
     procedure CalculatePriceChange(ABillsID: Integer);
+    procedure CalculateGather(ABillsID: Integer);
 
     procedure CalculateParent(ANode: TMeasureBillsIDTreeNode);
     procedure CalculateLeaf(ANode: TMeasureBillsIDTreeNode);
@@ -206,7 +207,9 @@ begin
     with TProjectData(TPhaseData(FPhaseData).ProjectData).BillsMeasureData do
       UpdateRecordDeal(ABillsID, fQtyDiffer, fTPDiffer);
 
-  CalculatePriceMargin(ABillsID);
+  //CalculatePriceMargin(ABillsID);
+  if ABillsID = iPriceMarginID then
+    CalculateGather(ABillsID);
 
   TPhaseData(FPhaseData).PhasePayData.CalculateAll;
 end;
@@ -967,4 +970,17 @@ begin
   Result := Assigned(vPM_Node);
 end;
 
+procedure TStageData.CalculateGather(ABillsID: Integer);
+var
+  Rec: TStageRecord;
+  fQuantity, fTotalPrice: Double;
+begin
+  Rec := TStageRecord(sddStage.FindKey('idxBID', ABillsID));
+  if not Assigned(Rec) then Exit;
+  fQuantity := QuantityRoundTo(Rec.DealQuantity.AsFloat + Rec.QcQuantity.AsFloat) - Rec.GatherQuantity.AsFloat;
+  fTotalPrice := TotalPriceRoundTo(
+      Rec.DealTotalPrice.AsFloat + Rec.QcTotalPrice.AsFloat + Rec.PcTotalPrice.AsFloat) - Rec.GatherTotalPrice.AsFloat;
+  UpdateComplete(ABillsID, fQuantity, fTotalPrice);
+end;
+
 end.

+ 2 - 2
Frames/ProjectFme.pas

@@ -577,13 +577,13 @@ procedure TProjectFrame.dxsbViewControlItemClick(Sender: TObject;
     vPM_Node: TsdIDTreeNode;
   begin
     vPM_Node := FProjectData.BillsCompileData.BillsCompileTree.FindNode(iPriceMarginID);
-    if not Assigned(vPM_Node) then
+    {if not Assigned(vPM_Node) then
     begin
       ErrorMessage('台账中无预定义价差节点,不可使用价差功能。');
       dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[jpsMain.ActivePageIndex];
       Abort;
     end
-    else if ProjectData.ProjProperties.PhaseCount = 0 then
+    else }if ProjectData.ProjProperties.PhaseCount = 0 then
     begin
       TipMessage('未计量前不可进行材料调差。');
       dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[jpsMain.ActivePageIndex];

+ 2 - 2
Units/ExcelImport_Bills.pas

@@ -153,8 +153,8 @@ begin
   // For Test
   // FCacheTree.SaveTreeToFile('E:\Tree.txt');
 
-  if FWithLevelCode then
-    CheckFixedIDNodes;
+  {if FWithLevelCode then
+    CheckFixedIDNodes;}
 
   FFixedIDNodes.Free;
   FBaseTree.Free;

+ 1 - 0
Units/ProjectData.pas

@@ -543,6 +543,7 @@ procedure TProjectData.SetPhaseIndex(const Value: Integer);
     if (FPhaseData.Active) and (AOrgPhaseIndex = ProjProperties.PhaseCount) then
       FPhaseData.Save;
     FPhaseData.Free;
+    FBillsMeasureData.FreeTreeNodeStageRec;
     FPhaseData := TPhaseData.Create(Self);
   end;