Browse Source

总分包汇总,添加排序功能

MaiXinRong 7 years ago
parent
commit
c1c8b28f88

+ 8 - 7
SubTenderGather/stgGather.pas

@@ -195,23 +195,24 @@ var
   vNext: TstgGatherTreeNode;
 begin
   vNode := TMeasureBillsIDTreeNode(ANode);
-  if ANode.ID <= 100 then
+  if ANode.ID < 100 then
     Result := FCacheData.GatherTree.FindNode(ANode.ID)
   else
     Result := FCacheData.GatherTree.FindNode(AParent, vNode);
 
   if not Assigned(Result) then
   begin
+    vNext := FCacheData.GatherTree.FindNextSibling(AParent, vNode.Rec.Code.AsString, vNode.Rec.B_Code.AsString);
     if not Assigned(AParent) or (not (AParent.IsSumBase and AParent.IsLeafXmj)) or (not ANode.HasChildren) then
     begin
       if ANode.ID < 100 then
-        Result := FCacheData.GatherTree.AddSubTenderNode(AParent, nil, ANode.ID)
+        Result := FCacheData.GatherTree.AddSubTenderNode(AParent, vNext, ANode.ID)
       else
-        Result := FCacheData.GatherTree.AddSubTenderNode(AParent, nil);
-      Result.Code := vNode.Rec.Code.AsString;
-      Result.B_Code := vNode.Rec.B_Code.AsString;
-      Result.Name := vNode.Rec.Name.AsString;
-      Result.Units := vNode.Rec.Units.AsString
+        Result := FCacheData.GatherTree.AddSubTenderNode(AParent, vNext);
+      Result.Code := Trim(vNode.Rec.Code.AsString);
+      Result.B_Code := Trim(vNode.Rec.B_Code.AsString);
+      Result.Name := Trim(vNode.Rec.Name.AsString);
+      Result.Units := Trim(vNode.Rec.Units.AsString);
     end
     else
       Result := AParent;

+ 17 - 5
SubTenderGather/stgGatherCacheData.pas

@@ -136,7 +136,7 @@ type
     constructor Create; override;
     destructor Destroy; override;
 
-    function FindNextSibling(AParent: TCacheNode; ACode: string): TstgGatherTreeNode;
+    function FindNextSibling(AParent: TCacheNode; ACode, AB_Code: string): TstgGatherTreeNode;
     function FindNode(AParent: TCacheNode; AInfo: TBillsIDTreeNode): TstgGatherTreeNode; overload;
     function FindNode(AID: Integer): TstgGatherTreeNode; overload;
 
@@ -388,9 +388,21 @@ begin
 end;
 
 function TstgGatherTree.FindNextSibling(AParent: TCacheNode;
-  ACode: string): TstgGatherTreeNode;
+  ACode, AB_Code: string): TstgGatherTreeNode;
+var
+  vChild: TstgGatherTreeNode;
 begin
-
+  Result := nil;
+  if Assigned(AParent) then
+    vChild := TstgGatherTreeNode(AParent.FirstChild)
+  else
+    vChild := TstgGatherTreeNode(Root.FirstChild);
+  while not Assigned(Result) and Assigned(vChild) do
+  begin
+    if (CompareCode(ACode, vChild.Code) < 0) or (CompareCode(AB_Code, vChild.B_Code) < 0) then
+      Result := vChild;
+    vChild := TstgGatherTreeNode(vChild.NextSibling);
+  end;
 end;
 
 function TstgGatherTree.FindNode(AID: Integer): TstgGatherTreeNode;
@@ -423,8 +435,8 @@ begin
 
   while Assigned(vNode) and not Assigned(Result) do
   begin
-    if SameText(vNode.Code, AInfo.Rec.Code.AsString) and SameText(vNode.B_Code, AInfo.Rec.B_Code.AsString)
-        and SameText(vNode.Name, AInfo.Rec.Name.AsString) and SameText(vNode.Units, AInfo.Rec.Units.AsString) then
+    if SameText(vNode.Code, Trim(AInfo.Rec.Code.AsString)) and SameText(vNode.B_Code, Trim(AInfo.Rec.B_Code.AsString))
+        and SameText(vNode.Name, Trim(AInfo.Rec.Name.AsString)) and SameText(vNode.Units, Trim(AInfo.Rec.Units.AsString)) then
       Result := vNode;
     vNode := TstgGatherTreeNode(vNode.NextSibling);
   end;

+ 1 - 0
SubTenderGather/stgResultFrm.dfm

@@ -198,6 +198,7 @@ object stgResultForm: TstgResultForm
     Align = alBottom
     BevelOuter = bvNone
     TabOrder = 2
+    Visible = False
     object lblResult: TLabel
       Left = 4
       Top = 8