stgGclSubGatherFile.pas 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. unit stgGclSubGatherFile;
  2. // µ¼Èëµ¼³ö»ã×ܽá¹û
  3. interface
  4. uses
  5. stgGclSubGatherFileDm, ADODB, sdDB, stgGclGatherDm, SysUtils, StageDm, mDataRecord;
  6. type
  7. TstgGclSubGatherFileHelper = class
  8. private
  9. FTempFile: string;
  10. FConnection: TADOConnection;
  11. FGatherData: TstgGclSubGatherData;
  12. public
  13. constructor Create;
  14. destructor Destroy; override;
  15. procedure Open(const AFileName: string);
  16. procedure Close;
  17. procedure SaveTo(const AFileName: string);
  18. property Connection: TADOConnection read FConnection;
  19. property GatherData: TstgGclSubGatherData read FGatherData;
  20. end;
  21. TstgGclSubGatherFileExportor = class(TstgGclSubGatherFileHelper)
  22. private
  23. procedure LoadMemoryRecord(ARec: TsdDataRecord);
  24. procedure LoadMemoryGatherData(AGatherData: TstgGclGatherData);
  25. public
  26. procedure ExportGatherDataTo(AGatherData: TstgGclGatherData; const AFileName: string);
  27. end;
  28. TstgGclSubGatherFileImportor = class(TstgGclSubGatherFileHelper)
  29. private
  30. procedure ClearOldData(AStageData: TStageData);
  31. procedure ImportGatherData(AStageData: TStageData);
  32. public
  33. procedure ImportGatherDataTo(AStageData: TStageData; const AFileName: string);
  34. end;
  35. implementation
  36. uses
  37. UtilMethods, ZhAPI, Connections, stgGclTables, ScAutoUpdateUnit, Math;
  38. { TstgGclSubGatherFileExportor }
  39. procedure TstgGclSubGatherFileExportor.ExportGatherDataTo(
  40. AGatherData: TstgGclGatherData; const AFileName: string);
  41. begin
  42. Open(GetEmptyDataBaseFileName);
  43. try
  44. LoadMemoryGatherData(AGatherData);
  45. finally
  46. SaveTo(AFileName);
  47. end;
  48. end;
  49. procedure TstgGclSubGatherFileExportor.LoadMemoryRecord(ARec: TsdDataRecord);
  50. var
  51. vRec: TsdDataRecord;
  52. begin
  53. vRec := GatherData.sddBills.Add;
  54. vRec.ValueByName('B_Code').AsString := ARec.ValueByName('B_Code').AsString;
  55. vRec.ValueByName('Name').AsString := ARec.ValueByName('Name').AsString;
  56. vRec.ValueByName('Units').AsString := ARec.ValueByName('Units').AsString;
  57. vRec.ValueByName('Price').AsFloat := ARec.ValueByName('Price').AsFloat;
  58. vRec.ValueByName('DealQuantity').AsFloat := ARec.ValueByName('DealQuantity').AsFloat;
  59. vRec.ValueByName('DealTotalPrice').AsFloat := ARec.ValueByName('DealTotalPrice').AsFloat;
  60. vRec.ValueByName('QcQuantity').AsFloat := ARec.ValueByName('QcQuantity').AsFloat;
  61. vRec.ValueByName('QcTotalPrice').AsFloat := ARec.ValueByName('QcTotalPrice').AsFloat;
  62. vRec.ValueByName('QcBGLCode').AsString := ARec.ValueByName('QcBGLCode').AsString;
  63. vRec.ValueByName('QcBGLNum').AsString := ARec.ValueByName('QcBGLNum').AsString;
  64. end;
  65. procedure TstgGclSubGatherFileExportor.LoadMemoryGatherData(
  66. AGatherData: TstgGclGatherData);
  67. var
  68. i: Integer;
  69. vRec: TsdDataRecord;
  70. begin
  71. GatherData.sddBills.BeginUpdate;
  72. try
  73. for i := 0 to AGatherData.sddGatherGcl.RecordCount - 1 do
  74. begin
  75. vRec := AGatherData.sddGatherGcl.Records[i];
  76. LoadMemoryRecord(vRec);
  77. end;
  78. finally
  79. GatherData.sddBills.EndUpdate;
  80. end;
  81. end;
  82. { TstgGclSubGatherFileHelper }
  83. procedure TstgGclSubGatherFileHelper.Close;
  84. begin
  85. FConnection.Close;
  86. if FileExists(FTempFile) then
  87. DeleteFile(FTempFile);
  88. end;
  89. constructor TstgGclSubGatherFileHelper.Create;
  90. begin
  91. FConnection := TADOConnection.Create(nil);
  92. FConnection.LoginPrompt := False;
  93. FGatherData := TstgGclSubGatherData.Create(nil);
  94. end;
  95. destructor TstgGclSubGatherFileHelper.Destroy;
  96. begin
  97. Close;
  98. FGatherData.Free;
  99. FConnection.Free;
  100. inherited;
  101. end;
  102. procedure TstgGclSubGatherFileHelper.Open(const AFileName: string);
  103. procedure UpdateDataTables;
  104. var
  105. Updater: TScUpdater;
  106. begin
  107. Updater := TScUpdater.Create;
  108. try
  109. Updater.ForceUpdate := True;
  110. Updater.Open('', FConnection, '', '');
  111. Updater.AddTableDef(sStgGclBills, @tdStgGclBills, Length(tdStgGclBills), False, False);
  112. Updater.ExcuteUpdate;
  113. finally
  114. Updater.Free;
  115. end;
  116. end;
  117. begin
  118. FTempFile := GetTempFileName;
  119. CopyFileOrFolder(AFileName, FTempFile);
  120. FConnection.ConnectionString := Format(SAdoConnectStr, [FTempFile]);
  121. FConnection.Open;
  122. UpdateDataTables;
  123. GatherData.Open(FConnection);
  124. end;
  125. procedure TstgGclSubGatherFileHelper.SaveTo(const AFileName: string);
  126. begin
  127. FGatherData.Save;
  128. CopyFileOrFolder(FTempFile, AFileName);
  129. end;
  130. { TstgGclSubGatherFileImportor }
  131. procedure TstgGclSubGatherFileImportor.ClearOldData(AStageData: TStageData);
  132. var
  133. i: Integer;
  134. vRec: TStageRecord;
  135. begin
  136. for i := 0 to AStageData.sddStage.RecordCount - 1 do
  137. begin
  138. vRec := TStageRecord(AStageData.sddStage.Records[i]);
  139. vRec.DealQuantity.AsFloat := 0;
  140. vRec.DealTotalPrice.AsFloat := 0;
  141. vRec.DealFlag.AsInteger := 0;
  142. vRec.DealFormula.AsString := '';
  143. vRec.EndDealQuantity.AsFloat := vRec.PreDealQuantity.AsFloat;
  144. vRec.EndDealTotalPrice.AsFloat := vRec.PreDealTotalPrice.AsFloat;
  145. end;
  146. end;
  147. procedure TstgGclSubGatherFileImportor.ImportGatherData(
  148. AStageData: TStageData);
  149. var
  150. i: Integer;
  151. vOrgRec: TsdDataRecord;
  152. vStageRec: TStageRecord;
  153. begin
  154. for i := 0 to GatherData.sddBills.RecordCount - 1 do
  155. begin
  156. vOrgRec := GatherData.sddBills.Records[i];
  157. if vOrgRec.ValueByName('IsSumBase').AsBoolean and vOrgRec.ValueByName('IsLeaf').AsBoolean then
  158. begin
  159. vStageRec := AStageData.StageRecordWithAdd(vOrgRec.ValueByName('ID').AsInteger);
  160. vStageRec.DealQuantity.AsFloat := vOrgRec.ValueByName('DealQuantity').AsFloat;
  161. end;
  162. end;
  163. end;
  164. procedure TstgGclSubGatherFileImportor.ImportGatherDataTo(
  165. AStageData: TStageData; const AFileName: string);
  166. begin
  167. Open(AFileName);
  168. AStageData.sddStage.BeginUpdate;
  169. AStageData.BeforeBatchOperation;
  170. try
  171. ClearOldData(AStageData);
  172. ImportGatherData(AStageData);
  173. finally
  174. AStageData.AfterBatchOperation;
  175. AStageData.sddStage.EndUpdate;
  176. end;
  177. end;
  178. end.