|
@@ -532,6 +532,13 @@ end;
|
|
|
|
|
|
function TBillsCacheTree.AddLeafBillsNode(const AB_Code: string): TBillsCacheNode;
|
|
function TBillsCacheTree.AddLeafBillsNode(const AB_Code: string): TBillsCacheNode;
|
|
|
|
|
|
|
|
+ function GetLastXmjParentOrg: TBillsCacheNode;
|
|
|
|
+ begin
|
|
|
|
+ Result := TBillsCacheNode(FLastNode);
|
|
|
|
+ while Assigned(Result) and ((Result.B_Code <> '') or (Result.Code = '')) do
|
|
|
|
+ Result := TBillsCacheNode(Result.Parent);
|
|
|
|
+ end;
|
|
|
|
+
|
|
function GetLastXmjParent: TBillsCacheNode;
|
|
function GetLastXmjParent: TBillsCacheNode;
|
|
begin
|
|
begin
|
|
Result := TBillsCacheNode(FLastNode);
|
|
Result := TBillsCacheNode(FLastNode);
|
|
@@ -599,8 +606,10 @@ function TBillsCacheTree.AddLeafBillsNode(const AB_Code: string): TBillsCacheNod
|
|
var
|
|
var
|
|
Parent: TBillsCacheNode;
|
|
Parent: TBillsCacheNode;
|
|
begin
|
|
begin
|
|
- Parent := GetLastXmjParent;
|
|
|
|
- Result := AddNodeByParent(Parent, AB_Code);
|
|
|
|
|
|
+ Parent := GetLastXmjParentOrg;
|
|
|
|
+ Result := AddNodeByCode(Parent.Code + '-' + AB_Code, -1);
|
|
|
|
+ //Parent := GetLastXmjParent;
|
|
|
|
+ //Result := AddNodeByParent(Parent, AB_Code);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TBillsCacheTree.SetSeparateChar(const Value: Char);
|
|
procedure TBillsCacheTree.SetSeparateChar(const Value: Char);
|
|
@@ -709,6 +718,35 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
function TBillsCacheTree.AddNodeByCodeName(const ACode, AName: string): TBillsCacheNode;
|
|
function TBillsCacheTree.AddNodeByCodeName(const ACode, AName: string): TBillsCacheNode;
|
|
|
|
+
|
|
|
|
+ function GetLastXmjParentOrg: TBillsCacheNode;
|
|
|
|
+ begin
|
|
|
|
+ Result := TBillsCacheNode(FLastNode);
|
|
|
|
+ while Assigned(Result) and ((Result.B_Code <> '') or (Result.Code = '')) do
|
|
|
|
+ Result := TBillsCacheNode(Result.Parent);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ function HasSiblingGclNode(ANode: TBillsCacheNode): Boolean;
|
|
|
|
+ var
|
|
|
|
+ Sibling: TBillsCacheNode;
|
|
|
|
+ begin
|
|
|
|
+ Result := False;
|
|
|
|
+ Sibling := TBillsCacheNode(ANode.PreSibling);
|
|
|
|
+ while Assigned(Sibling) and not Result do
|
|
|
|
+ begin
|
|
|
|
+ if Sibling.B_Code <> '' then
|
|
|
|
+ Result := True;
|
|
|
|
+ Sibling := TBillsCacheNode(Sibling.PreSibling);
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ function GetParentWithBlankNode: TBillsCacheNode;
|
|
|
|
+ begin
|
|
|
|
+ Result := TBillsCacheNode(FLastBlankNode);
|
|
|
|
+ if HasSiblingGclNode(Result) then
|
|
|
|
+ Result := TBillsCacheNode(FLastBlankNode.Parent);
|
|
|
|
+ end;
|
|
|
|
+
|
|
var
|
|
var
|
|
Parent, NextSibling: TBillsCacheNode;
|
|
Parent, NextSibling: TBillsCacheNode;
|
|
begin
|
|
begin
|
|
@@ -716,7 +754,10 @@ begin
|
|
if Assigned(Result) then
|
|
if Assigned(Result) then
|
|
begin
|
|
begin
|
|
FLastNode := Result;
|
|
FLastNode := Result;
|
|
- if (ACode = '') then FLastBlankNode := Result;
|
|
|
|
|
|
+ if (ACode = '') then
|
|
|
|
+ FLastBlankNode := Result
|
|
|
|
+ else
|
|
|
|
+ FLastBlankNode := nil;
|
|
Exit;
|
|
Exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -729,12 +770,17 @@ begin
|
|
end
|
|
end
|
|
else if (AName = '其他费用项目') or (AName = '建设期贷款利息') or (Pos('公路功能以外的工程费用', AName) > 0) then
|
|
else if (AName = '其他费用项目') or (AName = '建设期贷款利息') or (Pos('公路功能以外的工程费用', AName) > 0) then
|
|
Parent := TBillsCacheNode(Root)
|
|
Parent := TBillsCacheNode(Root)
|
|
|
|
+ else if Assigned(FLastBlankNode) then
|
|
|
|
+ Parent := GetParentWithBlankNode
|
|
else
|
|
else
|
|
- Parent := TBillsCacheNode(FLastBlankNode);
|
|
|
|
|
|
+ Parent := GetLastXmjParentOrg;
|
|
Result := AddNode(Parent, NextSibling);
|
|
Result := AddNode(Parent, NextSibling);
|
|
Result.FLevelCode := ACode;
|
|
Result.FLevelCode := ACode;
|
|
FLastNode := Result;
|
|
FLastNode := Result;
|
|
- if (ACode = '') then FLastBlankNode := Result;
|
|
|
|
|
|
+ if (ACode = '') then
|
|
|
|
+ FLastBlankNode := Result
|
|
|
|
+ else
|
|
|
|
+ FLastBlankNode := nil;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TBillsCacheTree.FindFxNode(const ACode,
|
|
function TBillsCacheTree.FindFxNode(const ACode,
|