Browse Source

导入分包汇总数据,工程量清单模式

MaiXinRong 6 years ago
parent
commit
ee5bff8d90
4 changed files with 359 additions and 33 deletions
  1. 78 17
      Forms/MainFrm.dfm
  2. 51 1
      Forms/MainFrm.pas
  3. 193 14
      SubTenderGatherGcl/stgGclSubGatherFile.pas
  4. 37 1
      Units/ProjectData.pas

+ 78 - 17
Forms/MainFrm.dfm

@@ -21,7 +21,7 @@ object MainForm: TMainForm
   object jtsProjects: TJimTabSet
   object jtsProjects: TJimTabSet
     Left = 0
     Left = 0
     Top = 49
     Top = 49
-    Width = 734
+    Width = 742
     Height = 21
     Height = 21
     Align = alTop
     Align = alTop
     BackgroundColor = clGradientInactiveCaption
     BackgroundColor = clGradientInactiveCaption
@@ -45,8 +45,8 @@ object MainForm: TMainForm
   end
   end
   object dxStatusBar: TdxStatusBar
   object dxStatusBar: TdxStatusBar
     Left = 0
     Left = 0
-    Top = 480
-    Width = 734
+    Top = 487
+    Width = 742
     Height = 20
     Height = 20
     Panels = <
     Panels = <
       item
       item
@@ -78,12 +78,12 @@ object MainForm: TMainForm
     object dxStatusBarContainer2: TdxStatusBarContainerControl
     object dxStatusBarContainer2: TdxStatusBarContainerControl
       Left = 604
       Left = 604
       Top = 2
       Top = 2
-      Width = 128
+      Width = 136
       Height = 16
       Height = 16
       object ProgressBar: TProgressBar
       object ProgressBar: TProgressBar
         Left = 0
         Left = 0
         Top = 0
         Top = 0
-        Width = 128
+        Width = 136
         Height = 16
         Height = 16
         Align = alClient
         Align = alClient
         Max = 200
         Max = 200
@@ -94,8 +94,8 @@ object MainForm: TMainForm
   object jpsMain: TJimPages
   object jpsMain: TJimPages
     Left = 0
     Left = 0
     Top = 70
     Top = 70
-    Width = 734
-    Height = 410
+    Width = 742
+    Height = 417
     ActivePage = jpsMainProjectsManager
     ActivePage = jpsMainProjectsManager
     ActivePageIndex = 0
     ActivePageIndex = 0
     Align = alClient
     Align = alClient
@@ -103,8 +103,8 @@ object MainForm: TMainForm
     object jpsMainProjectsManager: TJimPage
     object jpsMainProjectsManager: TJimPage
       Left = 0
       Left = 0
       Top = 0
       Top = 0
-      Width = 734
-      Height = 410
+      Width = 742
+      Height = 417
       TabName = 'ProjectsManager'
       TabName = 'ProjectsManager'
       Caption = 'ProjsMgr'
       Caption = 'ProjsMgr'
       object pnlUser: TPanel
       object pnlUser: TPanel
@@ -201,8 +201,8 @@ object MainForm: TMainForm
     object jpsMainProjects: TJimPage
     object jpsMainProjects: TJimPage
       Left = 0
       Left = 0
       Top = 0
       Top = 0
-      Width = 734
-      Height = 410
+      Width = 742
+      Height = 417
       TabName = 'Projects'
       TabName = 'Projects'
       Caption = 'Projects'
       Caption = 'Projects'
       object jpsProjects: TJimPages
       object jpsProjects: TJimPages
@@ -220,7 +220,7 @@ object MainForm: TMainForm
     Font.Charset = DEFAULT_CHARSET
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Color = clWindowText
     Font.Height = -12
     Font.Height = -12
-    Font.Name = #24494#36719#38597#40657
+    Font.Name = 'Microsoft YaHei UI'
     Font.Style = []
     Font.Style = []
     Bars = <
     Bars = <
       item
       item
@@ -431,7 +431,7 @@ object MainForm: TMainForm
           Visible = True
           Visible = True
         end
         end
         item
         item
-          Item = dxbtnImportSubTenderGather
+          Item = dxsiImportSubTenderGather
           Visible = True
           Visible = True
         end
         end
         item
         item
@@ -1035,7 +1035,7 @@ object MainForm: TMainForm
           Visible = True
           Visible = True
         end
         end
         item
         item
-          Item = dxbtnGatherSubTender
+          Item = dxsiGatherSub
           Visible = True
           Visible = True
         end>
         end>
     end
     end
@@ -1173,9 +1173,9 @@ object MainForm: TMainForm
       Hint = #23548#20986#24635#21253#22522#20934#25991#20214
       Hint = #23548#20986#24635#21253#22522#20934#25991#20214
     end
     end
     object dxbtnGatherSubTender: TdxBarButton
     object dxbtnGatherSubTender: TdxBarButton
-      Caption = #20998#21253#26631#27573#27719#24635
+      Caption = #20998#21253#26631#27573#27719#24635#65288#19977#32423#28165#21333' - '#38656#22522#20934#25991#20214#65289
       Category = 2
       Category = 2
-      Hint = #20998#21253#26631#27573#27719#24635
+      Hint = #20998#21253#26631#27573#27719#24635#65288#19977#32423#28165#21333' - '#38656#22522#20934#25991#20214#65289
       Visible = ivAlways
       Visible = ivAlways
       OnClick = dxbtnGatherSubTenderClick
       OnClick = dxbtnGatherSubTenderClick
     end
     end
@@ -1207,6 +1207,7 @@ object MainForm: TMainForm
     object dxbtnImportSubTenderGather: TdxBarButton
     object dxbtnImportSubTenderGather: TdxBarButton
       Action = actnImportSubTenderGather
       Action = actnImportSubTenderGather
       Category = 4
       Category = 4
+      Hint = #23548#20837#20998#21253#27719#24635#25968#25454#65288#19977#32423#28165#21333' - '#22522#20110#22522#20934#25991#20214#65289
     end
     end
     object dxbtnExportBillsJson: TdxBarButton
     object dxbtnExportBillsJson: TdxBarButton
       Action = actnExportBillsJson
       Action = actnExportBillsJson
@@ -1230,6 +1231,53 @@ object MainForm: TMainForm
       Visible = ivAlways
       Visible = ivAlways
       ImageIndex = 2
       ImageIndex = 2
     end
     end
+    object dxsiGatherSub: TdxBarSubItem
+      Caption = #20998#21253#39033#30446#27719#24635
+      Category = 2
+      Visible = ivAlways
+      ItemLinks = <
+        item
+          Item = dxbtnGatherSubTender
+          Visible = True
+        end
+        item
+          Item = dxbtnGatherSubTenderGcl
+          Visible = True
+        end>
+    end
+    object dxbtnGatherSubTenderGcl: TdxBarButton
+      Caption = #20998#21253#26631#27573#27719#24635#65288#24037#31243#37327#28165#21333#65289
+      Category = 2
+      Hint = #20998#21253#26631#27573#27719#24635#65288#24037#31243#37327#28165#21333#65289
+      Visible = ivAlways
+      OnClick = dxbtnGatherSubTenderGclClick
+    end
+    object dxsiImportSubTenderGather: TdxBarSubItem
+      Caption = #23548#20837#20998#21253#27719#24635#25968#25454
+      Category = 2
+      Visible = ivAlways
+      ItemLinks = <
+        item
+          Item = dxbtnImportSubTenderGather
+          Visible = True
+        end
+        item
+          Item = dxbtnImportSubTenderGatherGcl
+          Visible = True
+        end
+        item
+          Item = dxbtnImportSubTenderGatherExcel
+          Visible = True
+        end>
+    end
+    object dxbtnImportSubTenderGatherGcl: TdxBarButton
+      Action = actnImportSubTenderGatherGcl
+      Category = 2
+    end
+    object dxbtnImportSubTenderGatherExcel: TdxBarButton
+      Action = actnImportSubTenderGatherGclExcel
+      Category = 2
+    end
   end
   end
   object Images: TImageList
   object Images: TImageList
     DrawingStyle = dsTransparent
     DrawingStyle = dsTransparent
@@ -3411,7 +3459,7 @@ object MainForm: TMainForm
     end
     end
     object actnImportSubTenderGather: TAction
     object actnImportSubTenderGather: TAction
       Category = 'File'
       Category = 'File'
-      Caption = #23548#20837#20998#21253#27719#24635#25968#25454
+      Caption = #23548#20837#20998#21253#27719#24635#25968#25454#65288#19977#32423#28165#21333' - '#22522#20110#22522#20934#25991#20214#65289
       OnExecute = actnImportSubTenderGatherExecute
       OnExecute = actnImportSubTenderGatherExecute
       OnUpdate = actnImportSubTenderGatherUpdate
       OnUpdate = actnImportSubTenderGatherUpdate
     end
     end
@@ -3425,6 +3473,19 @@ object MainForm: TMainForm
       OnExecute = actnExportBillsPosExcelDataExecute
       OnExecute = actnExportBillsPosExcelDataExecute
       OnUpdate = actnExportBillsJsonUpdate
       OnUpdate = actnExportBillsJsonUpdate
     end
     end
+    object actnImportSubTenderGatherGcl: TAction
+      Category = 'File'
+      Caption = #23548#20837#20998#21253#27719#24635#25968#25454#65288#24037#31243#37327#28165#21333#65289
+      OnExecute = actnImportSubTenderGatherGclExecute
+      OnUpdate = actnImportSubTenderGatherUpdate
+    end
+    object actnImportSubTenderGatherGclExcel: TAction
+      Category = 'File'
+      Caption = #23548#20837#20998#21253#27719#24635#25968#25454#65288#24037#31243#37327#28165#21333#65289
+      ImageIndex = 13
+      OnExecute = actnImportSubTenderGatherGclExcelExecute
+      OnUpdate = actnImportSubTenderGatherUpdate
+    end
   end
   end
   object dxpmTabSet: TdxBarPopupMenu
   object dxpmTabSet: TdxBarPopupMenu
     BarManager = dxBarManager
     BarManager = dxBarManager

+ 51 - 1
Forms/MainFrm.pas

@@ -184,6 +184,13 @@ type
     actnExportBillsPosExcelData: TAction;
     actnExportBillsPosExcelData: TAction;
     dxbtnDeleteRow: TdxBarButton;
     dxbtnDeleteRow: TdxBarButton;
     dxbtnInsertRow: TdxBarButton;
     dxbtnInsertRow: TdxBarButton;
+    dxsiGatherSub: TdxBarSubItem;
+    dxbtnGatherSubTenderGcl: TdxBarButton;
+    dxsiImportSubTenderGather: TdxBarSubItem;
+    dxbtnImportSubTenderGatherGcl: TdxBarButton;
+    actnImportSubTenderGatherGcl: TAction;
+    actnImportSubTenderGatherGclExcel: TAction;
+    dxbtnImportSubTenderGatherExcel: TdxBarButton;
     procedure FormCreate(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;
     procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;
@@ -236,6 +243,9 @@ type
     procedure actnExportBillsJsonExecute(Sender: TObject);
     procedure actnExportBillsJsonExecute(Sender: TObject);
     procedure actnExportBillsJsonUpdate(Sender: TObject);
     procedure actnExportBillsJsonUpdate(Sender: TObject);
     procedure actnExportBillsPosExcelDataExecute(Sender: TObject);
     procedure actnExportBillsPosExcelDataExecute(Sender: TObject);
+    procedure dxbtnGatherSubTenderGclClick(Sender: TObject);
+    procedure actnImportSubTenderGatherGclExecute(Sender: TObject);
+    procedure actnImportSubTenderGatherGclExcelExecute(Sender: TObject);
   private
   private
     FProjectManagerFrame: TProjectManagerFrame;
     FProjectManagerFrame: TProjectManagerFrame;
     FProjectFrames: TList;
     FProjectFrames: TList;
@@ -274,7 +284,7 @@ uses
   FindUserFrm, ImportExcelHintFrm, ConfigDoc, ExportExcel,
   FindUserFrm, ImportExcelHintFrm, ConfigDoc, ExportExcel,
   ProjectCommands, BillsCompileDm, tpMainFrm,
   ProjectCommands, BillsCompileDm, tpMainFrm,
   DealBillsExcelImport, ExcelImport_Bills, DetailExcelImport,
   DealBillsExcelImport, ExcelImport_Bills, DetailExcelImport,
-  stgGatherControl, stgSelectFileFrm;
+  stgGatherControl, stgSelectFileFrm, stgGclGatherControl, stgGclSelectFileFrm;
 
 
 {$R *.dfm}
 {$R *.dfm}
 {$R MeasureIcons.RES}
 {$R MeasureIcons.RES}
@@ -991,4 +1001,44 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TMainForm.dxbtnGatherSubTenderGclClick(Sender: TObject);
+var
+  gc: TstgGclGatherControl;
+begin
+  gc := TstgGclGatherControl.Create;
+  Screen.Cursor := crHourGlass;
+  try
+    if SelectFileForSubTenderGclGather(gc) then
+      gc.Gather;
+  finally
+    gc.Free;
+    Screen.Cursor := crDefault;
+  end;
+end;
+
+procedure TMainForm.actnImportSubTenderGatherGclExecute(Sender: TObject);
+var
+  sFileName: string;
+begin
+  if CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0 then
+    WarningMessage('未开始计量,请在开始计量后再导入分包汇总数据。')
+  else if CurProjectFrame.ProjectData.StageDataReadOnly then
+    WarningMessage('当前正在查看数据非最新数据,请切换至最新一期再导入分包汇总数据。')
+  else if QuestMessage('导入将清空标段本期所有计量数据(合同计量),确定继续?') and SelectFile(sFileName, '.sgfg') then
+    CurProjectFrame.ProjectData.ImportSubTenderGatherGcl(sFileName);
+end;
+
+procedure TMainForm.actnImportSubTenderGatherGclExcelExecute(
+  Sender: TObject);
+var
+  sFileName: string;
+begin
+  if CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0 then
+    WarningMessage('未开始计量,请在开始计量后再导入分包汇总数据。')
+  else if CurProjectFrame.ProjectData.StageDataReadOnly then
+    WarningMessage('当前正在查看数据非最新数据,请切换至最新一期再导入分包汇总数据。')
+  else if QuestMessage('导入将清空标段本期所有计量数据(合同计量),确定继续?') and SelectExcelFile(sFileName) then
+    CurProjectFrame.ProjectData.ImportSubTenderGatherGclExcel(sFileName);
+end;
+
 end.
 end.

+ 193 - 14
SubTenderGatherGcl/stgGclSubGatherFile.pas

@@ -4,7 +4,8 @@ unit stgGclSubGatherFile;
 interface
 interface
 
 
 uses
 uses
-  stgGclSubGatherFileDm, ADODB, sdDB, stgGclGatherDm, SysUtils, StageDm, mDataRecord;
+  stgGclSubGatherFileDm, ADODB, sdDB, stgGclGatherDm, SysUtils, ProjectData,
+  StageDm, mDataRecord, BillsTree, DetailExcelImport, OExport;
 
 
 type
 type
   TstgGclSubGatherFileHelper = class
   TstgGclSubGatherFileHelper = class
@@ -35,16 +36,38 @@ type
   TstgGclSubGatherFileImportor = class(TstgGclSubGatherFileHelper)
   TstgGclSubGatherFileImportor = class(TstgGclSubGatherFileHelper)
   private
   private
     procedure ClearOldData(AStageData: TStageData);
     procedure ClearOldData(AStageData: TStageData);
-    procedure ImportGatherData(AStageData: TStageData);
+    procedure ImportGatherData(AProjectData: TProjectData);
   public
   public
-    procedure ImportGatherDataTo(AStageData: TStageData; const AFileName: string);
+    procedure ImportGatherDataTo(AProjectData: TProjectData; const AFileName: string);
+  end;
+
+  TstgGclSubGatherFileExcelImportor = class(TDetailExcelImport)
+  private      
+    FCurRow: Integer;
+
+    FB_CodeCol: Integer;
+    FNameCol: Integer;
+    FUnitsCol: Integer;
+    FPriceCol: Integer;
+    FDealQuantityCol: Integer;
+
+    procedure ClearOldData(AStageData: TStageData);
+
+    function LoadColumnsFromHead(ASheet: TExportWorkSheet): Boolean;
+    procedure LoadGatherData(ASheet: TExportWorkSheet);
+  protected
+    procedure BeginImport; override;
+    procedure EndImport; override;
+
+    procedure Import; override;
   end;
   end;
 
 
 implementation
 implementation
 
 
 
 
 uses
 uses
-  UtilMethods, ZhAPI, Connections, stgGclTables, ScAutoUpdateUnit, Math;
+  UtilMethods, ZhAPI, Connections, stgGclTables, ScAutoUpdateUnit, Math,
+  BillsMeasureDm;
 
 
 { TstgGclSubGatherFileExportor }
 { TstgGclSubGatherFileExportor }
 
 
@@ -170,35 +193,191 @@ begin
 end;
 end;
 
 
 procedure TstgGclSubGatherFileImportor.ImportGatherData(
 procedure TstgGclSubGatherFileImportor.ImportGatherData(
-  AStageData: TStageData);
+  AProjectData: TProjectData);
+
+  function FindBillsNode(ARec: TsdDataRecord): TBillsIDTreeNode;
+  var
+    i: Integer;
+    vNode: TBillsIDTreeNode;
+  begin
+    Result := nil;
+    for i := 0 to AProjectData.BillsMeasureData.BillsMeasureTree.Count - 1 do
+    begin
+      vNode := TBillsIDTreeNode(AProjectData.BillsMeasureData.BillsMeasureTree.Items[i]);
+      if (vNode.HasChildren) then Continue;
+      if (vNode.Rec.B_Code.AsString = ARec.ValueByName('B_Code').AsString) and
+         (vNode.Rec.Name.AsString = ARec.ValueByName('Name').AsString) and
+         (vNode.Rec.Units.AsString = ARec.ValueByName('Units').AsString) and
+         (CommonRoundTo(vNode.Rec.Price.AsFloat - ARec.ValueByName('Price').AsFloat, -6) = 0) then
+      begin
+        Result := vNode;
+        Break;
+      end;
+    end;
+  end;
+
 var
 var
   i: Integer;
   i: Integer;
+  vNode: TBillsIDTreeNode;
   vOrgRec: TsdDataRecord;
   vOrgRec: TsdDataRecord;
   vStageRec: TStageRecord;
   vStageRec: TStageRecord;
 begin
 begin
   for i := 0 to GatherData.sddBills.RecordCount - 1 do
   for i := 0 to GatherData.sddBills.RecordCount - 1 do
   begin
   begin
     vOrgRec := GatherData.sddBills.Records[i];
     vOrgRec := GatherData.sddBills.Records[i];
-    if vOrgRec.ValueByName('IsSumBase').AsBoolean and vOrgRec.ValueByName('IsLeaf').AsBoolean then
+    vNode := FindBillsNode(vOrgRec);
+    if Assigned(vNode) then
     begin
     begin
-      vStageRec := AStageData.StageRecordWithAdd(vOrgRec.ValueByName('ID').AsInteger);
+      vStageRec := AProjectData.PhaseData.StageData.StageRecordWithAdd(vNode.ID);
       vStageRec.DealQuantity.AsFloat := vOrgRec.ValueByName('DealQuantity').AsFloat;
       vStageRec.DealQuantity.AsFloat := vOrgRec.ValueByName('DealQuantity').AsFloat;
     end;
     end;
   end;
   end;
 end;
 end;
 
 
 procedure TstgGclSubGatherFileImportor.ImportGatherDataTo(
 procedure TstgGclSubGatherFileImportor.ImportGatherDataTo(
-  AStageData: TStageData; const AFileName: string);
+  AProjectData: TProjectData; const AFileName: string);
 begin
 begin
   Open(AFileName);
   Open(AFileName);
-  AStageData.sddStage.BeginUpdate;
-  AStageData.BeforeBatchOperation;
+  AProjectData.PhaseData.StageData.sddStage.BeginUpdate;
+  AProjectData.PhaseData.StageData.BeforeBatchOperation;
   try
   try
-    ClearOldData(AStageData);
-    ImportGatherData(AStageData);
+    ClearOldData(AProjectData.PhaseData.StageData);
+    ImportGatherData(AProjectData);
   finally
   finally
-    AStageData.AfterBatchOperation;
-    AStageData.sddStage.EndUpdate;
+    AProjectData.PhaseData.StageData.AfterBatchOperation;
+    AProjectData.PhaseData.StageData.sddStage.EndUpdate;
+  end;
+end;
+
+{ TstgGclSubGatherFileExcelImportor }
+
+procedure TstgGclSubGatherFileExcelImportor.BeginImport;
+begin
+  inherited;
+  ProjectData.PhaseData.StageData.sddStage.BeginUpdate;
+  ProjectData.PhaseData.StageData.BeforeBatchOperation;
+end;
+
+procedure TstgGclSubGatherFileExcelImportor.ClearOldData(
+  AStageData: TStageData);
+var
+  i: Integer;
+  vRec: TStageRecord;
+begin
+  for i := 0 to AStageData.sddStage.RecordCount - 1 do
+  begin
+    vRec := TStageRecord(AStageData.sddStage.Records[i]);
+    vRec.DealQuantity.AsFloat := 0;
+    vRec.DealTotalPrice.AsFloat := 0;
+    vRec.DealFlag.AsInteger := 0;
+    vRec.DealFormula.AsString := '';
+    vRec.EndDealQuantity.AsFloat := vRec.PreDealQuantity.AsFloat;
+    vRec.EndDealTotalPrice.AsFloat := vRec.PreDealTotalPrice.AsFloat;
+  end;
+end;
+
+procedure TstgGclSubGatherFileExcelImportor.EndImport;
+begin
+  ProjectData.PhaseData.StageData.AfterBatchOperation;
+  ProjectData.PhaseData.StageData.sddStage.EndUpdate;
+  inherited;
+end;
+
+procedure TstgGclSubGatherFileExcelImportor.Import;
+begin
+  ClearOldData(ProjectData.PhaseData.StageData);
+
+  FCurRow := 0;
+  if LoadColumnsFromHead(OExport.OpenWorkSheet) then
+    LoadGatherData(OExport.OpenWorkSheet)
+  else
+    ErrorMessage('导入的Excel格式有误!');
+  inherited;
+end;
+
+function TstgGclSubGatherFileExcelImportor.LoadColumnsFromHead(
+  ASheet: TExportWorkSheet): Boolean;
+var        
+  vRow: TExportRow;
+  iCol: Integer;
+  sColName: String;
+begin
+  FB_CodeCol := -1;
+  FNameCol := -1;
+  FUnitsCol := -1;
+  FPriceCol := -1;
+  FDealQuantityCol := -1;
+
+  vRow := ASheet.Rows[FCurRow];
+  for iCol := 0 to vRow.Cells.Count - 1 do
+  begin
+    sColName := GetCellTrimStr(vRow, iCol);
+
+   if (sColName = '清单编号') then
+      FB_CodeCol := iCol
+    else if sColName = '名称' then
+      FNameCol := iCol
+    else if sColName = '单位' then
+      FUnitsCol := iCol
+    else if sColName = '单价' then
+      FPriceCol := iCol
+    else if (sColName = '合同计量') then
+      FDealQuantityCol := iCol;
+  end;
+  Result := (FB_CodeCol <> -1) and (FNameCol <> -1) and (FUnitsCol <> -1) and
+    (FPriceCol <> -1) and (FDealQuantityCol <> -1);
+  Inc(FCurRow);
+end;
+
+procedure TstgGclSubGatherFileExcelImportor.LoadGatherData(
+  ASheet: TExportWorkSheet);
+
+  function FindBillsNode(const AB_Code, AName, AUnits: string; APrice: Double): TBillsIDTreeNode;
+  var
+    i: Integer;
+    vNode: TBillsIDTreeNode;
+  begin
+    Result := nil;
+    for i := 0 to ProjectData.BillsMeasureData.BillsMeasureTree.Count - 1 do
+    begin
+      vNode := TBillsIDTreeNode(ProjectData.BillsMeasureData.BillsMeasureTree.Items[i]);
+      if (vNode.HasChildren) then Continue;
+      if (vNode.Rec.B_Code.AsString = AB_Code) and
+         (vNode.Rec.Name.AsString = AName) and
+         (vNode.Rec.Units.AsString = AUnits) and
+         (CommonRoundTo(vNode.Rec.Price.AsFloat - APrice, -6) = 0) then
+      begin
+        Result := vNode;
+        Break;
+      end;
+    end;
+  end;
+
+var
+  vRow: TExportRow;
+  sB_Code, sName, sUnits: string;
+  fPrice: Double;  
+  vNode: TBillsIDTreeNode;
+  vStageRec: TStageRecord;
+begin
+  while FCurRow < ASheet.Rows.Count do
+  begin
+    vRow := ASheet.Rows[FCurRow]; 
+    Inc(FCurRow);
+    
+    sB_Code := Trim(GetCellStr(vRow, FB_CodeCol));
+    sName := Trim(GetCellStr(vRow, FNameCol));
+    sUnits := Trim(GetCellStr(vRow, FUnitsCol));
+    fPrice := StrToFloatDef(GetCellStr(vRow, FPriceCol), 0);
+
+    if (sB_Code = '') then Continue;
+
+    vNode := FindBillsNode(sB_Code, sName, sUnits, fPrice);
+    if Assigned(vNode) then
+    begin
+      vStageRec := ProjectData.PhaseData.StageData.StageRecordWithAdd(vNode.ID);
+      vStageRec.DealQuantity.AsFloat := StrToFloatDef(GetCellStr(vRow, FDealQuantityCol), 0);
+    end;
   end;
   end;
 end;
 end;
 
 

+ 37 - 1
Units/ProjectData.pas

@@ -209,6 +209,8 @@ type
     procedure ImportCloudTenderFile(const AFileName: string);
     procedure ImportCloudTenderFile(const AFileName: string);
     procedure ImportDmfFile(const AFileName: string);
     procedure ImportDmfFile(const AFileName: string);
     procedure ImportSubTenderGather(const AFileName: string);
     procedure ImportSubTenderGather(const AFileName: string);
+    procedure ImportSubTenderGatherGcl(const AFileName: string);
+    procedure ImportSubTenderGatherGclExcel(const AFileName: string);
 
 
     function CheckPassword: Boolean;
     function CheckPassword: Boolean;
 
 
@@ -285,7 +287,8 @@ uses
   ZJJLDm, PHPWebDm, XMLDoc, XMLIntf, ConstUnit, PasswordInputFrm,
   ZJJLDm, PHPWebDm, XMLDoc, XMLIntf, ConstUnit, PasswordInputFrm,
   mProgressProFrm, mDataRecord, ConditionalDefines, DbTreeImport,
   mProgressProFrm, mDataRecord, ConditionalDefines, DbTreeImport,
   StrUtils, sdProvider, CalcDecimal, Math, CslJson, OrderCheckerFme,
   StrUtils, sdProvider, CalcDecimal, Math, CslJson, OrderCheckerFme,
-  stgSubGatherFile, Forms, ProgressHintFrm, BillsTree, Controls;
+  stgSubGatherFile, Forms, ProgressHintFrm, BillsTree, Controls,
+  stgGclSubGatherFile;
 
 
 { TProjectData }
 { TProjectData }
 
 
@@ -2356,4 +2359,37 @@ begin
     FDealPayFinalData.LoadLastestDealPayData;
     FDealPayFinalData.LoadLastestDealPayData;
 end;
 end;
 
 
+procedure TProjectData.ImportSubTenderGatherGclExcel(
+  const AFileName: string);
+var
+  vImportor: TstgGclSubGatherFileExcelImportor;
+begin
+  if PhaseData.StageDataReadOnly then Exit;
+
+  vImportor := TstgGclSubGatherFileExcelImportor.Create(Self);
+  try
+    vImportor.ImportFile(AFileName);
+    BillsMeasureData.ResetTreeNodeStageRec;
+  finally
+    CalculateAll;
+    vImportor.Free;
+  end;
+end;
+
+procedure TProjectData.ImportSubTenderGatherGcl(const AFileName: string);
+var
+  vImportor: TstgGclSubGatherFileImportor;
+begin
+  if PhaseData.StageDataReadOnly then Exit;
+
+  vImportor := TstgGclSubGatherFileImportor.Create;
+  try
+    vImportor.ImportGatherDataTo(Self, AFileName);
+    BillsMeasureData.ResetTreeNodeStageRec;
+  finally
+    CalculateAll;
+    vImportor.Free;
+  end;
+end;
+
 end.
 end.