Parcourir la source

项目管理,截止本期应付

MaiXinRong il y a 3 ans
Parent
commit
0e7cb534c7

+ 60 - 50
DataModules/ProjectManagerDm.dfm

@@ -56,60 +56,64 @@ object ProjectManagerData: TProjectManagerData
       0453697A6502000001044E616D6506085068617365506179094669656C644E61
       6D65060850686173655061790844617461547970650206084461746153697A65
       02080549734B6579080F4E65656450726F636573734E616D6509095072656369
-      73696F6E02000453697A6502000001044E616D65060A5068617365436F756E74
-      094669656C644E616D65060A5068617365436F756E7408446174615479706502
-      03084461746153697A6502040549734B6579080F4E65656450726F636573734E
-      616D650909507265636973696F6E02000453697A6502000001044E616D65060B
-      4175646974537461747573094669656C644E616D65060B417564697453746174
-      75730844617461547970650203084461746153697A6502040549734B6579080F
+      73696F6E02000453697A6502000001044E616D65060B456E6450686173655061
+      79094669656C644E616D65060B456E6450686173655061790844617461547970
+      650206084461746153697A6502080549734B6579080F4E65656450726F636573
+      734E616D650909507265636973696F6E02000453697A6502000001044E616D65
+      060A5068617365436F756E74094669656C644E616D65060A5068617365436F75
+      6E740844617461547970650203084461746153697A6502040549734B6579080F
       4E65656450726F636573734E616D650909507265636973696F6E02000453697A
-      6502000001044E616D65060846696C654E616D65094669656C644E616D650608
-      46696C654E616D650844617461547970650201084461746153697A6503FF0005
-      49734B6579080F4E65656450726F636573734E616D650909507265636973696F
-      6E02000453697A6502000001044E616D65060A43726561746544617465094669
-      656C644E616D65060A4372656174654461746508446174615479706502010844
-      61746153697A6503FF000549734B6579080F4E65656450726F636573734E616D
-      650909507265636973696F6E02000453697A6502000001044E616D65060C4261
-      636B7570466F6C646572094669656C644E616D65060C4261636B7570466F6C64
-      65720844617461547970650218084461746153697A6502320549734B6579080F
-      4E65656450726F636573734E616D650909507265636973696F6E02000453697A
-      6502000001044E616D6506124465616C5F42474C546F74616C50726963650946
-      69656C644E616D6506124465616C5F42474C546F74616C507269636508446174
-      61547970650206084461746153697A6502080549734B6579080F4E6565645072
-      6F636573734E616D650909507265636973696F6E02000453697A650200000104
-      4E616D6506055765624944094669656C644E616D650605576562494408446174
-      61547970650203084461746153697A6502040549734B6579080F4E6565645072
-      6F636573734E616D650909507265636973696F6E02000453697A650200000104
-      4E616D65060A5765624F776E65724944094669656C644E616D65060A5765624F
-      776E657249440844617461547970650203084461746153697A6502040549734B
-      6579080F4E65656450726F636573734E616D650909507265636973696F6E0200
-      0453697A6502000001044E616D65060B576562417574686F724944094669656C
-      644E616D65060B576562417574686F7249440844617461547970650203084461
-      746153697A6502040549734B6579080F4E65656450726F636573734E616D6509
-      09507265636973696F6E02000453697A6502000001044E616D6506065765624D
-      4435094669656C644E616D6506065765624D4435084461746154797065020108
+      6502000001044E616D65060B4175646974537461747573094669656C644E616D
+      65060B4175646974537461747573084461746154797065020308446174615369
+      7A6502040549734B6579080F4E65656450726F636573734E616D650909507265
+      636973696F6E02000453697A6502000001044E616D65060846696C654E616D65
+      094669656C644E616D65060846696C654E616D65084461746154797065020108
       4461746153697A6503FF000549734B6579080F4E65656450726F636573734E61
-      6D650909507265636973696F6E02000453697A6502000001044E616D65060957
-      6562557365724944094669656C644E616D650609576562557365724944084461
-      7461547970650203084461746153697A6502040549734B6579080F4E65656450
-      726F636573734E616D650909507265636973696F6E02000453697A6502000001
-      044E616D65060E576562466F6C6465724C6576656C094669656C644E616D6506
-      0E576562466F6C6465724C6576656C0844617461547970650203084461746153
-      697A6502040549734B6579080F4E65656450726F636573734E616D6509095072
-      65636973696F6E02000453697A6502000001044E616D6506065765624B657909
-      4669656C644E616D6506065765624B6579084461746154797065020108446174
-      6153697A6503FF000549734B6579080F4E65656450726F636573734E616D6509
-      09507265636973696F6E02000453697A6502000001044E616D65060B436F6D6D
-      6F6E4469676974094669656C644E616D65060B436F6D6D6F6E44696769740844
+      6D650909507265636973696F6E02000453697A6502000001044E616D65060A43
+      726561746544617465094669656C644E616D65060A4372656174654461746508
+      44617461547970650201084461746153697A6503FF000549734B6579080F4E65
+      656450726F636573734E616D650909507265636973696F6E02000453697A6502
+      000001044E616D65060C4261636B7570466F6C646572094669656C644E616D65
+      060C4261636B7570466F6C646572084461746154797065021808446174615369
+      7A6502320549734B6579080F4E65656450726F636573734E616D650909507265
+      636973696F6E02000453697A6502000001044E616D6506124465616C5F42474C
+      546F74616C5072696365094669656C644E616D6506124465616C5F42474C546F
+      74616C50726963650844617461547970650206084461746153697A6502080549
+      734B6579080F4E65656450726F636573734E616D650909507265636973696F6E
+      02000453697A6502000001044E616D6506055765624944094669656C644E616D
+      65060557656249440844617461547970650203084461746153697A6502040549
+      734B6579080F4E65656450726F636573734E616D650909507265636973696F6E
+      02000453697A6502000001044E616D65060A5765624F776E6572494409466965
+      6C644E616D65060A5765624F776E657249440844617461547970650203084461
+      746153697A6502040549734B6579080F4E65656450726F636573734E616D6509
+      09507265636973696F6E02000453697A6502000001044E616D65060B57656241
+      7574686F724944094669656C644E616D65060B576562417574686F7249440844
       617461547970650203084461746153697A6502040549734B6579080F4E656564
       50726F636573734E616D650909507265636973696F6E02000453697A65020000
-      01044E616D65060C4465616C5061794469676974094669656C644E616D65060C
-      4465616C50617944696769740844617461547970650203084461746153697A65
-      02040549734B6579080F4E65656450726F636573734E616D6509095072656369
-      73696F6E02000453697A6502000001044E616D65060C5765624D65576F726B69
-      6E67094669656C644E616D65060C5765624D65576F726B696E67084461746154
-      7970650205084461746153697A6502010549734B6579080F4E65656450726F63
-      6573734E616D650909507265636973696F6E02000453697A6502000000}
+      01044E616D6506065765624D4435094669656C644E616D6506065765624D4435
+      0844617461547970650201084461746153697A6503FF000549734B6579080F4E
+      65656450726F636573734E616D650909507265636973696F6E02000453697A65
+      02000001044E616D650609576562557365724944094669656C644E616D650609
+      5765625573657249440844617461547970650203084461746153697A65020405
+      49734B6579080F4E65656450726F636573734E616D650909507265636973696F
+      6E02000453697A6502000001044E616D65060E576562466F6C6465724C657665
+      6C094669656C644E616D65060E576562466F6C6465724C6576656C0844617461
+      547970650203084461746153697A6502040549734B6579080F4E65656450726F
+      636573734E616D650909507265636973696F6E02000453697A6502000001044E
+      616D6506065765624B6579094669656C644E616D6506065765624B6579084461
+      7461547970650201084461746153697A6503FF000549734B6579080F4E656564
+      50726F636573734E616D650909507265636973696F6E02000453697A65020000
+      01044E616D65060B436F6D6D6F6E4469676974094669656C644E616D65060B43
+      6F6D6D6F6E44696769740844617461547970650203084461746153697A650204
+      0549734B6579080F4E65656450726F636573734E616D65090950726563697369
+      6F6E02000453697A6502000001044E616D65060C4465616C5061794469676974
+      094669656C644E616D65060C4465616C50617944696769740844617461547970
+      650203084461746153697A6502040549734B6579080F4E65656450726F636573
+      734E616D650909507265636973696F6E02000453697A6502000001044E616D65
+      060C5765624D65576F726B696E67094669656C644E616D65060C5765624D6557
+      6F726B696E670844617461547970650205084461746153697A6502010549734B
+      6579080F4E65656450726F636573734E616D650909507265636973696F6E0200
+      0453697A6502000000}
   end
   object sdvProjectsInfo: TsdDataView
     Active = False
@@ -153,6 +157,9 @@ object ProjectManagerData: TProjectManagerData
         FieldName = 'PhasePay'
       end
       item
+        FieldName = 'EndPhasePay'
+      end
+      item
         FieldName = 'PhaseCount'
       end
       item
@@ -261,6 +268,9 @@ object ProjectManagerData: TProjectManagerData
         FieldName = 'PhasePay'
       end
       item
+        FieldName = 'EndPhasePay'
+      end
+      item
         FieldName = 'PhaseCount'
       end
       item

+ 5 - 2
DataModules/ProjectManagerDm.pas

@@ -391,7 +391,7 @@ begin
   begin
     if Pos('TotalPrice', AColumn.FieldName) > 0 then
       Text := FormatCommonTotalPrice(AValue.AsFloat)
-    else if SameText('PhasePay', AColumn.FieldName) then
+    else if Pos('PhasePay', AColumn.FieldName) > 0 then
       Text := FormatDealPayTotalPrice(AValue.AsFloat);
   end;
 end;
@@ -682,7 +682,7 @@ procedure TProjectManagerData.CalculateParentInfo(AID: Integer);
 
   procedure ReCalculateInfo(ANode: TsdIDTreeNode);
   var
-    fDeal, fDeal_BGL, fPhase, fEndDeal, fEndChange, fEnd, fPre, fPhasePay: Double;
+    fDeal, fDeal_BGL, fPhase, fEndDeal, fEndChange, fEnd, fPre, fPhasePay, fEndPhasePay: Double;
     iChild, iCommonDigit, iDealPayDigit: Integer;
     vChild: TsdIDTreeNode;
   begin
@@ -694,6 +694,7 @@ procedure TProjectManagerData.CalculateParentInfo(AID: Integer);
     fEnd := 0;
     fPre := 0;
     fPhasePay := 0;
+    fEndPhasePay := 0;
     iCommonDigit := - ANode.Rec.ValueByName('CommonDigit').AsInteger;
     iDealPayDigit := - ANode.Rec.ValueByName('DealPayDigit').AsInteger;
     for iChild := 0 to ANode.ChildCount - 1 do
@@ -707,6 +708,7 @@ procedure TProjectManagerData.CalculateParentInfo(AID: Integer);
       fEnd := fEnd + vChild.Rec.ValueByName('EndTotalPrice').AsFloat;
       fPre := fPre + vChild.Rec.ValueByName('PreTotalPrice').AsFloat;
       fPhasePay := fPhasePay + vChild.Rec.ValueByName('PhasePay').AsFloat;
+      fEndPhasePay := fEndPhasePay + vChild.Rec.ValueByName('EndPhasePay').AsFloat;
     end;
     ANode.Rec.ValueByName('DealTotalPrice').AsFloat := CommonRoundTo(fDeal, iCommonDigit);
     ANode.Rec.ValueByName('Deal_BGLTotalPrice').AsFloat := CommonRoundTo(fDeal_BGL, iCommonDigit);
@@ -716,6 +718,7 @@ procedure TProjectManagerData.CalculateParentInfo(AID: Integer);
     ANode.Rec.ValueByName('EndTotalPrice').AsFloat := CommonRoundTo(fEnd, iCommonDigit);
     ANode.Rec.ValueByName('PreTotalPrice').AsFloat := CommonRoundTo(fPre, iCommonDigit);
     ANode.Rec.ValueByName('PhasePay').AsFloat := CommonRoundTo(fPhasePay, iDealPayDigit);
+    ANode.Rec.ValueByName('EndPhasePay').AsFloat := CommonRoundTo(fEndPhasePay, iDealPayDigit);
   end;
 
 var

+ 13 - 0
Forms/MainFrm.dfm

@@ -447,6 +447,10 @@ object MainForm: TMainForm
           Visible = True
         end
         item
+          Item = dxbtnExportPosBillsExcel
+          Visible = True
+        end
+        item
           BeginGroup = True
           Item = dxbtnRepairMainData
           Visible = True
@@ -1301,6 +1305,10 @@ object MainForm: TMainForm
       Action = actnRepairMainData
       Category = 2
     end
+    object dxbtnExportPosBillsExcel: TdxBarButton
+      Action = actnExportPosBillsExcel
+      Category = 2
+    end
   end
   object Images: TImageList
     DrawingStyle = dsTransparent
@@ -3521,6 +3529,11 @@ object MainForm: TMainForm
       OnExecute = actnRepairMainDataExecute
       OnUpdate = actnRepairMainDataUpdate
     end
+    object actnExportPosBillsExcel: TAction
+      Caption = #23548#20986#35745#37327#21333#20803'-'#28165#21333'Excel'
+      OnExecute = actnExportPosBillsExcelExecute
+      OnUpdate = actnExportBillsJsonUpdate
+    end
   end
   object dxpmTabSet: TdxBarPopupMenu
     BarManager = dxBarManager

+ 19 - 0
Forms/MainFrm.pas

@@ -199,6 +199,8 @@ type
     actnImportPhaseData: TAction;
     dxbtnRepairMainData: TdxBarButton;
     actnRepairMainData: TAction;
+    dxbtnExportPosBillsExcel: TdxBarButton;
+    actnExportPosBillsExcel: TAction;
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;
@@ -258,6 +260,7 @@ type
     procedure actnImportPhaseDataExecute(Sender: TObject);
     procedure actnRepairMainDataUpdate(Sender: TObject);
     procedure actnRepairMainDataExecute(Sender: TObject);
+    procedure actnExportPosBillsExcelExecute(Sender: TObject);
   private
     FProjectManagerFrame: TProjectManagerFrame;
     FProjectFrames: TList;
@@ -1076,4 +1079,20 @@ begin
   CurProjectFrame.ProjectData.repairMainData;
 end;
 
+procedure TMainForm.actnExportPosBillsExcelExecute(Sender: TObject);
+var
+  sFileName: string;
+  Exportor: TPosBillsExcelExportor;
+begin
+  if SaveExcelFile(sFileName) then
+  begin
+    Exportor := TPosBillsExcelExportor.Create;
+    try
+      Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
+    finally
+      Exportor.Free;
+    end;
+  end;
+end;
+
 end.

+ 19 - 1
Frames/ProjectManagerFme.dfm

@@ -76,7 +76,7 @@ object ProjectManagerFrame: TProjectManagerFrame
     Height = 426
     Options = [goRangeSelect, goRowSizing, goColSizing, goCellNotMaintainData, goFixedRowShowNo, goFixedColShowNo, goAlwaysShowSelection, goShowTreeLine]
     OptionsEx = []
-    ColCount = 13
+    ColCount = 14
     RowCount = 4
     ShowGridLine = False
     DefaultColWidth = 73
@@ -706,6 +706,24 @@ object ProjectManagerFrame: TProjectManagerFrame
         ReadOnly = False
       end
       item
+        Title.Caption = #25130#27490#26412#26399#24212#20184
+        Title.CaptionAcrossCols = '1'
+        Title.Font.Charset = GB2312_CHARSET
+        Title.Font.Color = clWindowText
+        Title.Font.Height = -12
+        Title.Font.Name = #23435#20307
+        Title.Font.Style = []
+        Alignment = taRightJustify
+        Font.Charset = GB2312_CHARSET
+        Font.Color = clWindowText
+        Font.Height = -12
+        Font.Name = #23435#20307
+        Font.Style = []
+        FieldName = 'EndPhasePay'
+        Width = 80
+        ReadOnly = False
+      end
+      item
         Title.Caption = #21488#36134'+'#21464#26356#20196
         Title.CaptionAcrossCols = '1'
         Title.Font.Charset = GB2312_CHARSET

+ 4 - 2
Units/DataBaseTables.pas

@@ -38,7 +38,7 @@ const
   {ProjectManagerData}
   {项目管理}
   SProjectsInfo = 'ProjectsInfo';
-  tdProjectsInfo: array [0..27] of TScFieldDef =(
+  tdProjectsInfo: array [0..28] of TScFieldDef =(
     (FieldName: 'ID'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: True; PrimaryKey: True; ForceUpdate: False),
     (FieldName: 'ParentID'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: True; PrimaryKey: False; ForceUpdate: False),
     (FieldName: 'NextSiblingID'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: True; PrimaryKey: False; ForceUpdate: False),
@@ -59,7 +59,9 @@ const
     // 截止上期完成总金额
     (FieldName: 'PreTotalPrice'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     // 本期应付总金额
-    (FieldName: 'PhasePay'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
+    (FieldName: 'PhasePay'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),     
+    // 截止本期应付总金额
+    (FieldName: 'EndPhasePay'; FieldType: ftDouble; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     // 计量(总)期数
     (FieldName: 'PhaseCount'; FieldType: ftInteger; Size: 0; Precision: 0; NotNull: False; PrimaryKey: False; ForceUpdate: False),
     // 审核状态

+ 190 - 0
Units/ExportExcel.pas

@@ -158,6 +158,39 @@ type
     procedure ExportToFile(ABillsIDTree: TBillsIDTree; const AFileName: string);
   end;
 
+  TPosBillsExcelExportor = class
+  private
+    FOExport: TOExport;
+    FTempFile: string;
+
+    FCodeCol: Integer;
+    FB_CodeCol: Integer;
+    FP_CodeCol: Integer;
+    FNameCol: Integer;
+    FUnitsCol: Integer;
+    FQuantityCol: Integer;
+    FDgnQty1: Integer;
+    FDgnQty2: Integer;
+    FPriceCol: Integer;
+    FTotalPriceCol: Integer;
+    FDrawingCodeCol: Integer;
+    FMemoStrCol: Integer;
+
+    procedure DefineHeader(ASheet: TExportWorkSheet);
+
+    function HasGclChild(ANode: TBillsIDTreeNode): Boolean;
+    procedure ExportNode(ASheet: TExportWorkSheet; ANode: TBillsIDTreeNode);
+  protected
+    procedure BeforeExport;
+    procedure AfterExport;
+  public
+    constructor Create;
+    destructor Destroy; override;
+
+    procedure ExportToSheet(ABillsIDTree: TBillsIDTree; ASheet: TExportWorkSheet);
+    procedure ExportToFile(ABillsIDTree: TBillsIDTree; const AFileName: string);
+  end;
+
 const
   ciLedger: array [0..8] of TColInfo =(
     (FieldName: 'Code'; KeyField: ''; LookupKeyField: ''; LookupDataSetIndex: -1; TitleCaption: '项目节编号'; Width: 120; HorTextAlign: cahLeft),
@@ -1094,4 +1127,161 @@ begin
   end;
 end;
 
+{ TPosBillsExcelExportor }
+
+procedure TPosBillsExcelExportor.AfterExport;
+begin
+  Screen.Cursor := crDefault;
+end;
+
+procedure TPosBillsExcelExportor.BeforeExport;
+begin
+  Screen.Cursor := crHourGlass;
+end;
+
+constructor TPosBillsExcelExportor.Create;
+begin
+  FOExport := TOExport.Create;
+  FTempFile := GetTempFileName;
+
+  FCodeCol := 0;  
+  FP_COdeCol := 1;
+  FB_CodeCol := 2;
+  FNameCol := 3;
+  FUnitsCol := 4;
+  FQuantityCol := 5;
+  FDgnQty1 := 6;
+  FDgnQty2 := 7;
+  FPriceCol := 8;
+  FTotalPriceCol := 9;
+  FDrawingCodeCol := 10;
+  FMemoStrCol := 11;
+end;
+
+procedure TPosBillsExcelExportor.DefineHeader(ASheet: TExportWorkSheet);
+
+  procedure AddHeaderCell(ARow: TExportRow; iCol: Integer; const AText: String; AWidth: Integer);
+  var
+    vCell: TExportCell;
+  begin
+    vCell := ARow.AddCellString(AText);
+    vCell.SetAlignment(cahCenter);
+    vCell.SetVAlignment(cavCenter);
+    vCell.Font.Name := '黑体';
+    vCell.Font.Size := 10;
+    vCell.Width := AWidth;
+  end;
+
+var
+  iCol: Integer;
+  ColInfo: TColInfo;
+  vRow: TExportRow;
+  vCell: TExportCell;
+begin
+  vRow := ASheet.AddRow;
+  vRow.Height := 20;
+  AddHeaderCell(vRow, FCodeCol, '项目节编号', 100);
+  AddHeaderCell(vRow, FP_CodeCol, '计量单元', 80);
+  AddHeaderCell(vRow, FB_CodeCol, '清单编号', 80);
+  AddHeaderCell(vRow, FNameCol, '名称', 300);
+  AddHeaderCell(vRow, FUnitsCol, '单位', 60);
+  AddHeaderCell(vRow, FQuantityCol, '清单数量', 70);
+  AddHeaderCell(vRow, FDgnQty1, '设计数量1', 70);
+  AddHeaderCell(vRow, FDgnQty2, '设计数量2', 70);
+  AddHeaderCell(vRow, FPriceCol, '单价', 70);
+  AddHeaderCell(vRow, FTotalPriceCol, '合价', 70);
+  AddHeaderCell(vRow, FDrawingCodeCol, '图号', 85);
+  AddHeaderCell(vRow, FMemoStrCol, '备注', 100);
+end;
+
+destructor TPosBillsExcelExportor.Destroy;
+begin
+  if FileExists(FTempFile) then
+    DeleteFileOrFolder(FTempFile);
+  FOExport.Free;
+  inherited;
+end;
+
+procedure TPosBillsExcelExportor.ExportNode(ASheet: TExportWorkSheet;
+  ANode: TBillsIDTreeNode);
+var
+  vRow: TExportRow;
+  vCell: TExportCellNumber;
+begin
+  if not Assigned(ANode) then Exit;
+
+  vRow := ASheet.AddRow;
+  if (Pos('1-1-', ANode.Rec.Code.AsString) = 1) or (not HasGclChild(ANode)) then
+  begin
+    vRow.AddCellString(ANode.Rec.Code.AsString);
+    vRow.AddCellString('');
+  end
+  else
+  begin
+    vRow.AddCellString('');
+    vRow.AddCellString(ANode.Rec.Code.AsString);
+  end;
+  vRow.AddCellString(ANode.Rec.B_Code.AsString);
+  vRow.AddCellString(ANode.Rec.Name.AsString);
+  vRow.AddCellString(ANode.Rec.Units.AsString);
+  vCell := vRow.AddCellNumber(ANode.Rec.Quantity.AsFloat);
+  vCell.EmptyIfZero := True;
+  vCell := vRow.AddCellNumber(ANode.Rec.DgnQuantity1.AsFloat);
+  vCell.EmptyIfZero := True;
+  vCell := vRow.AddCellNumber(ANode.Rec.DgnQuantity2.AsFloat);
+  vCell.EmptyIfZero := True;
+  vCell := vRow.AddCellNumber(ANode.Rec.Price.AsFloat);
+  vCell.EmptyIfZero := True;
+  vCell := vRow.AddCellNumber(ANode.Rec.TotalPrice.AsFloat);
+  vCell.EmptyIfZero := True;
+  vRow.AddCellString(ANode.Rec.DrawingCode.AsString);
+  vRow.AddCellString(ANode.Rec.MemoStr.AsString);
+
+  ExportNode(ASheet, TBillsIDTreeNode(ANode.FirstChild));
+  ExportNode(ASheet, TBillsIDTreeNode(ANode.NextSibling));
+end;
+
+procedure TPosBillsExcelExportor.ExportToFile(ABillsIDTree: TBillsIDTree;
+  const AFileName: string);
+var
+  vExportor: TOCustomExporter;
+begin
+  BeforeExport;
+  try
+    vExportor := GetExportor(ExtractFileExt(AFileName));
+    ExportToSheet(ABillsIDTree, FOExport.AddWorkSheet);
+    FOExport.SaveToFile(FTempFile, vExportor);
+    if not FileExists(AFileName) or QuestMessage('存在同名文件,是否替换?') then
+      CopyFile(PChar(FTempFile), PChar(AFileName), False);
+  finally
+    vExportor.Free;
+    AfterExport;
+  end;
+end;
+
+procedure TPosBillsExcelExportor.ExportToSheet(ABillsIDTree: TBillsIDTree;
+  ASheet: TExportWorkSheet);
+begin
+  DefineHeader(ASheet);
+  ExportNode(ASheet, TBillsIDTreeNode(ABillsIDTree.FirstNode));
+end;
+
+function TPosBillsExcelExportor.HasGclChild(
+  ANode: TBillsIDTreeNode): Boolean;
+var
+  i: Integer;
+  vChild: TBillsIDTreeNode;
+begin
+  Result := False;
+  for i := 0 to ANode.ChildCount - 1 do
+  begin
+    vChild := TBillsIDTreeNode(ANode.ChildNodes[i]);
+    if (vChild.Rec.B_Code.AsString <> '') then
+    begin
+      Result := True;
+      Exit;
+    end;
+  end;
+end;
+
 end.

+ 1 - 0
Units/ProjectData.pas

@@ -570,6 +570,7 @@ begin
   InfoRec.ValueByName('EndTotalPrice').AsFloat := PhaseRec.ValueByName('EndGatherTotalPrice').AsFloat;
   InfoRec.ValueByName('PreTotalPrice').AsFloat := PhaseRec.ValueByName('PreGatherTotalPrice').AsFloat;
   InfoRec.ValueByName('PhasePay').AsFloat := PhaseRec.ValueByName('PhasePay').AsFloat;
+  InfoRec.ValueByName('EndPhasePay').AsFloat := PhaseRec.ValueByName('EndPhasePay').AsFloat;
   InfoRec.ValueByName('PhaseCount').AsInteger := FProjProperties.PhaseCount;
   if (G_IsCloud and CurUserIsOwner and LastCheckerIsOwner) then   // 云版的批复始终要显示"批复",不能从属性表读数字显示成3审(如果业主是3审的话)
     InfoRec.ValueByName('AuditStatus').AsInteger := -1