123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- unit stgSubGatherFile;
- // µ¼Èëµ¼³ö»ã×ܽá¹û
- interface
- uses
- 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;
- implementation
- uses
- 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 := '';
- // to do clear QuantityChange Data, reCalculate ExecutionRate & UsedQuantity
- //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.
|