123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- unit rmGclBillsAddDm;
- interface
- uses
- SysUtils, Classes, ProjectData, DB, DBClient, sdIDTree,
- PhaseData, sdDB, StageDm;
- type
- TP_DoubleArray = array [1..50] of Double;
- TGclAddNode = class
- FB_Code: string;
- FIndexCode: string;
- FName: string;
- FUnits: string;
- FPrice: Double;
- FDealQuantity: Double;
- FDealTotalPrice: Double;
- FQuantity: Double;
- FTotalPrice: Double;
- FP_Quantity: TP_DoubleArray;
- FP_TotalPrice: TP_DoubleArray;
- end;
- TrmGclBillsAddData = class(TDataModule)
- cdsBills: TClientDataSet;
- cdsBillsB_Code: TStringField;
- cdsBillsIndexCode: TStringField;
- cdsBillsName: TWideStringField;
- cdsBillsUnits: TWideStringField;
- cdsBillsPrice: TFloatField;
- cdsBillsDealQuantity: TFloatField;
- cdsBillsDealTotalPrice: TFloatField;
- cdsBillsQuantity: TFloatField;
- cdsBillsTotalPrice: TFloatField;
- cdsBillsQuantity1: TFloatField;
- cdsBillsTotalPrice1: TFloatField;
- cdsBillsQuantity2: TFloatField;
- cdsBillsTotalPrice2: TFloatField;
- cdsBillsQuantity3: TFloatField;
- cdsBillsTotalPrice3: TFloatField;
- cdsBillsQuantity4: TFloatField;
- cdsBillsTotalPrice4: TFloatField;
- cdsBillsQuantity5: TFloatField;
- cdsBillsTotalPrice5: TFloatField;
- cdsBillsQuantity6: TFloatField;
- cdsBillsTotalPrice6: TFloatField;
- cdsBillsQuantity7: TFloatField;
- cdsBillsTotalPrice7: TFloatField;
- cdsBillsQuantity8: TFloatField;
- cdsBillsTotalPrice8: TFloatField;
- cdsBillsQuantity9: TFloatField;
- cdsBillsTotalPrice9: TFloatField;
- cdsBillsQuantity10: TFloatField;
- cdsBillsTotalPrice10: TFloatField;
- cdsBillsQuantity11: TFloatField;
- cdsBillsTotalPrice11: TFloatField;
- cdsBillsQuantity12: TFloatField;
- cdsBillsTotalPrice12: TFloatField;
- cdsBillsQuantity13: TFloatField;
- cdsBillsTotalPrice13: TFloatField;
- cdsBillsQuantity14: TFloatField;
- cdsBillsTotalPrice14: TFloatField;
- cdsBillsQuantity15: TFloatField;
- cdsBillsTotalPrice15: TFloatField;
- cdsBillsQuantity16: TFloatField;
- cdsBillsTotalPrice16: TFloatField;
- cdsBillsQuantity17: TFloatField;
- cdsBillsTotalPrice17: TFloatField;
- cdsBillsQuantity18: TFloatField;
- cdsBillsTotalPrice18: TFloatField;
- cdsBillsQuantity19: TFloatField;
- cdsBillsTotalPrice19: TFloatField;
- cdsBillsQuantity20: TFloatField;
- cdsBillsTotalPrice20: TFloatField;
- cdsBillsQuantity21: TFloatField;
- cdsBillsTotalPrice21: TFloatField;
- cdsBillsQuantity22: TFloatField;
- cdsBillsTotalPrice22: TFloatField;
- cdsBillsQuantity23: TFloatField;
- cdsBillsTotalPrice23: TFloatField;
- cdsBillsQuantity24: TFloatField;
- cdsBillsTotalPrice24: TFloatField;
- cdsBillsQuantity25: TFloatField;
- cdsBillsTotalPrice25: TFloatField;
- cdsBillsQuantity26: TFloatField;
- cdsBillsTotalPrice26: TFloatField;
- cdsBillsQuantity27: TFloatField;
- cdsBillsTotalPrice27: TFloatField;
- cdsBillsQuantity28: TFloatField;
- cdsBillsTotalPrice28: TFloatField;
- cdsBillsQuantity29: TFloatField;
- cdsBillsTotalPrice29: TFloatField;
- cdsBillsQuantity30: TFloatField;
- cdsBillsTotalPrice30: TFloatField;
- cdsBillsQuantity31: TFloatField;
- cdsBillsTotalPrice31: TFloatField;
- cdsBillsQuantity32: TFloatField;
- cdsBillsTotalPrice32: TFloatField;
- cdsBillsQuantity33: TFloatField;
- cdsBillsTotalPrice33: TFloatField;
- cdsBillsQuantity34: TFloatField;
- cdsBillsTotalPrice34: TFloatField;
- cdsBillsQuantity35: TFloatField;
- cdsBillsTotalPrice35: TFloatField;
- cdsBillsQuantity36: TFloatField;
- cdsBillsTotalPrice36: TFloatField;
- cdsBillsQuantity37: TFloatField;
- cdsBillsTotalPrice37: TFloatField;
- cdsBillsQuantity38: TFloatField;
- cdsBillsTotalPrice38: TFloatField;
- cdsBillsQuantity39: TFloatField;
- cdsBillsTotalPrice39: TFloatField;
- cdsBillsQuantity40: TFloatField;
- cdsBillsTotalPrice40: TFloatField;
- cdsBillsQuantity41: TFloatField;
- cdsBillsTotalPrice41: TFloatField;
- cdsBillsQuantity42: TFloatField;
- cdsBillsTotalPrice42: TFloatField;
- cdsBillsQuantity43: TFloatField;
- cdsBillsTotalPrice43: TFloatField;
- cdsBillsQuantity44: TFloatField;
- cdsBillsTotalPrice44: TFloatField;
- cdsBillsQuantity45: TFloatField;
- cdsBillsTotalPrice45: TFloatField;
- cdsBillsQuantity46: TFloatField;
- cdsBillsTotalPrice46: TFloatField;
- cdsBillsQuantity47: TFloatField;
- cdsBillsTotalPrice47: TFloatField;
- cdsBillsQuantity48: TFloatField;
- cdsBillsTotalPrice48: TFloatField;
- cdsBillsQuantity49: TFloatField;
- cdsBillsTotalPrice49: TFloatField;
- cdsBillsQuantity50: TFloatField;
- cdsBillsTotalPrice50: TFloatField;
- private
- FProjectData: TProjectData;
- FGclAddList: TList;
- function FindGclNode(ARec: TsdDataRecord): TGclAddNode;
- procedure FilterGclBills(ANode: TsdIDTreeNode);
- procedure FilterBills(ANode: TsdIDTreeNode);
- procedure LoadStageData(StageData: TStageData; APhaseIndex: Integer);
- procedure LoadPhaseData(APhaseIndex: Integer; AProjectData: TProjectData = nil);
- procedure WriteBills;
- public
- function AssignData(AProjectData: TProjectData): TDataSet;
- end;
- implementation
- uses
- ZhAPI, UtilMethods;
- {$R *.dfm}
- { TrmGclBillsAddData }
- function TrmGclBillsAddData.AssignData(AProjectData: TProjectData): TDataSet;
- var
- iPhase: Integer;
- begin
- FProjectData := AProjectData;
- FGclAddList := TList.Create;
- cdsBills.DisableControls;
- cdsBills.Active := True;
- cdsBills.EmptyDataSet;
- try
- FilterBills(FProjectData.BillsCompileData.BillsCompileTree.FirstNode);
- for iPhase := 1 to FProjectData.ProjProperties.PhaseCount do
- LoadPhaseData(iPhase, FProjectData);
- WriteBills;
- finally
- Result := cdsBills;
- cdsBills.EnableControls;
- ClearObjects(FGclAddList);
- FGclAddList.Free;
- end;
- end;
- procedure TrmGclBillsAddData.FilterBills(ANode: TsdIDTreeNode);
- begin
- if not Assigned(ANode) then Exit;
- if ANode.HasChildren then
- FilterBills(ANode.FirstChild)
- else
- FilterGclBills(ANode);
- FilterBills(ANode.NextSibling);
- end;
- procedure TrmGclBillsAddData.FilterGclBills(ANode: TsdIDTreeNode);
- function CreateGclNode(ARec: TsdDataRecord): TGclAddNode;
- begin
- Result := TGclAddNode.Create;
- FGclAddList.Add(Result);
- Result.FB_Code := ARec.ValueByName('B_Code').AsString;
- Result.FIndexCode := B_CodeToIndexCode(ARec.ValueByName('B_Code').AsString);
- Result.FName := ARec.ValueByName('Name').AsString;
- Result.FUnits := ARec.ValueByName('Units').AsString;
- Result.FPrice := ARec.ValueByName('Price').AsFloat;
- end;
- function GetGclNode(ARec: TsdDataRecord): TGclAddNode;
- begin
- Result := FindGclNode(ARec);
- if not Assigned(Result) then
- Result := CreateGclNode(ARec);
- end;
- procedure LoadDealData(AGclNode: TGclAddNode; AB_Code: string);
- var
- DealRec: TsdDataRecord;
- begin
- DealRec := TProjectData(FProjectData).DealBillsData.DealRecord(AB_Code);
- if Assigned(DealRec) then
- begin
- AGclNode.FDealQuantity := DealRec.ValueByName('Quantity').AsFloat;
- AGclNode.FDealTotalPrice := DealRec.ValueByName('TotalPrice').AsFloat;
- end;
- end;
- var
- Rec, StageRec: TsdDataRecord;
- GclNode: TGclAddNode;
- begin
- if not Assigned(ANode) then Exit;
- Rec := ANode.Rec;
- if Rec.ValueByName('B_Code').AsString = '' then Exit;
- GclNode := GetGclNode(Rec);
- LoadDealData(GclNode, Rec.ValueByName('B_Code').AsString);
- GclNode.FQuantity := GclNode.FQuantity + Rec.ValueByName('Quantity').AsFloat;
- GclNode.FTotalPrice := GclNode.FTotalPrice + Rec.ValueByName('TotalPrice').AsFloat;
- end;
- function TrmGclBillsAddData.FindGclNode(ARec: TsdDataRecord): TGclAddNode;
- var
- I: Integer;
- GclNode: TGclAddNode;
- begin
- Result := nil;
- for I := 0 to FGclAddList.Count - 1 do
- begin
- GclNode := TGclAddNode(FGclAddList.Items[I]);
- if SameText(GclNode.FB_Code, ARec.ValueByName('B_Code').AsString) and
- SameText(GclNode.FName, ARec.ValueByName('Name').AsString) and
- SameText(GclNode.FUnits, ARec.ValueByName('Units').AsString) and
- (GclNode.FPrice = ARec.ValueByName('Price').AsFloat) then
- begin
- Result := GclNode;
- Break;
- end;
- end;
- end;
- procedure TrmGclBillsAddData.LoadPhaseData(APhaseIndex: Integer; AProjectData: TProjectData);
- var
- PhaseData: TPhaseData;
- StageData: TStageData;
- begin
- PhaseData := TPhaseData.Create(AProjectData);
- try
- PhaseData.SimpleOpen(Format('%s\Phase%d.dat', [FProjectData.TempPath, APhaseIndex]));
- try
- StageData := TStageData.Create(PhaseData);
- StageData.TableName := PhaseData.StageTableName[PhaseData.AuditCount];
- StageData.Open(PhaseData.ADOConnection);
- LoadStageData(StageData, APhaseIndex);
- finally
- StageData.Free;
- end;
- finally
- PhaseData.Free;
- end;
- end;
- procedure TrmGclBillsAddData.LoadStageData(
- StageData: TStageData; APhaseIndex: Integer);
- var
- i: Integer;
- StageRec: TsdDataRecord;
- stnNode: TsdIDTreeNode;
- GclNode: TGclAddNode;
- begin
- for i := 0 to StageData.sddStage.RecordCount - 1 do
- begin
- StageRec := StageData.sddStage.Records[i];
- with FProjectData.BillsCompileData.BillsCompileTree do
- stnNode := FindNode(StageRec.ValueByName('BillsID').AsInteger);
- // 非最底层工程量清单不添加数据
- if not Assigned(stnNode) or stnNode.HasChildren or
- (stnNode.Rec.ValueByName('B_Code').AsString = '') then
- Continue;
- GclNode := FindGclNode(stnNode.Rec);
- if Assigned(GclNode) then
- begin
- GclNode.FP_Quantity[APhaseIndex] := GclNode.FP_Quantity[APhaseIndex] + StageRec.ValueByName('GatherQuantity').AsFloat;
- GclNode.FP_TotalPrice[APhaseIndex] := GclNode.FP_TotalPrice[APhaseIndex] + StageRec.ValueByName('GatherTotalPrice').AsFloat;
- end;
- end;
- end;
- procedure TrmGclBillsAddData.WriteBills;
- var
- iGcl: Integer;
- GclAddNode: TGclAddNode;
- begin
- for iGcl := 0 to FGclAddList.Count - 1 do
- begin
- GclAddNode := TGclAddNode(FGclAddList.Items[iGcl]);
- cdsBills.Append;
- cdsBillsB_Code.AsString := GclAddNode.FB_Code;
- cdsBillsIndexCode.AsString := GclAddNode.FIndexCode;
- cdsBillsName.AsString := GclAddNode.FName;
- cdsBillsUnits.AsString := GclAddNode.FUnits;
- cdsBillsPrice.AsFloat := GclAddNode.FPrice;
- cdsBillsDealQuantity.AsFloat := GclAddNode.FDealQuantity;
- cdsBillsDealTotalPrice.AsFloat := GclAddNode.FDealTotalPrice;
- cdsBillsQuantity.AsFloat := GclAddNode.FQuantity;
- cdsBillsTotalPrice.AsFloat := GclAddNode.FTotalPrice;
- cdsBillsQuantity1.AsFloat := GclAddNode.FP_Quantity[1];
- cdsBillsTotalPrice1.AsFloat := GclAddNode.FP_TotalPrice[1];
- cdsBillsQuantity2.AsFloat := GclAddNode.FP_Quantity[2];
- cdsBillsTotalPrice2.AsFloat := GclAddNode.FP_TotalPrice[2];
- cdsBillsQuantity3.AsFloat := GclAddNode.FP_Quantity[3];
- cdsBillsTotalPrice3.AsFloat := GclAddNode.FP_TotalPrice[3];
- cdsBillsQuantity4.AsFloat := GclAddNode.FP_Quantity[4];
- cdsBillsTotalPrice4.AsFloat := GclAddNode.FP_TotalPrice[4];
- cdsBillsQuantity5.AsFloat := GclAddNode.FP_Quantity[5];
- cdsBillsTotalPrice5.AsFloat := GclAddNode.FP_TotalPrice[5];
- cdsBillsQuantity6.AsFloat := GclAddNode.FP_Quantity[6];
- cdsBillsTotalPrice6.AsFloat := GclAddNode.FP_TotalPrice[6];
- cdsBillsQuantity7.AsFloat := GclAddNode.FP_Quantity[7];
- cdsBillsTotalPrice7.AsFloat := GclAddNode.FP_TotalPrice[7];
- cdsBillsQuantity8.AsFloat := GclAddNode.FP_Quantity[8];
- cdsBillsTotalPrice8.AsFloat := GclAddNode.FP_TotalPrice[8];
- cdsBillsQuantity9.AsFloat := GclAddNode.FP_Quantity[9];
- cdsBillsTotalPrice9.AsFloat := GclAddNode.FP_TotalPrice[9];
- cdsBillsQuantity10.AsFloat := GclAddNode.FP_Quantity[10];
- cdsBillsTotalPrice10.AsFloat := GclAddNode.FP_TotalPrice[10];
- cdsBillsQuantity11.AsFloat := GclAddNode.FP_Quantity[11];
- cdsBillsTotalPrice11.AsFloat := GclAddNode.FP_TotalPrice[11];
- cdsBillsQuantity12.AsFloat := GclAddNode.FP_Quantity[12];
- cdsBillsTotalPrice12.AsFloat := GclAddNode.FP_TotalPrice[12];
- cdsBillsQuantity13.AsFloat := GclAddNode.FP_Quantity[13];
- cdsBillsTotalPrice13.AsFloat := GclAddNode.FP_TotalPrice[13];
- cdsBillsQuantity14.AsFloat := GclAddNode.FP_Quantity[14];
- cdsBillsTotalPrice14.AsFloat := GclAddNode.FP_TotalPrice[14];
- cdsBillsQuantity15.AsFloat := GclAddNode.FP_Quantity[15];
- cdsBillsTotalPrice15.AsFloat := GclAddNode.FP_TotalPrice[15];
- cdsBillsQuantity16.AsFloat := GclAddNode.FP_Quantity[16];
- cdsBillsTotalPrice16.AsFloat := GclAddNode.FP_TotalPrice[16];
- cdsBillsQuantity17.AsFloat := GclAddNode.FP_Quantity[17];
- cdsBillsTotalPrice17.AsFloat := GclAddNode.FP_TotalPrice[17];
- cdsBillsQuantity18.AsFloat := GclAddNode.FP_Quantity[18];
- cdsBillsTotalPrice18.AsFloat := GclAddNode.FP_TotalPrice[18];
- cdsBillsQuantity19.AsFloat := GclAddNode.FP_Quantity[19];
- cdsBillsTotalPrice19.AsFloat := GclAddNode.FP_TotalPrice[19];
- cdsBillsQuantity20.AsFloat := GclAddNode.FP_Quantity[20];
- cdsBillsTotalPrice20.AsFloat := GclAddNode.FP_TotalPrice[20];
- cdsBillsQuantity21.AsFloat := GclAddNode.FP_Quantity[21];
- cdsBillsTotalPrice21.AsFloat := GclAddNode.FP_TotalPrice[21];
- cdsBillsQuantity22.AsFloat := GclAddNode.FP_Quantity[22];
- cdsBillsTotalPrice22.AsFloat := GclAddNode.FP_TotalPrice[22];
- cdsBillsQuantity23.AsFloat := GclAddNode.FP_Quantity[23];
- cdsBillsTotalPrice23.AsFloat := GclAddNode.FP_TotalPrice[23];
- cdsBillsQuantity24.AsFloat := GclAddNode.FP_Quantity[24];
- cdsBillsTotalPrice24.AsFloat := GclAddNode.FP_TotalPrice[24];
- cdsBillsQuantity25.AsFloat := GclAddNode.FP_Quantity[25];
- cdsBillsTotalPrice25.AsFloat := GclAddNode.FP_TotalPrice[25];
- cdsBillsQuantity26.AsFloat := GclAddNode.FP_Quantity[26];
- cdsBillsTotalPrice26.AsFloat := GclAddNode.FP_TotalPrice[26];
- cdsBillsQuantity27.AsFloat := GclAddNode.FP_Quantity[27];
- cdsBillsTotalPrice27.AsFloat := GclAddNode.FP_TotalPrice[27];
- cdsBillsQuantity28.AsFloat := GclAddNode.FP_Quantity[28];
- cdsBillsTotalPrice28.AsFloat := GclAddNode.FP_TotalPrice[28];
- cdsBillsQuantity29.AsFloat := GclAddNode.FP_Quantity[29];
- cdsBillsTotalPrice29.AsFloat := GclAddNode.FP_TotalPrice[29];
- cdsBillsQuantity30.AsFloat := GclAddNode.FP_Quantity[30];
- cdsBillsTotalPrice30.AsFloat := GclAddNode.FP_TotalPrice[30];
- cdsBillsQuantity31.AsFloat := GclAddNode.FP_Quantity[31];
- cdsBillsTotalPrice31.AsFloat := GclAddNode.FP_TotalPrice[31];
- cdsBillsQuantity32.AsFloat := GclAddNode.FP_Quantity[32];
- cdsBillsTotalPrice32.AsFloat := GclAddNode.FP_TotalPrice[32];
- cdsBillsQuantity33.AsFloat := GclAddNode.FP_Quantity[33];
- cdsBillsTotalPrice33.AsFloat := GclAddNode.FP_TotalPrice[33];
- cdsBillsQuantity34.AsFloat := GclAddNode.FP_Quantity[34];
- cdsBillsTotalPrice34.AsFloat := GclAddNode.FP_TotalPrice[34];
- cdsBillsQuantity35.AsFloat := GclAddNode.FP_Quantity[35];
- cdsBillsTotalPrice35.AsFloat := GclAddNode.FP_TotalPrice[35];
- cdsBillsQuantity36.AsFloat := GclAddNode.FP_Quantity[36];
- cdsBillsTotalPrice36.AsFloat := GclAddNode.FP_TotalPrice[36];
- cdsBillsQuantity37.AsFloat := GclAddNode.FP_Quantity[37];
- cdsBillsTotalPrice37.AsFloat := GclAddNode.FP_TotalPrice[37];
- cdsBillsQuantity38.AsFloat := GclAddNode.FP_Quantity[38];
- cdsBillsTotalPrice38.AsFloat := GclAddNode.FP_TotalPrice[38];
- cdsBillsQuantity39.AsFloat := GclAddNode.FP_Quantity[39];
- cdsBillsTotalPrice39.AsFloat := GclAddNode.FP_TotalPrice[39];
- cdsBillsQuantity40.AsFloat := GclAddNode.FP_Quantity[40];
- cdsBillsTotalPrice40.AsFloat := GclAddNode.FP_TotalPrice[40];
- cdsBillsQuantity41.AsFloat := GclAddNode.FP_Quantity[41];
- cdsBillsTotalPrice41.AsFloat := GclAddNode.FP_TotalPrice[41];
- cdsBillsQuantity42.AsFloat := GclAddNode.FP_Quantity[42];
- cdsBillsTotalPrice42.AsFloat := GclAddNode.FP_TotalPrice[42];
- cdsBillsQuantity43.AsFloat := GclAddNode.FP_Quantity[43];
- cdsBillsTotalPrice43.AsFloat := GclAddNode.FP_TotalPrice[43];
- cdsBillsQuantity44.AsFloat := GclAddNode.FP_Quantity[44];
- cdsBillsTotalPrice44.AsFloat := GclAddNode.FP_TotalPrice[44];
- cdsBillsQuantity45.AsFloat := GclAddNode.FP_Quantity[45];
- cdsBillsTotalPrice45.AsFloat := GclAddNode.FP_TotalPrice[45];
- cdsBillsQuantity46.AsFloat := GclAddNode.FP_Quantity[46];
- cdsBillsTotalPrice46.AsFloat := GclAddNode.FP_TotalPrice[46];
- cdsBillsQuantity47.AsFloat := GclAddNode.FP_Quantity[47];
- cdsBillsTotalPrice47.AsFloat := GclAddNode.FP_TotalPrice[47];
- cdsBillsQuantity48.AsFloat := GclAddNode.FP_Quantity[48];
- cdsBillsTotalPrice48.AsFloat := GclAddNode.FP_TotalPrice[48];
- cdsBillsQuantity49.AsFloat := GclAddNode.FP_Quantity[49];
- cdsBillsTotalPrice49.AsFloat := GclAddNode.FP_TotalPrice[49];
- cdsBillsQuantity50.AsFloat := GclAddNode.FP_Quantity[50];
- cdsBillsTotalPrice50.AsFloat := GclAddNode.FP_TotalPrice[50];
- cdsBills.Post;
- end;
- end;
- end.
|