tpPeg_GclDm.pas 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. unit tpPeg_GclDm;
  2. interface
  3. uses
  4. SysUtils, Classes, sdDB, sdProvider, tpPeg;
  5. type
  6. TtpPeg_GclData = class(TDataModule)
  7. smpPeg: TsdMemoryProvider;
  8. sddPeg: TsdDataSet;
  9. sdvPeg: TsdDataView;
  10. smpGclBills: TsdMemoryProvider;
  11. sddGclBills: TsdDataSet;
  12. sdvGclBills: TsdDataView;
  13. procedure sdvGclBillsFilterRecord(ARecord: TsdDataRecord;
  14. var Allow: Boolean);
  15. procedure sdvPegCurrentChanged(ARecord: TsdDataRecord);
  16. private
  17. public
  18. procedure LoadData(APegs: TList);
  19. end;
  20. implementation
  21. uses
  22. tpGatherTree;
  23. {$R *.dfm}
  24. { TtpPeg_GclData }
  25. procedure TtpPeg_GclData.LoadData(APegs: TList);
  26. procedure BeforeLoadData;
  27. begin
  28. sddPeg.Active := True;
  29. sddPeg.DisableControls;
  30. sddPeg.BeginUpdate;
  31. sddPeg.DeleteAll;
  32. sddGclBills.Active := True;
  33. sddGclBills.DisableControls;
  34. sddGclBills.BeginUpdate;
  35. sddGclBills.DeleteAll;
  36. sdvGclBills.Filtered := False;
  37. end;
  38. procedure AfterLoadData;
  39. begin
  40. sddPeg.EndUpdate;
  41. sddPeg.EnableControls;
  42. sddGclBills.EndUpdate;
  43. sddGclBills.EnableControls;
  44. sdvPeg.LocateInControl(sdvPeg.Records[0]);
  45. sdvGclBills.Filtered := True;
  46. end;
  47. procedure LoadGclBills(APeg: TtpPegNode);
  48. var
  49. i: Integer;
  50. Rec: TsdDataRecord;
  51. vGclNode: TtpGatherTreeNode;
  52. begin
  53. for i := 0 to APeg.RelaGclNodes.Count - 1 do
  54. begin
  55. vGclNode := TtpGatherTreeNode(APeg.RelaGclNodes.Items[i]);
  56. Rec := sddGclBills.Add;
  57. Rec.ValueByName('ID').AsInteger := vGclNode.ID;
  58. Rec.ValueByName('PegID').AsInteger := APeg.RelaNode.ID;
  59. Rec.ValueByName('B_Code').AsString := vGclNode.B_Code;
  60. Rec.ValueByName('Name').AsString := vGclNode.Name;
  61. Rec.ValueByName('Units').AsString := vGclNode.Units;
  62. Rec.ValueByName('Price').AsFloat := vGclNode.Price;
  63. Rec.ValueByName('Quantity').AsFloat := vGclNode.Quantity;
  64. Rec.ValueByName('TotalPrice').AsFloat := vGclNode.TotalPrice;
  65. end;
  66. end;
  67. procedure LoadPeg(APeg: TtpPegNode);
  68. var
  69. i: Integer;
  70. Rec: TsdDataRecord;
  71. begin
  72. Rec := sddPeg.Add;
  73. Rec.ValueByName('ID').AsInteger := APeg.RelaNode.ID;
  74. Rec.ValueByName('Code').AsString := APeg.RelaNode.Code;
  75. Rec.ValueByName('Name').AsString := APeg.RelaNode.Name;
  76. Rec.ValueByName('Units').AsString := APeg.RelaNode.Units;
  77. Rec.ValueByName('TotalPrice').AsFloat := APeg.RelaNode.TotalPrice;
  78. Rec.ValueByName('BeginPeg').AsString := APeg.BeginPeg;
  79. Rec.ValueByName('BeginPegNum').AsFloat := APeg.BeginPegNum;
  80. Rec.ValueByName('EndPeg').AsString := APeg.EndPeg;
  81. Rec.ValueByName('EndPegNum').AsFloat := APeg.EndPegNum;
  82. LoadGclBills(APeg);
  83. end;
  84. var
  85. i: Integer;
  86. vPeg: TtpPegNode;
  87. begin
  88. BeforeLoadData;
  89. try
  90. for i := 0 to APegs.Count - 1 do
  91. begin
  92. vPeg := TtpPegNode(APegs.Items[i]);
  93. LoadPeg(vPeg);
  94. end;
  95. finally
  96. AfterLoadData;
  97. end;
  98. end;
  99. procedure TtpPeg_GclData.sdvGclBillsFilterRecord(ARecord: TsdDataRecord;
  100. var Allow: Boolean);
  101. begin
  102. if Assigned(sdvPeg.Current) then
  103. Allow := ARecord.ValueByName('PegID').AsInteger = sdvPeg.Current.ValueByName('ID').AsInteger
  104. else
  105. Allow := False;
  106. end;
  107. procedure TtpPeg_GclData.sdvPegCurrentChanged(ARecord: TsdDataRecord);
  108. begin
  109. sdvGclBills.RefreshFilter;
  110. end;
  111. end.