123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- unit stgGclSubGatherFile;
- // µ¼Èëµ¼³ö»ã×ܽá¹û
- interface
- uses
- stgGclSubGatherFileDm, ADODB, sdDB, stgGclGatherDm, SysUtils, StageDm, mDataRecord;
- type
- TstgGclSubGatherFileHelper = class
- private
- FTempFile: string;
- FConnection: TADOConnection;
- FGatherData: TstgGclSubGatherData;
- 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: TstgGclSubGatherData read FGatherData;
- end;
- TstgGclSubGatherFileExportor = class(TstgGclSubGatherFileHelper)
- private
- procedure LoadMemoryRecord(ARec: TsdDataRecord);
- procedure LoadMemoryGatherData(AGatherData: TstgGclGatherData);
- public
- procedure ExportGatherDataTo(AGatherData: TstgGclGatherData; const AFileName: string);
- end;
- TstgGclSubGatherFileImportor = class(TstgGclSubGatherFileHelper)
- private
- procedure ClearOldData(AStageData: TStageData);
- procedure ImportGatherData(AStageData: TStageData);
- public
- procedure ImportGatherDataTo(AStageData: TStageData; const AFileName: string);
- end;
- implementation
- uses
- UtilMethods, ZhAPI, Connections, stgGclTables, ScAutoUpdateUnit, Math;
- { TstgGclSubGatherFileExportor }
- procedure TstgGclSubGatherFileExportor.ExportGatherDataTo(
- AGatherData: TstgGclGatherData; const AFileName: string);
- begin
- Open(GetEmptyDataBaseFileName);
- try
- LoadMemoryGatherData(AGatherData);
- finally
- SaveTo(AFileName);
- end;
- end;
- procedure TstgGclSubGatherFileExportor.LoadMemoryRecord(ARec: TsdDataRecord);
- var
- vRec: TsdDataRecord;
- begin
- vRec := GatherData.sddBills.Add;
- 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('Price').AsFloat := ARec.ValueByName('Price').AsFloat;
- 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 TstgGclSubGatherFileExportor.LoadMemoryGatherData(
- AGatherData: TstgGclGatherData);
- var
- i: Integer;
- vRec: TsdDataRecord;
- begin
- GatherData.sddBills.BeginUpdate;
- try
- for i := 0 to AGatherData.sddGatherGcl.RecordCount - 1 do
- begin
- vRec := AGatherData.sddGatherGcl.Records[i];
- LoadMemoryRecord(vRec);
- end;
- finally
- GatherData.sddBills.EndUpdate;
- end;
- end;
- { TstgGclSubGatherFileHelper }
- procedure TstgGclSubGatherFileHelper.Close;
- begin
- FConnection.Close;
- if FileExists(FTempFile) then
- DeleteFile(FTempFile);
- end;
- constructor TstgGclSubGatherFileHelper.Create;
- begin
- FConnection := TADOConnection.Create(nil);
- FConnection.LoginPrompt := False;
- FGatherData := TstgGclSubGatherData.Create(nil);
- end;
- destructor TstgGclSubGatherFileHelper.Destroy;
- begin
- Close;
- FGatherData.Free;
- FConnection.Free;
- inherited;
- end;
- procedure TstgGclSubGatherFileHelper.Open(const AFileName: string);
- procedure UpdateDataTables;
- var
- Updater: TScUpdater;
- begin
- Updater := TScUpdater.Create;
- try
- Updater.ForceUpdate := True;
- Updater.Open('', FConnection, '', '');
- Updater.AddTableDef(sStgGclBills, @tdStgGclBills, Length(tdStgGclBills), 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 TstgGclSubGatherFileHelper.SaveTo(const AFileName: string);
- begin
- FGatherData.Save;
- CopyFileOrFolder(FTempFile, AFileName);
- end;
- { TstgGclSubGatherFileImportor }
- procedure TstgGclSubGatherFileImportor.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 TstgGclSubGatherFileImportor.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 TstgGclSubGatherFileImportor.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.
|