| 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);
 
-     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);
 
- 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.
 
 
  |