|
|
@@ -242,6 +242,7 @@ type
|
|
|
// 全国接口导出文件,多标段的结构是打平的,如:标段1的<Rate>、<Pract>、<EprjInfo>,标段2的<Rate>、<Pract>、<EprjInfo>。
|
|
|
procedure FillData3(AProject: TObject; AProjectRootNode, AFeeRateRootNode, AProjGLJRootNode: TXmlNode);
|
|
|
procedure ImpFeeRate(AProject: TObject; AFeeRateRootNode: TXmlNode);
|
|
|
+ procedure ImpProjectGLJ(AProject: TObject; AProjGLJRootNode: TXmlNode);
|
|
|
|
|
|
end;
|
|
|
|
|
|
@@ -441,7 +442,7 @@ uses ScProject, ProjectsDM,
|
|
|
SysInfoUnit, ScProjectRationLibsUnit, ScXMLPortMap, ScTypes,
|
|
|
VCLUnZip, VCLZip, EncdDecd, Controls, ShellAPI, Windows, ScExprs, PerlRegEx,
|
|
|
Math, CslTimeDebug, ScRAdjusts, ScGLJ, ScXMLConsts, ScProjList, CLD_DogNoBySerialNo,
|
|
|
- ScDigitManagerUnit, TypInfo, ScFeeRate;
|
|
|
+ ScDigitManagerUnit, TypInfo, ScFeeRate, ScProjectGLJ;
|
|
|
|
|
|
|
|
|
|
|
|
@@ -3453,6 +3454,8 @@ begin
|
|
|
|
|
|
// 导入费率
|
|
|
ImpFeeRate(AProject, AFeeRateRootNode);
|
|
|
+ // 导入项目工料机
|
|
|
+ ImpProjectGLJ(AProject, AProjGLJRootNode);
|
|
|
|
|
|
with TScProject(AProject).Bills do
|
|
|
begin
|
|
|
@@ -3472,7 +3475,7 @@ begin
|
|
|
TScProject(AProject).Bills.CalculateAll;
|
|
|
// 最后存储
|
|
|
TScProjBaseData(TScProject(AProject).ProjData).Save;
|
|
|
- end;
|
|
|
+ end;
|
|
|
finally
|
|
|
TScProject(AProject).RealTimeCalc := OldRealTimeCalc;
|
|
|
end;
|
|
|
@@ -3565,7 +3568,7 @@ begin
|
|
|
if cdsFeeParams.Locate('ID', iID, []) then
|
|
|
begin
|
|
|
cdsFeeParams.Edit;
|
|
|
- cdsFeeParamsParam.AsInteger := StrToInt(sValue);
|
|
|
+ cdsFeeParamsParam.AsFloat := StrToFloat(sValue);
|
|
|
cdsFeeParamsCaption.AsString := sCaption;
|
|
|
cdsFeeParams.Post;
|
|
|
end;
|
|
|
@@ -3638,6 +3641,151 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TQGXMLPort.ImpProjectGLJ(AProject: TObject; AProjGLJRootNode: TXmlNode);
|
|
|
+var
|
|
|
+ vPractNode, vGroupNode, vNode: TXmlNode;
|
|
|
+ I: Integer;
|
|
|
+ vProjectGLJ: TProjectGLJ;
|
|
|
+
|
|
|
+ function NodeV(ANode: TXmlNode; const AName: string): string;
|
|
|
+ begin
|
|
|
+ Result := ANode.AttributeValueByNameUTF8[AName];
|
|
|
+ end;
|
|
|
+
|
|
|
+ function EnsureGLJ(ANode: TXmlNode; ADefaultType: Integer): TScProjectGLJRecord;
|
|
|
+ var
|
|
|
+ iLibID: Integer;
|
|
|
+ sCode, sName, sSpec, sUnit: string;
|
|
|
+ begin
|
|
|
+ Result := nil;
|
|
|
+ sCode := NodeV(ANode, 'Code');
|
|
|
+ if sCode = '' then Exit;
|
|
|
+
|
|
|
+ sName := NodeV(ANode, 'PractName');
|
|
|
+ sSpec := NodeV(ANode, 'Spec');
|
|
|
+ sUnit := NodeV(ANode, 'Unit');
|
|
|
+
|
|
|
+ Result := vProjectGLJ.LocateGLJOnlyByCode(sCode);
|
|
|
+ if Result = nil then
|
|
|
+ begin
|
|
|
+ iLibID := -1;
|
|
|
+ Result := vProjectGLJ.AddGLJFromLibRec(iLibID, CombineGLJKeys(sCode, sName, sSpec, sUnit), True);
|
|
|
+ end;
|
|
|
+
|
|
|
+ if Result = nil then
|
|
|
+ begin
|
|
|
+ Result := vProjectGLJ.NewRecord;
|
|
|
+ try
|
|
|
+ Result.Code.AsString := sCode;
|
|
|
+ Result.Name.AsString := sName;
|
|
|
+ Result.Specs.AsString := sSpec;
|
|
|
+ Result.Units.AsString := sUnit;
|
|
|
+ Result.Main.AsBoolean := False;
|
|
|
+ Result.New.AsBoolean := False;
|
|
|
+ Result.Amount.AsCurrency := 0;
|
|
|
+ Result.PeriodQtyCoe.AsFloat := 1;
|
|
|
+ Result.Types.AsInteger := ADefaultType;
|
|
|
+ Result.CalculateType.AsInteger := 0;
|
|
|
+ Result.SortParam.AsInteger := 0;
|
|
|
+ if ADefaultType = GLJ_Concrete then
|
|
|
+ Result.TypeSort.AsInteger := 20
|
|
|
+ else
|
|
|
+ Result.TypeSort.AsInteger := ADefaultType;
|
|
|
+ finally
|
|
|
+ Result.EndUpdate;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure ImpOne(ANode: TXmlNode; ADefaultType: Integer);
|
|
|
+ var
|
|
|
+ vRec: TScProjectGLJRecord;
|
|
|
+ sBudget, sNorm, sNum, sIsAdd: string;
|
|
|
+ begin
|
|
|
+ vRec := EnsureGLJ(ANode, ADefaultType);
|
|
|
+ if vRec = nil then Exit;
|
|
|
+
|
|
|
+ sBudget := NodeV(ANode, 'BudgetPrice');
|
|
|
+ sNorm := NodeV(ANode, 'NormPrice');
|
|
|
+ sNum := NodeV(ANode, 'Num');
|
|
|
+ sIsAdd := NodeV(ANode, 'IsAdd');
|
|
|
+
|
|
|
+ vRec.BeginUpdate;
|
|
|
+ try
|
|
|
+ vRec.Code.AsString := NodeV(ANode, 'Code');
|
|
|
+ vRec.Name.AsString := NodeV(ANode, 'PractName');
|
|
|
+ vRec.Specs.AsString := NodeV(ANode, 'Spec');
|
|
|
+ vRec.Units.AsString := NodeV(ANode, 'Unit');
|
|
|
+
|
|
|
+ if sBudget <> '' then
|
|
|
+ vRec.BudgetPrice.AsCurrency := StrToFloatDef(sBudget, vRec.BudgetPrice.AsCurrency);
|
|
|
+ if sNorm <> '' then
|
|
|
+ vRec.BasePrice.AsCurrency := StrToFloatDef(sNorm, vRec.BasePrice.AsCurrency);
|
|
|
+ if sNum <> '' then
|
|
|
+ vRec.Amount.AsCurrency := StrToFloatDef(sNum, vRec.Amount.AsCurrency);
|
|
|
+ if sIsAdd <> '' then
|
|
|
+ vRec.New.AsBoolean := SameText(sIsAdd, '1') or SameText(sIsAdd, 'true');
|
|
|
+
|
|
|
+ if vRec.Types.AsInteger = 0 then
|
|
|
+ vRec.Types.AsInteger := ADefaultType;
|
|
|
+ if vRec.TypeSort.AsInteger = 0 then
|
|
|
+ begin
|
|
|
+ if vRec.Types.AsInteger = GLJ_Concrete then
|
|
|
+ vRec.TypeSort.AsInteger := 20
|
|
|
+ else
|
|
|
+ vRec.TypeSort.AsInteger := vRec.Types.AsInteger;
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ vRec.EndUpdate;
|
|
|
+ end;
|
|
|
+
|
|
|
+ vProjectGLJ.SyncGLJRationPrice(vRec, True);
|
|
|
+ vProjectGLJ.SyncGLJPrice(vRec, True, False, True);
|
|
|
+ end;
|
|
|
+
|
|
|
+begin
|
|
|
+ if not Assigned(AProjGLJRootNode) then Exit;
|
|
|
+ vProjectGLJ := TScProject(AProject).ProjectGLJ;
|
|
|
+
|
|
|
+ vPractNode := AProjGLJRootNode;
|
|
|
+ if not SameText(Utf8ToAnsi(vPractNode.Name), 'Pract') then
|
|
|
+ vPractNode := AProjGLJRootNode.FindNodeUTF8('Pract');
|
|
|
+ if vPractNode = nil then Exit;
|
|
|
+
|
|
|
+ vGroupNode := vPractNode.FindNodeUTF8('Mps');
|
|
|
+ if vGroupNode <> nil then
|
|
|
+ begin
|
|
|
+ for I := 0 to vGroupNode.ElementCount - 1 do
|
|
|
+ begin
|
|
|
+ vNode := vGroupNode.Elements[I];
|
|
|
+ if SameText(Utf8ToAnsi(vNode.Name), 'Mp') then
|
|
|
+ ImpOne(vNode, GLJ_Labour);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ vGroupNode := vPractNode.FindNodeUTF8('Materials');
|
|
|
+ if vGroupNode <> nil then
|
|
|
+ begin
|
|
|
+ for I := 0 to vGroupNode.ElementCount - 1 do
|
|
|
+ begin
|
|
|
+ vNode := vGroupNode.Elements[I];
|
|
|
+ if SameText(Utf8ToAnsi(vNode.Name), 'Material') then
|
|
|
+ ImpOne(vNode, GLJ_Material);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ vGroupNode := vPractNode.FindNodeUTF8('Mechs');
|
|
|
+ if vGroupNode <> nil then
|
|
|
+ begin
|
|
|
+ for I := 0 to vGroupNode.ElementCount - 1 do
|
|
|
+ begin
|
|
|
+ vNode := vGroupNode.Elements[I];
|
|
|
+ if SameText(Utf8ToAnsi(vNode.Name), 'Mech') then
|
|
|
+ ImpOne(vNode, GLJ_Machine);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
{TZTBXMLPort}
|
|
|
|
|
|
procedure TZTBXMLPort.AddNodes;
|