Просмотр исходного кода

Merge branch '3.1.3.3' of http://192.168.1.12:3000/maixinrong/measure into 3.1.3.3

builder 9 лет назад
Родитель
Сommit
a404489394
5 измененных файлов с 78 добавлено и 42 удалено
  1. 14 0
      DataModules/StageDm.pas
  2. 10 1
      Frames/ProjectFme.pas
  3. 51 40
      Units/Connections.pas
  4. 2 0
      Units/ProjectData.pas
  5. 1 1
      Units/UpdateDataBase.pas

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

+ 10 - 1
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];

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

+ 2 - 0
Units/ProjectData.pas

@@ -542,6 +542,8 @@ end;
 
 procedure TProjectData.UpdateProjectDataBase;
 begin
+  if TEncryptConnection(FConnection).OverExe then
+    WarningMessage('标段版本高于当前软件版本,可能会产生错误。');
   FUpdator.Update(FConnection);
 end;
 

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