LocateBillsDM.pas 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. unit LocateBillsDM;
  2. interface
  3. uses
  4. SysUtils,
  5. Classes,
  6. DB,
  7. ScBillsTree,
  8. DataBase,
  9. ScProjectManager,
  10. DBClient;
  11. type
  12. TBillsLocateDM = class(TDataModule)
  13. cdsQBItems: TClientDataSet;
  14. cdsQBItemsCode: TWideStringField;
  15. cdsQBItemsName: TWideStringField;
  16. cdsQBItemsUnits: TWideStringField;
  17. cdsQBItemsQuantity: TFloatField;
  18. cdsQBItemsUnitPrice: TFloatField;
  19. cdsQBItemsTotalPrice: TFloatField;
  20. cdsQBItemsID: TIntegerField;
  21. procedure cdsQBItemsFilterRecord(DataSet: TDataSet;
  22. var Accept: Boolean);
  23. private
  24. { Private declarations }
  25. FBillsData: TDMDataBase;
  26. FCount: Integer;
  27. FStrings: TStrings;
  28. FCode: string;
  29. FProjectMgr: TProjectManager;
  30. procedure SetBillsData(const Value: TDMDataBase);
  31. procedure DrawBills; overload;
  32. procedure DrawBills(aNode: TScBillsItem; var aFilter: string); overload;
  33. public
  34. { Public declarations }
  35. constructor Create(AProjMgr: TProjectManager);
  36. destructor Destroy; override;
  37. procedure FindFirstBills(const aCode: string);
  38. procedure NextBills;
  39. procedure LocateBills;
  40. procedure RefreshBills;
  41. property BillsData: TDMDataBase read FBillsData write SetBillsData;
  42. end;
  43. implementation
  44. uses ZjIDTree;
  45. {$R *.dfm}
  46. { TBillsLocateDM }
  47. constructor TBillsLocateDM.Create(AProjMgr: TProjectManager);
  48. begin
  49. inherited Create(nil);
  50. FProjectMgr := AProjMgr;
  51. FStrings := TStringList.Create;
  52. end;
  53. procedure TBillsLocateDM.DrawBills;
  54. var
  55. I: Integer;
  56. sFilter: string;
  57. begin
  58. cdsQBItems.DisableControls;
  59. try
  60. cdsQBItems.EmptyDataSet;
  61. with FBillsData do
  62. begin
  63. { FCount := 0;
  64. FStrings.Clear;
  65. DrawBills(TScBillsItem(BillsTree.FirstNode), sFilter);
  66. if sFilter <> '' then FStrings.Add(sFilter);
  67. for I := 0 to FStrings.Count - 1 do
  68. begin
  69. sFilter := FStrings[I]; }
  70. cdsBills.Filter := 'B_Code<>'''''; //sFilter;
  71. cdsBills.Filtered := True;
  72. try
  73. cdsBills.First;
  74. while not cdsBills.Eof do
  75. begin
  76. cdsQBItems.Append;
  77. cdsQBItemsID.Value := cdsBillsID.Value;
  78. cdsQBItemsCode.Value := cdsBillsB_Code.Value;
  79. cdsQBItemsName.Value := cdsBillsName.Value;
  80. cdsQBItemsUnits.Value := cdsBillsUnits.Value;
  81. cdsQBItemsQuantity.Value := cdsBillsQuantity.Value;
  82. cdsQBItemsUnitPrice.Value := cdsBillsUnitPrice.Value;
  83. cdsQBItemsTotalPrice.Value := cdsBillsTotalPrice.Value;
  84. cdsQBItems.Post;
  85. cdsBills.Next;
  86. end;
  87. finally
  88. cdsBills.Filtered := False;
  89. end;
  90. // end;
  91. end;
  92. finally
  93. cdsQBItems.First;
  94. cdsQBItems.EnableControls;
  95. end;
  96. end;
  97. destructor TBillsLocateDM.Destroy;
  98. begin
  99. FStrings.Free;
  100. inherited;
  101. end;
  102. procedure TBillsLocateDM.DrawBills(aNode: TScBillsItem; var aFilter: string);
  103. var
  104. I: Integer;
  105. sbiNode: TScBillsItem;
  106. begin
  107. if not Assigned(aNode) then Exit;
  108. if aNode.SBillBCode <> '' then
  109. begin
  110. if aFilter <> '' then
  111. begin
  112. aFilter := aFilter + ' or ID=' + IntToStr(aNode.ID);
  113. end
  114. else
  115. begin
  116. aFilter := 'ID=' + IntToStr(aNode.ID);
  117. end;
  118. Inc(FCount);
  119. if FCount = 500 then
  120. begin
  121. FStrings.Add(aFilter);
  122. FCount := 0;
  123. aFilter := '';
  124. end;
  125. end;
  126. for I := 0 to aNode.ChildCount - 1 do
  127. begin
  128. sbiNode := TScBillsItem(aNode.ChildNodes[I]);
  129. DrawBills(sbiNode, aFilter);
  130. end;
  131. end;
  132. procedure TBillsLocateDM.NextBills;
  133. var
  134. sCode: string;
  135. begin
  136. sCode := cdsQBItemsCode.AsString;
  137. cdsQBItems.Next;
  138. { while not cdsQBItems.Eof do
  139. begin
  140. if cdsQBItemsCode.Value = sCode then
  141. Break;
  142. cdsQBItems.Next;
  143. end; }
  144. end;
  145. procedure TBillsLocateDM.SetBillsData(const Value: TDMDataBase);
  146. begin
  147. FBillsData := Value;
  148. if Assigned(FBillsData) then
  149. DrawBills;
  150. end;
  151. procedure TBillsLocateDM.LocateBills;
  152. begin
  153. FBillsData.cdsOrgBills.FindKey([cdsQBItemsID.AsInteger]);
  154. end;
  155. procedure TBillsLocateDM.RefreshBills;
  156. begin
  157. cdsQBItems.Filtered := False;
  158. BillsData := FProjectMgr.ActiveProject.BillsData;
  159. end;
  160. procedure TBillsLocateDM.FindFirstBills(const aCode: string);
  161. begin
  162. FCode := aCode;
  163. cdsQBItems.Filtered := False;
  164. if FCode <> '' then
  165. cdsQBItems.Filtered := True;
  166. end;
  167. procedure TBillsLocateDM.cdsQBItemsFilterRecord(DataSet: TDataSet;
  168. var Accept: Boolean);
  169. begin
  170. if Pos(FCode, cdsQBItemsCode.AsString) <> 0 then
  171. Accept := True
  172. else
  173. Accept := False;
  174. end;
  175. end.