Browse Source

1. 导入分包汇总数据,提示未导入数据
2. 保存未导入数据

MaiXinRong 6 years ago
parent
commit
c306278841

+ 77 - 0
SubTenderGatherGcl/stgGclImportHint.pas

@@ -0,0 +1,77 @@
+unit stgGclImportHint;
+
+interface
+
+uses
+  Classes, ZhAPI;
+
+type
+  TstgGclFail = class
+  private
+    FDealQuantity: Double;
+    FUnits: string;
+    FPrice: Double;
+    FName: string;
+    FB_Code: string;
+  public
+    property B_Code: string read FB_Code write FB_Code;
+    property Name: string read FName write FName;
+    property Units: string read FUnits write FUnits;
+    property Price: Double read FPrice write FPrice;
+    property DealQuantity: Double read FDealQuantity write FDealQuantity;
+  end;
+
+  TstgGclFailList = class
+  private
+    FList: TList;
+    function GetCount: Integer;
+    function GetGcl(AIndex: Integer): TstgGclFail;
+  public
+    constructor Create;
+    destructor Destroy; override;
+
+    function AddFailGcl(const AB_Code, AName, AUnits: string; APrice, ADealQuantity: Double): TstgGclFail;
+
+    property Count: Integer read GetCount;
+    property Gcl[AIndex: Integer]: TstgGclFail read GetGcl;
+  end;
+
+
+implementation
+
+{ TstgGclFailList }
+
+function TstgGclFailList.AddFailGcl(const AB_Code, AName, AUnits: string; APrice, ADealQuantity: Double): TstgGclFail;
+begin
+  Result := TstgGclFail.Create;
+  Result.B_Code := AB_Code;    
+  Result.Name := AName;
+  Result.Units := AUnits;
+  Result.Price := APrice;
+  Result.DealQuantity := ADealQuantity;
+  FList.Add(Result);
+end;
+
+constructor TstgGclFailList.Create;
+begin
+  FList := TList.Create;
+end;
+
+destructor TstgGclFailList.Destroy;
+begin
+  ClearObjects(FList);
+  FList.Free;
+  inherited;
+end;
+
+function TstgGclFailList.GetCount: Integer;
+begin
+  Result := FList.Count;
+end;
+
+function TstgGclFailList.GetGcl(AIndex: Integer): TstgGclFail;
+begin
+  Result := TstgGclFail(FList.Items[AIndex]);
+end;
+
+end.

+ 62 - 0
SubTenderGatherGcl/stgGclImportHintFrm.dfm

@@ -0,0 +1,62 @@
+object stgGclImportHintForm: TstgGclImportHintForm
+  Left = 514
+  Top = 180
+  Width = 719
+  Height = 511
+  Caption = 's'#26410#23548#20837#28165#21333#39033
+  Color = clBtnFace
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  OldCreateOrder = False
+  PixelsPerInch = 96
+  TextHeight = 13
+  object zgFails: TZJGrid
+    Left = 0
+    Top = 0
+    Width = 711
+    Height = 439
+    OptionsEx = []
+    ShowGridLine = False
+    DefaultColWidth = 73
+    Selection.AlphaBlend = False
+    Selection.TransparentColor = False
+    FrozenCol = 0
+    FrozenRow = 0
+    Align = alClient
+  end
+  object pnlButton: TPanel
+    Left = 0
+    Top = 439
+    Width = 711
+    Height = 41
+    Align = alBottom
+    BevelOuter = bvNone
+    TabOrder = 1
+    DesignSize = (
+      711
+      41)
+    object btnSave: TButton
+      Left = 539
+      Top = 8
+      Width = 75
+      Height = 25
+      Anchors = [akTop, akRight]
+      Caption = #20445'  '#23384
+      TabOrder = 0
+      OnClick = btnSaveClick
+    end
+    object btnCance: TButton
+      Left = 627
+      Top = 8
+      Width = 75
+      Height = 25
+      Anchors = [akTop, akRight]
+      Caption = #21462'  '#28040
+      ModalResult = 2
+      TabOrder = 1
+    end
+  end
+end

+ 97 - 0
SubTenderGatherGcl/stgGclImportHintFrm.pas

@@ -0,0 +1,97 @@
+unit stgGclImportHintFrm;
+
+interface
+
+uses
+  stgGclImportHint,
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, StdCtrls, ExtCtrls, ZJGrid;
+
+type
+  TstgGclImportHintForm = class(TForm)
+    zgFails: TZJGrid;
+    pnlButton: TPanel;
+    btnSave: TButton;
+    btnCance: TButton;
+    procedure btnSaveClick(Sender: TObject);
+  private
+    procedure InitGrid;
+  public
+    procedure LoadFailsData(AFails: TstgGclFailList);
+  end;
+
+procedure ShowGclImportForm(AFails: TstgGclFailList);
+
+implementation
+
+uses
+  UtilMethods, ExportExcel;
+
+procedure ShowGclImportForm(AFails: TstgGclFailList);
+var
+  vForm: TstgGclImportHintForm;
+begin
+  vForm := TstgGclImportHintForm.Create(nil);
+  try
+    vForm.LoadFailsData(AFails);
+    vForm.ShowModal;
+  finally
+    vForm.Free;
+  end;
+end;
+
+{$R *.dfm}
+
+{ TstgGclImportHintForm }
+
+procedure TstgGclImportHintForm.InitGrid;
+begin
+  zgFails.ColCount := 6;
+  zgFails.ColWidths[1] := 120;
+  zgFails.ColWidths[2] := 250;
+  zgFails.ColWidths[3] := 60;
+  zgFails.ColWidths[4] := 80;
+  zgFails.ColWidths[5] := 100;
+  zgFails.Cells[1, 0].Text := '헌데긍뵀';
+  zgFails.Cells[2, 0].Text := '츰냔';
+  zgFails.Cells[3, 0].Text := '데貫';
+  zgFails.Cells[4, 0].Text := '데송';
+  zgFails.Cells[5, 0].Text := '북谿셕좆';
+end;
+
+procedure TstgGclImportHintForm.LoadFailsData(AFails: TstgGclFailList);
+var
+  i: Integer;
+  vFailGcl: TstgGclFail;
+begin
+  zgFails.RowCount := AFails.Count + 1;
+  InitGrid;
+  for i := 0 to AFails.Count - 1 do
+  begin
+    vFailGcl := AFails.Gcl[i];
+    zgFails.Cells[1, 1+i].Text := vFailGcl.B_Code;
+    zgFails.Cells[2, 1+i].Text := vFailGcl.Name;
+    zgFails.Cells[3, 1+i].Text := vFailGcl.Units;
+    zgFails.Cells[4, 1+i].Text := FloatToStr(vFailGcl.Price);
+    zgFails.Cells[5, 1+i].Text := FloatToStr(vFailGcl.DealQuantity);
+  end;
+end;
+
+procedure TstgGclImportHintForm.btnSaveClick(Sender: TObject);
+var
+  sFileName: string;
+  ExcelExportor: TExcelExportor;
+begin
+  if SaveExcelFile(sFileName) then
+  begin
+    ExcelExportor := TExcelExportor.Create;
+    try
+      ExcelExportor.ExportToFile(zgFails, sFileName);
+      ModalResult := mrOk;
+    finally
+      ExcelExportor.Free;
+    end;
+  end;
+end;
+
+end.

+ 53 - 9
SubTenderGatherGcl/stgGclSubGatherFile.pas

@@ -5,7 +5,7 @@ interface
 
 uses
   stgGclSubGatherFileDm, ADODB, sdDB, stgGclGatherDm, SysUtils, ProjectData,
-  StageDm, mDataRecord, BillsTree, DetailExcelImport, OExport;
+  StageDm, mDataRecord, BillsTree, DetailExcelImport, OExport, stgGclImportHint;
 
 type
   TstgGclSubGatherFileHelper = class
@@ -35,14 +35,19 @@ type
 
   TstgGclSubGatherFileImportor = class(TstgGclSubGatherFileHelper)
   private
+    FFails: TstgGclFailList;
+
     procedure ClearOldData(AStageData: TStageData);
     procedure ImportGatherData(AProjectData: TProjectData);
   public
+    constructor Create;
+    destructor Destroy; override;
+
     procedure ImportGatherDataTo(AProjectData: TProjectData; const AFileName: string);
   end;
 
   TstgGclSubGatherFileExcelImportor = class(TDetailExcelImport)
-  private      
+  private
     FCurRow: Integer;
 
     FB_CodeCol: Integer;
@@ -51,6 +56,8 @@ type
     FPriceCol: Integer;
     FDealQuantityCol: Integer;
 
+    FFails: TstgGclFailList;
+
     procedure ClearOldData(AStageData: TStageData);
 
     function LoadColumnsFromHead(ASheet: TExportWorkSheet): Boolean;
@@ -60,6 +67,9 @@ type
     procedure EndImport; override;
 
     procedure Import; override;
+  public
+    constructor Create(AProjectData: TProjectData); override;
+    destructor Destroy; override;
   end;
 
 implementation
@@ -67,7 +77,7 @@ implementation
 
 uses
   UtilMethods, ZhAPI, Connections, stgGclTables, ScAutoUpdateUnit, Math,
-  BillsMeasureDm;
+  BillsMeasureDm, stgGclImportHintFrm;
 
 { TstgGclSubGatherFileExportor }
 
@@ -192,6 +202,17 @@ begin
   end;
 end;
 
+constructor TstgGclSubGatherFileImportor.Create;
+begin
+  FFails := TstgGclFailList.Create;
+end;
+
+destructor TstgGclSubGatherFileImportor.Destroy;
+begin
+  FFails.Free;
+  inherited;
+end;
+
 procedure TstgGclSubGatherFileImportor.ImportGatherData(
   AProjectData: TProjectData);
 
@@ -230,7 +251,11 @@ begin
     begin
       vStageRec := AProjectData.PhaseData.StageData.StageRecordWithAdd(vNode.ID);
       vStageRec.DealQuantity.AsFloat := vOrgRec.ValueByName('DealQuantity').AsFloat;
-    end;
+    end
+    else
+      FFails.AddFailGcl(vOrgRec.ValueByName('B_Code').AsString,
+        vOrgRec.ValueByName('Name').AsString, vOrgRec.ValueByName('Units').AsString,
+        vOrgRec.ValueByName('Price').AsFloat, vOrgRec.ValueByName('DealQuantity').AsFloat);
   end;
 end;
 
@@ -246,7 +271,9 @@ begin
   finally
     AProjectData.PhaseData.StageData.AfterBatchOperation;
     AProjectData.PhaseData.StageData.sddStage.EndUpdate;
-  end;
+  end;   
+  if FFails.Count > 0 then
+    ShowGclImportForm(FFails);
 end;
 
 { TstgGclSubGatherFileExcelImportor }
@@ -276,10 +303,25 @@ begin
   end;
 end;
 
+constructor TstgGclSubGatherFileExcelImportor.Create(
+  AProjectData: TProjectData);
+begin
+  inherited Create(AProjectData);
+  FFails := TstgGclFailList.Create;
+end;
+
+destructor TstgGclSubGatherFileExcelImportor.Destroy;
+begin
+  FFails.Free;
+  inherited;
+end;
+
 procedure TstgGclSubGatherFileExcelImportor.EndImport;
 begin
   ProjectData.PhaseData.StageData.AfterBatchOperation;
-  ProjectData.PhaseData.StageData.sddStage.EndUpdate;
+  ProjectData.PhaseData.StageData.sddStage.EndUpdate;  
+  if FFails.Count > 0 then
+    ShowGclImportForm(FFails);
   inherited;
 end;
 
@@ -362,9 +404,9 @@ var
 begin
   while FCurRow < ASheet.Rows.Count do
   begin
-    vRow := ASheet.Rows[FCurRow]; 
+    vRow := ASheet.Rows[FCurRow];
     Inc(FCurRow);
-    
+
     sB_Code := Trim(GetCellStr(vRow, FB_CodeCol));
     sName := Trim(GetCellStr(vRow, FNameCol));
     sUnits := Trim(GetCellStr(vRow, FUnitsCol));
@@ -377,7 +419,9 @@ begin
     begin
       vStageRec := ProjectData.PhaseData.StageData.StageRecordWithAdd(vNode.ID);
       vStageRec.DealQuantity.AsFloat := StrToFloatDef(GetCellStr(vRow, FDealQuantityCol), 0);
-    end;
+    end
+    else
+      FFails.AddFailGcl(sB_Code, sName, sUnits, fPrice, StrToFloatDef(GetCellStr(vRow, FDealQuantityCol), 0));
   end;
 end;