|
@@ -3,7 +3,7 @@ unit rmWeiWuZjjlGatherDm;
|
|
|
interface
|
|
|
|
|
|
uses
|
|
|
- SysUtils, Classes, ProjectData, DB, sdDB, DBClient;
|
|
|
+ SysUtils, Classes, ProjectData, DB, sdDB, DBClient, sdIDTree, BillsTree;
|
|
|
|
|
|
type
|
|
|
TZjjl = class
|
|
@@ -39,11 +39,23 @@ type
|
|
|
FBillsEndGatherQuantity: Double;
|
|
|
FBillsEndGatherTotalPrice: Double;
|
|
|
|
|
|
+ FBillsOrgQuantity: Double;
|
|
|
+ FBillsOrgTotalPrice: Double;
|
|
|
+ FBillsMisQuantity: Double;
|
|
|
+ FBillsMisTotalPrice: Double;
|
|
|
+ FBillsOthQuantity: Double;
|
|
|
+ FBillsOthTotalPrice: Double;
|
|
|
+ FBillsQuantity: Double;
|
|
|
+ FBillsTotalPrice: Double;
|
|
|
+
|
|
|
+ FFenBuName: string;
|
|
|
+ FDanWeiName: string;
|
|
|
+
|
|
|
function MergeStr(AStr1, AStr2: string): string;
|
|
|
public
|
|
|
- constructor Create(ARec, ABillsRec, AStageRec: TsdDataRecord);
|
|
|
+ constructor Create(ARec, AStageRec: TsdDataRecord; ANode: TBillsIDTreeNode);
|
|
|
|
|
|
- procedure Merge(ARec, ABillsRec, AStageRec: TsdDataRecord);
|
|
|
+ procedure Merge(ARec, AStageRec: TsdDataRecord; ANode: TBillsIDTreeNode);
|
|
|
end;
|
|
|
|
|
|
TrmWeiWuZjjlGatherData = class(TDataModule)
|
|
@@ -62,7 +74,7 @@ type
|
|
|
cdsZjjlBillsCode: TStringField;
|
|
|
cdsZjjlBillsName: TWideStringField;
|
|
|
cdsZjjlBillsUnits: TWideStringField;
|
|
|
- cdsZjjlBillsPrice: TFloatField;
|
|
|
+ cdsZjjlBillsPrice: TFloatField;
|
|
|
cdsZjjlFilterDrawingCode: TWideStringField;
|
|
|
cdsZjjlBillsCurDealQuantity: TFloatField;
|
|
|
cdsZjjlBillsCurDealTotalPrice: TFloatField;
|
|
@@ -76,9 +88,19 @@ type
|
|
|
cdsZjjlBillsEndQcTotalPrice: TFloatField;
|
|
|
cdsZjjlBillsEndGatherQuantity: TFloatField;
|
|
|
cdsZjjlBillsEndGatherTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsOrgQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsOrgTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsMisQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsMisTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsOthQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsOthTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsTotalPrice: TFloatField;
|
|
|
+ cdsZjjlFenBuName: TWideStringField;
|
|
|
+ cdsZjjlDanWeiName: TWideStringField;
|
|
|
private
|
|
|
FZjjlList: TList;
|
|
|
- function FindZjjl(ARec, ABillsRec: TsdDataRecord): TZjjl;
|
|
|
+ function FindZjjl(ARec: TsdDataRecord; ANode: TBillsIDTreeNode): TZjjl;
|
|
|
|
|
|
procedure GatherZjjl(AProjectData: TProjectData);
|
|
|
procedure WriteData;
|
|
@@ -89,7 +111,7 @@ type
|
|
|
implementation
|
|
|
|
|
|
uses
|
|
|
- ZhAPI, PhaseData, UtilMethods;
|
|
|
+ ZhAPI, PhaseData, UtilMethods, BillsMeasureDm;
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
@@ -110,9 +132,75 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+function GetLeafXmj(ANode: TBillsIDTreeNode): TBillsIDTreeNode;
|
|
|
+begin
|
|
|
+ Result := ANode;
|
|
|
+ while Assigned(Result) and (Result.Rec.B_Code.AsString <> '') do
|
|
|
+ Result := TBillsIDTreeNode(Result.Parent);
|
|
|
+end;
|
|
|
+
|
|
|
+function GetLeafXmjDrawingCode(ANode: TBillsIDTreeNode): String;
|
|
|
+var
|
|
|
+ vLeafXmj: TsdIDTreeNode;
|
|
|
+begin
|
|
|
+ Result := '';
|
|
|
+ vLeafXmj := GetLeafXmj(ANode);
|
|
|
+ if Assigned(vLeafXmj) then
|
|
|
+ Result := vLeafXmj.Rec.ValueByName('DrawingCode').AsString;
|
|
|
+end;
|
|
|
+
|
|
|
{ TZjjl }
|
|
|
|
|
|
-constructor TZjjl.Create(ARec, ABillsRec, AStageRec: TsdDataRecord);
|
|
|
+constructor TZjjl.Create(ARec, AStageRec: TsdDataRecord; ANode: TBillsIDTreeNode);
|
|
|
+
|
|
|
+ // 取树结构的第ALevel层节点的名称(level从0开始)
|
|
|
+ function GetNameByLevel(ANode: TBillsIDTreeNode; ALevel: Integer): string;
|
|
|
+ begin
|
|
|
+ Result := '';
|
|
|
+ if not Assigned(ANode) then Exit;
|
|
|
+ if ANode.Level = ALevel then
|
|
|
+ Result := ANode.Rec.Name.AsString
|
|
|
+ else if ANode.Level > ALevel then
|
|
|
+ Result := GetNameByLevel(TBillsIDTreeNode(ANode.Parent), ALevel);
|
|
|
+ end;
|
|
|
+
|
|
|
+ function GetNameDanWei(ANode: TBillsIDTreeNode): string;
|
|
|
+ begin
|
|
|
+ // 取树结构的第二层节点的名称
|
|
|
+ Result := GetNameByLevel(ANode, 1);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // ANode为计量单元节点,APegNode为桩号节点
|
|
|
+ function GetNameFenBu(ANode, APegNode: TBillsIDTreeNode): string;
|
|
|
+ var
|
|
|
+ vCurNode: TBillsIDTreeNode;
|
|
|
+ begin
|
|
|
+ // 如果计量单元节点的名称为桩号(转化为判断计量单元节点与桩号节点为同一个)
|
|
|
+ if not Assigned(APegNode) or (ANode.ID = APegNode.ID) then
|
|
|
+ // 取树结构的第三层节点的名称
|
|
|
+ Result := GetNameByLevel(ANode, 2)
|
|
|
+ // 否则,取桩号节点的子节点的名称
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ vCurNode := ANode;
|
|
|
+ while vCurNode.Level > APegNode.Level + 1 do
|
|
|
+ vCurNode := TBillsIDTreeNode(vCurNode.Parent);
|
|
|
+ Result := vCurNode.Rec.Name.AsString;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ function GetPegNode(ANode: TBillsIDTreeNode): TBillsIDTreeNode;
|
|
|
+ begin
|
|
|
+ Result := nil;
|
|
|
+ if not Assigned(ANode) then Exit;
|
|
|
+ if CheckPeg(ANode.Rec.Name.AsString) then
|
|
|
+ Result := ANode
|
|
|
+ else
|
|
|
+ Result := GetPegNode(TBillsIDTreeNode(ANode.Parent));
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ vLeafXmj, vPegNode: TBillsIDTreeNode;
|
|
|
begin
|
|
|
FCode := ARec.ValueByName('Code').AsString;
|
|
|
FCertificateCode := ARec.ValueByName('CertificateCode').AsString;
|
|
@@ -126,11 +214,11 @@ begin
|
|
|
FFormulaMemo := ARec.ValueByName('FormulaMemo').AsString;
|
|
|
FRelaFile := ARec.ValueByName('RelaFile').AsString;
|
|
|
|
|
|
- FBillsCode := ABillsRec.ValueByName('B_Code').AsString;
|
|
|
- FBillsName := ABillsRec.ValueByName('Name').AsString;
|
|
|
- FBillsUnits := ABillsRec.ValueByName('Units').AsString;
|
|
|
- FBillsPrice := ABillsRec.ValueByName('Price').AsFloat;
|
|
|
- FFilterDrawingCode := GetThirdPartString(ABillsRec.ValueByName('DrawingCode').AsString);
|
|
|
+ FBillsCode := ANode.Rec.ValueByName('B_Code').AsString;
|
|
|
+ FBillsName := ANode.Rec.ValueByName('Name').AsString;
|
|
|
+ FBillsUnits := ANode.Rec.ValueByName('Units').AsString;
|
|
|
+ FBillsPrice := ANode.Rec.ValueByName('Price').AsFloat;
|
|
|
+ FFilterDrawingCode := GetThirdPartString(GetLeafXmjDrawingCode(ANode));
|
|
|
|
|
|
if Assigned(AStageRec) then
|
|
|
begin
|
|
@@ -148,9 +236,23 @@ begin
|
|
|
FBillsEndGatherQuantity := AStageRec.ValueByName('GatherQuantity').AsFloat;
|
|
|
FBillsEndGatherTotalPrice := AStageRec.ValueByName('GatherTotalPrice').AsFloat;
|
|
|
end;
|
|
|
+
|
|
|
+ FBillsOrgQuantity := ANode.Rec.OrgQuantity.AsFloat;
|
|
|
+ FBillsOrgTotalPrice := ANode.Rec.OrgTotalPrice.AsFloat;
|
|
|
+ FBillsMisQuantity := ANode.Rec.MisQuantity.AsFloat;
|
|
|
+ FBillsMisTotalPrice := ANode.Rec.MisTotalPrice.AsFloat;
|
|
|
+ FBillsOthQuantity := ANode.Rec.OthQuantity.AsFloat;
|
|
|
+ FBillsOthTotalPrice := ANode.Rec.OthTotalPrice.AsFloat;
|
|
|
+ FBillsQuantity := ANode.Rec.Quantity.AsFloat;
|
|
|
+ FBillsTotalPrice := ANode.Rec.TotalPrice.AsFloat;
|
|
|
+
|
|
|
+ vLeafXmj := GetLeafXmj(ANode);
|
|
|
+ vPegNode := GetPegNode(ANode);
|
|
|
+ FFenBuName := GetNameFenBu(vLeafXmj, vPegNode);
|
|
|
+ FDanWeiName := GetNameDanWei(vLeafXmj);
|
|
|
end;
|
|
|
|
|
|
-procedure TZjjl.Merge(ARec, ABillsRec, AStageRec: TsdDataRecord);
|
|
|
+procedure TZjjl.Merge(ARec, AStageRec: TsdDataRecord; ANode: TBillsIDTreeNode);
|
|
|
begin
|
|
|
FCertificateCode := MergeStr(FCertificateCode, ARec.ValueByName('CertificateCode').AsString);
|
|
|
FBGLCode := MergeRelaBGL(FBGLCode, ARec.ValueByName('BGLCode').AsString);
|
|
@@ -174,6 +276,15 @@ begin
|
|
|
FBillsEndGatherQuantity := FBillsEndGatherQuantity + AStageRec.ValueByName('GatherQuantity').AsFloat;
|
|
|
FBillsEndGatherTotalPrice := FBillsEndGatherTotalPrice + AStageRec.ValueByName('GatherTotalPrice').AsFloat;
|
|
|
end;
|
|
|
+
|
|
|
+ FBillsOrgQuantity := FBillsOrgQuantity + ANode.Rec.OrgQuantity.AsFloat;
|
|
|
+ FBillsOrgTotalPrice := FBillsOrgTotalPrice + ANode.Rec.OrgTotalPrice.AsFloat;
|
|
|
+ FBillsMisQuantity := FBillsMisQuantity + ANode.Rec.MisQuantity.AsFloat;
|
|
|
+ FBillsMisTotalPrice := FBillsMisTotalPrice + ANode.Rec.MisTotalPrice.AsFloat;
|
|
|
+ FBillsOthQuantity := FBillsOthQuantity + ANode.Rec.OthQuantity.AsFloat;
|
|
|
+ FBillsOthTotalPrice := FBillsOthTotalPrice + ANode.Rec.OthTotalPrice.AsFloat;
|
|
|
+ FBillsQuantity := FBillsQuantity + ANode.Rec.Quantity.AsFloat;
|
|
|
+ FBillsTotalPrice := FBillsTotalPrice + ANode.Rec.TotalPrice.AsFloat;
|
|
|
end;
|
|
|
|
|
|
function TZjjl.MergeStr(AStr1, AStr2: string): string;
|
|
@@ -213,18 +324,18 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function TrmWeiWuZjjlGatherData.FindZjjl(ARec, ABillsRec: TsdDataRecord): TZjjl;
|
|
|
+function TrmWeiWuZjjlGatherData.FindZjjl(ARec: TsdDataRecord; ANode: TBillsIDTreeNode): TZjjl;
|
|
|
var
|
|
|
sCode, sName, sUnits, sDrawingCode: string;
|
|
|
fPrice: Double;
|
|
|
i: Integer;
|
|
|
vZ: TZjjl;
|
|
|
begin
|
|
|
- sCode := ABillsRec.ValueByName('B_Code').AsString;
|
|
|
- sName := ABillsRec.ValueByName('Name').AsString;
|
|
|
- sUnits := ABillsRec.ValueByName('Units').AsString;
|
|
|
- sDrawingCode := GetThirdPartString(ABillsRec.ValueByName('DrawingCode').AsString);
|
|
|
- fPrice := ABillsRec.valueByName('Price').AsFloat;
|
|
|
+ sCode := ANode.Rec.ValueByName('B_Code').AsString;
|
|
|
+ sName := ANode.Rec.ValueByName('Name').AsString;
|
|
|
+ sUnits := ANode.Rec.ValueByName('Units').AsString;
|
|
|
+ sDrawingCode := GetThirdPartString(GetLeafXmjDrawingCode(ANode));
|
|
|
+ fPrice := ANode.Rec.valueByName('Price').AsFloat;
|
|
|
|
|
|
Result := nil;
|
|
|
for i := 0 to FZjjlList.Count - 1 do
|
|
@@ -243,24 +354,25 @@ end;
|
|
|
procedure TrmWeiWuZjjlGatherData.GatherZjjl(AProjectData: TProjectData);
|
|
|
var
|
|
|
i: Integer;
|
|
|
+ vNode: TBillsIDTreeNode;
|
|
|
Rec, BillsRec, StageRec: TsdDataRecord;
|
|
|
vZ: TZjjl;
|
|
|
begin
|
|
|
for i := 0 to AProjectData.PhaseData.ZJJLData.sddZJJL.RecordCount - 1 do
|
|
|
begin
|
|
|
Rec := AProjectData.PhaseData.ZJJLData.sddZJJL.Records[I];
|
|
|
- BillsRec := AProjectData.BillsData.sddBills.FindKey('idxID', Rec.ValueByName('BillsID').AsInteger);
|
|
|
+ vNode := TBillsIDTreeNode(AProjectData.BillsMeasureData.BillsMeasureTree.FindNode(Rec.ValueByName('BillsID').AsInteger));
|
|
|
StageRec := AProjectData.PhaseData.StageData.StageRecord(Rec.ValueByName('BillsID').AsInteger);
|
|
|
- if Assigned(Rec) and Assigned(BillsRec) then
|
|
|
+ if Assigned(Rec) and Assigned(vNode) then
|
|
|
begin
|
|
|
- vZ := FindZjjl(Rec, BillsRec);
|
|
|
+ vZ := FindZjjl(Rec, vNode);
|
|
|
if not Assigned(vZ) then
|
|
|
begin
|
|
|
- vZ := TZjjl.Create(Rec, BillsRec, StageRec);
|
|
|
+ vZ := TZjjl.Create(Rec, StageRec, vNode);
|
|
|
FZjjlList.Add(vZ);
|
|
|
end
|
|
|
else
|
|
|
- vZ.Merge(Rec, BillsRec, StageRec);
|
|
|
+ vZ.Merge(Rec, StageRec, vNode);
|
|
|
end;
|
|
|
end;
|
|
|
end;
|
|
@@ -286,6 +398,8 @@ begin
|
|
|
cdsZjjlFBFXName.AsString := vZ.FFBFXName;
|
|
|
cdsZjjlUnitName.AsString := vZ.FUnitName;
|
|
|
cdsZjjlDrawingCode.AsString := vZ.FDrawingCode;
|
|
|
+ cdsZjjlFormulaMemo.AsString := vZ.FFormulaMemo;
|
|
|
+ cdsZjjlRelaFile.AsString := vZ.FRelaFile;
|
|
|
|
|
|
cdsZjjlBillsCode.AsString := vZ.FBillsCode;
|
|
|
cdsZjjlBillsName.AsString := vZ.FBillsName;
|
|
@@ -306,6 +420,19 @@ begin
|
|
|
cdsZjjlBillsEndQcTotalPrice.AsFloat := vZ.FBillsEndQcTotalPrice;
|
|
|
cdsZjjlBillsEndGatherQuantity.AsFloat := vZ.FBillsEndGatherQuantity;
|
|
|
cdsZjjlBillsEndGatherTotalPrice.AsFloat := vZ.FBillsEndGatherTotalPrice;
|
|
|
+
|
|
|
+ cdsZjjlBillsOrgQuantity.AsFloat := vZ.FBillsOrgQuantity;
|
|
|
+ cdsZjjlBillsOrgTotalPrice.AsFloat := vZ.FBillsOrgTotalPrice;
|
|
|
+ cdsZjjlBillsMisQuantity.AsFloat := vZ.FBillsMisQuantity;
|
|
|
+ cdsZjjlBillsMisTotalPrice.AsFloat := vZ.FBillsMisTotalPrice;
|
|
|
+ cdsZjjlBillsOthQuantity.AsFloat := vZ.FBillsOthQuantity;
|
|
|
+ cdsZjjlBillsOthTotalPrice.AsFloat := vZ.FBillsOthTotalPrice;
|
|
|
+ cdsZjjlBillsQuantity.AsFloat := vZ.FBillsQuantity;
|
|
|
+ cdsZjjlBillsTotalPrice.AsFloat := vZ.FBillsTotalPrice;
|
|
|
+
|
|
|
+ cdsZjjlFenBuName.AsString := vZ.FFenBuName;
|
|
|
+ cdsZjjlDanWeiName.AsString := vZ.FDanWeiName;
|
|
|
+
|
|
|
cdsZjjl.Post;
|
|
|
end;
|
|
|
end;
|