|
@@ -0,0 +1,313 @@
|
|
|
+unit rmWeiWuZjjlGatherDm;
|
|
|
+
|
|
|
+interface
|
|
|
+
|
|
|
+uses
|
|
|
+ SysUtils, Classes, ProjectData, DB, sdDB, DBClient;
|
|
|
+
|
|
|
+type
|
|
|
+ TZjjl = class
|
|
|
+ private
|
|
|
+ FCode: string;
|
|
|
+ FCertificateCode: string;
|
|
|
+ FBGLCode: string;
|
|
|
+ FPegName: string;
|
|
|
+ FBeginPeg: string;
|
|
|
+ FEndPeg: string;
|
|
|
+ FFBFXName: string;
|
|
|
+ FUnitName: string;
|
|
|
+ FDrawingCode: string;
|
|
|
+ FFormulaMemo: string;
|
|
|
+ FRelaFile: string;
|
|
|
+
|
|
|
+ FBillsCode: string;
|
|
|
+ FBillsName: string;
|
|
|
+ FBillsUnits: string;
|
|
|
+ FBillsPrice: Double;
|
|
|
+ FFilterDrawingCode: string;
|
|
|
+
|
|
|
+ FBillsCurDealQuantity: Double;
|
|
|
+ FBillsCurDealTotalPrice: Double;
|
|
|
+ FBillsCurQcQuantity: Double;
|
|
|
+ FBillsCurQcTotalPrice: Double;
|
|
|
+ FBillsCurGatherQuantity: Double;
|
|
|
+ FBillsCurGatherTotalPrice: Double;
|
|
|
+ FBillsEndDealQuantity: Double;
|
|
|
+ FBillsEndDealTotalPrice: Double;
|
|
|
+ FBillsEndQcQuantity: Double;
|
|
|
+ FBillsEndQcTotalPrice: Double;
|
|
|
+ FBillsEndGatherQuantity: Double;
|
|
|
+ FBillsEndGatherTotalPrice: Double;
|
|
|
+
|
|
|
+ function MergeStr(AStr1, AStr2: string): string;
|
|
|
+ public
|
|
|
+ constructor Create(ARec, ABillsRec, AStageRec: TsdDataRecord);
|
|
|
+
|
|
|
+ procedure Merge(ARec, ABillsRec, AStageRec: TsdDataRecord);
|
|
|
+ end;
|
|
|
+
|
|
|
+ TrmWeiWuZjjlGatherData = class(TDataModule)
|
|
|
+ cdsZjjl: TClientDataSet;
|
|
|
+ cdsZjjlCode: TWideStringField;
|
|
|
+ cdsZjjlCertificateCode: TWideStringField;
|
|
|
+ cdsZjjlBGLCode: TMemoField;
|
|
|
+ cdsZjjlPegName: TWideStringField;
|
|
|
+ cdsZjjlBeginPeg: TWideStringField;
|
|
|
+ cdsZjjlEndPeg: TWideStringField;
|
|
|
+ cdsZjjlFBFXName: TWideStringField;
|
|
|
+ cdsZjjlUnitName: TWideStringField;
|
|
|
+ cdsZjjlDrawingCode: TWideStringField;
|
|
|
+ cdsZjjlFormulaMemo: TMemoField;
|
|
|
+ cdsZjjlRelaFile: TMemoField;
|
|
|
+ cdsZjjlBillsCode: TStringField;
|
|
|
+ cdsZjjlBillsName: TWideStringField;
|
|
|
+ cdsZjjlBillsUnits: TWideStringField;
|
|
|
+ cdsZjjlBillsPrice: TFloatField;
|
|
|
+ cdsZjjlFilterDrawingCode: TWideStringField;
|
|
|
+ cdsZjjlBillsCurDealQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsCurDealTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsCurQcQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsCurQcTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsCurGatherQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsCurGatherTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsEndDealQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsEndDealTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsEndQcQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsEndQcTotalPrice: TFloatField;
|
|
|
+ cdsZjjlBillsEndGatherQuantity: TFloatField;
|
|
|
+ cdsZjjlBillsEndGatherTotalPrice: TFloatField;
|
|
|
+ private
|
|
|
+ FZjjlList: TList;
|
|
|
+ function FindZjjl(ARec, ABillsRec: TsdDataRecord): TZjjl;
|
|
|
+
|
|
|
+ procedure GatherZjjl(AProjectData: TProjectData);
|
|
|
+ procedure WriteData;
|
|
|
+ public
|
|
|
+ function AssignData(AProjectData: TProjectData): TDataSet;
|
|
|
+ end;
|
|
|
+
|
|
|
+implementation
|
|
|
+
|
|
|
+uses
|
|
|
+ ZhAPI, PhaseData, UtilMethods;
|
|
|
+
|
|
|
+{$R *.dfm}
|
|
|
+
|
|
|
+function GetThirdPartString(const AStr: string; AFilter: Char = '-'): string;
|
|
|
+var
|
|
|
+ sgs: TStringList;
|
|
|
+begin
|
|
|
+ sgs := TStringList.Create;
|
|
|
+ try
|
|
|
+ sgs.Delimiter := AFilter;
|
|
|
+ sgs.DelimitedText := AStr;
|
|
|
+
|
|
|
+ while sgs.Count > 2 do
|
|
|
+ sgs.Delete(sgs.Count - 1);
|
|
|
+ Result := sgs.DelimitedText;
|
|
|
+ finally
|
|
|
+ sgs.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TZjjl }
|
|
|
+
|
|
|
+constructor TZjjl.Create(ARec, ABillsRec, AStageRec: TsdDataRecord);
|
|
|
+begin
|
|
|
+ FCode := ARec.ValueByName('Code').AsString;
|
|
|
+ FCertificateCode := ARec.ValueByName('CertificateCode').AsString;
|
|
|
+ FBGLCode := ARec.ValueByName('BGLCode').AsString;
|
|
|
+ FPegName := ARec.ValueByName('PegName').AsString;
|
|
|
+ FBeginPeg := ARec.ValueByName('BeginPeg').AsString;
|
|
|
+ FEndPeg := ARec.ValueByName('EndPeg').AsString;
|
|
|
+ FFBFXName := ARec.ValueByName('FBFXName').AsString;
|
|
|
+ FUnitName := ARec.ValueByName('UnitName').AsString;
|
|
|
+ FDrawingCode := ARec.ValueByName('DrawingCode').AsString;
|
|
|
+ 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);
|
|
|
+
|
|
|
+ if Assigned(AStageRec) then
|
|
|
+ begin
|
|
|
+ FBillsCurDealQuantity := AStageRec.ValueByName('DealQuantity').AsFloat;
|
|
|
+ FBillsCurDealTotalPrice := AStageRec.ValueByName('DealTotalPrice').AsFloat;
|
|
|
+ FBillsCurQcQuantity := AStageRec.ValueByName('QcQuantity').AsFloat;
|
|
|
+ FBillsCurQcTotalPrice := AStageRec.ValueByName('QcTotalPrice').AsFloat;
|
|
|
+ FBillsCurGatherQuantity := AStageRec.ValueByName('GatherQuantity').AsFloat;
|
|
|
+ FBillsCurGatherTotalPrice := AStageRec.ValueByName('GatherTotalPrice').AsFloat;
|
|
|
+
|
|
|
+ FBillsEndDealQuantity := AStageRec.ValueByName('DealQuantity').AsFloat;
|
|
|
+ FBillsEndDealTotalPrice := AStageRec.ValueByName('DealTotalPrice').AsFloat;
|
|
|
+ FBillsEndQcQuantity := AStageRec.ValueByName('QcQuantity').AsFloat;
|
|
|
+ FBillsEndQcTotalPrice := AStageRec.ValueByName('QcTotalPrice').AsFloat;
|
|
|
+ FBillsEndGatherQuantity := AStageRec.ValueByName('GatherQuantity').AsFloat;
|
|
|
+ FBillsEndGatherTotalPrice := AStageRec.ValueByName('GatherTotalPrice').AsFloat;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TZjjl.Merge(ARec, ABillsRec, AStageRec: TsdDataRecord);
|
|
|
+begin
|
|
|
+ FCertificateCode := MergeStr(FCertificateCode, ARec.ValueByName('CertificateCode').AsString);
|
|
|
+ FBGLCode := MergeRelaBGL(FBGLCode, ARec.ValueByName('BGLCode').AsString);
|
|
|
+ FDrawingCode := MergeStr(FDrawingCode, ARec.ValueByName('DrawingCode').AsString);
|
|
|
+ FFormulaMemo := MergeStr(FFormulaMemo, ARec.ValueByName('FormulaMemo').AsString);
|
|
|
+ FRelaFile := MergeStr(FRelaFile, ARec.ValueByName('RelaFile').AsString);
|
|
|
+
|
|
|
+ if Assigned(AStageRec) then
|
|
|
+ begin
|
|
|
+ FBillsCurDealQuantity := FBillsCurDealQuantity + AStageRec.ValueByName('DealQuantity').AsFloat;
|
|
|
+ FBillsCurDealTotalPrice := FBillsCurDealTotalPrice + AStageRec.ValueByName('DealTotalPrice').AsFloat;
|
|
|
+ FBillsCurQcQuantity := FBillsCurQcQuantity + AStageRec.ValueByName('QcQuantity').AsFloat;
|
|
|
+ FBillsCurQcTotalPrice := FBillsCurQcTotalPrice + AStageRec.ValueByName('QcTotalPrice').AsFloat;
|
|
|
+ FBillsCurGatherQuantity := FBillsCurGatherQuantity + AStageRec.ValueByName('GatherQuantity').AsFloat;
|
|
|
+ FBillsCurGatherTotalPrice := FBillsCurGatherTotalPrice + AStageRec.ValueByName('GatherTotalPrice').AsFloat;
|
|
|
+
|
|
|
+ FBillsEndDealQuantity := FBillsEndDealQuantity + AStageRec.ValueByName('DealQuantity').AsFloat;
|
|
|
+ FBillsEndDealTotalPrice := FBillsEndDealTotalPrice + AStageRec.ValueByName('DealTotalPrice').AsFloat;
|
|
|
+ FBillsEndQcQuantity := FBillsEndQcQuantity + AStageRec.ValueByName('QcQuantity').AsFloat;
|
|
|
+ FBillsEndQcTotalPrice := FBillsEndQcTotalPrice + AStageRec.ValueByName('QcTotalPrice').AsFloat;
|
|
|
+ FBillsEndGatherQuantity := FBillsEndGatherQuantity + AStageRec.ValueByName('GatherQuantity').AsFloat;
|
|
|
+ FBillsEndGatherTotalPrice := FBillsEndGatherTotalPrice + AStageRec.ValueByName('GatherTotalPrice').AsFloat;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TZjjl.MergeStr(AStr1, AStr2: string): string;
|
|
|
+begin
|
|
|
+ if (AStr1 <> '') then
|
|
|
+ begin
|
|
|
+ if (AStr2 <> '') then
|
|
|
+ Result := AStr1 + ';' + AStr2
|
|
|
+ else
|
|
|
+ Result := AStr1;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ if (AStr2 <> '') then
|
|
|
+ Result := AStr2
|
|
|
+ else
|
|
|
+ Result := '';
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TrmWeiWuZjjlGatherData }
|
|
|
+
|
|
|
+function TrmWeiWuZjjlGatherData.AssignData(
|
|
|
+ AProjectData: TProjectData): TDataSet;
|
|
|
+begin
|
|
|
+ FZjjlList := TList.Create;
|
|
|
+ try
|
|
|
+ if AProjectData.PhaseData.Active then
|
|
|
+ begin
|
|
|
+ GatherZjjl(AProjectData);
|
|
|
+ WriteData;
|
|
|
+ end;
|
|
|
+ Result := cdsZjjl;
|
|
|
+ finally
|
|
|
+ ClearObjects(FZjjlList);
|
|
|
+ FZjjlList.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TrmWeiWuZjjlGatherData.FindZjjl(ARec, ABillsRec: TsdDataRecord): 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;
|
|
|
+
|
|
|
+ Result := nil;
|
|
|
+ for i := 0 to FZjjlList.Count - 1 do
|
|
|
+ begin
|
|
|
+ vZ := TZjjl(FZjjlList.Items[i]);
|
|
|
+ if SameText(vZ.FBillsCode, sCode) and SameText(vZ.FBillsName, sName) and SameText(vZ.FBillsUnits, sUnits) and
|
|
|
+ (PriceRoundTo(fPrice - vZ.FBillsPrice) < 0.00001) and
|
|
|
+ SameText(sDrawingCode, vZ.FFilterDrawingCode) then
|
|
|
+ begin
|
|
|
+ Result := vZ;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TrmWeiWuZjjlGatherData.GatherZjjl(AProjectData: TProjectData);
|
|
|
+var
|
|
|
+ i: Integer;
|
|
|
+ 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);
|
|
|
+ StageRec := AProjectData.PhaseData.StageData.StageRecord(Rec.ValueByName('BillsID').AsInteger);
|
|
|
+ if Assigned(Rec) and Assigned(BillsRec) then
|
|
|
+ begin
|
|
|
+ vZ := FindZjjl(Rec, BillsRec);
|
|
|
+ if not Assigned(vZ) then
|
|
|
+ begin
|
|
|
+ vZ := TZjjl.Create(Rec, BillsRec, StageRec);
|
|
|
+ FZjjlList.Add(vZ);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ vZ.Merge(Rec, BillsRec, StageRec);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TrmWeiWuZjjlGatherData.WriteData;
|
|
|
+var
|
|
|
+ i: Integer;
|
|
|
+ vZ: TZjjl;
|
|
|
+begin
|
|
|
+ cdsZjjl.Active := True;
|
|
|
+ cdsZjjl.EmptyDataSet;
|
|
|
+ for i := 0 to FZjjlList.Count - 1 do
|
|
|
+ begin
|
|
|
+ vZ := TZjjl(FZjjlList.Items[i]);
|
|
|
+
|
|
|
+ cdsZjjl.Append;
|
|
|
+ cdsZjjlCode.AsString := vZ.FCode;
|
|
|
+ cdsZjjlCertificateCode.AsString := vZ.FCertificateCode;
|
|
|
+ cdsZjjlBGLCode.AsString := vZ.FBGLCode;
|
|
|
+ cdsZjjlPegName.AsString := vZ.FPegName;
|
|
|
+ cdsZjjlBeginPeg.AsString := vZ.FBeginPeg;
|
|
|
+ cdsZjjlEndPeg.AsString := vZ.FEndPeg;
|
|
|
+ cdsZjjlFBFXName.AsString := vZ.FFBFXName;
|
|
|
+ cdsZjjlUnitName.AsString := vZ.FUnitName;
|
|
|
+ cdsZjjlDrawingCode.AsString := vZ.FDrawingCode;
|
|
|
+
|
|
|
+ cdsZjjlBillsCode.AsString := vZ.FBillsCode;
|
|
|
+ cdsZjjlBillsName.AsString := vZ.FBillsName;
|
|
|
+ cdsZjjlBillsUnits.AsString := vZ.FBillsUnits;
|
|
|
+ cdsZjjlBillsPrice.AsFloat := vZ.FBillsPrice;
|
|
|
+ cdsZjjlFilterDrawingCode.AsString := vZ.FFilterDrawingCode;
|
|
|
+
|
|
|
+ cdsZjjlBillsCurDealQuantity.AsFloat := vZ.FBillsCurDealQuantity;
|
|
|
+ cdsZjjlBillsCurDealTotalPrice.AsFloat := vZ.FBillsCurDealTotalPrice;
|
|
|
+ cdsZjjlBillsCurQcQuantity.AsFloat := vZ.FBillsCurQcQuantity;
|
|
|
+ cdsZjjlBillsCurQcTotalPrice.AsFloat := vZ.FBillsCurQcTotalPrice;
|
|
|
+ cdsZjjlBillsCurGatherQuantity.AsFloat := vZ.FBillsCurGatherQuantity;
|
|
|
+ cdsZjjlBillsCurGatherTotalPrice.AsFloat := vZ.FBillsCurGatherTotalPrice;
|
|
|
+
|
|
|
+ cdsZjjlBillsEndDealQuantity.AsFloat := vZ.FBillsEndDealQuantity;
|
|
|
+ cdsZjjlBillsEndDealTotalPrice.AsFloat := vZ.FBillsEndDealTotalPrice;
|
|
|
+ cdsZjjlBillsEndQcQuantity.AsFloat := vZ.FBillsEndQcQuantity;
|
|
|
+ cdsZjjlBillsEndQcTotalPrice.AsFloat := vZ.FBillsEndQcTotalPrice;
|
|
|
+ cdsZjjlBillsEndGatherQuantity.AsFloat := vZ.FBillsEndGatherQuantity;
|
|
|
+ cdsZjjlBillsEndGatherTotalPrice.AsFloat := vZ.FBillsEndGatherTotalPrice;
|
|
|
+ cdsZjjl.Post;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+end.
|