|
@@ -3,7 +3,7 @@ unit SearchDm;
|
|
|
interface
|
|
|
|
|
|
uses
|
|
|
- SysUtils, Classes, DB, DBClient, sdIDTree, sdDB;
|
|
|
+ SysUtils, Classes, DB, DBClient, sdIDTree, sdDB, BillsTree;
|
|
|
|
|
|
type
|
|
|
TLocateType = (ltCompile, ltMeasure);
|
|
@@ -25,10 +25,7 @@ type
|
|
|
private
|
|
|
FProjectData: TObject;
|
|
|
|
|
|
- procedure BeginSearch;
|
|
|
- procedure EndSearch;
|
|
|
-
|
|
|
- procedure AddSearchResult(Rec, StageRec: TsdDataRecord);
|
|
|
+ procedure AddSearchResult(ANode: TBillsIDTreeNode);
|
|
|
public
|
|
|
constructor Create(AProjectData: TObject);
|
|
|
destructor Destroy; override;
|
|
@@ -45,36 +42,37 @@ type
|
|
|
implementation
|
|
|
|
|
|
uses
|
|
|
- ProjectData, BillsMeasureDm, BillsCompileDm, Math, ZhAPI;
|
|
|
+ ProjectData, BillsMeasureDm, BillsCompileDm, Math, ZhAPI,
|
|
|
+ UtilMethods, Forms, Controls;
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
|
{ TSearchData }
|
|
|
|
|
|
-procedure TSearchData.AddSearchResult(Rec, StageRec: TsdDataRecord);
|
|
|
+procedure TSearchData.AddSearchResult(ANode: TBillsIDTreeNode);
|
|
|
begin
|
|
|
+ if not Assigned(ANode) then Exit;
|
|
|
+
|
|
|
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);
|
|
|
+ with ANode do
|
|
|
+ begin
|
|
|
+ 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);
|
|
|
+ end;
|
|
|
cdsSearch.Post;
|
|
|
end;
|
|
|
|
|
|
-procedure TSearchData.BeginSearch;
|
|
|
-begin
|
|
|
- cdsSearch.DisableControls;
|
|
|
-end;
|
|
|
-
|
|
|
constructor TSearchData.Create(AProjectData: TObject);
|
|
|
begin
|
|
|
inherited Create(nil);
|
|
@@ -86,11 +84,6 @@ begin
|
|
|
inherited;
|
|
|
end;
|
|
|
|
|
|
-procedure TSearchData.EndSearch;
|
|
|
-begin
|
|
|
- cdsSearch.EnableControls;
|
|
|
-end;
|
|
|
-
|
|
|
procedure TSearchData.LocateCurrent(ALocateType: TLocateType);
|
|
|
|
|
|
procedure LocateCompile;
|
|
@@ -116,82 +109,62 @@ procedure TSearchData.LocateCurrent(ALocateType: TLocateType);
|
|
|
end;
|
|
|
|
|
|
begin
|
|
|
- if ALocateType = ltCompile then
|
|
|
- LocateCompile
|
|
|
- else if ALocateType = ltMeasure then
|
|
|
- LocateMeasure;
|
|
|
+ Screen.Cursor := crHourGlass;
|
|
|
+ try
|
|
|
+ if ALocateType = ltCompile then
|
|
|
+ LocateCompile
|
|
|
+ else if ALocateType = ltMeasure then
|
|
|
+ LocateMeasure;
|
|
|
+ finally
|
|
|
+ Screen.Cursor := crDefault;
|
|
|
+ end;
|
|
|
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;
|
|
|
-
|
|
|
+var
|
|
|
+ iNode: Integer;
|
|
|
+ vNode: TBillsIDTreeNode;
|
|
|
begin
|
|
|
if AKeyword = '' then Exit;
|
|
|
- BeginSearch;
|
|
|
+
|
|
|
+ cdsSearch.DisableControls;
|
|
|
try
|
|
|
cdsSearch.EmptyDataSet;
|
|
|
with TProjectData(FProjectData).BillsMeasureData do
|
|
|
- RecursiveSearchKeyword(BillsMeasureTree.FirstNode);
|
|
|
+ begin
|
|
|
+ for iNode := 0 to BillsMeasureTree.Count - 1 do
|
|
|
+ begin
|
|
|
+ vNode := TBillsIDTreeNode(BillsMeasureTree.Items[iNode]);
|
|
|
+ if (Pos(AKeyword, vNode.Rec.B_Code.AsString) > 0) or
|
|
|
+ (Pos(AKeyword, vNode.Rec.Name.AsString) > 0) then
|
|
|
+ AddSearchResult(vNode);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
finally
|
|
|
- EndSearch;
|
|
|
+ cdsSearch.EnableControls;
|
|
|
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;
|
|
|
-
|
|
|
+var
|
|
|
+ i: Integer;
|
|
|
+ vNode: TBillsIDTreeNode;
|
|
|
begin
|
|
|
- BeginSearch;
|
|
|
+ cdsSearch.DisableControls;
|
|
|
try
|
|
|
cdsSearch.EmptyDataSet;
|
|
|
with TProjectData(FProjectData).BillsMeasureData do
|
|
|
- RecursiveSearchOverRange(BillsMeasureTree.FirstNode);
|
|
|
+ begin
|
|
|
+ for i := 0 to BillsMeasureTree.Count - 1 do
|
|
|
+ begin
|
|
|
+ vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
|
|
|
+ if not vNode.HasChildren then
|
|
|
+ if vNode.Rec.Quantity.AsFloat < vNode.Rec.AddDealQuantity.AsFloat then
|
|
|
+ AddSearchResult(vNode);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
finally
|
|
|
- EndSearch;
|
|
|
+ cdsSearch.EnableControls;
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -205,38 +178,25 @@ begin
|
|
|
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;
|
|
|
-
|
|
|
+var
|
|
|
+ i: Integer;
|
|
|
+ vNode: TBillsIDTreeNode;
|
|
|
begin
|
|
|
- BeginSearch;
|
|
|
+ cdsSearch.DisableControls;
|
|
|
try
|
|
|
cdsSearch.EmptyDataSet;
|
|
|
with TProjectData(FProjectData).BillsMeasureData do
|
|
|
- RecursiveSearchBelowRange(BillsMeasureTree.FirstNode);
|
|
|
+ begin
|
|
|
+ for i := 0 to BillsMeasureTree.Count - 1 do
|
|
|
+ begin
|
|
|
+ vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
|
|
|
+ if not vNode.HasChildren then
|
|
|
+ if vNode.Rec.Quantity.AsFloat > vNode.Rec.AddDealQuantity.AsFloat then
|
|
|
+ AddSearchResult(vNode);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
finally
|
|
|
- EndSearch;
|
|
|
+ cdsSearch.EnableControls;
|
|
|
end;
|
|
|
end;
|
|
|
|