浏览代码

Merge branch 'tempCalc'

Conflicts:
	Units/ProjectData.pas
MaiXinRong 7 年之前
父节点
当前提交
e3861256da

+ 44 - 2
DataModules/BillsMeasureDm.pas

@@ -4,7 +4,7 @@ interface
 
 
 uses
 uses
   BillsDm, BillsTree, FormulaCalc, sdIDTree, StageDm,
   BillsDm, BillsTree, FormulaCalc, sdIDTree, StageDm,
-  SysUtils, Classes, sdDB, DB;
+  SysUtils, Classes, sdDB, DB, CalcDecimal;
 
 
 type 
 type 
   TLocateZJJLEvent = procedure (ABillsID: Integer) of object;
   TLocateZJJLEvent = procedure (ABillsID: Integer) of object;
@@ -48,6 +48,7 @@ type
 
 
     function GetStageData: TStageData;
     function GetStageData: TStageData;
     procedure SetOnRecChange(const Value: TRecChangeEvent);
     procedure SetOnRecChange(const Value: TRecChangeEvent);
+    function GetDecimal: TCalcDecimal;
   public
   public
     constructor Create(AProjectData: TObject);
     constructor Create(AProjectData: TObject);
     destructor Destroy; override;
     destructor Destroy; override;
@@ -56,6 +57,7 @@ type
     procedure Close;
     procedure Close;
     procedure ReConnectTree;
     procedure ReConnectTree;
 
 
+    function CheckNodeGatherCalc(ANode: TMeasureBillsIDTreeNode): Boolean;
     procedure CalculateAll;
     procedure CalculateAll;
 
 
     procedure ResetPhaseStageLink;
     procedure ResetPhaseStageLink;
@@ -81,6 +83,7 @@ type
     property ProjectData: TObject read FProjectData;
     property ProjectData: TObject read FProjectData;
     property BillsData: TBillsData read FBillsData;
     property BillsData: TBillsData read FBillsData;
     property BillsMeasureTree: TMeasureBillsIDTree read FBillsMeasureTree;
     property BillsMeasureTree: TMeasureBillsIDTree read FBillsMeasureTree;
+    property Decimal: TCalcDecimal read GetDecimal;
 
 
     property StageData: TStageData read GetStageData;
     property StageData: TStageData read GetStageData;
     property ShowParentData: Boolean read FShowParentData write FShowParentData;
     property ShowParentData: Boolean read FShowParentData write FShowParentData;
@@ -91,7 +94,7 @@ implementation
 
 
 uses
 uses
   ProjectData, PhaseData, Math, ZhAPI, BillsCommand, BGLSelectFrm,
   ProjectData, PhaseData, Math, ZhAPI, BillsCommand, BGLSelectFrm,
-  BGLDm, UtilMethods, mDataRecord, ConstUnit, Variants;
+  BGLDm, UtilMethods, mDataRecord, ConstUnit, Variants, ConditionalDefines;
 
 
 {$R *.dfm}
 {$R *.dfm}
 
 
@@ -1172,4 +1175,43 @@ begin
   end;
   end;
 end;
 end;
 
 
+function TBillsMeasureData.CheckNodeGatherCalc(
+  ANode: TMeasureBillsIDTreeNode): Boolean;
+var
+  fLeafSumDeal, fLeafSumQc, fLeafSumGather: Double;
+  i, iCount: Integer;
+  vChild: TMeasureBillsIDTreeNode;
+begin
+  if Assigned(ANode.StageRec) then
+  begin
+    fLeafSumDeal := 0;
+    fLeafSumQc := 0;
+    fLeafSumGather := 0;
+    iCount := ANode.PosterityCount;
+    i := 0;
+    vChild := TMeasureBillsIDTreeNode(ANode.NextNode);
+    while i < iCount do
+    begin
+      if not vChild.HasChildren and Assigned(vChild.StageRec) then
+      begin
+        fLeafSumDeal := fLeafSumDeal + vChild.StageRec.DealTotalPrice.AsFloat;
+        fLeafSumQc := fLeafSumQc + vChild.StageRec.QcTotalPrice.AsFloat;
+        fLeafSumGather := fLeafSumGather + vChild.StageRec.GatherTotalPrice.AsFloat;
+      end;
+      vChild := TMeasureBillsIDTreeNode(vChild.NextNode);
+      Inc(i);
+    end;
+    Result := Decimal.TotalPrice.CheckSameNum(fLeafSumDeal, ANode.StageRec.DealTotalPrice.AsFloat) and
+              Decimal.TotalPrice.CheckSameNum(fLeafSumQc, ANode.StageRec.QcTotalPrice.AsFloat) and
+              Decimal.TotalPrice.CheckSameNum(fLeafSumGather, ANode.StageRec.GatherTotalPrice.AsFloat);
+  end
+  else
+    Result := True;
+end;
+
+function TBillsMeasureData.GetDecimal: TCalcDecimal;
+begin
+  Result := TProjectData(FProjectData).ProjProperties.DecimalManager.Common;
+end;
+
 end.
 end.

+ 3 - 0
DataModules/StageDm.pas

@@ -484,12 +484,15 @@ end;
 procedure TStageData.UpdateParentRecord(ABillsID: Integer;
 procedure TStageData.UpdateParentRecord(ABillsID: Integer;
   ATotalPrice: Double; const AFieldName: string);
   ATotalPrice: Double; const AFieldName: string);
 var
 var
+  vNode: TMeasureBillsIDTreeNode;
   iParentID: Integer;
   iParentID: Integer;
   Rec: TsdDataRecord;
   Rec: TsdDataRecord;
 begin
 begin
   iParentID := MainBillsTree.FindNode(ABillsID).ParentID;
   iParentID := MainBillsTree.FindNode(ABillsID).ParentID;
   if iParentID = -1 then Exit;
   if iParentID = -1 then Exit;
+  vNode := TMeasureBillsIDTreeNode(MainBillsTree.FindNode(iParentID));
   Rec := StageRecordWithAdd(iParentID);
   Rec := StageRecordWithAdd(iParentID);
+  vNode.StageRec := TStageRecord(Rec);
   Rec.ValueByName(AFieldName).AsFloat := TotalPriceRoundTo(
   Rec.ValueByName(AFieldName).AsFloat := TotalPriceRoundTo(
       Rec.ValueByName(AFieldName).AsFloat + ATotalPrice);
       Rec.ValueByName(AFieldName).AsFloat + ATotalPrice);
   Rec.ValueByName('End' + AFieldName).AsFloat := TotalPriceRoundTo(
   Rec.ValueByName('End' + AFieldName).AsFloat := TotalPriceRoundTo(

+ 1 - 1
DataModules/ZJJLDm.dfm

@@ -3,7 +3,7 @@ object ZJJLData: TZJJLData
   Left = 704
   Left = 704
   Top = 204
   Top = 204
   Height = 241
   Height = 241
-  Width = 281
+  Width = 283
   object sdpZJJL: TsdADOProvider
   object sdpZJJL: TsdADOProvider
     TableName = 'ZJJL'
     TableName = 'ZJJL'
     Left = 42
     Left = 42

+ 30 - 0
DataModules/ZJJLDm.pas

@@ -111,6 +111,8 @@ type
     function GetInfoRecByB_Code(ABillsID: Integer): TZJJLInfoRec;
     function GetInfoRecByB_Code(ABillsID: Integer): TZJJLInfoRec;
     function GetInfoRec(ABillsID, AType: Integer): TZJJLInfoRec;
     function GetInfoRec(ABillsID, AType: Integer): TZJJLInfoRec;
 
 
+    function GetZJJLCalcData(ARec: TsdDataRecord; const AFileName: string): Double;
+
     procedure LocateBills;
     procedure LocateBills;
     function FindZJJLRecord(ABillsID: Integer): TsdDataRecord;
     function FindZJJLRecord(ABillsID: Integer): TsdDataRecord;
 
 
@@ -167,6 +169,7 @@ begin
 
 
   sdpZJJLDetail.Connection := AConnection;
   sdpZJJLDetail.Connection := AConnection;
   sddZJJLDetail.Open;
   sddZJJLDetail.Open;
+  sddZJJLDetail.AddIndex('idxID', 'ID');
 
 
   CheckZjjlVerison;
   CheckZjjlVerison;
 end;
 end;
@@ -453,6 +456,10 @@ begin
   Rec.ValueByName('UnitName').AsString := GetFieldValue('UnitName', vInfoRec.UnitName);
   Rec.ValueByName('UnitName').AsString := GetFieldValue('UnitName', vInfoRec.UnitName);
   Rec.ValueByName('DrawingCode').AsString := GetFieldValue('DrawingCode', vInfoRec.DrawingCode);
   Rec.ValueByName('DrawingCode').AsString := GetFieldValue('DrawingCode', vInfoRec.DrawingCode);
 
 
+  Rec := sddZJJLDetail.Add;
+  Rec.ValueByName('ID').AsInteger := FNewID;
+  Rec.ValueByName('BillsID').AsInteger := ANode.ID;
+
   Inc(FNewID);
   Inc(FNewID);
 end;
 end;
 
 
@@ -936,4 +943,27 @@ begin
     FRefreshDetailGrid;
     FRefreshDetailGrid;
 end;
 end;
 
 
+function TZJJLData.GetZJJLCalcData(ARec: TsdDataRecord;
+  const AFileName: string): Double;
+var
+  vIdx: TsdIndex;
+  iBegin, iEnd, i: Integer;
+  vRec, vStageRec: TsdDataRecord;
+begin
+  Result := 0;
+  vIdx := sddZJJLDetail.FindIndex('idxID');
+  iBegin := vIdx.FindKeyIndex(ARec.ValueByName('ID').AsInteger);
+  iEnd := vIdx.FindKeyLastIndex(ARec.ValueByName('ID').AsInteger);
+  if iBegin <> -1 then
+  begin
+    for i := iBegin to iEnd do
+    begin
+      vRec := vIdx.Records[i];
+      vStageRec := TPhaseData(FPhaseData).StageData.StageRecord(vRec.ValueByName('BillsID').AsInteger);
+      if Assigned(vStageRec) then
+        Result := QuantityRoundTo(Result + vStageRec.ValueByName(AFileName).AsFloat);
+    end;
+  end;
+end;
+
 end.
 end.

+ 2 - 2
Dprs/Pro/Measure.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=3
 MajorVer=3
 MinorVer=1
 MinorVer=1
 Release=7
 Release=7
-Build=2101
+Build=2102
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化专业版
 FileDescription=纵横结算决算计量一体化专业版
-FileVersion=3.1.7.2101
+FileVersion=3.1.7.2102
 InternalName=
 InternalName=
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalTrademarks=Measure
 LegalTrademarks=Measure

二进制
Dprs/Pro/Measure.res


+ 2 - 2
Dprs/Pro/Measure_Cloud.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=3
 MajorVer=3
 MinorVer=1
 MinorVer=1
 Release=7
 Release=7
-Build=2101
+Build=2102
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化云版
 FileDescription=纵横结算决算计量一体化云版
-FileVersion=3.1.7.2101
+FileVersion=3.1.7.2102
 InternalName=
 InternalName=
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalTrademarks=Measure
 LegalTrademarks=Measure

二进制
Dprs/Pro/Measure_Cloud.res


+ 2 - 2
Dprs/Pro/Measure_GuangDong.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=3
 MajorVer=3
 MinorVer=1
 MinorVer=1
 Release=7
 Release=7
-Build=2101
+Build=2102
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化广东专业版
 FileDescription=纵横结算决算计量一体化广东专业版
-FileVersion=3.1.7.2101
+FileVersion=3.1.7.2102
 InternalName=
 InternalName=
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalTrademarks=Measure
 LegalTrademarks=Measure

二进制
Dprs/Pro/Measure_GuangDong.res


+ 2 - 2
Dprs/Pro/Measure_GuangDong_Cloud.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=3
 MajorVer=3
 MinorVer=1
 MinorVer=1
 Release=7
 Release=7
-Build=2101
+Build=2102
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化广东云版
 FileDescription=纵横结算决算计量一体化广东云版
-FileVersion=3.1.7.2101
+FileVersion=3.1.7.2102
 InternalName=
 InternalName=
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalTrademarks=Measure
 LegalTrademarks=Measure

二进制
Dprs/Pro/Measure_GuangDong_Cloud.res


+ 2 - 2
Dprs/Pro/Measure_GuangDong_TZ.dof

@@ -115,7 +115,7 @@ AutoIncBuild=0
 MajorVer=3
 MajorVer=3
 MinorVer=1
 MinorVer=1
 Release=7
 Release=7
-Build=2100
+Build=2101
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横0号台账广东专业版
 FileDescription=纵横0号台账广东专业版
-FileVersion=3.1.7.2100
+FileVersion=3.1.7.2101
 InternalName=
 InternalName=
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalTrademarks=Measure
 LegalTrademarks=Measure

二进制
Dprs/Pro/Measure_GuangDong_TZ.res


+ 2 - 2
Dprs/Pro/Measure_TZ.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=3
 MajorVer=3
 MinorVer=1
 MinorVer=1
 Release=7
 Release=7
-Build=2101
+Build=2102
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横0号台账专业版
 FileDescription=纵横0号台账专业版
-FileVersion=3.1.7.2101
+FileVersion=3.1.7.2102
 InternalName=
 InternalName=
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalTrademarks=Measure
 LegalTrademarks=Measure

二进制
Dprs/Pro/Measure_TZ.res


+ 2 - 2
Dprs/Trail/Measure.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=3
 MajorVer=3
 MinorVer=1
 MinorVer=1
 Release=7
 Release=7
-Build=2101
+Build=2102
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化学习版
 FileDescription=纵横结算决算计量一体化学习版
-FileVersion=3.1.7.2101
+FileVersion=3.1.7.2102
 InternalName=
 InternalName=
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalTrademarks=Measure
 LegalTrademarks=Measure

二进制
Dprs/Trail/Measure.res


+ 2 - 2
Dprs/Trail/Measure_GuangDong.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=3
 MajorVer=3
 MinorVer=1
 MinorVer=1
 Release=7
 Release=7
-Build=2101
+Build=2102
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化广东学习版
 FileDescription=纵横结算决算计量一体化广东学习版
-FileVersion=3.1.7.2101
+FileVersion=3.1.7.2102
 InternalName=
 InternalName=
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalCopyright=版权所有(C)珠海纵横创新软件有限公司2003-2016
 LegalTrademarks=Measure
 LegalTrademarks=Measure

二进制
Dprs/Trail/Measure_GuangDong.res


+ 1 - 1
Forms/MainFrm.dfm

@@ -637,7 +637,7 @@ object MainForm: TMainForm
       Caption = #20840#37096#35745#31639
       Caption = #20840#37096#35745#31639
       Category = 0
       Category = 0
       Hint = #20840#37096#35745#31639
       Hint = #20840#37096#35745#31639
-      Visible = ivNever
+      Visible = ivAlways
       ImageIndex = 15
       ImageIndex = 15
     end
     end
     object dxbtnNewSubProject: TdxBarButton
     object dxbtnNewSubProject: TdxBarButton

+ 1 - 1
Forms/ReportsFrm.dfm

@@ -296,7 +296,7 @@ object ReportsForm: TReportsForm
     Font.Charset = DEFAULT_CHARSET
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Color = clWindowText
     Font.Height = -12
     Font.Height = -12
-    Font.Name = #24494#36719#38597#40657
+    Font.Name = 'Microsoft YaHei UI'
     Font.Style = []
     Font.Style = []
     Bars = <
     Bars = <
       item
       item

+ 3 - 1
Forms/ReportsFrm.pas

@@ -125,7 +125,7 @@ type
     function GetClassNode(ANode: TTemplateNode): TExTreeNode;
     function GetClassNode(ANode: TTemplateNode): TExTreeNode;
     function GetSubClassNode(AClassNode: TExTreeNode; ANode: TTemplateNode): TExTreeNode;
     function GetSubClassNode(AClassNode: TExTreeNode; ANode: TTemplateNode): TExTreeNode;
     procedure AddReportTemplate(ANode: TTemplateNode);
     procedure AddReportTemplate(ANode: TTemplateNode);
-	procedure LoadReportTemplets;
+  	procedure LoadReportTemplets;
 
 
     procedure SaveAuditOpinion(ATemplate: TTemplateNode);
     procedure SaveAuditOpinion(ATemplate: TTemplateNode);
     procedure SaveReportInteractData(ATemplate: TTemplateNode);
     procedure SaveReportInteractData(ATemplate: TTemplateNode);
@@ -202,6 +202,8 @@ begin
   ReportsForm.InitReportSettings(ReportsForm.PreviewComXML);
   ReportsForm.InitReportSettings(ReportsForm.PreviewComXML);
   ReportsForm.InitFormView;
   ReportsForm.InitFormView;
   try
   try
+    if not _IsDebugView then
+      ReportsForm.extvReport.OnKeyDown := nil;
     ReportsForm.ShowModal;
     ReportsForm.ShowModal;
   finally
   finally
     ReportsForm.Free;
     ReportsForm.Free;

+ 5 - 1
Frames/BillsCompileFme.pas

@@ -121,7 +121,8 @@ implementation
 
 
 uses
 uses
   MainFrm, BatchInsertBillsFrm, ExportExcel, ProjectData, mEncryptEditions,
   MainFrm, BatchInsertBillsFrm, ExportExcel, ProjectData, mEncryptEditions,
-  ExcelImport, DetailExcelImport, mDataRecord, ExcelImport_GclBills;
+  ExcelImport, DetailExcelImport, mDataRecord, ExcelImport_GclBills,
+  ConditionalDefines;
 
 
 {$R *.dfm}
 {$R *.dfm}
 
 
@@ -238,6 +239,9 @@ begin
   end;
   end;
   zgBillsCompile.OnExpandMouseDown := ExpandMouseDown;
   zgBillsCompile.OnExpandMouseDown := ExpandMouseDown;
   FBillsCompileData.RefreshRow := RefreshTreeRow;
   FBillsCompileData.RefreshRow := RefreshTreeRow;
+  
+  if not _IsDebugView then
+    zgBillsCompile.OnKeyDown := nil;
 end;
 end;
 
 
 destructor TBillsCompileFrame.Destroy;
 destructor TBillsCompileFrame.Destroy;

+ 1 - 1
Frames/BillsMeasureFme.dfm

@@ -1132,8 +1132,8 @@ object BillsMeasureFrame: TBillsMeasureFrame
     object actnCalculateAll: TAction
     object actnCalculateAll: TAction
       Caption = #20840#37096#35745#31639
       Caption = #20840#37096#35745#31639
       ImageIndex = 15
       ImageIndex = 15
-      Visible = False
       OnExecute = actnCalculateAllExecute
       OnExecute = actnCalculateAllExecute
+      OnUpdate = actnCalculateAllUpdate
     end
     end
     object actnExportGridToExcel: TAction
     object actnExportGridToExcel: TAction
       Caption = #23548#20986#34920#26684#25968#25454
       Caption = #23548#20986#34920#26684#25968#25454

+ 9 - 0
Frames/BillsMeasureFme.pas

@@ -60,6 +60,7 @@ type
     procedure actnCancelHiddenColExecute(Sender: TObject);
     procedure actnCancelHiddenColExecute(Sender: TObject);
     procedure actnLocateZJJLExecute(Sender: TObject);
     procedure actnLocateZJJLExecute(Sender: TObject);
     procedure actnLocateZJJLUpdate(Sender: TObject);
     procedure actnLocateZJJLUpdate(Sender: TObject);
+    procedure actnCalculateAllUpdate(Sender: TObject);
   private
   private
     FBillsMeasureData: TBillsMeasureData;
     FBillsMeasureData: TBillsMeasureData;
     FShowPriceChange: Boolean;
     FShowPriceChange: Boolean;
@@ -143,6 +144,8 @@ begin
   zgBillsMeasure.OnExpandMouseDown := ExpandMouseDown;
   zgBillsMeasure.OnExpandMouseDown := ExpandMouseDown;
 
 
   FColVisibleManager := TBM_ColVisibleManager.Create(stdBillsMeasure);
   FColVisibleManager := TBM_ColVisibleManager.Create(stdBillsMeasure);
+  if not _IsDebugView then
+    zgBillsMeasure.OnKeyDown := nil;
 end;
 end;
 
 
 destructor TBillsMeasureFrame.Destroy;
 destructor TBillsMeasureFrame.Destroy;
@@ -801,4 +804,10 @@ begin
   FColVisibleManager.ShowIsGather(FShowIsGather);
   FColVisibleManager.ShowIsGather(FShowIsGather);
 end;
 end;
 
 
+procedure TBillsMeasureFrame.actnCalculateAllUpdate(Sender: TObject);
+begin
+  with TProjectData(FBillsMeasureData.ProjectData) do
+  TAction(Sender).Enabled := PhaseData.Active and not PhaseData.StageDataReadOnly;
+end;
+
 end.
 end.

+ 3 - 1
Frames/OtherMeasureFme.pas

@@ -40,7 +40,7 @@ type
 implementation
 implementation
 
 
 uses
 uses
-  OtherMeasurePhaseDm, sdDB;
+  OtherMeasurePhaseDm, sdDB, ConditionalDefines;
 
 
 {$R *.dfm}
 {$R *.dfm}
 
 
@@ -50,6 +50,8 @@ begin
   FProjectData := AProjectData;
   FProjectData := AProjectData;
   saPhase.DataView := FProjectData.OtherMeasurePhaseData.sdvPhase;
   saPhase.DataView := FProjectData.OtherMeasurePhaseData.sdvPhase;
   saOnce.DataView := FProjectData.OtherMeasureOnceData.sdvOnce;
   saOnce.DataView := FProjectData.OtherMeasureOnceData.sdvOnce;
+  if not _IsDebugView then
+    zgPhase.OnKeyDown := nil;
 end;
 end;
 
 
 destructor TOtherMeasureFrame.Destroy;
 destructor TOtherMeasureFrame.Destroy;

+ 29 - 5
Frames/ZJJLFme.pas

@@ -9,12 +9,12 @@ uses
   ToolWin, ActnList, ZjGridDBA, ZJGrid, dxBar, sdGridDBA, sdDB;
   ToolWin, ActnList, ZjGridDBA, ZJGrid, dxBar, sdGridDBA, sdDB;
 
 
 type
 type
-  TRowIndex = (riBGLCode, riPegName, riBeginPeg, riEndPeg, riFBFXName, riUnitName, riDrawingCode,
+  TRowIndex = (riCurGatherMeasure, riBGLCode, riPegName, riBeginPeg, riEndPeg, riFBFXName, riUnitName, riDrawingCode,
     riFormulaMemoTitle, riFormulaMemoValue, riRelaFileTitle, riRelaFileValue);
     riFormulaMemoTitle, riFormulaMemoValue, riRelaFileTitle, riRelaFileValue);
 const
 const
-  RowFields: array [TRowIndex] of string = ('BGLCode', 'PegName', 'BeginPeg', 'EndPeg', 'FBFXName', 'UnitName', 'DrawingCode',
+  RowFields: array [TRowIndex] of string = ('', 'BGLCode', 'PegName', 'BeginPeg', 'EndPeg', 'FBFXName', 'UnitName', 'DrawingCode',
     '', 'FormulaMemo', '', 'RelaFile');
     '', 'FormulaMemo', '', 'RelaFile');
-  RowFormats: array [TRowIndex] of string = ('变更令号:', '部位:', '起始桩号:', '终止桩号:', '分部分项工程:', '计量单元:', '图号:',
+  RowFormats: array [TRowIndex] of string = ('本期计量%s:%s', '变更令号:', '部位:', '起始桩号:', '终止桩号:', '分部分项工程:', '计量单元:', '图号:',
     '计算式说明:', '', '计算草图几何尺寸:', '');
     '计算式说明:', '', '计算草图几何尺寸:', '');
 type
 type
   TZJJLFrame = class(TFrame)
   TZJJLFrame = class(TFrame)
@@ -93,6 +93,7 @@ uses
 constructor TZJJLFrame.Create(AParent: TFrame; AZJJLData: TZJJLData);
 constructor TZJJLFrame.Create(AParent: TFrame; AZJJLData: TZJJLData);
 begin
 begin
   inherited Create(AParent);
   inherited Create(AParent);
+  zgDetailInfo.RowCount := Integer(riRelaFileValue) + 1;
   ResetFrameLink(AZJJLData);
   ResetFrameLink(AZJJLData);
   if TPhaseData(FZJJLData.PhaseData).Active then
   if TPhaseData(FZJJLData.PhaseData).Active then
   begin
   begin
@@ -266,8 +267,31 @@ procedure TZJJLFrame.zgDetailInfoGetCellText(Sender: TObject;
       Result := GetDefaultValue(Rec, RowFields[ARow]);
       Result := GetDefaultValue(Rec, RowFields[ARow]);
   end;
   end;
 
 
+  function GetFloatStr(ANum: Double): string;
+  begin
+    if ANum = 0 then
+      Result := ''
+    else
+      Result := FloatToStr(ANum);
+  end;
+
+  function GetCurGatherMeasure: string;
+  var
+    Rec: TsdDataRecord;
+  begin
+    Rec := saZJJL.DataView.Current;
+    if not Assigned(Rec) then
+      Result := Format(RowFormats[riCurGatherMeasure], ['', ''])
+    else if Rec.ValueByName('Type').AsInteger = Integer(ztFx) then
+      Result := Format(RowFormats[riCurGatherMeasure], ['金额', GetFloatStr(FZJJLData.GetZJJLCalcData(Rec, 'GatherTotalPrice'))])
+    else
+      Result := Format(RowFormats[riCurGatherMeasure], ['数量', GetFloatStr(FZJJLData.GetZJJLCalcData(Rec, 'GatherQuantity'))]);
+  end;
+
 begin
 begin
-  if (ACoord.Y >= 0) and (ACoord.Y <= 10) then
+  if (ACoord.Y = Integer(riCurGatherMeasure)) then
+    Value := GetCurGatherMeasure
+  else if (ACoord.Y > Integer(riCurGatherMeasure)) and (ACoord.Y <= Integer(riRelaFileValue)) then
     Value := GetText(TRowIndex(ACoord.Y));
     Value := GetText(TRowIndex(ACoord.Y));
 end;
 end;
 
 
@@ -280,7 +304,7 @@ begin
     zgDetailInfo[0, iRowIndex].Align := gaTopLeft;
     zgDetailInfo[0, iRowIndex].Align := gaTopLeft;
   zgDetailInfo.RowHeights[Integer(riFormulaMemoValue)] := 57;
   zgDetailInfo.RowHeights[Integer(riFormulaMemoValue)] := 57;
   zgDetailInfo.Cells[0, Integer(riFormulaMemoValue)].Align := gaTopLeft;
   zgDetailInfo.Cells[0, Integer(riFormulaMemoValue)].Align := gaTopLeft;
-  zgDetailInfo.RowHeights[Integer(riRelaFileValue)] := 57;              
+  zgDetailInfo.RowHeights[Integer(riRelaFileValue)] := 57;
   zgDetailInfo.Cells[0, Integer(riRelaFileValue)].Align := gaTopLeft;
   zgDetailInfo.Cells[0, Integer(riRelaFileValue)].Align := gaTopLeft;
 end;
 end;
 
 

+ 7 - 1
Units/CalcDecimal.pas

@@ -23,6 +23,7 @@ type
 
 
     function RoundTo(AValue: Double): Double;
     function RoundTo(AValue: Double): Double;
     function StrRoundTo(const AValue: string): string;
     function StrRoundTo(const AValue: string): string;
+    function CheckSameNum(AValue1, AValue2: Double): Boolean;
 
 
     procedure ClearLinkViewCols;
     procedure ClearLinkViewCols;
     procedure AddLinkViewCol(ACol: TObject);
     procedure AddLinkViewCol(ACol: TObject);
@@ -78,7 +79,7 @@ type
 implementation
 implementation
 
 
 uses
 uses
-  ProjectData, UtilMethods, SysUtils;
+  ProjectData, UtilMethods, SysUtils, Math;
 
 
 { TDecimal }
 { TDecimal }
 
 
@@ -87,6 +88,11 @@ begin
   FLinkViewCols.Add(ACol);
   FLinkViewCols.Add(ACol);
 end;
 end;
 
 
+function TDecimal.CheckSameNum(AValue1, AValue2: Double): Boolean;
+begin
+  Result := Abs(RoundTo(AValue1 - AValue2)) < CompareValue;
+end;
+
 procedure TDecimal.ClearLinkViewCols;
 procedure TDecimal.ClearLinkViewCols;
 begin
 begin
   FLinkViewCols.Clear;
   FLinkViewCols.Clear;

+ 1 - 1
Units/DetailExcelImport.pas

@@ -128,7 +128,7 @@ function TDetailExcelImport.GetCellStr(ARow: TExportRow;
   ACol: Integer): string;
   ACol: Integer): string;
 begin
 begin
   if (ACol < ARow.Cells.Count) and (ACol >= 0) then
   if (ACol < ARow.Cells.Count) and (ACol >= 0) then
-    Result := ARow.Cells[ACol].SqlText
+    Result := TrimInvalidChar(ARow.Cells[ACol].SqlText)
   else
   else
     Result := '';
     Result := '';
 end;
 end;

+ 40 - 0
Units/ProjectData.pas

@@ -88,6 +88,7 @@ type
     procedure CloseAllData;
     procedure CloseAllData;
     procedure OpenAllData;
     procedure OpenAllData;
 
 
+    procedure CheckCalcBeforeSave;
     procedure InnerSave;
     procedure InnerSave;
 
 
     procedure LoadCheckersData;
     procedure LoadCheckersData;
@@ -275,7 +276,11 @@ uses
   ZJJLDm, PHPWebDm, XMLDoc, XMLIntf, ConstUnit, PasswordInputFrm,
   ZJJLDm, PHPWebDm, XMLDoc, XMLIntf, ConstUnit, PasswordInputFrm,
   mProgressProFrm, mDataRecord, ConditionalDefines, DbTreeImport,
   mProgressProFrm, mDataRecord, ConditionalDefines, DbTreeImport,
   StrUtils, sdProvider, CalcDecimal, Math, CslJson, OrderCheckerFme,
   StrUtils, sdProvider, CalcDecimal, Math, CslJson, OrderCheckerFme,
+<<<<<<< HEAD
   stgSubGatherFile;
   stgSubGatherFile;
+=======
+  Forms, ProgressHintFrm, BillsTree, Controls;
+>>>>>>> tempCalc
 
 
 { TProjectData }
 { TProjectData }
 
 
@@ -2131,6 +2136,8 @@ begin
   try
   try
     AppendProjectLog('Save Main Data');
     AppendProjectLog('Save Main Data');
 
 
+    CheckCalcBeforeSave;
+
     UpdateSysProgress(5, '正在保存数据');
     UpdateSysProgress(5, '正在保存数据');
     SaveLastestPhaseMainData;
     SaveLastestPhaseMainData;
     UpdateSysProgress(10, '正在保存数据');
     UpdateSysProgress(10, '正在保存数据');
@@ -2217,6 +2224,7 @@ begin
   end
   end
 end;
 end;
 
 
+<<<<<<< HEAD
 procedure TProjectData.OpenForSumUpBase(const AFileName: string);
 procedure TProjectData.OpenForSumUpBase(const AFileName: string);
 begin
 begin
   FProjectID := -1;
   FProjectID := -1;
@@ -2247,6 +2255,38 @@ begin
   finally
   finally
     CalculateAll;
     CalculateAll;
     vImportor.Free;
     vImportor.Free;
+=======
+procedure TProjectData.CheckCalcBeforeSave;
+
+  function NeedReCalc: Boolean;
+  var
+    vTopNode: TsdIDTreeNode;
+  begin
+    Result := False;
+    vTopNode := BillsMeasureData.BillsMeasureTree.FirstNode;
+    while not Result and Assigned(vTopNode) do
+    begin
+      if not BillsMeasureData.CheckNodeGatherCalc(TMeasureBillsIDTreeNode(vTopNode)) then
+        Result := True;
+      vTopNode := vTopNode.NextSibling;
+    end;
+  end;
+
+var
+  i: Integer;
+  fLeafSum, fTopParent: Double;
+begin
+  if PhaseData.Active and (not StageDataReadOnly) and NeedReCalc then
+  begin
+    Screen.Cursor := crHourGlass;
+    try
+      ShowProgressHint('检查到有需要计算的清单,请稍候...');
+      CalculateAll;
+      CloseProgressHint;
+    finally
+      Screen.Cursor := crDefault;
+    end;
+>>>>>>> tempCalc
   end;
   end;
 end;
 end;
 
 

+ 14 - 0
Units/UtilMethods.pas

@@ -63,6 +63,7 @@ type
   function CheckPeg(const AStr: string): Boolean;
   function CheckPeg(const AStr: string): Boolean;
   function CheckValidPassword(APassword: string): Boolean;
   function CheckValidPassword(APassword: string): Boolean;
   function ValidInteger(var AKey: Char): Boolean;
   function ValidInteger(var AKey: Char): Boolean;
+  function TrimInvalidChar(const AText: string): string;
 
 
   {MergeStrings}
   {MergeStrings}
   function MergeRelaBGL(const ABGLCode1, ABGLCode2: string): string;
   function MergeRelaBGL(const ABGLCode1, ABGLCode2: string): string;
@@ -684,6 +685,19 @@ begin
   end;
   end;
 end;
 end;
 
 
+function TrimInvalidChar(const AText: string): string;
+var
+  i, iLength: Integer;
+begin
+  Result := '';
+  iLength := Length(AText);
+  for i := 1 to iLength do
+  begin
+    if not (AText[i] in [#0]) then
+      Result := Result + AText[i];
+  end;
+end;
+
 {MergeStrings}
 {MergeStrings}
 function MergeRelaBGL(const ABGLCode1, ABGLCode2: string): string;
 function MergeRelaBGL(const ABGLCode1, ABGLCode2: string): string;
 var
 var