| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | unit tpGatherGcl;interfaceuses  Classes, tpGatherTree;type  TtpGatherGclRela = class  private    FRelaGcl: TtpGatherTreeNode;    FRelaPegXmj: TtpGatherTreeNode;  public    constructor Create(AGcl, APegXmj: TtpGatherTreeNode);    property RelaGcl: TtpGatherTreeNode read FRelaGcl;    property RelaPegXmj: TtpGatherTreeNode read FRelaPegXmj;  end;  TtpGatherGcl = class  private    FID: Integer;    FRelas: TList;    FIndexCode: string;    FB_Code: string;    FName: string;    FUnits: string;    FPrice: Double;    FQuantity: Double;    FTotalPrice: Double;    function GetRela(AIndex: Integer): TtpGatherGclRela;    function GetRelaCount: Integer;  public    constructor Create(AID: Integer; AGcl, APegXmj: TtpGatherTreeNode);    destructor Destroy; override;    procedure GatherNode(AGcl, APegXmj: TtpGatherTreeNode);    property ID: Integer read FID;    property IndexCode: string read FIndexCode;    property B_Code: string read FB_Code;    property Name: string read FName;    property Units: string read FUnits;    property Price: Double read FPrice;    property Quantity: Double read FQuantity;    property TotalPrice: Double read FTotalPrice;    property RelaCount: Integer read GetRelaCount;    property Rela[AIndex: Integer]: TtpGatherGclRela read GetRela;  end;  TtpGatherGclList = class  private    FGcls: TList;    FNewID: Integer;    function FindGatherGcl(ANode: TtpGatherTreeNode): TtpGatherGcl;    function NewGatherGcl(AGcl, APegXmj: TtpGatherTreeNode): TtpGatherGcl;    function GetGcl(AIndex: Integer): TtpGatherGcl;    function GetGclCount: Integer;  public    constructor Create;    destructor Destroy; override;    procedure GatherNode(AGcl, APegXmj: TtpGatherTreeNode);    property GclCount: Integer read GetGclCount;    property Gcl[AIndex: Integer]: TtpGatherGcl read GetGcl;  end;implementationuses  UtilMethods, SysUtils, ZhAPI;{ TtpGatherGcl }constructor TtpGatherGcl.Create(AID: Integer; AGcl, APegXmj: TtpGatherTreeNode);var  vRela: TtpGatherGclRela;begin  FID := AID;  FRelas := TList.Create;  vRela := TtpGatherGclRela.Create(AGcl, APegXmj);  FRelas.Add(vRela);  FB_Code := AGcl.B_Code;  FIndexCode := B_CodeToIndexCode(FB_Code);  FName := AGcl.Name;  FUnits := AGcl.Units;  FPrice := AGcl.Price;  FQuantity := AGcl.Quantity;  FTotalPrice := AGcl.TotalPrice;end;destructor TtpGatherGcl.Destroy;begin  ClearObjects(FRelas);  FRelas.Free;  inherited;end;procedure TtpGatherGcl.GatherNode(AGcl, APegXmj: TtpGatherTreeNode);var  vRela: TtpGatherGclRela;begin  vRela := TtpGatherGclRela.Create(AGcl, APegXmj);  FRelas.Add(vRela);  FQuantity := FQuantity + AGcl.Quantity;  FTotalPrice := FTotalPrice + AGcl.TotalPrice;end;function TtpGatherGcl.GetRela(AIndex: Integer): TtpGatherGclRela;begin  Result := TtpGatherGclRela(FRelas.Items[AIndex]);end;function TtpGatherGcl.GetRelaCount: Integer;begin  Result := FRelas.Count;end;{ TtpGatherGclList }constructor TtpGatherGclList.Create;begin  FGcls := TList.Create;  FNewID := 0;end;destructor TtpGatherGclList.Destroy;begin  ClearObjects(FGcls);  FGcls.Free;  inherited;end;function TtpGatherGclList.FindGatherGcl(  ANode: TtpGatherTreeNode): TtpGatherGcl;var  iGcl: Integer;  vGcl: TtpGatherGcl;begin  Result := nil;  for iGcl := 0 to FGcls.Count - 1 do  begin    vGcl := TtpGatherGcl(FGcls.Items[iGcl]);    if SameText(vGcl.B_Code, ANode.B_Code) and        SameText(vGcl.Name, ANode.Name) and        SameText(vGcl.Units, ANode.Units) and        (vGcl.Price - ANode.Price < 0.0001) then    begin      Result := vGcl;      Break;    end;  end;end;procedure TtpGatherGclList.GatherNode(AGcl, APegXmj: TtpGatherTreeNode);var  vGcl: TtpGatherGcl;begin  vGcl := FindGatherGcl(AGcl);  if Assigned(vGcl) then    vGcl.GatherNode(AGcl, APegXmj)  else    vGcl := NewGatherGcl(AGcl, APegXmj);end;function TtpGatherGclList.GetGcl(AIndex: Integer): TtpGatherGcl;begin  Result := TtpGatherGcl(FGcls.Items[AIndex]);end;function TtpGatherGclList.GetGclCount: Integer;begin  Result := FGcls.Count;end;function TtpGatherGclList.NewGatherGcl(  AGcl, APegXmj: TtpGatherTreeNode): TtpGatherGcl;begin  Result := TtpGatherGcl.Create(FNewID, AGcl, APegXmj);  FGcls.Add(Result);  Inc(FNewID);end;{ TtpGatherGclRela }constructor TtpGatherGclRela.Create(AGcl, APegXmj: TtpGatherTreeNode);begin  FRelaGcl := AGcl;  FRelaPegXmj := APegXmj;end;end.
 |