123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- unit SearchDm;
- interface
- uses
- SysUtils, Classes, DB, DBClient, sdIDTree, sdDB;
- type
- TLocateType = (ltCompile, ltMeasure);
- TSearchData = class(TDataModule)
- cdsSearch: TClientDataSet;
- cdsSearchCode: TStringField;
- cdsSearchB_Code: TStringField;
- cdsSearchName: TWideStringField;
- cdsSearchUnits: TWideStringField;
- cdsSearchQuantity: TFloatField;
- cdsSearchAddGatherQuantity: TFloatField;
- cdsSearchID: TIntegerField;
- cdsSearchCurQcQuantity: TFloatField;
- cdsSearchPrice: TFloatField;
- cdsSearchCompleteRate: TFloatField;
- procedure cdsSearchQuantityGetText(Sender: TField; var Text: String;
- DisplayText: Boolean);
- private
- FProjectData: TObject;
- procedure BeginSearch;
- procedure EndSearch;
- procedure AddSearchResult(Rec, StageRec: TsdDataRecord);
- public
- constructor Create(AProjectData: TObject);
- destructor Destroy; override;
- procedure SearchKeyword(const AKeyword: string);
- procedure SearchOverRange;
- procedure SearchBelowRange;
- procedure LocateCurrent(ALocateType: TLocateType);
- property ProjectData: TObject read FProjectData;
- end;
- implementation
- uses
- ProjectData, BillsMeasureDm, BillsCompileDm, Math, ZhAPI;
- {$R *.dfm}
- { TSearchData }
- procedure TSearchData.AddSearchResult(Rec, StageRec: TsdDataRecord);
- begin
- cdsSearch.Append;
- cdsSearchID.AsInteger := Rec.ValueByName('ID').AsInteger;
- cdsSearchCode.AsString := Rec.ValueByName('Code').AsString;
- cdsSearchB_Code.AsString := Rec.ValueByName('B_Code').AsString;
- cdsSearchName.AsString := Rec.ValueByName('Name').AsString;
- cdsSearchUnits.AsString := Rec.ValueByName('Units').AsString;
- cdsSearchPrice.AsFloat := Rec.ValueByName('Price').AsFloat;
- cdsSearchQuantity.AsString := Rec.ValueByName('Quantity').AsString;
- if Assigned(StageRec) then
- cdsSearchCurQcQuantity.AsFloat := StageRec.ValueByName('QcQuantity').AsFloat;
- cdsSearchAddGatherQuantity.AsString := Rec.ValueByName('AddGatherQuantity').AsString;
- if cdsSearchQuantity.AsFloat <> 0 then
- cdsSearchCompleteRate.AsFloat := advRoundTo(
- Rec.ValueByName('AddDealQuantity').AsFloat/cdsSearchQuantity.AsFloat*100);
- cdsSearch.Post;
- end;
- procedure TSearchData.BeginSearch;
- begin
- cdsSearch.DisableControls;
- end;
- constructor TSearchData.Create(AProjectData: TObject);
- begin
- inherited Create(nil);
- FProjectData := AProjectData;
- end;
- destructor TSearchData.Destroy;
- begin
- inherited;
- end;
- procedure TSearchData.EndSearch;
- begin
- cdsSearch.EnableControls;
- end;
- procedure TSearchData.LocateCurrent(ALocateType: TLocateType);
- procedure LocateCompile;
- var
- stnNode: TsdIDTreeNode;
- begin
- with TProjectData(FProjectData).BillsCompileData do
- begin
- stnNode := BillsCompileTree.FindNode(cdsSearchID.AsInteger);
- sdvBillsCompile.LocateInControl(stnNode.Rec);
- end;
- end;
- procedure LocateMeasure;
- var
- stnNode: TsdIDTreeNode;
- begin
- with TProjectData(FProjectData).BillsMeasureData do
- begin
- stnNode := BillsMeasureTree.FindNode(cdsSearchID.AsInteger);
- sdvBillsMeasure.LocateInControl(stnNode.Rec);
- end;
- end;
- begin
- if ALocateType = ltCompile then
- LocateCompile
- else if ALocateType = ltMeasure then
- LocateMeasure;
- end;
- procedure TSearchData.SearchKeyword(const AKeyword: string);
- procedure CheckKeyword(ANode: TsdIDTreeNode);
- var
- Rec, StageRec: TsdDataRecord;
- begin
- Rec := ANode.Rec;
- StageRec := TProjectData(FProjectData).PhaseData.StageData.StageRecord(ANode.ID);
- // Task 꼇꿴璂淃커쌘,쏭꿴璂묏넋좆헌데
- if {(Pos(AKeyword, Rec.ValueByName('Code').AsString) > 0) or}
- (Pos(AKeyword, Rec.ValueByName('B_Code').AsString) > 0) or
- (Pos(AKeyword, Rec.ValueByName('Name').AsString) > 0) then
- begin
- AddSearchResult(Rec, StageRec);
- end;
- end;
- procedure RecursiveSearchKeyword(ANode: TsdIDTreeNode);
- begin
- if not Assigned(ANode) then Exit;
- CheckKeyword(ANode);
- if ANode.HasChildren then
- RecursiveSearchKeyword(ANode.FirstChild);
- RecursiveSearchKeyword(ANode.NextSibling);
- end;
- begin
- if AKeyword = '' then Exit;
- BeginSearch;
- try
- cdsSearch.EmptyDataSet;
- with TProjectData(FProjectData).BillsMeasureData do
- RecursiveSearchKeyword(BillsMeasureTree.FirstNode);
- finally
- EndSearch;
- end;
- end;
- procedure TSearchData.SearchOverRange;
- procedure CheckOverRange(ANode: TsdIDTreeNode);
- var
- Rec, StageRec: TsdDataRecord;
- begin
- Rec := ANode.Rec;
- StageRec := TProjectData(FProjectData).PhaseData.StageData.StageRecord(ANode.ID);
- if Rec.ValueByName('Quantity').AsFloat < Rec.ValueByName('AddDealQuantity').AsFloat then
- begin
- AddSearchResult(Rec, StageRec)
- end;
- end;
- procedure RecursiveSearchOverRange(ANode: TsdIDTreeNode);
- begin
- if not Assigned(ANode) then Exit;
- if ANode.HasChildren then
- RecursiveSearchOverRange(ANode.FirstChild)
- else
- CheckOverRange(ANode);
- RecursiveSearchOverRange(ANode.NextSibling);
- end;
- begin
- BeginSearch;
- try
- cdsSearch.EmptyDataSet;
- with TProjectData(FProjectData).BillsMeasureData do
- RecursiveSearchOverRange(BillsMeasureTree.FirstNode);
- finally
- EndSearch;
- end;
- end;
- procedure TSearchData.cdsSearchQuantityGetText(Sender: TField;
- var Text: String; DisplayText: Boolean);
- begin
- if Sender.AsFloat = 0 then
- Text := ''
- else
- Text := Sender.AsString;
- end;
- procedure TSearchData.SearchBelowRange;
- procedure CheckBelowRange(ANode: TsdIDTreeNode);
- var
- Rec, StageRec: TsdDataRecord;
- begin
- Rec := ANode.Rec;
- if Rec.ValueByName('Quantity').AsFloat = 0 then Exit;
- StageRec := TProjectData(FProjectData).PhaseData.StageData.StageRecord(ANode.ID);
- if Rec.ValueByName('Quantity').AsFloat > Rec.ValueByName('AddDealQuantity').AsFloat then
- begin
- AddSearchResult(Rec, StageRec)
- end;
- end;
- procedure RecursiveSearchBelowRange(ANode: TsdIDTreeNode);
- begin
- if not Assigned(ANode) then Exit;
- if ANode.HasChildren then
- RecursiveSearchBelowRange(ANode.FirstChild)
- else
- CheckBelowRange(ANode);
- RecursiveSearchBelowRange(ANode.NextSibling);
- end;
- begin
- BeginSearch;
- try
- cdsSearch.EmptyDataSet;
- with TProjectData(FProjectData).BillsMeasureData do
- RecursiveSearchBelowRange(BillsMeasureTree.FirstNode);
- finally
- EndSearch;
- end;
- end;
- end.
|