| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 | unit stgSubGatherFile;// µ¼Èëµ¼³ö»ã×ܽá¹ûinterfaceuses  stgSubGatherFileDm, ADODB, sdDB, stgGatherDm, SysUtils, StageDm, mDataRecord;type  TstgSubGatherFileHelper = class  private    FTempFile: string;    FConnection: TADOConnection;    FGatherData: TstgSubGatherData;  public    constructor Create;    destructor Destroy; override;    procedure Open(const AFileName: string);    procedure Close;    procedure SaveTo(const AFileName: string);    property Connection: TADOConnection read FConnection;    property GatherData: TstgSubGatherData read FGatherData;  end;  TstgSubGatherFileExportor = class(TstgSubGatherFileHelper)  private    procedure LoadMemoryRecord(ARec: TsdDataRecord);    procedure LoadMemoryGatherData(AGatherData: TstgGatherData);  public    procedure ExportGatherDataTo(AGatherData:TstgGatherData; const AFileName: string);  end;  TstgSubGatherFileImportor = class(TstgSubGatherFileHelper)  private    procedure ClearOldData(AStageData: TStageData);    procedure ImportGatherData(AStageData: TStageData);  public    procedure ImportGatherDataTo(AStageData: TStageData; const AFileName: string);  end;implementationuses  UtilMethods, ZhAPI, Connections, stgTables, ScAutoUpdateUnit, Math;{ TstgSubGatherFileExportor }procedure TstgSubGatherFileExportor.ExportGatherDataTo(  AGatherData: TstgGatherData; const AFileName: string);begin  Open(GetEmptyDataBaseFileName);  try    LoadMemoryGatherData(AGatherData);  finally                                 SaveTo(AFileName);  end;end;procedure TstgSubGatherFileExportor.LoadMemoryRecord(ARec: TsdDataRecord);var  vRec: TsdDataRecord;begin  vRec := GatherData.sddBills.Add;  vRec.ValueByName('ID').AsInteger := ARec.ValueByName('ID').AsInteger;  vRec.ValueByName('ParentID').AsInteger := ARec.ValueByName('ParentID').AsInteger;  vRec.ValueByName('NextSiblingID').AsInteger := ARec.ValueByName('NextSiblingID').AsInteger;  vRec.ValueByName('Code').AsString := ARec.ValueByName('Code').AsString;  vRec.ValueByName('B_Code').AsString := ARec.ValueByName('B_Code').AsString;  vRec.ValueByName('Name').AsString := ARec.ValueByName('Name').AsString;  vRec.ValueByName('Units').AsString := ARec.ValueByName('Units').AsString;  vRec.ValueByName('IsSumBase').AsBoolean := ARec.ValueByName('IsSumBase').AsBoolean;  vRec.ValueByName('IsLeaf').AsBoolean := ARec.ValueByName('IsLeaf').AsBoolean;  vRec.ValueByName('DealQuantity').AsFloat := ARec.ValueByName('DealQuantity').AsFloat;  vRec.ValueByName('DealTotalPrice').AsFloat := ARec.ValueByName('DealTotalPrice').AsFloat;  vRec.ValueByName('QcQuantity').AsFloat := ARec.ValueByName('QcQuantity').AsFloat;  vRec.ValueByName('QcTotalPrice').AsFloat := ARec.ValueByName('QcTotalPrice').AsFloat;  vRec.ValueByName('QcBGLCode').AsString := ARec.ValueByName('QcBGLCode').AsString;  vRec.ValueByName('QcBGLNum').AsString := ARec.ValueByName('QcBGLNum').AsString;end;procedure TstgSubGatherFileExportor.LoadMemoryGatherData(  AGatherData: TstgGatherData);var  i: Integer;  vRec: TsdDataRecord;begin  GatherData.sddBills.BeginUpdate;  try    for i := 0 to AGatherData.sddGatherTree.RecordCount - 1 do    begin      vRec := AGatherData.sddGatherTree.Records[i];      LoadMemoryRecord(vRec);    end;  finally    GatherData.sddBills.EndUpdate;  end;end;{ TstgSubGatherFileHelper }procedure TstgSubGatherFileHelper.Close;begin  FConnection.Close;  if FileExists(FTempFile) then    DeleteFile(FTempFile);end;constructor TstgSubGatherFileHelper.Create;begin  FConnection := TADOConnection.Create(nil);  FConnection.LoginPrompt := False;  FGatherData := TstgSubGatherData.Create(nil);end;destructor TstgSubGatherFileHelper.Destroy;begin  Close;  FGatherData.Free;  FConnection.Free;  inherited;end;procedure TstgSubGatherFileHelper.Open(const AFileName: string);  procedure UpdateDataTables;  var    Updater: TScUpdater;  begin    Updater := TScUpdater.Create;    try      Updater.ForceUpdate := True;      Updater.Open('', FConnection, '', '');      Updater.AddTableDef(sStgBills, @tdStgBills, Length(tdStgBills), False, False);      Updater.ExcuteUpdate;    finally      Updater.Free;    end;  end;begin  FTempFile := GetTempFileName;  CopyFileOrFolder(AFileName, FTempFile);  FConnection.ConnectionString := Format(SAdoConnectStr, [FTempFile]);  FConnection.Open;  UpdateDataTables;  GatherData.Open(FConnection);end;procedure TstgSubGatherFileHelper.SaveTo(const AFileName: string);begin  FGatherData.Save;  CopyFileOrFolder(FTempFile, AFileName);end;{ TstgSubGatherFileImportor }procedure TstgSubGatherFileImportor.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.QcQuantity.AsFloat := 0;    vRec.QcTotalPrice.AsFloat := 0;    vRec.QcFlag.AsInteger := 0;    vRec.QcFormula.AsString := '';    vRec.QcBGLCode.AsString := '';    vRec.QcBGLNum.AsString := '';    vRec.EndDealQuantity.AsFloat := vRec.PreDealQuantity.AsFloat;    vRec.EndDealTotalPrice.AsFloat := vRec.PreDealTotalPrice.AsFloat;    vRec.EndQcQuantity.AsFloat := vRec.PreQcQuantity.AsFloat;    vRec.EndQcTotalPrice.AsFloat := vRec.PreQcTotalPrice.AsFloat;    vRec.EndQcBGLCode.AsString := vRec.PreQcBGLCode.AsString;    vRec.EndQcBGLNum.AsString := vRec.PreQcBGLNum.AsString;  end;end;procedure TstgSubGatherFileImportor.ImportGatherData(  AStageData: TStageData);var  i: Integer;  vOrgRec: TsdDataRecord;  vStageRec: TStageRecord;begin  for i := 0 to GatherData.sddBills.RecordCount - 1 do  begin    vOrgRec := GatherData.sddBills.Records[i];    if vOrgRec.ValueByName('IsSumBase').AsBoolean and vOrgRec.ValueByName('IsLeaf').AsBoolean then    begin      vStageRec := AStageData.StageRecordWithAdd(vOrgRec.ValueByName('ID').AsInteger);      vStageRec.DealQuantity.AsFloat := vOrgRec.ValueByName('DealQuantity').AsFloat;    end;  end;end;procedure TstgSubGatherFileImportor.ImportGatherDataTo(  AStageData: TStageData; const AFileName: string);begin  Open(AFileName);  AStageData.sddStage.BeginUpdate;  AStageData.BeforeBatchOperation;  try    ClearOldData(AStageData);    ImportGatherData(AStageData);  finally    AStageData.AfterBatchOperation;    AStageData.sddStage.EndUpdate;  end;end;end.
 |