123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- unit rmGcl_XmjBillsDm;
- interface
- uses
- SysUtils, Classes, ProjectData, DB, DBClient, sdIDTree, sdDB,
- GclBillsGatherModel;
- type
- {-----------------------------
- gxtTopGcl: 汇总方式默认,写入方式:工程量清单1&其所属全部项目节, 工程量清单2&其所属全部项目节, ...;
- 示例: 202-1 456
- 1-1 123
- 1-2 333
- 203-1 222
- 1-1 120
- 1-2 102
- gxtFlowGcl: 汇总方式默认,写入方式:工程量清单1所属全部项目节, 工程量清单2所属全部项目节, ...;
- 示例: 202-1 1-1 123
- 202-1 1-2 333
- 203-1 1-1 120
- 203-1 1-1 102
- gxtWithoutXmj: 同gxtTopGcl,完成后过滤所有清单编号为空的节点
- 示例: 202-1 456
- 203-1 222
- -----------------------------}
- TGXType = (gxtTopGcl, gxtFlowGcl, gxtWithoutXmj);
- TrmGcl_XmjBillsData = class(TDataModule)
- cdsGcl: TClientDataSet;
- cdsGclIndexCode: TStringField;
- cdsGclIndexID: TIntegerField;
- cdsGclB_Code: TStringField;
- cdsGclName: TWideStringField;
- cdsGclCode: TStringField;
- cdsGclPeg: TWideStringField;
- cdsGclNameDanWei: TWideStringField;
- cdsGclNameFenBu: TWideStringField;
- cdsGclNameFenXiang: TWideStringField;
- cdsGclNameUnit: TWideStringField;
- cdsGclDrawingCode: TWideStringField;
- cdsGclPrice: TFloatField;
- cdsGclQuantity: TFloatField;
- cdsGclTotalPrice: TFloatField;
- cdsGclDealQuantity: TFloatField;
- cdsGclDealTotalPrice: TFloatField;
- cdsGclDifferQuantity: TFloatField;
- cdsGclDifferTotalPrice: TFloatField;
- cdsGclUnits: TWideStringField;
- cdsGclNewPrice: TFloatField;
- cdsGclPosition: TWideStringField;
- cdsGclOrgQuantity: TFloatField;
- cdsGclOrgTotalPrice: TFloatField;
- cdsGclMisQuantity: TFloatField;
- cdsGclMisTotalPrice: TFloatField;
- cdsGclOthQuantity: TFloatField;
- cdsGclOthTotalPrice: TFloatField;
- private
- FProjectData: TProjectData;
- FIndex: Integer;
- FGXType: TGXType;
- procedure BeforeOperation;
- procedure AfterOperation;
- procedure WriteXmjNode(AGclNode: TGclNode);
- procedure WriteGclNode(AGclNode: TGclNode);
- procedure WriteTopGclTypeData(AGcls: TList);
- procedure WriteFlowGclNode(AGclNode: TGclNode);
- procedure WriteFlowGclTypeData(AGcls: TList);
- procedure WriteData(AGcls, AXmjs: TList; AGather: TGatherNode);
- procedure GatherData;
- public
- function AssignData(AProjectData: TProjectData; AGXType: TGXType): TDataSet;
- end;
- implementation
- uses
- ZhAPI, UtilMethods;
- {$R *.dfm}
- { TrmGclBillsData }
- procedure TrmGcl_XmjBillsData.AfterOperation;
- begin
- if FGXType = gxtWithoutXmj then
- begin
- cdsGcl.Filter := 'B_Code <> ''''';
- cdsGcl.Filtered := True;
- end;
- cdsGcl.IndexFieldNames := 'IndexCode;IndexID';
- end;
- function TrmGcl_XmjBillsData.AssignData(
- AProjectData: TProjectData; AGXType: TGXType): TDataSet;
- begin
- FProjectData := AProjectData;
- FGXType := AGXType;
- BeforeOperation;
- try
- GatherData;
- finally
- AfterOperation;
- Result := cdsGcl;
- end;
- end;
- procedure TrmGcl_XmjBillsData.BeforeOperation;
- begin
- cdsGcl.Active := True;
- cdsGcl.Filtered := False;
- cdsGcl.EmptyDataSet;
- end;
- procedure TrmGcl_XmjBillsData.GatherData;
- var
- vGather: TGclGatherModel;
- begin
- vGather := TGclGatherModel.Create(FProjectData);
- try
- vGather.GatherDeal := True;
- vGather.WriteGatherData := WriteData;
- vGather.Execute;
- finally
- vGather.Free;
- end;
- end;
- procedure TrmGcl_XmjBillsData.WriteData(AGcls, AXmjs: TList; AGather: TGatherNode);
- begin
- case FGXType of
- gxtTopGcl, gxtWithoutXmj: WriteTopGclTypeData(AGcls);
- gxtFlowGcl: WriteFlowGclTypeData(AGcls);
- end;
- end;
- procedure TrmGcl_XmjBillsData.WriteFlowGclNode(AGclNode: TGclNode);
- var
- i: Integer;
- DetailGcl: TDetailGclNode;
- begin
- for i := 0 to AGclNode.DetailGclCount - 1 do
- begin
- DetailGcl := AGclNode.DetailGcl[i];
- cdsGcl.Append;
- cdsGclIndexCode.AsString := AGclNode.IndexCode;
- cdsGclIndexID.AsInteger := i+1;
- cdsGclB_Code.AsString := AGclNode.B_Code;
- cdsGclName.AsString := AGclNode.Name;
- cdsGclUnits.AsString := AGclNode.Units;
- cdsGclPrice.AsFloat := AGclNode.Price;
- if Assigned(DetailGcl.LeafXmj) then
- begin
- cdsGclCode.AsString := DetailGcl.LeafXmj.XmjCode;
- cdsGclPeg.AsString := DetailGcl.LeafXmj.Peg;
- cdsGclNameDanWei.AsString := DetailGcl.LeafXmj.NameDanWei;
- cdsGclNameFenBu.AsString := DetailGcl.LeafXmj.NameFenBu;
- cdsGclNameFenXiang.AsString := DetailGcl.LeafXmj.NameFenXiang;
- cdsGclNameUnit.AsString := DetailGcl.LeafXmj.NameUnit;
- cdsGclDrawingCode.AsString := DetailGcl.LeafXmj.DrawingCode;
- cdsGclPosition.AsString := DetailGcl.LeafXmj.Position;
- end;
- cdsGclOrgQuantity.AsFloat := DetailGcl.OrgQuantity;
- cdsGclOrgTotalPrice.AsFloat := DetailGcl.OrgTotalPrice;
- cdsGclMisQuantity.AsFloat := DetailGcl.MisQuantity;
- cdsGclMisTotalPrice.AsFloat := DetailGcl.MisTotalPrice;
- cdsGclOthQuantity.AsFloat := DetailGcl.OthQuantity;
- cdsGclOthTotalPrice.AsFloat := DetailGcl.OthTotalPrice;
- cdsGclQuantity.AsFloat := DetailGcl.Quantity;
- cdsGclTotalPrice.AsFloat := DetailGcl.TotalPrice;
- cdsGcl.Post;
- end;
- end;
- procedure TrmGcl_XmjBillsData.WriteFlowGclTypeData(AGcls: TList);
- var
- i: Integer;
- begin
- FIndex := 0;
- for i := 0 to AGcls.Count - 1 do
- WriteFlowGclNode(TGclNode(AGcls.Items[i]));
- end;
- procedure TrmGcl_XmjBillsData.WriteGclNode(
- AGclNode: TGclNode);
- var
- i: Integer;
- begin
- cdsGcl.Append;
- cdsGclIndexCode.AsString := AGclNode.IndexCode;
- cdsGclIndexID.AsInteger := 0;
- cdsGclB_Code.AsString := AGclNode.B_Code;
- cdsGclName.AsString := AGclNode.Name;
- cdsGclUnits.AsString := AGclNode.Units;
- cdsGclPrice.AsFloat := AGclNode.Price;
- cdsGclQuantity.AsFloat := AGclNode.Quantity;
- cdsGclTotalPrice.AsFloat := AGclNode.TotalPrice;
- cdsGclDealQuantity.AsFloat := AGclNode.DealQuantity;
- cdsGclDealTotalPrice.AsFloat := AGclNode.DealTotalPrice;
- cdsGclDifferQuantity.AsFloat := AGclNode.DealQuantity - AGclNode.Quantity;
- cdsGclDifferTotalPrice.AsFloat := AGclNode.DealTotalPrice - AGclNode.TotalPrice;
- cdsGclOrgQuantity.AsFloat := AGclNode.OrgQuantity;
- cdsGclOrgTotalPrice.AsFloat := AGclNode.OrgTotalPrice;
- cdsGclMisQuantity.AsFloat := AGclNode.MisQuantity;
- cdsGclMisTotalPrice.AsFloat := AGclNode.MisTotalPrice;
- cdsGclOthQuantity.AsFloat := AGclNode.OthQuantity;
- cdsGclOthTotalPrice.AsFloat := AGclNode.OthTotalPrice;
- cdsGcl.Post;
- WriteXmjNode(AGclNode);
- end;
- procedure TrmGcl_XmjBillsData.WriteTopGclTypeData(AGcls: TList);
- var
- i: Integer;
- begin
- FIndex := 0;
- for i := 0 to AGcls.Count - 1 do
- WriteGclNode(TGclNode(AGcls.Items[i]));
- end;
- procedure TrmGcl_XmjBillsData.WriteXmjNode(
- AGclNode: TGclNode);
- var
- i: Integer;
- DetailGcl: TDetailGclNode;
- begin
- for i := 0 to AGclNode.DetailGclCount - 1 do
- begin
- DetailGcl := AGclNode.DetailGcl[i];
- cdsGcl.Append;
- cdsGclIndexCode.AsString := AGclNode.IndexCode;
- cdsGclIndexID.AsInteger := FIndex;
- if Assigned(DetailGcl.LeafXmj) then
- begin
- cdsGclCode.AsString := DetailGcl.LeafXmj.XmjCode;
- cdsGclPeg.AsString := DetailGcl.LeafXmj.Peg;
- cdsGclNameDanWei.AsString := DetailGcl.LeafXmj.NameDanWei;
- cdsGclNameFenBu.AsString := DetailGcl.LeafXmj.NameFenBu;
- cdsGclNameFenXiang.AsString := DetailGcl.LeafXmj.NameFenXiang;
- cdsGclNameUnit.AsString := DetailGcl.LeafXmj.NameUnit;
- cdsGclPosition.AsString := DetailGcl.LeafXmj.Position;
- cdsGclDrawingCode.AsString := DetailGcl.LeafXmj.DrawingCode;
- end;
- cdsGclOrgQuantity.AsFloat := DetailGcl.OrgQuantity;
- cdsGclOrgTotalPrice.AsFloat := DetailGcl.OrgTotalPrice;
- cdsGclMisQuantity.AsFloat := DetailGcl.MisQuantity;
- cdsGclMisTotalPrice.AsFloat := DetailGcl.MisTotalPrice;
- cdsGclOthQuantity.AsFloat := DetailGcl.OthQuantity;
- cdsGclOthTotalPrice.AsFloat := DetailGcl.OthTotalPrice;
- cdsGclQuantity.AsFloat := DetailGcl.Quantity;
- cdsGclTotalPrice.AsFloat := DetailGcl.TotalPrice;
- cdsGcl.Post;
- Inc(FIndex);
- end;
- end;
- end.
|