Explorar o código

导入台账(平面结构)至项目节相关Bug
1. 开始计量后,如未解锁,导入前后应标记为变更清单
2. 兼容第1层...第7层存在,但数据为空的情况

MaiXinRong %!s(int64=9) %!d(string=hai) anos
pai
achega
c0bab7db0e
Modificáronse 1 ficheiros con 117 adicións e 79 borrados
  1. 117 79
      Units/DetailExcelImport.pas

+ 117 - 79
Units/DetailExcelImport.pas

@@ -304,28 +304,31 @@ var
   iEndRow: Integer;
 begin
   sName := Trim(GetCellValue(AXlsFile, FCurRow, FXmjLevel1Col));
-  if sName = '' then Exit;
-
-  vXmj := FCacheTree.FindXmjChild(nil, '', sName);
-  if not Assigned(vXmj) then
-  begin
-    vXmj := FCacheTree.AddNode(nil);
-    vXmj.Name := sName;
-  end;
-
   with AXlsFile.CellMergedBounds[FCurRow, FXmjLevel1Col] do
     iEndRow := FCurRow + Bottom - Top;
 
-  if FXmjLevel2Col <> -1 then
+  if sName <> '' then
   begin
-    while FCurRow <= iEndRow do
-      LoadXmjLevel2(AXlsFile, vXmj);
+    vXmj := FCacheTree.FindXmjChild(nil, '', sName);
+    if not Assigned(vXmj) then
+    begin
+      vXmj := FCacheTree.AddNode(nil);
+      vXmj.Name := sName;
+    end;
+
+    if FXmjLevel2Col <> -1 then
+    begin
+      while FCurRow <= iEndRow do
+        LoadXmjLevel2(AXlsFile, vXmj);
+    end
+    else
+    begin
+      while FCurRow <= iEndRow do
+        LoadBillsNode(AXlsFile, vXmj);
+    end;
   end
   else
-  begin
-    while FCurRow <= iEndRow do
-      LoadBillsNode(AXlsFile, vXmj);
-  end;
+    Inc(FCurRow);
 end;
 
 procedure TPlaneFxBillsExcelImport.LoadXmjLevel2(AXlsFile: TXLSFile;
@@ -336,22 +339,29 @@ var
   iEndRow: Integer;
 begin
   sName := Trim(GetCellValue(AXlsFile, FCurRow, FXmjLevel2Col));
-  if sName = '' then Exit;
-
-  vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
-  if not Assigned(vXmj) then
-  begin
-    vXmj := FCacheTree.AddNode(AParent);
-    vXmj.Name := sName;
-  end;
-
   with AXlsFile.CellMergedBounds[FCurRow, FXmjLevel2Col] do
     iEndRow := FCurRow + Bottom - Top;
 
-  if FXmjLevel3Col <> -1 then
+  if sName <> '' then
   begin
-    while FCurRow <= iEndRow do
-      LoadXmjLevel3(AXlsFile, vXmj);
+    vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
+    if not Assigned(vXmj) then
+    begin
+      vXmj := FCacheTree.AddNode(AParent);
+      vXmj.Name := sName;
+    end;
+
+
+    if FXmjLevel3Col <> -1 then
+    begin
+      while FCurRow <= iEndRow do
+        LoadXmjLevel3(AXlsFile, vXmj);
+    end
+    else
+    begin
+      while FCurRow <= iEndRow do
+        LoadBillsNode(AXlsFile, vXmj);
+    end;
   end
   else
   begin
@@ -368,27 +378,33 @@ var
   iEndRow: Integer;
 begin
   sName := Trim(GetCellValue(AXlsFile, FCurRow, FXmjLevel3Col));
-  if sName = '' then Exit;
-
-  vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
-  if not Assigned(vXmj) then
-  begin
-    vXmj := FCacheTree.AddNode(AParent);
-    vXmj.Name := sName;
-  end;
-
   with AXlsFile.CellMergedBounds[FCurRow, FXmjLevel3Col] do
     iEndRow := FCurRow + Bottom - Top;
 
-  if FXmjLevel4Col <> -1 then
+  if sName <> '' then
   begin
-    while FCurRow <= iEndRow do
-      LoadXmjLevel4(AXlsFile, vXmj);
+    vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
+    if not Assigned(vXmj) then
+    begin
+      vXmj := FCacheTree.AddNode(AParent);
+      vXmj.Name := sName;
+    end;
+
+    if FXmjLevel4Col <> -1 then
+    begin
+      while FCurRow <= iEndRow do
+        LoadXmjLevel4(AXlsFile, vXmj);
+    end
+    else
+    begin
+      while FCurRow <= iEndRow do
+        LoadBillsNode(AXlsFile, vXmj);
+    end;
   end
   else
   begin
     while FCurRow <= iEndRow do
-      LoadBillsNode(AXlsFile, vXmj);
+      LoadBillsNode(AXlsFile, AParent);
   end;
 end;
 
@@ -400,27 +416,33 @@ var
   iEndRow: Integer;
 begin
   sName := Trim(GetCellValue(AXlsFile, FCurRow, FXmjLevel4Col));
-  if sName = '' then Exit;
-
-  vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
-  if not Assigned(vXmj) then
-  begin
-    vXmj := FCacheTree.AddNode(AParent);
-    vXmj.Name := sName;
-  end;
-
   with AXlsFile.CellMergedBounds[FCurRow, FXmjLevel4Col] do
     iEndRow := FCurRow + Bottom - Top;
 
-  if FXmjLevel5Col <> -1 then
+  if sName <> '' then
   begin
-    while FCurRow <= iEndRow do
-      LoadXmjLevel5(AXlsFile, vXmj);
+    vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
+    if not Assigned(vXmj) then
+    begin
+      vXmj := FCacheTree.AddNode(AParent);
+      vXmj.Name := sName;
+    end;
+
+    if FXmjLevel5Col <> -1 then
+    begin
+      while FCurRow <= iEndRow do
+        LoadXmjLevel5(AXlsFile, vXmj);
+    end
+    else
+    begin
+      while FCurRow <= iEndRow do
+        LoadBillsNode(AXlsFile, vXmj);
+    end;
   end
   else
   begin
     while FCurRow <= iEndRow do
-      LoadBillsNode(AXlsFile, vXmj);
+      LoadBillsNode(AXlsFile, AParent);
   end;
 end;
 
@@ -432,27 +454,33 @@ var
   iEndRow: Integer;
 begin
   sName := Trim(GetCellValue(AXlsFile, FCurRow, FXmjLevel5Col));
-  if sName = '' then Exit;
-
-  vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
-  if not Assigned(vXmj) then
-  begin
-    vXmj := FCacheTree.AddNode(AParent);
-    vXmj.Name := sName;
-  end;
-
   with AXlsFile.CellMergedBounds[FCurRow, FXmjLevel5Col] do
     iEndRow := FCurRow + Bottom - Top;
 
-  if FXmjLevel6Col <> -1 then
+  if sName <> '' then
   begin
-    while FCurRow <= iEndRow do
-      LoadXmjLevel6(AXlsFile, vXmj);
+    vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
+    if not Assigned(vXmj) then
+    begin
+      vXmj := FCacheTree.AddNode(AParent);
+      vXmj.Name := sName;
+    end;
+
+    if FXmjLevel6Col <> -1 then
+    begin
+      while FCurRow <= iEndRow do
+        LoadXmjLevel6(AXlsFile, vXmj);
+    end
+    else
+    begin
+      while FCurRow <= iEndRow do
+        LoadBillsNode(AXlsFile, vXmj);
+    end;
   end
   else
   begin
     while FCurRow <= iEndRow do
-      LoadBillsNode(AXlsFile, vXmj);
+      LoadBillsNode(AXlsFile, AParent);
   end;
 end;
 
@@ -464,27 +492,34 @@ var
   iEndRow: Integer;
 begin
   sName := Trim(GetCellValue(AXlsFile, FCurRow, FXmjLevel6Col));
-  if sName = '' then Exit;
-
-  vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
-  if not Assigned(vXmj) then
-  begin
-    vXmj := FCacheTree.AddNode(AParent);
-    vXmj.Name := sName;
-  end;
 
   with AXlsFile.CellMergedBounds[FCurRow, FXmjLevel6Col] do
     iEndRow := FCurRow + Bottom - Top;
 
-  if FXmjLevel7Col <> -1 then
+  if sName <> '' then
   begin
-    while FCurRow <= iEndRow do
-      LoadXmjLevel7(AXlsFile, vXmj);
+    vXmj := FCacheTree.FindXmjChild(AParent, '', sName);
+    if not Assigned(vXmj) then
+    begin
+      vXmj := FCacheTree.AddNode(AParent);
+      vXmj.Name := sName;
+    end;
+
+    if FXmjLevel7Col <> -1 then
+    begin
+      while FCurRow <= iEndRow do
+        LoadXmjLevel7(AXlsFile, vXmj);
+    end
+    else
+    begin
+      while FCurRow <= iEndRow do
+        LoadBillsNode(AXlsFile, vXmj);
+    end;
   end
   else
   begin
     while FCurRow <= iEndRow do
-      LoadBillsNode(AXlsFile, vXmj);
+      LoadBillsNode(AXlsFile, AParent);
   end;
 end;
 
@@ -551,6 +586,9 @@ begin
   Rec.ValueByName('OrgQuantity').AsFloat := QuantityRoundTo(ANode.Quantity);
   Rec.ValueByName('DrawingCode').AsString := ANode.DrawingCode;
   Rec.ValueByName('MemoStr').AsString := ANode.MemoStr;
+  // 解锁前,新增清单为变更清单,解锁后,新增清单为0号台账清单
+  if FProjectData.ProjProperties.PhaseCount > 0 then
+    Rec.ValueByName('IsMeasureAdd').AsBoolean := not FProjectData.CanUnlockInfo;
 end;
 
 procedure TPlaneFxBillsExcelImport.BeginImport;