ソースを参照

Merge branch '3.1.3.3' of http://192.168.1.12:3000/MaiXinRong/Measure into 3.1.3.3

CSL 9 年 前
コミット
13bde42eb6

+ 156 - 2
DataModules/ReportMemoryDm/rmBillsGatherDm.dfm

@@ -134,6 +134,84 @@ object rmBillsGatherData: TrmBillsGatherData
       item
         Name = 'AddRatioPercent'
         DataType = ftFloat
+      end
+      item
+        Name = 'DealDgnQuantity1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DealDgnQuantity2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DealDgnQuantity'
+        DataType = ftString
+        Size = 50
+      end
+      item
+        Name = 'DealDgnPrice1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DealDgnPrice2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'DealDgnPrice'
+        DataType = ftString
+        Size = 50
+      end
+      item
+        Name = 'CDgnQuantity1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'CDgnQuantity2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'CDgnQuantity'
+        DataType = ftString
+        Size = 50
+      end
+      item
+        Name = 'CDgnPrice1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'CDgnPrice2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'CDgnPrice'
+        DataType = ftString
+        Size = 50
+      end
+      item
+        Name = 'FinalDgnQuantity1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'FinalDgnQuantity2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'FinalDgnQuantity'
+        DataType = ftString
+        Size = 50
+      end
+      item
+        Name = 'FinalDgnPrice1'
+        DataType = ftFloat
+      end
+      item
+        Name = 'FinalDgnPrice2'
+        DataType = ftFloat
+      end
+      item
+        Name = 'FinalDgnPrice'
+        DataType = ftString
+        Size = 50
       end>
     IndexDefs = <>
     Params = <>
@@ -141,7 +219,7 @@ object rmBillsGatherData: TrmBillsGatherData
     Left = 32
     Top = 24
     Data = {
-      CD0200009619E0BD01000000180000001D000000000003000000CD0209586961
+      AA0400009619E0BD01000000180000002F000000000003000000AA0409586961
       6E67436F64650100490000000100055749445448020002000A00064D75436F64
       650100490000000100055749445448020002000A00074A6965436F6465010049
       0000000100055749445448020002000A000858694D75436F6465010049000000
@@ -163,7 +241,22 @@ object rmBillsGatherData: TrmBillsGatherData
       000944676E50726963653208000400000000000944676E507269636531080004
       00000000000844676E5072696365010049000000010005574944544802000200
       32000C526174696F50657263656E7408000400000000000F416464526174696F
-      50657263656E7408000400000000000000}
+      50657263656E740800040000000000104465616C44676E5175616E7469747931
+      0800040000000000104465616C44676E5175616E746974793208000400000000
+      000F4465616C44676E5175616E74697479010049000000010005574944544802
+      00020032000D4465616C44676E50726963653108000400000000000D4465616C
+      44676E50726963653208000400000000000C4465616C44676E50726963650100
+      4900000001000557494454480200020032000D4344676E5175616E7469747931
+      08000400000000000D4344676E5175616E746974793208000400000000000C43
+      44676E5175616E7469747901004900000001000557494454480200020032000A
+      4344676E50726963653108000400000000000A4344676E507269636532080004
+      0000000000094344676E50726963650100490000000100055749445448020002
+      0032001146696E616C44676E5175616E74697479310800040000000000114669
+      6E616C44676E5175616E746974793208000400000000001046696E616C44676E
+      5175616E7469747901004900000001000557494454480200020032000E46696E
+      616C44676E50726963653108000400000000000E46696E616C44676E50726963
+      653208000400000000000D46696E616C44676E50726963650100490000000100
+      0557494454480200020032000000}
     object cdsFxBillsXiangCode: TStringField
       FieldName = 'XiangCode'
       Size = 10
@@ -261,6 +354,67 @@ object rmBillsGatherData: TrmBillsGatherData
     object cdsFxBillsAddRatioPercent: TFloatField
       FieldName = 'AddRatioPercent'
     end
+    object cdsFxBillsDealDgnQuantity1: TFloatField
+      FieldName = 'DealDgnQuantity1'
+    end
+    object cdsFxBillsDealDgnQuantity2: TFloatField
+      FieldName = 'DealDgnQuantity2'
+    end
+    object cdsFxBillsDealDgnQuantity: TStringField
+      FieldName = 'DealDgnQuantity'
+      Size = 50
+    end
+    object cdsFxBillsDealDgnPrice1: TFloatField
+      FieldName = 'DealDgnPrice1'
+    end
+    object cdsFxBillsDealDgnPrice2: TFloatField
+      FieldName = 'DealDgnPrice2'
+    end
+    object cdsFxBillsDealDgnPrice: TStringField
+      FieldName = 'DealDgnPrice'
+      Size = 50
+    end
+    object cdsFxBillsCDgnQuantity1: TFloatField
+      FieldName = 'CDgnQuantity1'
+    end
+    object cdsFxBillsCDgnQuantity2: TFloatField
+      FieldName = 'CDgnQuantity2'
+    end
+    object cdsFxBillsCDgnQuantity: TStringField
+      FieldName = 'CDgnQuantity'
+      Size = 50
+    end
+    object cdsFxBillsCDgnPrice1: TFloatField
+      FieldName = 'CDgnPrice1'
+    end
+    object cdsFxBillsCDgnPrice2: TFloatField
+      FieldName = 'CDgnPrice2'
+    end
+    object cdsFxBillsCDgnPrice: TStringField
+      FieldName = 'CDgnPrice'
+      Size = 50
+    end
+    object cdsFxBillsFinalDgnQuantity1: TFloatField
+      FieldName = 'FinalDgnQuantity1'
+    end
+    object cdsFxBillsFinalDgnQuantity2: TFloatField
+      FieldName = 'FinalDgnQuantity2'
+    end
+    object cdsFxBillsFinalDgnQuantity: TStringField
+      DisplayWidth = 50
+      FieldName = 'FinalDgnQuantity'
+      Size = 50
+    end
+    object cdsFxBillsFinalDgnPrice1: TFloatField
+      FieldName = 'FinalDgnPrice1'
+    end
+    object cdsFxBillsFinalDgnPrice2: TFloatField
+      FieldName = 'FinalDgnPrice2'
+    end
+    object cdsFxBillsFinalDgnPrice: TStringField
+      FieldName = 'FinalDgnPrice'
+      Size = 50
+    end
   end
   object cdsGclBills: TClientDataSet
     Active = True

+ 39 - 0
DataModules/ReportMemoryDm/rmBillsGatherDm.pas

@@ -70,6 +70,24 @@ type
     cdsFxBillsDgnPrice: TStringField;
     cdsFxBillsRatioPercent: TFloatField;
     cdsFxBillsAddRatioPercent: TFloatField;
+    cdsFxBillsDealDgnQuantity1: TFloatField;
+    cdsFxBillsDealDgnQuantity2: TFloatField;
+    cdsFxBillsDealDgnQuantity: TStringField;
+    cdsFxBillsDealDgnPrice1: TFloatField;
+    cdsFxBillsDealDgnPrice2: TFloatField;
+    cdsFxBillsDealDgnPrice: TStringField;
+    cdsFxBillsCDgnQuantity1: TFloatField;
+    cdsFxBillsCDgnQuantity2: TFloatField;
+    cdsFxBillsCDgnQuantity: TStringField;
+    cdsFxBillsCDgnPrice1: TFloatField;
+    cdsFxBillsCDgnPrice2: TFloatField;
+    cdsFxBillsCDgnPrice: TStringField;
+    cdsFxBillsFinalDgnQuantity1: TFloatField;
+    cdsFxBillsFinalDgnQuantity2: TFloatField;
+    cdsFxBillsFinalDgnQuantity: TStringField;
+    cdsFxBillsFinalDgnPrice1: TFloatField;
+    cdsFxBillsFinalDgnPrice2: TFloatField;
+    cdsFxBillsFinalDgnPrice: TStringField;
     // ¾öËã05-2
     cdsGclBills: TClientDataSet;
     cdsGclBillsB_Code: TStringField;
@@ -646,6 +664,27 @@ begin
     cdsFxBillsDgnPrice2.AsFloat := PriceRoundTo(ANode.TotalPrice/ANode.DesignQuantity2);
   if cdsFxBillsDgnPrice1.AsFloat <> 0 then
     cdsFxBillsDgnPrice.AsString := GetDgnQuantity(cdsFxBillsDgnPrice1.AsFloat, cdsFxBillsDgnPrice2.AsFloat);
+
+  cdsFxBillsDealDgnQuantity1.AsFloat := ANode.DealDesignQuantity1;
+  cdsFxBillsDealDgnQuantity2.AsFloat := ANode.DealDesignQuantity2;
+  cdsFxBillsDealDgnQuantity.AsString := GetDgnQuantity(ANode.DealDesignQuantity1, ANode.DesignQuantity2);
+  cdsFxBillsDealDgnPrice1.AsFloat := GetDgnPrice(cdsFxBillsAddDealTotalPrice.AsFloat, cdsFxBillsDealDgnQuantity1.AsFloat);
+  cdsFxBillsDealDgnPrice2.AsFloat := GetDgnPrice(cdsFxBillsAddDealTotalPrice.AsFloat, cdsFxBillsDealDgnQuantity2.AsFloat);
+  cdsFxBillsDealDgnPrice.AsString := GetDgnQuantity(cdsFxBillsDealDgnPrice1.AsFloat, cdsFxBillsDealDgnPrice2.AsFloat);
+
+  cdsFxBillsCDgnQuantity1.AsFloat := ANode.CDesignQuantity1;
+  cdsFxBillsCDgnQuantity2.AsFloat := ANode.CDesignQuantity2;
+  cdsFxBillsCDgnQuantity.AsString := GetDgnQuantity(ANode.CDesignQuantity1, ANode.CDesignQuantity2);
+  cdsFxBillsCDgnPrice1.AsFloat := GetDgnPrice(cdsFxBillsAddQcTotalPrice.AsFloat, cdsFxBillsCDgnQuantity1.AsFloat);
+  cdsFxBillsCDgnPrice2.AsFloat := GetDgnPrice(cdsFxBillsAddQcTotalPrice.AsFloat, cdsFxBillsCDgnQuantity2.AsFloat);
+  cdsFxBillsCDgnPrice.AsString := GetDgnQuantity(cdsFxBillsCDgnPrice1.AsFloat, cdsFxBillsCDgnPrice2.AsFloat);
+
+  cdsFxBillsFinalDgnQuantity1.AsFloat := ANode.DealDesignQuantity1 + ANode.CDesignQuantity1;
+  cdsFxBillsFinalDgnQuantity2.AsFloat := ANode.DealDesignQuantity2 + ANode.CDesignQuantity2;
+  cdsFxBillsFinalDgnQuantity.AsString := GetDgnQuantity(cdsFxBillsFinalDgnQuantity1.AsFloat, cdsFxBillsFinalDgnQuantity2.AsFloat);
+  cdsFxBillsFinalDgnPrice1.AsFloat := GetDgnPrice(cdsFxBillsAddGatherTotalPrice.AsFloat, cdsFxBillsFinalDgnQuantity1.AsFloat);
+  cdsFxBillsFinalDgnPrice2.AsFloat := GetDgnPrice(cdsFxBillsAddGatherTotalPrice.AsFloat, cdsFxBillsFinalDgnQuantity2.AsFloat);
+  cdsFxBillsFinalDgnPrice.AsString := GetDgnQuantity(cdsFxBillsFinalDgnPrice1.AsFloat, cdsFxBillsFinalDgnPrice2.AsFloat);
   cdsFxBills.Post;
   WriteNode(TReportCacheNode(ANode.FirstChild));
   WriteNode(TReportCacheNode(ANode.NextSibling));

+ 14 - 0
DataModules/StageDm.pas

@@ -31,6 +31,8 @@ type
     procedure UpdateParentRecord(ABillsID: Integer; ATotalPrice: Double; const AFieldName: string);
     procedure UpdateComplete(ABillsID: Integer; AQuantity, ATotalPrice: Double);
 
+    function HasPriceMarginBills: Boolean;
+
     // 向父项增量--PM_TotalPrice
     procedure UpdateParentPriceMargin(ABillsID: Integer; ADiffer: Double);
     // 向价差调整节点增量--GatherTotalPrice
@@ -812,6 +814,8 @@ var
   Rec: TStageRecord;
   fDiffer: Double;
 begin
+  if not HasPriceMarginBills then Exit;
+   
   with TProjectData(TPhaseData(FPhaseData).ProjectData) do
   begin
     Rec := StageRecord(iPriceMarginID);
@@ -854,6 +858,8 @@ var
   Rec: TStageRecord;
   fPM, fPMDiffer: Double;
 begin
+  if not HasPriceMarginBills then Exit;
+  
   Rec := StageRecord(ABillsID);
   if not Assigned(Rec) then Exit;
 
@@ -940,4 +946,12 @@ begin
   end;
 end;
 
+function TStageData.HasPriceMarginBills: Boolean;
+var
+  vPM_Node: TsdIDTreeNode;
+begin
+  vPM_Node := MainBillsTree.FindNode(iPriceMarginID);
+  Result := Assigned(vPM_Node);
+end;
+
 end.

+ 16 - 3
Frames/ProjectFme.pas

@@ -566,8 +566,17 @@ procedure TProjectFrame.dxsbViewControlItemClick(Sender: TObject;
   end;
 
   procedure DisplayPriceMargin;
+  var
+    vPM_Node: TsdIDTreeNode;
   begin
-    if ProjectData.ProjProperties.PhaseCount = 0 then
+    vPM_Node := FProjectData.BillsCompileData.BillsCompileTree.FindNode(iPriceMarginID);
+    if not Assigned(vPM_Node) then
+    begin
+      ErrorMessage('台账中无预定义价差节点,不可使用价差功能。');
+      dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[jpsMain.ActivePageIndex];
+      Abort;
+    end
+    else if ProjectData.ProjProperties.PhaseCount = 0 then
     begin
       TipMessage('未计量前不可进行材料调差。');
       dxsbViewControl.SelectedItem := dxsbViewControl.ActiveGroup.Items[jpsMain.ActivePageIndex];
@@ -576,11 +585,12 @@ procedure TProjectFrame.dxsbViewControlItemClick(Sender: TObject;
     ChangeView;
   end;
 
+var
+  bCloseCompare: Boolean;
 begin
   if Item.Tag = jpsMain.ActivePageIndex then Exit;
 
-  if (Item.Tag in [0..3]) and (jpsMain.ActivePageIndex = 4) then
-    CloseCompare;
+  bCloseCompare := (Item.Tag in [0..3]) and (jpsMain.ActivePageIndex = 4);
 
   case Item.Tag of
     0..2: ChangeView;
@@ -588,6 +598,9 @@ begin
     4: DisplayCompare;
     5: DisplayReports;
   end;
+
+  if bCloseCompare then
+    CloseCompare;
 end;
 
 procedure TProjectFrame.CreateBillsFrame;

+ 51 - 40
Units/Connections.pas

@@ -7,7 +7,8 @@ uses
 
 const
   ProductName = 'Measure';
-  FileVersion = '1.0.0.0';
+  EmptyFileVersion = '1.0.0.0';
+  FileVersion = '1.0.0.1';
   EncryptVersion = 'Auto1.0';
 
 type
@@ -50,7 +51,9 @@ type
     CreateExeVersion: string[20];
     // 最后一次打开 -- Exe版本号
     LastestExeVersion: string[20];
-    Reserve: array [0..1024 - 21 - 21] of Char;
+    // 历史最大 -- exe版本号
+    MaxExeVersion: string[20];
+    Reserve: array [0..1024 -21 -21 -21] of Char;
   end;
 
   TEncryptConnection = class(TCommonConnection)
@@ -68,7 +71,8 @@ type
     procedure ResetFileHead;
     function CheckFileEncrypt: Boolean; overload;
     function CheckFileEncrypt(AFileName: string): Boolean; overload;
-    function GetIsLastest: Boolean;
+    function GetNeedUpdate: Boolean;
+    function GetOverExe: Boolean;
   public
     destructor Destroy; override;
     procedure Open(const AFileName: string); override;
@@ -76,7 +80,8 @@ type
 
     procedure UpdateFileVersion;
 
-    property IsLastest: Boolean read GetIsLastest;
+    property NeedUpdate: Boolean read GetNeedUpdate;
+    property OverExe: Boolean read GetOverExe;
   end;
 
   procedure SimpleDecrypt(const ASourceFile, AResultFile: string);
@@ -340,9 +345,10 @@ begin
     FFileHead.ProductName := ProductName;
     FFileHead.FileType := 1;
     FFileHead.EncryptVersion := EncryptVersion;
-    FFileHead.FileVersion := FileVersion;
+    FFileHead.FileVersion := EmptyFileVersion;
     FFileHead.CreateExeVersion := GetVersion;
     FFileHead.LastestExeVersion := GetVersion;
+    FFileHead.MaxExeVersion := GetVersion;
   end;
 end;
 
@@ -359,6 +365,46 @@ begin
   FFileHead.LastestExeVersion := GetVersion;
 end;
 
+procedure TEncryptConnection.UpdateFileVersion;
+begin
+  FFileHead.FileVersion := FileVersion;
+end;
+
+procedure TEncryptConnection.RecoverFileHead(AFileName: string);
+var
+  sTempFile: string;
+  FileStream: TFileStream;
+begin
+  sTempFile := ExtractFilePath(AFileName) + ExtractSimpleFileName(AFileName) + '.tmp';
+  CopyFile(PChar(AFileName), PChar(sTempFile), False);
+  try
+    if FileExists(sTempFile) then
+    begin
+      FileStream := TFileStream.Create(sTempFile, fmOpenWrite);
+      try
+        FileStream.Seek($00, soFromBeginning);
+        FileStream.Write(MDBOrgHead, SizeOf(MDBOrgHead));
+      finally
+        FileStream.Free;
+      end;
+      CopyFile(PChar(sTempFile), PChar(AFileName), False);
+      DeleteFile(PChar(sTempFile));
+    end;
+  except
+    DeleteFile(PChar(sTempFile));
+  end;
+end;
+
+function TEncryptConnection.GetNeedUpdate: Boolean;
+begin
+  Result := CompareCode(FileVersion, FFileHead.FileVersion, '.') > 0;
+end;
+
+function TEncryptConnection.GetOverExe: Boolean;
+begin
+  Result := CompareCode(FileVersion, FFileHead.FileVersion, '.') < 0;
+end;
+
 { TConnection }
 
 procedure TConnection.Close;
@@ -416,39 +462,4 @@ begin
   FConnection.Open;
 end;
 
-function TEncryptConnection.GetIsLastest: Boolean;
-begin
-  Result := CompareCode(CurrencyString, FFileHead.FileVersion, '.') > 0;
-end;
-
-procedure TEncryptConnection.UpdateFileVersion;
-begin
-  FFileHead.FileVersion := CurrencyString;
-end;
-
-procedure TEncryptConnection.RecoverFileHead(AFileName: string);
-var
-  sTempFile: string;
-  FileStream: TFileStream;
-begin
-  sTempFile := ExtractFilePath(AFileName) + ExtractSimpleFileName(AFileName) + '.tmp';
-  CopyFile(PChar(AFileName), PChar(sTempFile), False);
-  try
-    if FileExists(sTempFile) then
-    begin
-      FileStream := TFileStream.Create(sTempFile, fmOpenWrite);
-      try
-        FileStream.Seek($00, soFromBeginning);
-        FileStream.Write(MDBOrgHead, SizeOf(MDBOrgHead));
-      finally
-        FileStream.Free;
-      end;
-      CopyFile(PChar(sTempFile), PChar(AFileName), False);
-      DeleteFile(PChar(sTempFile));
-    end;
-  except
-    DeleteFile(PChar(sTempFile));
-  end;
-end;
-
 end.

+ 6 - 0
Units/ProjectData.pas

@@ -542,6 +542,8 @@ end;
 
 procedure TProjectData.UpdateProjectDataBase;
 begin
+  if TEncryptConnection(FConnection).OverExe then
+    WarningMessage('标段版本高于当前软件版本,可能会产生错误。');
   FUpdator.Update(FConnection);
 end;
 
@@ -558,6 +560,7 @@ begin
   FProjectID := -1;
   UnZipFile(AFileName, TempPath);
   FConnection.Open(MainFileName);
+  UpdateProjectDataBase;
   FProjProperties.Open(FConnection.Connection);
   if ProjProperties.PhaseCount > 0 then
   begin
@@ -1275,6 +1278,7 @@ begin
   FProjectID := -1;
   UnZipFile(AFileName, TempPath);
   FConnection.Open(MainFileName);
+  UpdateProjectDataBase;
   FProjProperties.Open(FConnection.Connection);
   FStaffData.Open(FConnection.Connection);
 end;
@@ -1333,6 +1337,7 @@ begin
   FProjectID := -1;
   UnZipFile(AFileName, TempPath);
   FConnection.Open(MainFileName);
+  UpdateProjectDataBase;
   FProjProperties.Open(FConnection.Connection);
   if ProjProperties.PhaseCount > 0 then
   begin
@@ -1359,6 +1364,7 @@ begin
   FProjectID := -1;
   UnZipFile(AFileName, TempPath);
   FConnection.Open(MainFileName);
+  UpdateProjectDataBase;
   FProjProperties.Open(FConnection.Connection);
   if ProjProperties.PhaseCount > 0 then
   begin

+ 1 - 1
Units/UpdateDataBase.pas

@@ -55,7 +55,7 @@ end;
 
 procedure TUpdateDB.Update(AConnection: TEncryptConnection);
 begin
-  if not AConnection.IsLastest then
+  if AConnection.NeedUpdate then
   begin
     UpdateAllTables(AConnection.Connection);
     AConnection.UpdateFileVersion;