StandardBillsDm.pas 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. unit StandardBillsDm;
  2. interface
  3. uses
  4. SysUtils, Classes, ADODB, DB, DBClient, Provider, sdIDTree,
  5. UtilMethods, sdDB, sdProvider;
  6. type
  7. TStandardBillsData = class(TDataModule)
  8. sdpStdBills: TsdADOProvider;
  9. sddStdBills: TsdDataSet;
  10. sdvStdBills: TsdDataView;
  11. private
  12. FBillsTree: TsdIDTree;
  13. procedure CreateBillsTree;
  14. procedure OpenConnetion(AConnection: TADOConnection);
  15. procedure ExpandFirstNode;
  16. public
  17. constructor Create(AOwner: TComponent); override;
  18. destructor Destroy; override;
  19. procedure Open(AConnection: TADOConnection);
  20. procedure CalcCacheData(ANode:TsdIDTreeNode; AOrder: Integer; AParentPath: String);
  21. property BillsTree: TsdIDTree read FBillsTree;
  22. end;
  23. implementation
  24. {$R *.dfm}
  25. { TStandardBillsData }
  26. procedure TStandardBillsData.CalcCacheData(ANode: TsdIDTreeNode;
  27. AOrder: Integer; AParentPath: String);
  28. var
  29. sNodePath: string;
  30. begin
  31. if not Assigned(ANode) then Exit;
  32. ANode.Rec.ValueByName('BillsLevel').AsInteger := ANode.Level + 1;
  33. ANode.Rec.ValueByName('BillsOrder').AsInteger := AOrder;
  34. if AParentPath = '' then
  35. sNodePath := IntToStr(ANode.ID)
  36. else
  37. sNodePath := AParentPath + '.' + IntToStr(ANode.ID);
  38. ANode.Rec.ValueByName('FullPath').AsString := sNodePath;
  39. ANode.Rec.ValueByName('IsLeaf').AsBoolean := not ANode.HasChildren;
  40. CalcCacheData(ANode.FirstChild, 1, sNodePath);
  41. CalcCacheData(ANode.NextSibling, AOrder + 1, AParentPath);
  42. end;
  43. constructor TStandardBillsData.Create(AOwner: TComponent);
  44. begin
  45. inherited;
  46. CreateBillsTree;
  47. end;
  48. procedure TStandardBillsData.CreateBillsTree;
  49. begin
  50. FBillsTree := TsdIDTree.Create;
  51. FBillsTree.KeyFieldName := 'ID';
  52. FBillsTree.ParentFieldName := 'ParentID';
  53. FBillsTree.NextSiblingFieldName := 'NextID';
  54. FBillsTree.AutoExpand := False;
  55. end;
  56. destructor TStandardBillsData.Destroy;
  57. begin
  58. FBillsTree.Free;
  59. inherited;
  60. end;
  61. procedure TStandardBillsData.ExpandFirstNode;
  62. begin
  63. if FBillsTree.FirstNode <> nil then
  64. FBillsTree.FirstNode.Expand;
  65. end;
  66. procedure TStandardBillsData.Open(AConnection: TADOConnection);
  67. begin
  68. OpenConnetion(AConnection);
  69. FBillsTree.DataView := sdvStdBills;
  70. ExpandFirstNode;
  71. end;
  72. procedure TStandardBillsData.OpenConnetion(AConnection: TADOConnection);
  73. begin
  74. sdpStdBills.Connection := AConnection;
  75. sdpStdBills.TableName := 'BillsTree';
  76. sddStdBills.Open;
  77. sdvStdBills.Open;
  78. sddStdBills.AddIndex('idxID', 'ID');
  79. sddStdBills.AddIndex('sdxCode', 'Code');
  80. sddStdBills.AddIndex('sddBCode', 'B_Code');
  81. end;
  82. end.