stgSubGatherFile.pas 6.0 KB

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