| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- unit LocateBillsDM;
- interface
- uses
- SysUtils,
- Classes,
- DB,
- ScBillsTree,
- DataBase,
- ScProjectManager,
- DBClient;
- type
- TBillsLocateDM = class(TDataModule)
- cdsQBItems: TClientDataSet;
- cdsQBItemsCode: TWideStringField;
- cdsQBItemsName: TWideStringField;
- cdsQBItemsUnits: TWideStringField;
- cdsQBItemsQuantity: TFloatField;
- cdsQBItemsUnitPrice: TFloatField;
- cdsQBItemsTotalPrice: TFloatField;
- cdsQBItemsID: TIntegerField;
- procedure cdsQBItemsFilterRecord(DataSet: TDataSet;
- var Accept: Boolean);
- private
- { Private declarations }
- FBillsData: TDMDataBase;
- FCount: Integer;
- FStrings: TStrings;
- FCode: string;
- FProjectMgr: TProjectManager;
- procedure SetBillsData(const Value: TDMDataBase);
- procedure DrawBills; overload;
- procedure DrawBills(aNode: TScBillsItem; var aFilter: string); overload;
- public
- { Public declarations }
- constructor Create(AProjMgr: TProjectManager);
- destructor Destroy; override;
- procedure FindFirstBills(const aCode: string);
- procedure NextBills;
- procedure LocateBills;
- procedure RefreshBills;
- property BillsData: TDMDataBase read FBillsData write SetBillsData;
- end;
- implementation
- uses ZjIDTree;
- {$R *.dfm}
- { TBillsLocateDM }
- constructor TBillsLocateDM.Create(AProjMgr: TProjectManager);
- begin
- inherited Create(nil);
- FProjectMgr := AProjMgr;
- FStrings := TStringList.Create;
- end;
- procedure TBillsLocateDM.DrawBills;
- var
- I: Integer;
- sFilter: string;
- begin
- cdsQBItems.DisableControls;
- try
- cdsQBItems.EmptyDataSet;
- with FBillsData do
- begin
- { FCount := 0;
- FStrings.Clear;
- DrawBills(TScBillsItem(BillsTree.FirstNode), sFilter);
- if sFilter <> '' then FStrings.Add(sFilter);
- for I := 0 to FStrings.Count - 1 do
- begin
- sFilter := FStrings[I]; }
- cdsBills.Filter := 'B_Code<>'''''; //sFilter;
- cdsBills.Filtered := True;
- try
- cdsBills.First;
- while not cdsBills.Eof do
- begin
- cdsQBItems.Append;
- cdsQBItemsID.Value := cdsBillsID.Value;
- cdsQBItemsCode.Value := cdsBillsB_Code.Value;
- cdsQBItemsName.Value := cdsBillsName.Value;
- cdsQBItemsUnits.Value := cdsBillsUnits.Value;
- cdsQBItemsQuantity.Value := cdsBillsQuantity.Value;
- cdsQBItemsUnitPrice.Value := cdsBillsUnitPrice.Value;
- cdsQBItemsTotalPrice.Value := cdsBillsTotalPrice.Value;
- cdsQBItems.Post;
- cdsBills.Next;
- end;
- finally
- cdsBills.Filtered := False;
- end;
- // end;
- end;
- finally
- cdsQBItems.First;
- cdsQBItems.EnableControls;
- end;
- end;
- destructor TBillsLocateDM.Destroy;
- begin
- FStrings.Free;
- inherited;
- end;
- procedure TBillsLocateDM.DrawBills(aNode: TScBillsItem; var aFilter: string);
- var
- I: Integer;
- sbiNode: TScBillsItem;
- begin
- if not Assigned(aNode) then Exit;
-
- if aNode.SBillBCode <> '' then
- begin
- if aFilter <> '' then
- begin
- aFilter := aFilter + ' or ID=' + IntToStr(aNode.ID);
- end
- else
- begin
- aFilter := 'ID=' + IntToStr(aNode.ID);
- end;
- Inc(FCount);
- if FCount = 500 then
- begin
- FStrings.Add(aFilter);
- FCount := 0;
- aFilter := '';
- end;
- end;
- for I := 0 to aNode.ChildCount - 1 do
- begin
- sbiNode := TScBillsItem(aNode.ChildNodes[I]);
- DrawBills(sbiNode, aFilter);
- end;
- end;
- procedure TBillsLocateDM.NextBills;
- var
- sCode: string;
- begin
- sCode := cdsQBItemsCode.AsString;
- cdsQBItems.Next;
- { while not cdsQBItems.Eof do
- begin
- if cdsQBItemsCode.Value = sCode then
- Break;
- cdsQBItems.Next;
- end; }
- end;
- procedure TBillsLocateDM.SetBillsData(const Value: TDMDataBase);
- begin
- FBillsData := Value;
- if Assigned(FBillsData) then
- DrawBills;
- end;
- procedure TBillsLocateDM.LocateBills;
- begin
- FBillsData.cdsOrgBills.FindKey([cdsQBItemsID.AsInteger]);
- end;
- procedure TBillsLocateDM.RefreshBills;
- begin
- cdsQBItems.Filtered := False;
- BillsData := FProjectMgr.ActiveProject.BillsData;
- end;
- procedure TBillsLocateDM.FindFirstBills(const aCode: string);
- begin
- FCode := aCode;
- cdsQBItems.Filtered := False;
- if FCode <> '' then
- cdsQBItems.Filtered := True;
- end;
- procedure TBillsLocateDM.cdsQBItemsFilterRecord(DataSet: TDataSet;
- var Accept: Boolean);
- begin
- if Pos(FCode, cdsQBItemsCode.AsString) <> 0 then
- Accept := True
- else
- Accept := False;
- end;
- end.
|