Procházet zdrojové kódy

文件版本10.1.5.1012以前的exe打开本版本文件,提示不支持

JimiZhang před 1 týdnem
rodič
revize
530205efdf

+ 24 - 1
Common/ScFileArchiver.pas

@@ -116,6 +116,7 @@ type
     FFileAttr: Integer;
     FIsNew: Boolean;
     FNeedVerify: Boolean;
+    FFileVerMsgList: TStringList;
     function TempFileName: string; virtual;
     function ExtractFileName: string; virtual;
     function ArchiveFile: Boolean; virtual;
@@ -150,6 +151,8 @@ type
     procedure UpdateUserVersion;
     // 미뺏헌데 6-26
     procedure ResetSourceFileName(sGUID: string);
+    // 警속濾뚤앉경굶돨瓊刻斤口
+    procedure AddFileVerMsg(Msg: string);
     property FileName: string read FFileName write SetFileName;
     property IsOpened: Boolean read FFileOpened;
     property FileInfo: TScFileHead read FFileInfo;
@@ -1092,6 +1095,7 @@ begin
   FNeedVerify := False;
   ZeroMemory(@FFileInfo, SizeOf(FFileInfo));
   ZeroMemory(@FFile7Info, SizeOf(FFile7Info));
+  FFileVerMsgList := TStringList.Create;
 end;
 
 destructor TScFileArchiver.Destroy;
@@ -1099,6 +1103,7 @@ begin
   if FFileOpened then
     CloseFile;
   FArchiver.Free;
+  FFileVerMsgList.Free;
   inherited;
 end;
 
@@ -1840,6 +1845,12 @@ begin
 
 end;
 
+procedure TScFileArchiver.AddFileVerMsg(Msg: string);
+begin
+  if FFileVerMsgList.IndexOf(Msg) < 0 then
+    FFileVerMsgList.Add(Msg);
+end;
+
 { TScMDBArchiver }
 
 function TScMDBArchiver.ArchiveFile: Boolean;
@@ -2387,7 +2398,7 @@ end;
 procedure TScProjectFileArchiver.WriteFileVerMsg;
 var
   I: Integer;
-  strMsg: string;
+  strMsg, strVer: string;
 begin
   strMsg := '';
   FFileInfo.NullFlag := 0;
@@ -2397,6 +2408,18 @@ begin
       strMsg := FileVerMsgs[I]
     else
       strMsg := strMsg + strDelimiter + FileVerMsgs[I];
+  end;                                               
+  if FFileInfo.ProjectFileType = 0 then
+    strVer := ConstBillsFileVersion
+  else if FFileInfo.ProjectFileType > 0 then
+    strVer := ConstBudgetFileVersion
+  else
+    strVer := '';
+  for I := 0 to FFileVerMsgList.Count - 1 do
+  begin
+    if strMsg <> '' then
+      strMsg := strMsg + strDelimiter;
+    strMsg := strMsg + FFileVerMsgList[I];
   end;
   // 匡숭경굶瓊刻렴돕VerMsg
   FFileInfo.VerMsg := strMsg;

+ 2 - 2
DPRs/ZY/SmartCost_GuangDong.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=10
 MinorVer=3
 Release=0
-Build=1339
+Build=1341
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横软件有限公司
 FileDescription=SmartCost 广东专业版
-FileVersion=10.3.0.1339
+FileVersion=10.3.0.1341
 InternalName=SmartCost
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2024。保留所有权利。
 LegalTrademarks=SmartCost

binární
DPRs/ZY/SmartCost_GuangDong.res


+ 7 - 7
MainModule/Model/ScMachine.dfm

@@ -106,7 +106,7 @@ object MachineData: TMachineData
   end
   object sapMachineLabours: TsdADOProvider
     TableName = 'MachineLabours'
-    Left = 144
+    Left = 152
     Top = 24
   end
   object sdsMachineLabours: TsdDataSet
@@ -115,7 +115,7 @@ object MachineData: TMachineData
     Provider = sapMachineLabours
     UseSavePoint = False
     AfterRecordChanged = sdsMachineLaboursAfterRecordChanged
-    Left = 144
+    Left = 152
     Top = 88
     FieldListData = {
       0101044E616D650604436F6465094669656C644E616D650604436F6465084461
@@ -218,7 +218,7 @@ object MachineData: TMachineData
     OnCurrentChanged = sdvMachinePriceCurrentChanged
     OnGetText = sdvMachinePriceGetText
     Left = 48
-    Top = 161
+    Top = 160
   end
   object sdvMachineLabours: TsdDataView
     Active = False
@@ -236,12 +236,12 @@ object MachineData: TMachineData
       end>
     AfterValueChanged = sdvMachineLaboursAfterValueChanged
     AfterRecordChanged = sdvMachineLaboursAfterRecordChanged
-    Left = 144
+    Left = 152
     Top = 160
   end
   object sapMachineDetail: TsdADOProvider
     TableName = 'MachineDetail'
-    Left = 256
+    Left = 264
     Top = 24
   end
   object sdsMachineDetail: TsdDataSet
@@ -250,7 +250,7 @@ object MachineData: TMachineData
     Provider = sapMachineDetail
     UseSavePoint = False
     OnGetRecordClass = sdsMachineDetailGetRecordClass
-    Left = 256
+    Left = 264
     Top = 88
     FieldListData = {
       0101044E616D6506024944094669656C644E616D650602494408446174615479
@@ -336,7 +336,7 @@ object MachineData: TMachineData
       item
         FieldName = 'Quantity'
       end>
-    Left = 256
+    Left = 264
     Top = 160
   end
 end

+ 59 - 15
MainModule/Model/ScMachine.pas

@@ -174,8 +174,8 @@ type
     procedure BeginAllOperate;
     // Connect InterFace
     procedure EndAllOperate;
-    function LoadMachineFromRationLib(AGLJKey: string; var ARationLib: TObject): TsdDataRecord;
-    function AddMachineDetailFromLib(AMachineID: Integer; AGLJKey: string; ARationLib: TObject): Boolean;
+    function LoadMachineFromRationLib(AGLJKey: string; var AProjectRationLib: TObject): TsdDataRecord;
+    function AddMachineDetailFromLib(AMachineID: Integer; AGLJKey: string; AProjectRationLib: TObject): Boolean;
     procedure DeleteMachineDetail(AMachineID: Integer);
   public
     { Public declarations }
@@ -231,6 +231,8 @@ type
     function GetFuelQuantity(AMachineID: Integer; AName: string): Double;
     // 赋值动力燃料数量
     function SetFuelQuantity(AMachineID: Integer; AName: string; AQuantity: Double): Boolean;
+    // 定额库被使用
+    function LibUsed(ALibID: Integer): Boolean;
     // 是否修改
     property Modified: Boolean read GetModified;
     // 获得机械价格
@@ -525,7 +527,7 @@ var
   Rec: TScMachinePriceRecord;
   DataRec: TsdDataRecord;
   objLib: TObject;
-  RationLib: TScRationLib;
+  ProjectRationLib: TScProjectRationLib;
 begin
   Result := False;
   Rec := LocateMachine(AID);
@@ -535,7 +537,7 @@ begin
     ResolveGLJKeys(strKeys, strCode, strName, strSpecs, strUnit);
     // 先查找定额库中是否有此机械台班
     DataRec := LoadMachineFromRationLib(strKeys, objLib);
-    RationLib := TScRationLib(objLib);
+    ProjectRationLib := TScProjectRationLib(objLib);
     // 所有定额库中找不到,则到MachineCalcData.dat中找部颁台班
     if DataRec = nil then
       DataRec := CustomMachine.FindMachineData(strKeys);
@@ -566,10 +568,10 @@ begin
         Rec.TRQ.AsCurrency   := DataRec.ValueByName(STRQ).AsCurrency;
         Rec.YLCC.AsCurrency := GetFeeTax(strKeys);
         Rec.RGType.AsInteger := DataRec.ValueByName(SRGType).AsInteger;
-        if RationLib <> nil then
+        if ProjectRationLib <> nil then
         begin
-          Rec.LibID.AsInteger := RationLib.ID;
-          AddMachineDetailFromLib(AID, strKeys, RationLib);
+          Rec.LibID.AsInteger := ProjectRationLib.ID;
+          AddMachineDetailFromLib(AID, strKeys, ProjectRationLib);
         end
         else
           Rec.LibID.AsInteger := -1;
@@ -650,6 +652,9 @@ procedure TMachineData.Save;
 var
   I: Integer;
   List: TList;
+  DetailRec: TScMachineDetailRecord;
+  MachineRec: TScMachinePriceRecord;
+  ProjectRationLib: TScProjectRationLib;
 begin
   // (删除错误的记录,错误记录的编号为0)
   List := TList.Create;
@@ -667,6 +672,28 @@ begin
   sdsMachinePrice.Save;
   sdsMachineDetail.Save;
   sdsMachineLabours.Save;
+
+  // 如果引用了有MachineDetail数据的定额库,则需要给文件加入提示,限制旧版本使用
+  for I := 0 to sdsMachineDetail.RecordCount - 1 do
+  begin
+    DetailRec := TScMachineDetailRecord(sdsMachineDetail[I]);
+    MachineRec := LocateMachine(DetailRec.OwnerID.AsInteger);
+    ProjectRationLib := TScProject(FProject).RationLibs.Libs[MachineRec.LibID.AsInteger];
+    if ProjectRationLib <> nil then
+    begin
+      // 10.1.5.1012版本前不支持MachineDetail
+      TScProjBaseData(TScProject(FProject).ProjData).Connection.FileArchiver.AddFileVerMsg(
+        Format('10.1.5.1012 当前版本不支持%s', [ProjectRationLib.LibName]));
+      Break;
+    end
+    else
+    begin
+      // 10.1.5.1012版本前不支持MachineDetail
+      TScProjBaseData(TScProject(FProject).ProjData).Connection.FileArchiver.AddFileVerMsg(
+        '10.1.5.1012 当前版本不支持新的机械台班');
+      Break;
+    end
+  end;
 end;
 
 function TMachineData.LocateInControl(AID: Integer): Boolean;
@@ -1430,7 +1457,7 @@ begin
 end;
 
 function TMachineData.LoadMachineFromRationLib(
-  AGLJKey: string; var ARationLib: TObject): TsdDataRecord;
+  AGLJKey: string; var AProjectRationLib: TObject): TsdDataRecord;
 var
   I, J, K: Integer;
   ProjectRationLib: TScProjectRationLib;
@@ -1438,7 +1465,7 @@ var
   DetailRec: TsdDataRecord;
 begin
   Result := nil;
-  ARationLib := nil;
+  AProjectRationLib := nil;
   // 查找定额库中有没有指定机械台班
   for I := 0 to TScProject(FProject).RationLibs.Count - 1 do
   begin
@@ -1451,7 +1478,7 @@ begin
         DetailRec := LocateByKeys(RationLib.sdsMachinePrice, AGLJKey);
         if DetailRec <> nil then
         begin
-          ARationLib := RationLib;
+          AProjectRationLib := ProjectRationLib;
           Result := DetailRec;
           Break;
         end;
@@ -1461,25 +1488,25 @@ begin
 end;
 
 function TMachineData.AddMachineDetailFromLib(
-  AMachineID: Integer; AGLJKey: string; ARationLib: TObject): Boolean;
+  AMachineID: Integer; AGLJKey: string; AProjectRationLib: TObject): Boolean;
 var
   I, iLibID: Integer;
   LibDetailRecord, DetailRecord: TsdDataRecord;
   ProjectGLJRecord: TScProjectGLJRecord;
-  RationLib: TScRationLib;
+  ProjectRationLib: TScProjectRationLib;
   lstDetail: TList;
   strCode, strName, strSpecs, strUnit, strKey: string;
 begin
   Result := False;
-  RationLib := TScRationLib(ARationLib);
-  iLibID := TScProject(FProject).RationLibs.IDByLibID(RationLib.ID);
+  ProjectRationLib := TScProjectRationLib(AProjectRationLib);
+  iLibID := ProjectRationLib.ID;
   lstDetail := TList.Create;
   try
     // 删除已有记录
     DeleteMachineDetail(AMachineID);
     // 查找定额库中台班明细
     ResolveGLJKeys(AGLJKey, strCode, strName, strSpecs, strUnit);
-    RationLib.sdsMachineDetail.FilterBy(
+    ProjectRationLib.Lib.sdsMachineDetail.FilterBy(
       Format('OwnerCode=''%s'' AND OwnerName=''%s'' AND OwnerSpecs=''%s'' AND OwnerUnit=''%s''', [strCode, strName, strSpecs, strUnit]),
       lstDetail, 'OwnerCode');
     for I := 0 to lstDetail.Count - 1 do
@@ -1667,4 +1694,21 @@ begin
   ARecordClass := TScMachineDetailRecord;
 end;
 
+function TMachineData.LibUsed(ALibID: Integer): Boolean;
+var
+  I: Integer;
+  Rec: TScMachinePriceRecord;
+begin
+  Result := False;;
+  for I := 0 to sdsMachinePrice.RecordCount - 1 do
+  begin
+    Rec := TScMachinePriceRecord(sdsMachinePrice[I]);
+    if Rec.LibID.AsInteger = ALibID then
+    begin
+      Result := True;
+      Break;
+    end;
+  end;
+end;
+
 end.

+ 10 - 0
MainModule/Model/ScMaterial.dfm

@@ -31,6 +31,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtPrice
+    UseSavePoint = False
     AfterDeleteRecord = sdsMtPriceAfterDeleteRecord
     AfterRecordChanged = sdsMtPriceAfterRecordChanged
     OnGetRecordClass = sdsMtPriceGetRecordClass
@@ -186,6 +187,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtTransPrice
+    UseSavePoint = False
     AfterDeleteRecord = sdsMtTransPriceAfterDeleteRecord
     AfterRecordChanged = sdsMtTransPriceAfterRecordChanged
     OnGetRecordClass = sdsMtTransPriceGetRecordClass
@@ -327,6 +329,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtOrgPrice
+    UseSavePoint = False
     AfterDeleteRecord = sdsMtOrgPriceAfterDeleteRecord
     AfterRecordChanged = sdsMtOrgPriceAfterRecordChanged
     OnGetRecordClass = sdsMtOrgPriceGetRecordClass
@@ -414,6 +417,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtRations
+    UseSavePoint = False
     AfterDeleteRecord = sdsMtRationsAfterDeleteRecord
     AfterRecordChanged = sdsMtRationsAfterRecordChanged
     OnGetRecordClass = sdsMtRationsGetRecordClass
@@ -719,6 +723,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtGLJList
+    UseSavePoint = False
     AfterDeleteRecord = sdsMtGLJListAfterDeleteRecord
     AfterRecordChanged = sdsMtGLJListAfterRecordChanged
     OnGetRecordClass = sdsMtGLJListGetRecordClass
@@ -797,6 +802,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtMinorRation
+    UseSavePoint = False
     AfterDeleteRecord = sdsMtMinorRationAfterDeleteRecord
     AfterRecordChanged = sdsMtMinorRationAfterRecordChanged
     OnGetRecordClass = sdsMtMinorRationGetRecordClass
@@ -836,6 +842,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtXSAdjust
+    UseSavePoint = False
     AfterDeleteRecord = sdsMtXSAdjustAfterDeleteRecord
     AfterRecordChanged = sdsMtXSAdjustAfterRecordChanged
     OnGetRecordClass = sdsMtXSAdjustGetRecordClass
@@ -872,6 +879,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtDatas
+    UseSavePoint = False
     OnGetRecordClass = sdsMtDatasGetRecordClass
     Left = 600
     Top = 16
@@ -912,6 +920,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = smpMtTransLocation
+    UseSavePoint = False
     Left = 608
     Top = 144
     FieldListData = {
@@ -969,6 +978,7 @@ object MaterialData: TMaterialData
     Active = False
     Filtered = False
     Provider = sapMtConveyance
+    UseSavePoint = False
     OnGetRecordClass = sdsMtConveyanceGetRecordClass
     Left = 136
     Top = 464

+ 19 - 0
MainModule/Model/ScMaterial.pas

@@ -791,6 +791,8 @@ type
     procedure MergeDuplicateGLJ;
     // 工料机是否被材料计算使用
     function GLJUsed(AID: Integer): Boolean;
+    // 定额库被使用
+    function LibUsed(ALibID: Integer): Boolean;
 
     property Active: Boolean read FActive write SetActive;
     property AutoCalculate: Boolean read FAutoCalculate write FAutoCalculate;
@@ -6013,5 +6015,22 @@ begin
   Result := sdsMtGLJList.Locate(SGLJID, AID) <> nil;
 end;
 
+function TMaterialData.LibUsed(ALibID: Integer): Boolean;
+var
+  I: Integer;
+  Rec: TScMaterialRationsRecord;
+begin
+  Result := False;;
+  for I := 0 to sdsMtRations.RecordCount - 1 do
+  begin
+    Rec := TScMaterialRationsRecord(sdsMtRations[I]);
+    if Rec.LibID.AsInteger = ALibID then
+    begin
+      Result := True;
+      Break;
+    end;
+  end;
+end;
+
 end.
 

+ 3 - 1
SideModule/Ration/ScProjectRationLibsUnit.pas

@@ -711,7 +711,9 @@ end;
 
 function TScProjectRationLib.GetUsed: Boolean;
 begin
-  Result := TScProject(FOwnerList.FProject).Rations.LibUsed(FID);
+  Result := TScProject(FOwnerList.FProject).Rations.LibUsed(FID)
+    or TScProject(FOwnerList.FProject).ProjectGLJ.MaterialData.LibUsed(FID)
+    or TScProject(FOwnerList.FProject).ProjectGLJ.MachineData.LibUsed(FID);
 end;
 
 function TScProjectRationLib.LocateGLJ(AKeys: string): TrlGLJListRecord;