MaiXinRong пре 9 година
родитељ
комит
0f17a51107
39 измењених фајлова са 354 додато и 197 уклоњено
  1. 98 49
      DataModules/BillsCompileDm.pas
  2. 5 2
      DataModules/BillsDm.pas
  3. 30 7
      DataModules/BillsMeasureDm.pas
  4. 1 0
      DataModules/StageDm.pas
  5. 2 2
      Dprs/Pro/Measure.cfg
  6. 6 3
      Dprs/Pro/Measure.dof
  7. 3 1
      Dprs/Pro/Measure.dpr
  8. BIN
      Dprs/Pro/Measure.res
  9. 2 2
      Dprs/Pro/Measure_Cloud.cfg
  10. 6 3
      Dprs/Pro/Measure_Cloud.dof
  11. 2 1
      Dprs/Pro/Measure_Cloud.dpr
  12. BIN
      Dprs/Pro/Measure_Cloud.res
  13. 2 2
      Dprs/Pro/Measure_GuangDong.cfg
  14. 6 3
      Dprs/Pro/Measure_GuangDong.dof
  15. 3 1
      Dprs/Pro/Measure_GuangDong.dpr
  16. BIN
      Dprs/Pro/Measure_GuangDong.res
  17. 2 2
      Dprs/Pro/Measure_GuangDong_Cloud.cfg
  18. 6 3
      Dprs/Pro/Measure_GuangDong_Cloud.dof
  19. 2 1
      Dprs/Pro/Measure_GuangDong_Cloud.dpr
  20. BIN
      Dprs/Pro/Measure_GuangDong_Cloud.res
  21. 2 2
      Dprs/Pro/Measure_GuangDong_TZ.cfg
  22. 6 3
      Dprs/Pro/Measure_GuangDong_TZ.dof
  23. 2 1
      Dprs/Pro/Measure_GuangDong_TZ.dpr
  24. BIN
      Dprs/Pro/Measure_GuangDong_TZ.res
  25. 2 2
      Dprs/Pro/Measure_TZ.cfg
  26. 6 3
      Dprs/Pro/Measure_TZ.dof
  27. 2 1
      Dprs/Pro/Measure_TZ.dpr
  28. BIN
      Dprs/Pro/Measure_TZ.res
  29. 2 2
      Dprs/Trail/Measure.cfg
  30. 6 3
      Dprs/Trail/Measure.dof
  31. 2 1
      Dprs/Trail/Measure.dpr
  32. BIN
      Dprs/Trail/Measure.res
  33. 2 2
      Dprs/Trail/Measure_GuangDong.cfg
  34. 6 3
      Dprs/Trail/Measure_GuangDong.dof
  35. 2 1
      Dprs/Trail/Measure_GuangDong.dpr
  36. BIN
      Dprs/Trail/Measure_GuangDong.res
  37. 1 1
      Frames/BillsMeasureFme.dfm
  38. 20 11
      Frames/BillsMeasureFme.pas
  39. 117 79
      Units/DetailExcelImport.pas

+ 98 - 49
DataModules/BillsCompileDm.pas

@@ -147,18 +147,36 @@ procedure TBillsCompileData.sdvBillsCompileGetText(var Text: String;
   ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
   DisplayText: Boolean);
 
+  function GetQtyEditText(const AFormulaField: string): Boolean;
+  begin
+
+  end;
+
   procedure GetEditText;
   var
     sFormula: string;
+    sFormulaField: string;
   begin
-    if SameText('OrgQuantity', AColumn.FieldName) then
-      sFormula := ARecord.ValueByName('OrgFormula').AsString
-    else if SameText('MisQuantity', AColumn.FieldName) then
-      sFormula := ARecord.ValueByName('MisFormula').AsString
-    else if SameText('OthQuantity', AColumn.FieldName) then
-      sFormula := ARecord.ValueByName('OthFormula').AsString
-    else
-      sFormula := '';
+    sFormula := '';
+    if ARecord.ValueByName('CalcType').AsInteger = 0 then
+    begin
+      if SameText('OrgQuantity', AColumn.FieldName) then
+        sFormula := ARecord.ValueByName('OrgFormula').AsString
+      else if SameText('MisQuantity', AColumn.FieldName) then
+        sFormula := ARecord.ValueByName('MisFormula').AsString
+      else if SameText('OthQuantity', AColumn.FieldName) then
+        sFormula := ARecord.ValueByName('OthFormula').AsString;
+    end
+    else if ARecord.ValueByName('CalcType').AsInteger = 1 then
+    begin
+      if SameText('OrgTotalPrice', AColumn.FieldName) then
+        sFormula := ARecord.ValueByName('OrgFormula').AsString
+      else if SameText('MisTotalPrice', AColumn.FieldName) then
+        sFormula := ARecord.ValueByName('MisFormula').AsString
+      else if SameText('OthTotalPrice', AColumn.FieldName) then
+        sFormula := ARecord.ValueByName('OthFormula').AsString;
+    end;
+
     if sFormula <> '' then
       Text := sFormula;
   end;
@@ -168,7 +186,7 @@ procedure TBillsCompileData.sdvBillsCompileGetText(var Text: String;
     if (Pos('Price', AColumn.FieldName) > 0) or
        (Pos('Quantity', AColumn.FieldName) > 0) then
     begin
-      if Assigned(AValue) and (AValue.AsFloat = 0) then
+      if not Assigned(AValue) or (AValue.AsFloat = 0) then
         Text := '';
     end;
   end;
@@ -276,33 +294,6 @@ end;
 procedure TBillsCompileData.sdvBillsCompileBeforeValueChange(
   AValue: TsdValue; const NewValue: Variant; var Allow: Boolean);
 begin
-  // 清单编号和项目节编号不可同时存在
-  if SameText(AValue.FieldName, 'Code') then
-  begin
-    if AValue.Owner.ValueByName('B_Code').AsString <> '' then
-      DataSetErrorMessage(Allow, '已存在清单编号,不可输入项目节编号!');
-  end
-  else if SameText(AValue.FieldName, 'B_Code') then
-  begin
-    if AValue.Owner.ValueByName('Code').AsString <> '' then
-      DataSetErrorMessage(Allow, '已存在项目节编号,不可输入清单编号!');
-  end
-  //
-  else if SameText(AValue.FieldName, 'Price') then
-  begin
-    if AValue.Owner.ValueByName('AddGatherTotalPrice').AsFloat <> 0 then
-      DataSetErrorMessage(Allow, '该清单已经开始计量,不可修改单价!');
-  end
-  // 变更清单不可修改0号台账数据
-  else if SameText(AValue.FieldName, 'OrgQuantity') or
-      SameText(AValue.FieldName, 'MisQuantity') or
-      SameText(AValue.FieldName, 'OthQuantity') then
-  begin
-    if AValue.Owner.ValueByName('IsMeasureAdd').AsBoolean then
-      DataSetErrorMessage(Allow, '变更清单不可填写0号台账数量与金额');
-  end;
-  if not Allow then Exit;
-    
   if SameText(AValue.FieldName, 'OrgQuantity') or
       SameText(AValue.FieldName, 'MisQuantity') or
       SameText(AValue.FieldName, 'OthQuantity') or
@@ -558,22 +549,33 @@ procedure TBillsCompileData.sdvBillsCompileSetText(var Text: String;
     Allow := False;
   end;
 
-  procedure SetQuantity(const APre: string);
+  procedure SetQuantity(const AFieldName: string);
+  var
+    sPre: string;
   begin
-    // 0号台账改为三项合计后,不记录输入的公式,但允许公式计算
+    sPre := StringReplace(AFieldName, 'Quantity', '', [rfIgnoreCase, rfReplaceAll]);
     if CheckStringNull(Text) or CheckNumeric(Text) then
       Text := FloatToStr(QuantityRoundTo(StrToFloatDef(Text, 0)))
     else
     begin
-      ARecord.ValueByName(APre + 'Formula').AsString := Text;
+      ARecord.ValueByName(sPre + 'Formula').AsString := Text;
       Text := FloatToStr(QuantityRoundTo(EvaluateExprs(Text)));
     end;
     ARecord.ValueByName('CalcType').AsInteger := 0;
   end;
 
-  procedure SetTotalPrice;
+  procedure SetTotalPrice(const AFieldName: string);
+  var
+    sPre: string;
   begin
-    Text := FloatToStr(TotalPriceRoundTo(StrToFloatDef(Text, 0)));
+    sPre := StringReplace(AFieldName, 'TotalPrice', '', [rfIgnoreCase, rfReplaceAll]);
+    if CheckStringNull(Text) or CheckNumeric(Text) then
+      Text := FloatToStr(TotalPriceRoundTo(StrToFloatDef(Text, 0)))
+    else
+    begin
+      ARecord.ValueByName(sPre + 'Formula').AsString := Text;
+      Text := FloatToStr(TotalPriceRoundTo(EvaluateExprs(Text)));
+    end;
     ARecord.ValueByName('CalcType').AsInteger := 1;
   end;
 
@@ -585,20 +587,19 @@ procedure TBillsCompileData.sdvBillsCompileSetText(var Text: String;
   procedure SetPrice;
   begin
     Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)));
+    ARecord.ValueByName('CalcType').AsInteger := 0;
   end;
 
   procedure DoCurChanged;
   begin
-    if SameText(AColumn.FieldName, 'OrgQuantity') then
-      SetQuantity('Org')
-    else if SameText(AColumn.FieldName, 'MisQuantity') then
-      SetQuantity('Mis')
-    else if SameText(AColumn.FieldName, 'OthQuantity') then
-      SetQuantity('Oth')
+    if SameText(AColumn.FieldName, 'OrgQuantity') or
+        SameText(AColumn.FieldName, 'MisQuantity') or
+        SameText(AColumn.FieldName, 'OthQuantity')then
+      SetQuantity(AColumn.FieldName)
     else if SameText(AColumn.FieldName, 'OrgTotalPrice') or
         SameText(AColumn.FieldName, 'MisTotalPrice') or
         SameText(AColumn.FieldName, 'OthTotalPrice') then
-      SetTotalPrice
+      SetTotalPrice(AColumn.FieldName)
     else if Pos('DgnQuantity', AColumn.FieldName) = 1 then
       SetDgnQuantity
     else if SameText(AColumn.FieldName, 'Price') then
@@ -665,6 +666,36 @@ procedure TBillsCompileData.sdvBillsCompileSetText(var Text: String;
       if not Allow then Exit;
     end;
 
+    // 清单编号和项目节编号不可同时存在
+    if SameText(AValue.FieldName, 'Code') then
+    begin
+      if AValue.Owner.ValueByName('B_Code').AsString <> '' then
+        SetTextErrorHint('已存在清单编号,不可输入项目节编号!');
+    end
+    else if SameText(AValue.FieldName, 'B_Code') then
+    begin
+      if AValue.Owner.ValueByName('Code').AsString <> '' then
+        SetTextErrorHint('已存在项目节编号,不可输入清单编号!');
+    end
+    //
+    else if SameText(AValue.FieldName, 'Price') then
+    begin
+      if AValue.Owner.ValueByName('AddGatherTotalPrice').AsFloat <> 0 then
+        SetTextErrorHint('该清单已经开始计量,不可修改单价!');
+    end
+    // 变更清单不可修改0号台账数据
+    else if SameText(AValue.FieldName, 'OrgQuantity') or
+        SameText(AValue.FieldName, 'OrgTotalPrice') or
+        SameText(AValue.FieldName, 'MisQuantity') or
+        SameText(AValue.FieldName, 'MisTotalPrice') or
+        SameText(AValue.FieldName, 'OthQuantity') or
+        SameText(AValue.FieldName, 'OthTotalPrice') then
+    begin
+      if AValue.Owner.ValueByName('IsMeasureAdd').AsBoolean then
+        SetTextErrorHint('变更清单不可填写0号台账数量与金额');
+    end;
+    if not Allow then Exit;
+
     if SameText('Code', AColumn.FieldName) or
        SameText('B_Code', AColumn.FieldName) or
        SameText('Name', AColumn.FieldName) or
@@ -674,10 +705,28 @@ procedure TBillsCompileData.sdvBillsCompileSetText(var Text: String;
         SetTextErrorHint('该清单已经计量,不可修改清单编号');
   end;
 
+  function CheckValidData: Boolean;
+  begin
+    Result := (AValue.AsString <> Text);
+    if SameText(AColumn.FieldName, 'OrgQuantity') or
+       SameText(AColumn.FieldName, 'OrgTotalPrice') or
+       SameText(AColumn.FieldName, 'MisQuantity') or
+       SameText(AColumn.FieldName, 'MisTotalPrice') or
+       SameText(AColumn.FieldName, 'OthQuantity') or
+       SameText(AColumn.FieldName, 'OthTotalPrice') or
+       SameText(AColumn.FieldName, 'Price') then
+    begin
+      if (AValue.AsFloat = 0) and (Text = '') then
+        Result := False;
+    end;
+  end;
+
 begin
   if not Assigned(AValue) then Exit;
   // 修改后数据与原数据相同则不提交
-  if (AValue.AsString = Text) or ((AValue.AsFloat = 0) and (Text = '')) then Exit;
+  if not CheckValidData then
+    Allow := False;
+  if not Allow then Exit;
 
   CheckLockedData;
   if not Allow then Exit;

+ 5 - 2
DataModules/BillsDm.pas

@@ -132,8 +132,11 @@ begin
     sddBills.AddIndex('idxID', 'ID');
     
   sddBills.FieldByName('OrgQuantity').ValidChars := sddBills.FieldByName('Quantity').ValidChars + ArithmeticCharSet;
-  sddBills.FieldByName('MisQuantity').ValidChars := sddBills.FieldByName('Quantity').ValidChars + ArithmeticCharSet;
-  sddBills.FieldByName('OthQuantity').ValidChars := sddBills.FieldByName('Quantity').ValidChars + ArithmeticCharSet;
+  sddBills.FieldByName('OrgTotalPrice').ValidChars := sddBills.FieldByName('OrgQuantity').ValidChars;
+  sddBills.FieldByName('MisQuantity').ValidChars := sddBills.FieldByName('OrgQuantity').ValidChars;
+  sddBills.FieldByName('MisTotalPrice').ValidChars := sddBills.FieldByName('OrgQuantity').ValidChars;
+  sddBills.FieldByName('OthQuantity').ValidChars := sddBills.FieldByName('OrgQuantity').ValidChars;
+  sddBills.FieldByName('OthTotalPrice').ValidChars := sddBills.FieldByName('OrgQuantity').ValidChars;
 end;
 
 procedure TBillsData.Save;

+ 30 - 7
DataModules/BillsMeasureDm.pas

@@ -180,11 +180,8 @@ procedure TBillsMeasureData.sdvBillsMeasureGetText(var Text: String;
   begin
     with AValue.Owner do
     begin
-      if ValueByName(AQtyType + 'Flag').AsInteger = 2 then
-      begin
-        FFormulaCalc.SetRecordText(ValueByName(AQtyType + 'Formula').AsString);
-        Result := FFormulaCalc.DisplayText;
-      end
+      if ValueByName(AQtyType + 'Formula').AsString <> '' then
+        Result := ValueByName(AQtyType + 'Formula').AsString
       else
         Result := Text;
     end;
@@ -325,7 +322,8 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
       end
       else if SameText('CurDealQuantity', AColumn.FieldName) or
           SameText('CurQcQuantity', AColumn.FieldName) or
-          SameText('CurPcQuantity', AColumn.FieldName) then
+          SameText('CurPcQuantity', AColumn.FieldName) or
+          SameText('Price', AColumn.FieldName) then
       begin
         if not vNode.CountPriceEnable then
           DataSetErrorMessage(Allow, '该清单不可输入数量单价,如需使用数量×单价计算,请先清空所有直接输入的金额!');
@@ -340,6 +338,8 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
   end;
 
   procedure SetQuantity(const AField: string);
+  var
+    vNode: TBillsIDTreeNode;
   begin
     // 变更应选择变更令
     if SameText(AField , 'Qc') or SameText(AField , 'Pc') then
@@ -358,9 +358,15 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
       AValue.Owner.ValueByName(AField + 'Formula').AsString := Text;
       Text := FloatToStr(QuantityRoundTo(EvaluateExprs(Text)));
     end;
+    
+    vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(GetBillsID));
+    if vNode.Rec.CalcType.AsInteger <> 0 then
+      vNode.Rec.CalcType.AsInteger := 0;
   end;
 
   procedure SetTotalPrice(const AField: string);
+  var
+    vNode: TBillsIDTreeNode;
   begin
     // 变更应选择变更令
     if SameText(AField , 'Qc') or SameText(AField , 'Pc') then
@@ -379,6 +385,10 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
       AValue.Owner.ValueByName(AField + 'Formula').AsString := Text;
       Text := FloatToStr(TotalPriceRoundTo(EvaluateExprs(Text)));
     end;
+
+    vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(GetBillsID));
+    if vNode.Rec.CalcType.AsInteger <> 1 then
+      vNode.Rec.CalcType.AsInteger := 1;
   end;
 
   procedure DoCurChanged;
@@ -403,10 +413,23 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
       Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)));
   end;
 
+  function CheckValidData: Boolean;
+  begin
+    Result := (AValue.AsString <> Text);
+    if (Pos('Quantity', AColumn.FieldName) > 0) or
+       (Pos('Price', AColumn.FieldName) > 0) then
+    begin
+      if (AValue.AsFloat = 0) and (Text = '') then
+        Result := False;
+    end;
+  end;
+
 begin
   if not Assigned(AValue) then Exit;
   // 修改后数据与原数据相同则不提交
-  if (AValue.AsString = Text) or ((AValue.AsFloat = 0) and (Text = '')) then Exit;
+  if not CheckValidData then
+    Allow := False;
+  if not Allow then Exit;
 
   CheckLockedData;
   if not Allow then Exit;

+ 1 - 0
DataModules/StageDm.pas

@@ -278,6 +278,7 @@ begin
     sddStage.AddIndex('idxBID', 'BillsID');
 
   sddStage.FieldByName('DealQuantity').ValidChars := sddStage.FieldByName('DealQuantity').ValidChars + ArithmeticCharSet;
+  sddStage.FieldByName('DealTotalPrice').ValidChars := sddStage.FieldByName('DealQuantity').ValidChars;
 end;
 
 function TStageData.StageRecord(ABillsID: Integer): TStageRecord;

+ 2 - 2
Dprs/Pro/Measure.cfg

@@ -33,8 +33,8 @@
 -K$00400000
 -E"D:\SmartCostExe\Measure"
 -N"..\..\Dcus"
--LE"d:\program files (x86)\borland\delphi7\Projects\Bpl"
--LN"d:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
 -D_mEncrypt;
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE

+ 6 - 3
Dprs/Pro/Measure.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=1
-Release=3
-Build=1053
+Release=5
+Build=109
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化专业版
-FileVersion=3.1.3.1053
+FileVersion=3.1.5.109
 InternalName=Measure
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2014。保留所有权利。
 LegalTrademarks=Measure
@@ -134,6 +134,9 @@ OriginalFilename=
 ProductName=纵横公路工程计量决算一体化软件
 ProductVersion=3
 Comments=
+[Excluded Packages]
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc.
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc.
 [HistoryLists\hlConditionals]
 Count=10
 Item0=_mEncrypt;

+ 3 - 1
Dprs/Pro/Measure.dpr

@@ -137,7 +137,8 @@ uses
   rmCustomized2Dm in '..\..\DataModules\ReportMemoryDm\rmCustomized2Dm.pas' {rmCustomized2Data: TDataModule},
   CalcDecimal in '..\..\Units\CalcDecimal.pas',
   BillsPasteSelectFrm in '..\..\Forms\BillsPasteSelectFrm.pas' {BillsPasteSelectForm},
-  DetailExcelImport in '..\..\Units\DetailExcelImport.pas';
+  DetailExcelImport in '..\..\Units\DetailExcelImport.pas',
+  mProgressProFrm in '..\..\Forms\mProgressProFrm.pas' {ProgressProForm};
 
 {$R *.res}
 
@@ -158,6 +159,7 @@ begin
     begin
       HideWelcome;
       Application.CreateForm(TMainForm, MainForm);
+  Application.CreateForm(TProgressProForm, ProgressProForm);
   end
     else  HideWelcome;
     Application.Run;

BIN
Dprs/Pro/Measure.res


+ 2 - 2
Dprs/Pro/Measure_Cloud.cfg

@@ -33,8 +33,8 @@
 -K$00400000
 -E"D:\SmartCostExe\Measure"
 -N"..\..\Dcus"
--LE"d:\program files (x86)\borland\delphi7\Projects\Bpl"
--LN"d:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
 -D_mCloud;_mEncrypt;
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE

+ 6 - 3
Dprs/Pro/Measure_Cloud.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=1
-Release=3
-Build=1053
+Release=5
+Build=109
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化云版
-FileVersion=3.1.3.1053
+FileVersion=3.1.5.109
 InternalName=Measure
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2014。保留所有权利。
 LegalTrademarks=Measure
@@ -134,6 +134,9 @@ OriginalFilename=
 ProductName=纵横公路工程计量决算一体化软件
 ProductVersion=3
 Comments=
+[Excluded Packages]
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc.
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc.
 [HistoryLists\hlConditionals]
 Count=5
 Item0=_mCloud;_mEncrypt;

+ 2 - 1
Dprs/Pro/Measure_Cloud.dpr

@@ -141,7 +141,8 @@ uses
   rmCustomized2Dm in '..\..\DataModules\ReportMemoryDm\rmCustomized2Dm.pas' {rmCustomized2Data: TDataModule},
   CalcDecimal in '..\..\Units\CalcDecimal.pas',
   BillsPasteSelectFrm in '..\..\Forms\BillsPasteSelectFrm.pas' {BillsPasteSelectForm},
-  DetailExcelImport in '..\..\Units\DetailExcelImport.pas';
+  DetailExcelImport in '..\..\Units\DetailExcelImport.pas',
+  mProgressProFrm in '..\..\Forms\mProgressProFrm.pas' {ProgressProForm};
 
 {$R *.res}
 

BIN
Dprs/Pro/Measure_Cloud.res


+ 2 - 2
Dprs/Pro/Measure_GuangDong.cfg

@@ -33,8 +33,8 @@
 -K$00400000
 -E"D:\SmartCostExe\Measure"
 -N"..\..\Dcus"
--LE"d:\program files (x86)\borland\delphi7\Projects\Bpl"
--LN"d:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
 -D_mEncrypt;_mGuangDong
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE

+ 6 - 3
Dprs/Pro/Measure_GuangDong.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=1
-Release=3
-Build=1053
+Release=5
+Build=106
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化广东专业版
-FileVersion=3.1.3.1053
+FileVersion=3.1.5.106
 InternalName=Measure
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2014。保留所有权利。
 LegalTrademarks=Measure
@@ -134,6 +134,9 @@ OriginalFilename=
 ProductName=纵横公路工程计量决算一体化软件
 ProductVersion=3
 Comments=
+[Excluded Packages]
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc.
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc.
 [HistoryLists\hlConditionals]
 Count=1
 Item0=_mEncrypt;_mGuangDong

+ 3 - 1
Dprs/Pro/Measure_GuangDong.dpr

@@ -137,7 +137,8 @@ uses
   rmCustomized2Dm in '..\..\DataModules\ReportMemoryDm\rmCustomized2Dm.pas' {rmCustomized2Data: TDataModule},
   CalcDecimal in '..\..\Units\CalcDecimal.pas',
   BillsPasteSelectFrm in '..\..\Forms\BillsPasteSelectFrm.pas' {BillsPasteSelectForm},
-  DetailExcelImport in '..\..\Units\DetailExcelImport.pas';
+  DetailExcelImport in '..\..\Units\DetailExcelImport.pas',
+  mProgressProFrm in '..\..\Forms\mProgressProFrm.pas' {ProgressProForm};
 
 {$R *.res}
 
@@ -157,6 +158,7 @@ begin
     begin
       HideWelcome;
       Application.CreateForm(TMainForm, MainForm);
+  Application.CreateForm(TProgressProForm, ProgressProForm);
   end
     else  HideWelcome;
     Application.Run;

BIN
Dprs/Pro/Measure_GuangDong.res


+ 2 - 2
Dprs/Pro/Measure_GuangDong_Cloud.cfg

@@ -33,8 +33,8 @@
 -K$00400000
 -E"D:\SmartCostExe\Measure"
 -N"..\..\Dcus"
--LE"d:\program files (x86)\borland\delphi7\Projects\Bpl"
--LN"d:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
 -D_mCloud;_mEncrypt;_mGuangDong
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE

+ 6 - 3
Dprs/Pro/Measure_GuangDong_Cloud.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=1
-Release=3
-Build=1053
+Release=5
+Build=106
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化广东云版
-FileVersion=3.1.3.1053
+FileVersion=3.1.5.106
 InternalName=Measure
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2014。保留所有权利。
 LegalTrademarks=Measure
@@ -134,6 +134,9 @@ OriginalFilename=
 ProductName=纵横公路工程计量决算一体化软件
 ProductVersion=3
 Comments=
+[Excluded Packages]
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc.
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc.
 [HistoryLists\hlConditionals]
 Count=8
 Item0=_mCloud;_mEncrypt;_mGuangDong

+ 2 - 1
Dprs/Pro/Measure_GuangDong_Cloud.dpr

@@ -141,7 +141,8 @@ uses
   rmCustomized2Dm in '..\..\DataModules\ReportMemoryDm\rmCustomized2Dm.pas' {rmCustomized2Data: TDataModule},
   CalcDecimal in '..\..\Units\CalcDecimal.pas',
   BillsPasteSelectFrm in '..\..\Forms\BillsPasteSelectFrm.pas' {BillsPasteSelectForm},
-  DetailExcelImport in '..\..\Units\DetailExcelImport.pas';
+  DetailExcelImport in '..\..\Units\DetailExcelImport.pas',
+  mProgressProFrm in '..\..\Forms\mProgressProFrm.pas' {ProgressProForm};
 
 {$R *.res}
 

BIN
Dprs/Pro/Measure_GuangDong_Cloud.res


+ 2 - 2
Dprs/Pro/Measure_GuangDong_TZ.cfg

@@ -33,8 +33,8 @@
 -K$00400000
 -E"D:\SmartCostExe\Measure"
 -N"..\..\Dcus"
--LE"d:\program files (x86)\borland\delphi7\Projects\Bpl"
--LN"d:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE
 -w-UNSAFE_CAST

+ 6 - 3
Dprs/Pro/Measure_GuangDong_TZ.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=0
 MajorVer=3
 MinorVer=1
-Release=3
-Build=1050
+Release=5
+Build=105
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=
 FileDescription=
-FileVersion=3.1.3.1050
+FileVersion=3.1.5.105
 InternalName=
 LegalCopyright=
 LegalTrademarks=
@@ -134,6 +134,9 @@ OriginalFilename=
 ProductName=
 ProductVersion=1.0.0.0
 Comments=
+[Excluded Packages]
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc.
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc.
 [HistoryLists\hlUnitAliases]
 Count=1
 Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;

+ 2 - 1
Dprs/Pro/Measure_GuangDong_TZ.dpr

@@ -137,7 +137,8 @@ uses
   rmCustomized2Dm in '..\..\DataModules\ReportMemoryDm\rmCustomized2Dm.pas' {rmCustomized2Data: TDataModule},
   CalcDecimal in '..\..\Units\CalcDecimal.pas',
   BillsPasteSelectFrm in '..\..\Forms\BillsPasteSelectFrm.pas' {BillsPasteSelectForm},
-  DetailExcelImport in '..\..\Units\DetailExcelImport.pas';
+  DetailExcelImport in '..\..\Units\DetailExcelImport.pas',
+  mProgressProFrm in '..\..\Forms\mProgressProFrm.pas' {ProgressProForm};
 
 {$R *.res}
 

BIN
Dprs/Pro/Measure_GuangDong_TZ.res


+ 2 - 2
Dprs/Pro/Measure_TZ.cfg

@@ -33,8 +33,8 @@
 -K$00400000
 -E"D:\SmartCostExe\Measure"
 -N"..\..\Dcus"
--LE"d:\program files (x86)\borland\delphi7\Projects\Bpl"
--LN"d:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
 -D_mEncrypt;_mcompile;
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE

+ 6 - 3
Dprs/Pro/Measure_TZ.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=1
-Release=3
-Build=1051
+Release=5
+Build=106
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横0号台账专业版
-FileVersion=3.1.3.1051
+FileVersion=3.1.5.106
 InternalName=Measure
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2014。保留所有权利。
 LegalTrademarks=Measure
@@ -134,6 +134,9 @@ OriginalFilename=
 ProductName=纵横公路工程0号台账软件
 ProductVersion=1
 Comments=
+[Excluded Packages]
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc.
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc.
 [HistoryLists\hlConditionals]
 Count=11
 Item0=_mEncrypt;_mcompile;

+ 2 - 1
Dprs/Pro/Measure_TZ.dpr

@@ -137,7 +137,8 @@ uses
   rmCustomized2Dm in '..\..\DataModules\ReportMemoryDm\rmCustomized2Dm.pas' {rmCustomized2Data: TDataModule},
   CalcDecimal in '..\..\Units\CalcDecimal.pas',
   BillsPasteSelectFrm in '..\..\Forms\BillsPasteSelectFrm.pas' {BillsPasteSelectForm},
-  DetailExcelImport in '..\..\Units\DetailExcelImport.pas';
+  DetailExcelImport in '..\..\Units\DetailExcelImport.pas',
+  mProgressProFrm in '..\..\Forms\mProgressProFrm.pas' {ProgressProForm};
 
 {$R *.res}
 

BIN
Dprs/Pro/Measure_TZ.res


+ 2 - 2
Dprs/Trail/Measure.cfg

@@ -33,8 +33,8 @@
 -K$00400000
 -E"D:\SmartCostExe\MeasureTrail"
 -N"..\..\Dcus"
--LE"d:\program files (x86)\borland\delphi7\Projects\Bpl"
--LN"d:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE
 -w-UNSAFE_CAST

+ 6 - 3
Dprs/Trail/Measure.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=1
-Release=3
-Build=1051
+Release=5
+Build=106
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化专业版
-FileVersion=3.1.3.1051
+FileVersion=3.1.5.106
 InternalName=Measure
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2014。保留所有权利。
 LegalTrademarks=Measure
@@ -134,6 +134,9 @@ OriginalFilename=
 ProductName=纵横公路工程计量决算一体化软件
 ProductVersion=3
 Comments=
+[Excluded Packages]
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc.
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc.
 [HistoryLists\hlConditionals]
 Count=9
 Item0=_mEncrypt;cplPrint;cplOutputToExcelRange

+ 2 - 1
Dprs/Trail/Measure.dpr

@@ -137,7 +137,8 @@ uses
   rmCustomized2Dm in '..\..\DataModules\ReportMemoryDm\rmCustomized2Dm.pas' {rmCustomized2Data: TDataModule},
   CalcDecimal in '..\..\Units\CalcDecimal.pas',
   BillsPasteSelectFrm in '..\..\Forms\BillsPasteSelectFrm.pas' {BillsPasteSelectForm},
-  DetailExcelImport in '..\..\Units\DetailExcelImport.pas';
+  DetailExcelImport in '..\..\Units\DetailExcelImport.pas',
+  mProgressProFrm in '..\..\Forms\mProgressProFrm.pas' {ProgressProForm};
 
 {$R *.res}
 

BIN
Dprs/Trail/Measure.res


+ 2 - 2
Dprs/Trail/Measure_GuangDong.cfg

@@ -33,8 +33,8 @@
 -K$00400000
 -E"D:\SmartCostExe\MeasureTrail"
 -N"..\..\Dcus"
--LE"d:\program files (x86)\borland\delphi7\Projects\Bpl"
--LN"d:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
 -D_mGuangDong
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE

+ 6 - 3
Dprs/Trail/Measure_GuangDong.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=1
-Release=3
-Build=1051
+Release=5
+Build=106
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化广东学习版
-FileVersion=3.1.3.1051
+FileVersion=3.1.5.106
 InternalName=Measure
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2014。保留所有权利。
 LegalTrademarks=Measure
@@ -134,6 +134,9 @@ OriginalFilename=
 ProductName=纵横公路工程计量决算一体化软件
 ProductVersion=3
 Comments=
+[Excluded Packages]
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc.
+C:\Program Files (x86)\Borland\Delphi7\Lib\3F\Developer Express Inc\ExpressEditors Library 5\Delphi 7\Bin\dclcxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc.
 [HistoryLists\hlConditionals]
 Count=12
 Item0=_mGuangDong

+ 2 - 1
Dprs/Trail/Measure_GuangDong.dpr

@@ -137,7 +137,8 @@ uses
   rmCustomized2Dm in '..\..\DataModules\ReportMemoryDm\rmCustomized2Dm.pas' {rmCustomized2Data: TDataModule},
   CalcDecimal in '..\..\Units\CalcDecimal.pas',
   BillsPasteSelectFrm in '..\..\Forms\BillsPasteSelectFrm.pas' {BillsPasteSelectForm},
-  DetailExcelImport in '..\..\Units\DetailExcelImport.pas';
+  DetailExcelImport in '..\..\Units\DetailExcelImport.pas',
+  mProgressProFrm in '..\..\Forms\mProgressProFrm.pas' {ProgressProForm};
 
 {$R *.res}
 

BIN
Dprs/Trail/Measure_GuangDong.res


+ 1 - 1
Frames/BillsMeasureFme.dfm

@@ -333,7 +333,7 @@ object BillsMeasureFrame: TBillsMeasureFrame
         Font.Style = []
         FieldName = 'CurDealTotalPrice'
         Width = 60
-        ReadOnly = True
+        ReadOnly = False
       end
       item
         Title.Caption = #26412#26399#25968#37327#21464#26356#35745#37327'|'#25968#37327

+ 20 - 11
Frames/BillsMeasureFme.pas

@@ -185,20 +185,20 @@ end;
 procedure TBillsMeasureFrame.zgBillsMeasureCellGetColor(Sender: TObject; ACoord: TPoint;
   var AColor: TColor);
 var
-  stnNode: TsdIDTreeNode;
+  stnNode: TBillsIDTreeNode;
   iCreatePhaseID: Integer;
   StageRec: TsdDataRecord;
-  fQtyDiffer: Double;
+  fDiffer: Double;
 begin
   AColor := clWindow;
   if ACoord.Y > stdBillsMeasure.IDTree.Count + 1 then Exit;
-  stnNode := stdBillsMeasure.IDTree.Items[ACoord.Y - 2];
+  stnNode := TBillsIDTreeNode(stdBillsMeasure.IDTree.Items[ACoord.Y - 2]);
   if not Assigned(stnNode) then Exit;
-  iCreatePhaseID := stnNode.Rec.ValueByName('CreatePhaseID').AsInteger;
+  iCreatePhaseID := stnNode.Rec.CreatePhaseID.AsInteger;
   // 根据层次底色不同
   if stnNode.ParentID = 1 then
     AColor := $00FBCAC4
-  else if (stnNode.Rec.ValueByName('B_Code').AsString = '') and (stnNode.Level > 0) then
+  else if (stnNode.Rec.B_Code.AsString = '') and (stnNode.Level > 0) then
     AColor := $00F9E8DF;
   // 书签
   if TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0 then
@@ -221,10 +221,14 @@ begin
   if not stnNode.HasChildren then
   begin
     with stnNode.Rec do
-      fQtyDiffer := QuantityRoundTo(
-          ValueByName('AddDealQuantity').AsFloat - ValueByName('Quantity').AsFloat);
-    if fQtyDiffer > 0 then
-      AColor := $00646AFE;
+    begin
+      if CalcType.AsInteger = 0 then
+        fDiffer := QuantityRoundTo(AddDealQuantity.AsFloat - Quantity.AsFloat)
+      else
+        fDiffer := TotalPriceRoundTo(AddDealTotalPrice.AsFloat - TotalPrice.AsFloat);
+      if fDiffer > 0 then
+        AColor := $00646AFE;
+    end;
   end;
 end;
 
@@ -339,15 +343,20 @@ procedure TBillsMeasureFrame.zgBillsMeasureCellButtonClick(Sender: TObject;
   end;
 
 var
-  stnCurNode: TsdIDTreeNode;
+  stnCurNode: TBillsIDTreeNode;
   sType, sField: string;
 begin
-  stnCurNode := stdBillsMeasure.IDTree.Selected;
+  stnCurNode := TBillsIDTreeNode(stdBillsMeasure.IDTree.Selected);
   if stnCurNode.HasChildren then Exit;
   with TProjectData(FBillsMeasureData.ProjectData) do
     if PhaseData.StageDataReadOnly then Exit;
   GetTypeAndField(sType, sField);
   if (sType = '') or (sField = '') then Exit;
+  if stnCurNode.Rec.CalcType.AsInteger = 1 then
+  begin
+    WarningMessage('该清单不可输入数量单价,如需使用数量×单价计算,请先清空所有直接输入的金额!');
+    Exit;
+  end;
   SelectAndUpdateBGL(sType, sField, stnCurNode);
 end;
 

+ 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;