rmGclBillsBGDm.pas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. unit rmGclBillsBGDm;
  2. // Report Memory Gcl Bills BianGeng DataModule
  3. // For 連깊05 헌데긴뫘寧응깊
  4. interface
  5. uses
  6. SysUtils, Classes, DB, DBClient, ProjectData, sdIDTree, sdDB,
  7. PhaseData;
  8. type
  9. TGclNode = class
  10. private
  11. FB_Code: string;
  12. FIndexCode: string;
  13. FName: string;
  14. FUnits: string;
  15. FPrice: Double;
  16. FNewPrice: Double;
  17. FDealQuantity: Double;
  18. FDealTotalPrice: Double;
  19. FQuantity: Double;
  20. FTotalPrice: Double;
  21. FCurDealQuantity: Double;
  22. FCurDealTotalPrice: Double;
  23. FCurQcQuantity: Double;
  24. FCurQcTotalPrice: Double;
  25. FCurQcBGLCode: string;
  26. FCurPcQuantity: Double;
  27. FCurPcTotalPrice: Double;
  28. FCurPcBGLCode: string;
  29. FCurGatherQuantity: Double;
  30. FCurGatherTotalPrice: Double;
  31. FEndDealQuantity: Double;
  32. FEndDealTotalPrice: Double;
  33. FEndQcQuantity: Double;
  34. FEndQcTotalPrice: Double;
  35. FEndQcBGLCode: string;
  36. FEndPcQuantity: Double;
  37. FEndPcTotalPrice: Double;
  38. FEndPcBGLCode: string;
  39. FEndGatherQuantity: Double;
  40. FEndGatherTotalPrice: Double;
  41. FAddDealQuantity: Double;
  42. FAddDealTotalPrice: Double;
  43. FAddQcQuantity: Double;
  44. FAddQcTotalPrice: Double;
  45. FAddQcBGLCode: string;
  46. FAddPcQuantity: Double;
  47. FAddPcTotalPrice: Double;
  48. FAddPcBGLCode: string;
  49. FAddGatherQuantity: Double;
  50. FAddGatherTotalPrice: Double;
  51. end;
  52. TrmType = (rmtPhaseDeal, rmtPhaseQc, rmtPhasePc, rmtPhaseGather,
  53. rmtEndDeal, rmtEndQc, rmtEndPc, rmtEndGather);
  54. TrmGatherType = (rmgtGather, rmgtFlow);
  55. TrmGclBillsBGData = class(TDataModule)
  56. cdsBills: TClientDataSet;
  57. cdsBillsB_Code: TStringField;
  58. cdsBillsIndexCode: TStringField;
  59. cdsBillsName: TWideStringField;
  60. cdsBillsUnits: TWideStringField;
  61. cdsBillsPrice: TFloatField;
  62. cdsBillsNewPrice: TFloatField;
  63. cdsBillsDealQuantity: TFloatField;
  64. cdsBillsDealTotalPrice: TFloatField;
  65. cdsBillsQuantity: TFloatField;
  66. cdsBillsTotalPrice: TFloatField;
  67. cdsBillsCurDealQuantity: TFloatField;
  68. cdsBillsCurDealTotalPrice: TFloatField;
  69. cdsBillsCurQcQuantity: TFloatField;
  70. cdsBillsCurQcTotalPrice: TFloatField;
  71. cdsBillsCurQcBGLCode: TWideStringField;
  72. cdsBillsCurPcQuantity: TFloatField;
  73. cdsBillsCurPcTotalPrice: TFloatField;
  74. cdsBillsCurPcBGLCode: TWideStringField;
  75. cdsBillsCurGatherQuantity: TFloatField;
  76. cdsBillsCurGatherTotalPrice: TFloatField;
  77. cdsBillsEndDealQuantity: TFloatField;
  78. cdsBillsEndDealTotalPrice: TFloatField;
  79. cdsBillsEndQcQuantity: TFloatField;
  80. cdsBillsEndQcTotalPrice: TFloatField;
  81. cdsBillsEndPcQuantity: TFloatField;
  82. cdsBillsEndPcTotalPrice: TFloatField;
  83. cdsBillsEndGatherQuantity: TFloatField;
  84. cdsBillsEndGatherTotalPrice: TFloatField;
  85. cdsBillsAddDealQuantity: TFloatField;
  86. cdsBillsAddDealTotalPrice: TFloatField;
  87. cdsBillsAddQcQuantity: TFloatField;
  88. cdsBillsAddQcTotalPrice: TFloatField;
  89. cdsBillsAddPcQuantity: TFloatField;
  90. cdsBillsAddPcTotalPrice: TFloatField;
  91. cdsBillsAddGatherQuantity: TFloatField;
  92. cdsBillsAddGatherTotalPrice: TFloatField;
  93. cdsBillsEndQcBGLCode: TWideStringField;
  94. cdsBillsEndPcBGLCode: TWideStringField;
  95. cdsBillsAddQcBGLCode: TWideStringField;
  96. cdsBillsAddPcBGLCode: TWideStringField;
  97. cdsBillsSerialNo: TIntegerField;
  98. private
  99. FProjectData: TProjectData;
  100. FrmType: TrmType;
  101. FrmGatherType: TrmGatherType;
  102. FGclList: TList;
  103. procedure FilterGclBills(ANode: TsdIDTreeNode);
  104. procedure FilterBills(ANode: TsdIDTreeNode);
  105. procedure WriteBills;
  106. procedure WriteGclBills(APhaseData: TPhaseData; ANode: TsdIDTreeNode;
  107. APhaseIndex: Integer);
  108. procedure WritePhaseBills(APhaseData: TPhaseData; ANode: TsdIDTreeNode;
  109. APhaseIndex: Integer);
  110. procedure WritePhaseFlowBills(APhaseIndex: Integer);
  111. procedure WriteFlowBills;
  112. public
  113. constructor Create;
  114. destructor Destroy; override;
  115. function AssignData(AProjectData: TProjectData;
  116. ArmType: TrmType; ArmGatherType: TrmGatherType): TDataSet;
  117. end;
  118. implementation
  119. uses
  120. ZhAPI, UtilMethods;
  121. {$R *.dfm}
  122. { TrmGclBillsBGData }
  123. function TrmGclBillsBGData.AssignData(AProjectData: TProjectData;
  124. ArmType: TrmType; ArmGatherType: TrmGatherType): TDataSet;
  125. begin
  126. FProjectData := AProjectData;
  127. FrmType := ArmType;
  128. FrmGatherType := ArmGatherType;
  129. cdsBills.Active := True;
  130. cdsBills.DisableControls;
  131. try
  132. cdsBills.EmptyDataSet;
  133. if FrmGatherType = rmgtGather then
  134. begin
  135. FilterBills(FProjectData.BillsMeasureData.BillsMeasureTree.FirstNode);
  136. WriteBills;
  137. end
  138. else if FrmGatherType = rmgtFlow then
  139. WriteFlowBills;
  140. finally
  141. ClearObjects(FGclList);
  142. if FrmGatherType = rmgtGather then
  143. cdsBills.IndexFieldNames := 'IndexCode'
  144. else if FrmGatherType = rmgtFlow then
  145. cdsBills.IndexFieldNames := 'SerialNo;IndexCode';
  146. cdsBills.EnableControls;
  147. Result := cdsBills;
  148. end;
  149. end;
  150. constructor TrmGclBillsBGData.Create;
  151. begin
  152. inherited Create(nil);
  153. FGclList := TList.Create;
  154. cdsBills.IndexFieldNames := 'IndexCode';
  155. end;
  156. destructor TrmGclBillsBGData.Destroy;
  157. begin
  158. ClearObjects(FGclList);
  159. FGclList.Free;
  160. inherited;
  161. end;
  162. procedure TrmGclBillsBGData.FilterBills(ANode: TsdIDTreeNode);
  163. begin
  164. if not Assigned(ANode) then Exit;
  165. if ANode.HasChildren then
  166. FilterBills(ANode.FirstChild)
  167. else
  168. FilterGclBills(ANode);
  169. FilterBills(ANode.NextSibling);
  170. end;
  171. procedure TrmGclBillsBGData.FilterGclBills(ANode: TsdIDTreeNode);
  172. function CreateGclNode(ARec: TsdDataRecord): TGclNode;
  173. begin
  174. Result := TGclNode.Create;
  175. FGclList.Add(Result);
  176. Result.FB_Code := ARec.ValueByName('B_Code').AsString;
  177. Result.FIndexCode := B_CodeToIndexCode(ARec.ValueByName('B_Code').AsString);
  178. Result.FName := ARec.ValueByName('Name').AsString;
  179. Result.FUnits := ARec.ValueByName('Units').AsString;
  180. Result.FPrice := ARec.ValueByName('Price').AsFloat;
  181. Result.FNewPrice := ARec.ValueByName('NewPrice').AsFloat;
  182. end;
  183. function GetGclNode(ARec: TsdDataRecord): TGclNode;
  184. var
  185. I: Integer;
  186. GclNode: TGclNode;
  187. begin
  188. Result := nil;
  189. for I := 0 to FGclList.Count - 1 do
  190. begin
  191. GclNode := TGclNode(FGclList.Items[I]);
  192. if SameText(GclNode.FB_Code, ARec.ValueByName('B_Code').AsString) and
  193. SameText(GclNode.FName, ARec.ValueByName('Name').AsString) and
  194. SameText(GclNode.FUnits, ARec.ValueByName('Units').AsString) and
  195. (GclNode.FPrice = ARec.ValueByName('Price').AsFloat) then
  196. begin
  197. Result := GclNode;
  198. Break;
  199. end;
  200. end;
  201. if not Assigned(Result) then
  202. Result := CreateGclNode(ARec);
  203. end;
  204. procedure LoadPhaseData(AGclNode: TGclNode; AID: Integer);
  205. var
  206. Rec: TsdDataRecord;
  207. begin
  208. Rec := TProjectData(FProjectData).PhaseData.StageData.StageRecord(AID);
  209. if not Assigned(Rec) then Exit;
  210. AGclNode.FCurDealQuantity := AGclNode.FCurDealQuantity + Rec.ValueByName('DealQuantity').AsFloat;
  211. AGclNode.FCurDealTotalPrice := AGclNode.FCurDealTotalPrice + Rec.ValueByName('DealTotalPrice').AsFloat;
  212. AGclNode.FCurQcQuantity := AGclNode.FCurQcQuantity + Rec.ValueByName('QcQuantity').AsFloat;
  213. AGclNode.FCurQcTotalPrice := AGclNode.FCurQcTotalPrice + Rec.ValueByName('QcTotalPrice').AsFloat;
  214. AGclNode.FCurQcBGLCode := MergeRelaBGL(AGclNode.FCurQcBGLCode, Rec.ValueByName('QcBGLCode').AsString);
  215. AGclNode.FCurPcQuantity := AGclNode.FCurPcQuantity + Rec.ValueByName('PcQuantity').AsFloat;
  216. AGclNode.FCurPcTotalPrice := AGclNode.FCurPcTotalPrice + Rec.ValueByName('PcTotalPrice').AsFloat;
  217. AGclNode.FCurPcBGLCode := MergeRelaBGL(AGclNode.FCurPcBGLCode, Rec.ValueByName('PcBGLCode').AsString);
  218. AGclNode.FCurGatherQuantity := AGclNode.FCurGatherQuantity + Rec.ValueByName('GatherQuantity').AsFloat;
  219. AGclNode.FCurGatherTotalPrice := AGclNode.FCurGatherTotalPrice + Rec.ValueByName('GatherTotalPrice').AsFloat;
  220. AGclNode.FEndDealQuantity := AGclNode.FEndDealQuantity + Rec.ValueByName('EndDealQuantity').AsFloat;
  221. AGclNode.FEndDealTotalPrice := AGclNode.FEndDealTotalPrice + Rec.ValueByName('EndDealTotalPrice').AsFloat;
  222. AGclNode.FEndQcQuantity := AGclNode.FEndQcQuantity + Rec.ValueByName('EndQcQuantity').AsFloat;
  223. AGclNode.FEndQcTotalPrice := AGclNode.FEndQcTotalPrice + Rec.ValueByName('EndQcTotalPrice').AsFloat;
  224. AGclNode.FEndQcBGLCode := MergeRelaBGL(AGclNode.FEndQcBGLCode, Rec.ValueByName('EndQcBGLCode').AsString);
  225. AGclNode.FEndPcQuantity := AGclNode.FEndPcQuantity + Rec.ValueByName('EndPcQuantity').AsFloat;
  226. AGclNode.FEndPcTotalPrice := AGclNode.FEndPcTotalPrice + Rec.ValueByName('EndPcTotalPrice').AsFloat;
  227. AGclNode.FEndPcBGLCode := MergeRelaBGL(AGclNode.FEndPcBGLCode, Rec.ValueByName('EndPcBGLCode').AsString);
  228. AGclNode.FEndGatherQuantity := AGclNode.FEndGatherQuantity + Rec.ValueByName('EndGatherQuantity').AsFloat;
  229. AGclNode.FEndGatherTotalPrice := AGclNode.FEndGatherTotalPrice + Rec.ValueByName('EndGatherTotalPrice').AsFloat;
  230. end;
  231. procedure LoadMeasureData(AGclNode: TGclNode; ARec: TsdDataRecord);
  232. begin
  233. AGclNode.FQuantity := AGclNode.FQuantity + ARec.ValueByName('Quantity').AsFloat;
  234. AGclNode.FTotalPrice := AGclNode.FTotalPrice + ARec.ValueByName('TotalPrice').AsFloat;
  235. if TProjectData(FProjectData).ProjProperties.PhaseCount = 0 then Exit;
  236. LoadPhaseData(AGclNode, ARec.ValueByName('ID').AsInteger);
  237. AGclNode.FAddDealQuantity := AGclNode.FAddDealQuantity + ARec.ValueByName('AddDealQuantity').AsFloat;
  238. AGclNode.FAddDealTotalPrice := AGclNode.FAddDealTotalPrice + ARec.ValueByName('AddDealTotalPrice').AsFloat;
  239. AGclNode.FAddQcQuantity := AGclNode.FAddQcQuantity + ARec.ValueByName('AddQcQuantity').AsFloat;
  240. AGclNode.FAddQcTotalPrice := AGclNode.FAddQcTotalPrice + ARec.ValueByName('AddQcTotalPrice').AsFloat;
  241. AGclNode.FAddQcBGLCode := MergeRelaBGL(AGclNode.FAddQcBGLCode, ARec.ValueByName('AddQcBGLCode').AsString);
  242. AGclNode.FAddPcQuantity := AGclNode.FAddPcQuantity + ARec.ValueByName('AddPcQuantity').AsFloat;
  243. AGclNode.FAddPcTotalPrice := AGclNode.FAddPcTotalPrice + ARec.ValueByName('AddPcTotalPrice').AsFloat;
  244. AGclNode.FAddPcBGLCode := MergeRelaBGL(AGclNode.FAddPcBGLCode, ARec.ValueByName('AddPcBGLCode').AsString);
  245. AGclNode.FAddGatherQuantity := AGclNode.FAddGatherQuantity + ARec.ValueByName('AddGatherQuantity').AsFloat;
  246. AGclNode.FAddGatherTotalPrice := AGclNode.FAddGatherTotalPrice + ARec.ValueByName('AddGatherTotalPrice').AsFloat;
  247. end;
  248. procedure LoadDealData(AGclNode: TGclNode; AB_Code: string);
  249. var
  250. DealRec: TsdDataRecord;
  251. begin
  252. DealRec := TProjectData(FProjectData).DealBillsData.DealRecord(AB_Code);
  253. if Assigned(DealRec) then
  254. begin
  255. AGclNode.FDealQuantity := DealRec.ValueByName('Quantity').AsFloat;
  256. AGclNode.FDealTotalPrice := DealRec.ValueByName('TotalPrice').AsFloat;
  257. end;
  258. end;
  259. var
  260. Rec, StageRec: TsdDataRecord;
  261. GclNode: TGclNode;
  262. begin
  263. if not Assigned(ANode) then Exit;
  264. Rec := ANode.Rec;
  265. if Rec.ValueByName('B_Code').AsString = '' then Exit;
  266. StageRec := TProjectData(FProjectData).PhaseData.StageData.StageRecord(ANode.ID);
  267. if not Assigned(StageRec) then Exit;
  268. case FrmType of
  269. rmtPhaseDeal: if StageRec.ValueByName('DealTotalPrice').AsFloat = 0 then Exit;
  270. rmtPhaseQc: if StageRec.ValueByName('QcTotalPrice').AsFloat = 0 then Exit;
  271. rmtPhasePc: if StageRec.ValueByName('PcTotalPrice').AsFloat = 0 then Exit;
  272. rmtPhaseGather: if StageRec.ValueByName('GatherTotalPrice').AsFloat = 0 then Exit;
  273. rmtEndDeal: if StageRec.ValueByName('EndDealTotalPrice').AsFloat = 0 then Exit;
  274. rmtEndQc: if StageRec.ValueByName('EndQcTotalPrice').AsFloat = 0 then Exit;
  275. rmtEndPc: if StageRec.ValueByName('EndPcTotalPrice').AsFloat = 0 then Exit;
  276. rmtEndGather: if StageRec.ValueByName('EndGatherTotalPrice').AsFloat = 0 then Exit;
  277. end;
  278. GclNode := GetGclNode(Rec);
  279. LoadDealData(GclNode, Rec.ValueByName('B_Code').AsString);
  280. LoadMeasureData(GclNode, Rec);
  281. end;
  282. procedure TrmGclBillsBGData.WriteBills;
  283. var
  284. I: Integer;
  285. GclNode: TGclNode;
  286. begin
  287. for I := 0 to FGclList.Count - 1 do
  288. begin
  289. GclNode := TGclNode(FGclList.Items[I]);
  290. cdsBills.Append;
  291. cdsBillsB_Code.AsString := GclNode.FB_Code;
  292. cdsBillsIndexCode.AsString := GclNode.FIndexCode;
  293. cdsBillsName.AsString := GclNode.FName;
  294. cdsBillsUnits.AsString := GclNode.FUnits;
  295. cdsBillsPrice.AsFloat := GclNode.FPrice;
  296. cdsBillsNewPrice.AsFloat := GclNode.FNewPrice;
  297. cdsBillsDealQuantity.AsFloat := GclNode.FDealQuantity;
  298. cdsBillsDealTotalPrice.AsFloat := GclNode.FDealTotalPrice;
  299. cdsBillsQuantity.AsFloat := GclNode.FQuantity;
  300. cdsBillsTotalPrice.AsFloat := GclNode.FTotalPrice;
  301. cdsBillsCurDealQuantity.AsFloat := GclNode.FCurDealQuantity;
  302. cdsBillsCurDealTotalPrice.AsFloat := GclNode.FCurDealTotalPrice;
  303. cdsBillsCurQcQuantity.AsFloat := GclNode.FCurQcQuantity;
  304. cdsBillsCurQcTotalPrice.AsFloat := GclNode.FCurQcTotalPrice;
  305. cdsBillsCurQcBGLCode.AsString := GclNode.FCurQcBGLCode;
  306. cdsBillsCurPcQuantity.AsFloat := GclNode.FCurPcQuantity;
  307. cdsBillsCurPcTotalPrice.AsFloat := GclNode.FCurPcTotalPrice;
  308. cdsBillsCurPcBGLCode.AsString := GclNode.FCurPcBGLCode;
  309. cdsBillsCurGatherQuantity.AsFloat := GclNode.FCurGatherQuantity;
  310. cdsBillsCurGatherTotalPrice.AsFloat := GclNode.FCurGatherTotalPrice;
  311. cdsBillsEndDealQuantity.AsFloat := GclNode.FEndDealQuantity;
  312. cdsBillsEndDealTotalPrice.AsFloat := GclNode.FEndDealTotalPrice;
  313. cdsBillsEndQcQuantity.AsFloat := GclNode.FEndQcQuantity;
  314. cdsBillsEndQcTotalPrice.AsFloat := GclNode.FEndQcTotalPrice;
  315. cdsBillsEndQcBGLCode.AsString := GclNode.FEndQcBGLCode;
  316. cdsBillsEndPcQuantity.AsFloat := GclNode.FEndPcQuantity;
  317. cdsBillsEndPcTotalPrice.AsFloat := GclNode.FEndPcTotalPrice;
  318. cdsBillsEndPcBGLCode.AsString := GclNode.FEndPcBGLCode;
  319. cdsBillsEndGatherQuantity.AsFloat := GclNode.FEndGatherQuantity;
  320. cdsBillsEndGatherTotalPrice.AsFloat := GclNode.FEndGatherTotalPrice;
  321. cdsBillsAddDealQuantity.AsFloat := GclNode.FAddDealQuantity;
  322. cdsBillsAddDealTotalPrice.AsFloat := GclNode.FAddDealTotalPrice;
  323. cdsBillsAddQcQuantity.AsFloat := GclNode.FAddQcQuantity;
  324. cdsBillsAddQcTotalPrice.AsFloat := GclNode.FAddQcTotalPrice;
  325. cdsBillsAddQcBGLCode.AsString := GclNode.FAddQcBGLCode;
  326. cdsBillsAddPcQuantity.AsFloat := GclNode.FAddPcQuantity;
  327. cdsBillsAddPcTotalPrice.AsFloat := GclNode.FAddPcTotalPrice;
  328. cdsBillsAddPcBGLCode.AsString := GclNode.FAddPcBGLCode;
  329. cdsBillsAddGatherQuantity.AsFloat := GclNode.FAddGatherQuantity;
  330. cdsBillsAddGatherTotalPrice.AsFloat := GclNode.FAddGatherTotalPrice;
  331. cdsBills.Post;
  332. end;
  333. end;
  334. procedure TrmGclBillsBGData.WriteFlowBills;
  335. var
  336. iPhase: Integer;
  337. begin
  338. for iPhase := 1 to FProjectData.PhaseIndex do
  339. WritePhaseFlowBills(iPhase);
  340. end;
  341. procedure TrmGclBillsBGData.WriteGclBills(APhaseData: TPhaseData;
  342. ANode: TsdIDTreeNode; APhaseIndex: Integer);
  343. procedure WriteGclBillsData(ARec, AStageRec: TsdDataRecord);
  344. begin
  345. cdsBills.Append;
  346. cdsBillsB_Code.AsString := ARec.ValueByName('B_Code').AsString;
  347. cdsBillsIndexCode.AsString := B_CodeToIndexCode(ARec.ValueByName('B_Code').AsString);
  348. cdsBillsName.AsString := ARec.ValueByName('Name').AsString;
  349. cdsBillsUnits.AsString := ARec.ValueByName('Units').AsString;
  350. cdsBillsPrice.AsFloat := ARec.ValueByName('Price').AsFloat;
  351. cdsBillsNewPrice.AsFloat := ARec.ValueByName('NewPrice').AsFloat;
  352. cdsBillsQuantity.AsFloat := ARec.ValueByName('Quantity').AsFloat;
  353. cdsBillsTotalPrice.AsFloat := ARec.ValueByName('TotalPrice').AsFloat;
  354. cdsBillsCurDealQuantity.AsFloat := AStageRec.ValueByName('DealQuantity').AsFloat;
  355. cdsBillsCurDealTotalPrice.AsFloat := AStageRec.ValueByName('DealTotalPrice').AsFloat;
  356. cdsBillsCurQcQuantity.AsFloat := AStageRec.ValueByName('QcQuantity').AsFloat;
  357. cdsBillsCurQcTotalPrice.AsFloat := AStageRec.ValueByName('QcTotalPrice').AsFloat;
  358. cdsBillsCurQcBGLCode.AsString := AStageRec.ValueByName('QcBGLCode').AsString;
  359. cdsBillsCurPcQuantity.AsFloat := AStageRec.ValueByName('PcQuantity').AsFloat;
  360. cdsBillsCurPcTotalPrice.AsFloat := AStageRec.ValueByName('PcTotalPrice').AsFloat;
  361. cdsBillsCurPcBGLCode.AsString := AStageRec.ValueByName('PcBGLCode').AsString;
  362. cdsBillsCurGatherQuantity.AsFloat := AStageRec.ValueByName('GatherQuantity').AsFloat;
  363. cdsBillsCurGatherTotalPrice.AsFloat := AStageRec.ValueByName('GatherTotalPrice').AsFloat;
  364. cdsBillsEndDealQuantity.AsFloat := AStageRec.ValueByName('EndDealQuantity').AsFloat;
  365. cdsBillsEndDealTotalPrice.AsFloat := AStageRec.ValueByName('EndDealTotalPrice').AsFloat;
  366. cdsBillsEndQcQuantity.AsFloat := AStageRec.ValueByName('EndQcQuantity').AsFloat;
  367. cdsBillsEndQcTotalPrice.AsFloat := AStageRec.ValueByName('EndQcTotalPrice').AsFloat;
  368. cdsBillsEndQcBGLCode.AsString := AStageRec.ValueByName('EndQcBGLCode').AsString;
  369. cdsBillsEndPcQuantity.AsFloat := AStageRec.ValueByName('EndPcQuantity').AsFloat;
  370. cdsBillsEndPcTotalPrice.AsFloat := AStageRec.ValueByName('EndPcTotalPrice').AsFloat;
  371. cdsBillsEndPcBGLCode.AsString := AStageRec.ValueByName('EndPcBGLCode').AsString;
  372. cdsBillsEndGatherQuantity.AsFloat := AStageRec.ValueByName('EndGatherQuantity').AsFloat;
  373. cdsBillsEndGatherTotalPrice.AsFloat := AStageRec.ValueByName('EndGatherTotalPrice').AsFloat;
  374. cdsBillsAddDealQuantity.AsFloat := ARec.ValueByName('AddDealQuantity').AsFloat;
  375. cdsBillsAddDealTotalPrice.AsFloat := ARec.ValueByName('AddDealTotalPrice').AsFloat;
  376. cdsBillsAddQcQuantity.AsFloat := ARec.ValueByName('AddQcQuantity').AsFloat;
  377. cdsBillsAddQcTotalPrice.AsFloat := ARec.ValueByName('AddQcTotalPrice').AsFloat;
  378. cdsBillsAddQcBGLCode.AsString := ARec.ValueByName('AddQcBGLCode').AsString;
  379. cdsBillsAddPcQuantity.AsFloat := ARec.ValueByName('AddPcQuantity').AsFloat;
  380. cdsBillsAddPcTotalPrice.AsFloat := ARec.ValueByName('AddPcTotalPrice').AsFloat;
  381. cdsBillsAddPcBGLCode.AsString := ARec.ValueByName('AddPcBGLCode').AsString;
  382. cdsBillsAddGatherQuantity.AsFloat := ARec.ValueByName('AddGatherQuantity').AsFloat;
  383. cdsBillsAddGatherTotalPrice.AsFloat := ARec.ValueByName('AddGatherTotalPrice').AsFloat;
  384. cdsBillsSerialNo.AsInteger := APhaseIndex;
  385. cdsBills.Post;
  386. end;
  387. var
  388. Rec, StageRec: TsdDataRecord;
  389. begin
  390. if not Assigned(ANode) then Exit;
  391. Rec := ANode.Rec;
  392. if Rec.ValueByName('B_Code').AsString = '' then Exit;
  393. StageRec := APhaseData.StageData.StageRecord(ANode.ID);
  394. if not Assigned(StageRec) then Exit;
  395. case FrmType of
  396. rmtPhaseDeal: if StageRec.ValueByName('DealTotalPrice').AsFloat = 0 then Exit;
  397. rmtPhaseQc: if StageRec.ValueByName('QcTotalPrice').AsFloat = 0 then Exit;
  398. rmtPhasePc: if StageRec.ValueByName('PcTotalPrice').AsFloat = 0 then Exit;
  399. rmtPhaseGather: if StageRec.ValueByName('GatherTotalPrice').AsFloat = 0 then Exit;
  400. rmtEndDeal: if StageRec.ValueByName('EndDealTotalPrice').AsFloat = 0 then Exit;
  401. rmtEndQc: if StageRec.ValueByName('EndQcTotalPrice').AsFloat = 0 then Exit;
  402. rmtEndPc: if StageRec.ValueByName('EndPcTotalPrice').AsFloat = 0 then Exit;
  403. rmtEndGather: if StageRec.ValueByName('EndGatherTotalPrice').AsFloat = 0 then Exit;
  404. end;
  405. WriteGclBillsData(Rec, StageRec);
  406. end;
  407. procedure TrmGclBillsBGData.WritePhaseBills(APhaseData: TPhaseData;
  408. ANode: TsdIDTreeNode; APhaseIndex: Integer);
  409. begin
  410. if not Assigned(ANode) then Exit;
  411. if ANode.HasChildren then
  412. WritePhaseBills(APhaseData, ANode.FirstChild, APhaseIndex)
  413. else
  414. WriteGclBills(APhaseData, ANode, APhaseIndex);
  415. WritePhaseBills(APhaseData, ANode.NextSibling, APhaseIndex);
  416. end;
  417. procedure TrmGclBillsBGData.WritePhaseFlowBills(APhaseIndex: Integer);
  418. var
  419. PhaseData: TPhaseData;
  420. begin
  421. PhaseData := TPhaseData.Create(FProjectData);
  422. try
  423. PhaseData.SimpleOpen2(Format('%s\Phase%d.dat', [FProjectData.TempPath, APhaseIndex]));
  424. cdsBills.Append;
  425. cdsBillsName.AsString := Format('뒤 %d 퍅', [APhaseIndex]);
  426. cdsBillsSerialNo.AsInteger := APhaseIndex;
  427. cdsBills.Post;
  428. WritePhaseBills(PhaseData, FProjectData.BillsCompileData.BillsCompileTree.FirstNode, APhaseIndex);
  429. finally
  430. PhaseData.Free;
  431. end;
  432. end;
  433. end.