| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532 | unit BillsGatherDm;interfaceuses  SysUtils, Classes, DB, DBClient, sdIDTree, sdDB;type  TGclNode = class  private    FB_Code: string;    FIndexCode: string;    FName: string;    FUnits: string;    FPrice: Double;    FNewPrice: Double;    FDealQuantity: Double;    FDealTotalPrice: Double;    FQuantity: Double;    FTotalPrice: Double;    FBGLQuantity: Double;    FBGLTotalPrice: Double;    FCurDealQuantity: Double;    FCurDealTotalPrice: Double;    FCurQcQuantity: Double;    FCurQcTotalPrice: Double;    FCurPcQuantity: Double;    FCurPcTotalPrice: Double;    FCurGatherQuantity: Double;    FCurGatherTotalPrice: Double;    FEndDealQuantity: Double;    FEndDealTotalPrice: Double;    FEndQcQuantity: Double;    FEndQcTotalPrice: Double;    FEndPcQuantity: Double;    FEndPcTotalPrice: Double;    FEndGatherQuantity: Double;    FEndGatherTotalPrice: Double;    FAddDealQuantity: Double;    FAddDealTotalPrice: Double;    FAddQcQuantity: Double;    FAddQcTotalPrice: Double;    FAddPcQuantity: Double;    FAddPcTotalPrice: Double;    FAddGatherQuantity: Double;    FAddGatherTotalPrice: Double;  end;  TBillsGatherData = class(TDataModule)    cdsBillsGather: TClientDataSet;    cdsBillsGatherB_Code: TStringField;    cdsBillsGatherName: TWideStringField;    cdsBillsGatherUnits: TWideStringField;    cdsBillsGatherPrice: TFloatField;    cdsBillsGatherNewPrice: TFloatField;    cdsBillsGatherQuantity: TFloatField;    cdsBillsGatherTotalPrice: TFloatField;    cdsBillsGatherCurDealQuantity: TFloatField;    cdsBillsGatherCurDealTotalPrice: TFloatField;    cdsBillsGatherCurQcQuantity: TFloatField;    cdsBillsGatherCurQcTotalPrice: TFloatField;    cdsBillsGatherCurPcQuantity: TFloatField;    cdsBillsGatherCurPcTotalPrice: TFloatField;    cdsBillsGatherCurGatherQuantity: TFloatField;    cdsBillsGatherCurGatherTotalPrice: TFloatField;    cdsBillsGatherAddDealQuantity: TFloatField;    cdsBillsGatherAddDealTotalPrice: TFloatField;    cdsBillsGatherAddQcQuantity: TFloatField;    cdsBillsGatherAddQcTotalPrice: TFloatField;    cdsBillsGatherAddPcQuantity: TFloatField;    cdsBillsGatherAddPcTotalPrice: TFloatField;    cdsBillsGatherAddGatherQuantity: TFloatField;    cdsBillsGatherAddGatherTotalPrice: TFloatField;    cdsRelaXmj: TClientDataSet;    cdsRelaXmjCode: TStringField;    cdsRelaXmjName: TWideStringField;    cdsRelaXmjUnits: TWideStringField;    cdsRelaXmjQuantity: TFloatField;    cdsRelaXmjNameFenBu: TWideStringField;    cdsRelaXmjNameFenXiang: TWideStringField;    cdsRelaXmjNameDanWei: TWideStringField;    cdsRelaXmjPeg: TWideStringField;    cdsRelaXmjNameUnit: TWideStringField;    cdsRelaXmjDrawingCode: TWideStringField;    cdsBillsGatherIndexCode: TStringField;    cdsBillsGatherDealQuantity: TFloatField;    cdsBillsGatherDealTotalPrice: TFloatField;    cdsBillsGatherEndDealQuantity: TFloatField;    cdsBillsGatherEndDealTotalPrice: TFloatField;    cdsBillsGatherEndQcQuantity: TFloatField;    cdsBillsGatherEndQcTotalPrice: TFloatField;    cdsBillsGatherEndPcQuantity: TFloatField;    cdsBillsGatherEndPcTotalPrice: TFloatField;    cdsBillsGatherEndGatherQuantity: TFloatField;    cdsBillsGatherEndGatherTotalPrice: TFloatField;    cdsBillsGatherBGLQuantity: TFloatField;    cdsBillsGatherBGLTotalPrice: TFloatField;    cdsBillsGatherCompletionRate: TFloatField;    cdsBillsGatherDeal_BGLQuantity: TFloatField;    cdsBillsGatherDeal_BGLTotalPrice: TFloatField;    procedure cdsBillsGatherQuantityGetText(Sender: TField;      var Text: String; DisplayText: Boolean);    procedure cdsBillsGatherAfterScroll(DataSet: TDataSet);  private    FProjectData: TObject;    FGclList: TList;    function GetGclNode(ARec: TsdDataRecord): TGclNode;    procedure FilterGclBills(ANode: TsdIDTreeNode);    procedure FilterBills(ANode: TsdIDTreeNode);    procedure FilterDealBills;    procedure WriteGclBills;    procedure RefreshRelaXmj;    procedure AddRelaXmjs(const AB_Code, AName, AUnits: string; APrice: Double);    function GetMainBillsTree: TsdIDTree;  public    constructor Create(AProjectData: TObject);    destructor Destroy; override;    procedure RefreshBills;    property MainBillsTree: TsdIDTree read GetMainBillsTree;  end;implementationuses  ProjectData, PhaseData, StageDm, BillsDm, UtilMethods,  ZhAPI, BillsCompileDm, DealBillsDm, BGLDm, BillsTree, BillsMeasureDm;{$R *.dfm}{ TBillsGatherData }procedure TBillsGatherData.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 TBillsGatherData.FilterGclBills(ANode: TsdIDTreeNode);  procedure LoadPhaseData(AGclNode: TGclNode; AID: Integer);  var    Rec: TsdDataRecord;  begin    Rec := TBillsIDTreeNode(ANode).StageRec;    if not Assigned(Rec) then Exit;    AGclNode.FCurDealQuantity := AGclNode.FCurDealQuantity + Rec.ValueByName('DealQuantity').AsFloat;    AGclNode.FCurDealTotalPrice := AGclNode.FCurDealTotalPrice + Rec.ValueByName('DealTotalPrice').AsFloat;    AGclNode.FCurQcQuantity := AGclNode.FCurQcQuantity + Rec.ValueByName('QcQuantity').AsFloat;    AGclNode.FCurQcTotalPrice := AGclNode.FCurQcTotalPrice + Rec.ValueByName('QcTotalPrice').AsFloat;    AGclNode.FCurPcQuantity := AGclNode.FCurPcQuantity + Rec.ValueByName('PcQuantity').AsFloat;    AGclNode.FCurPcTotalPrice := AGclNode.FCurPcTotalPrice + Rec.ValueByName('PcTotalPrice').AsFloat;    AGclNode.FCurGatherQuantity := AGclNode.FCurGatherQuantity + Rec.ValueByName('GatherQuantity').AsFloat;    AGclNode.FCurGatherTotalPrice := AGclNode.FCurGatherTotalPrice + Rec.ValueByName('GatherTotalPrice').AsFloat;    AGclNode.FEndDealQuantity := AGclNode.FEndDealQuantity + Rec.ValueByName('EndDealQuantity').AsFloat;    AGclNode.FEndDealTotalPrice := AGclNode.FEndDealTotalPrice + Rec.ValueByName('EndDealTotalPrice').AsFloat;    AGclNode.FEndQcQuantity := AGclNode.FEndQcQuantity + Rec.ValueByName('EndQcQuantity').AsFloat;    AGclNode.FEndQcTotalPrice := AGclNode.FEndQcTotalPrice + Rec.ValueByName('EndQcTotalPrice').AsFloat;    AGclNode.FEndPcQuantity := AGclNode.FEndPcQuantity + Rec.ValueByName('EndPcQuantity').AsFloat;    AGclNode.FEndPcTotalPrice := AGclNode.FEndPcTotalPrice + Rec.ValueByName('EndPcTotalPrice').AsFloat;    AGclNode.FEndGatherQuantity := AGclNode.FEndGatherQuantity + Rec.ValueByName('EndGatherQuantity').AsFloat;    AGclNode.FEndGatherTotalPrice := AGclNode.FEndGatherTotalPrice + Rec.ValueByName('EndGatherTotalPrice').AsFloat;  end;  procedure LoadMeasureData(AGclNode: TGclNode; ARec: TsdDataRecord);  begin    AGclNode.FQuantity := AGclNode.FQuantity + ARec.ValueByName('Quantity').AsFloat;    AGclNode.FTotalPrice := AGclNode.FTotalPrice + ARec.ValueByName('TotalPrice').AsFloat;    if TProjectData(FProjectData).ProjProperties.PhaseCount = 0 then Exit;    LoadPhaseData(AGclNode, ARec.ValueByName('ID').AsInteger);    AGclNode.FAddDealQuantity := AGclNode.FAddDealQuantity + ARec.ValueByName('AddDealQuantity').AsFloat;    AGclNode.FAddDealTotalPrice := AGclNode.FAddDealTotalPrice + ARec.ValueByName('AddDealTotalPrice').AsFloat;    AGclNode.FAddQcQuantity := AGclNode.FAddQcQuantity + ARec.ValueByName('AddQcQuantity').AsFloat;    AGclNode.FAddQcTotalPrice := AGclNode.FAddQcTotalPrice + ARec.ValueByName('AddQcTotalPrice').AsFloat;    AGclNode.FAddPcQuantity := AGclNode.FAddPcQuantity + ARec.ValueByName('AddPcQuantity').AsFloat;    AGclNode.FAddPcTotalPrice := AGclNode.FAddPcTotalPrice + ARec.ValueByName('AddPcTotalPrice').AsFloat;    AGclNode.FAddGatherQuantity := AGclNode.FAddGatherQuantity + ARec.ValueByName('AddGatherQuantity').AsFloat;    AGclNode.FAddGatherTotalPrice := AGclNode.FAddGatherTotalPrice + ARec.ValueByName('AddGatherTotalPrice').AsFloat;  end;var  Rec: TsdDataRecord;  GclNode: TGclNode;begin  if not Assigned(ANode) then Exit;  Rec := ANode.Rec;  if Rec.ValueByName('B_Code').AsString = '' then Exit;  GclNode := GetGclNode(Rec);  LoadMeasureData(GclNode, Rec);end;constructor TBillsGatherData.Create(AProjectData: TObject);begin  inherited Create(nil);  FProjectData := AProjectData;  cdsBillsGather.IndexFieldNames := 'IndexCode';end;destructor TBillsGatherData.Destroy;begin  inherited;end;function TBillsGatherData.GetMainBillsTree: TsdIDTree;begin  Result := TProjectData(FProjectData).BillsMeasureData.BillsMeasureTree;end;procedure TBillsGatherData.RefreshBills;begin  cdsBillsGather.DisableControls;  cdsBillsGather.AfterScroll := nil;  try    cdsBillsGather.EmptyDataSet;    FGclList := TList.Create;    FilterBills(MainBillsTree.FirstNode);    FilterDealBills;    WriteGclBills;  finally    ClearObjects(FGclList);    FGclList.Free;    cdsBillsGather.EnableControls;    cdsBillsGather.AfterScroll := cdsBillsGatherAfterScroll;  end;end;procedure TBillsGatherData.cdsBillsGatherQuantityGetText(Sender: TField;  var Text: String; DisplayText: Boolean);begin  if Sender.AsFloat <> 0 then    Text := FormatFloat('0.###', Sender.AsFloat)  else    Text := '';end;procedure TBillsGatherData.cdsBillsGatherAfterScroll(DataSet: TDataSet);begin  RefreshRelaXmj;end;procedure TBillsGatherData.RefreshRelaXmj;begin  cdsRelaXmj.EmptyDataSet;  AddRelaXmjs(cdsBillsGatherB_Code.AsString, cdsBillsGatherName.AsString,    cdsBillsGatherUnits.AsString, cdsBillsGatherPrice.AsFloat);end;procedure TBillsGatherData.AddRelaXmjs(  const AB_Code, AName, AUnits: string; APrice: Double);  function GetFirstXmjParent(AID: Integer): TsdIDTreeNode;  begin    Result := MainBillsTree.FindNode(AID);    while Assigned(Result) and (Result.Rec.ValueByName('B_Code').AsString <> '') do      Result := Result.Parent;  end;  // 取树结构的第ALevel层节点的名称(level从0开始)  function GetNameByLevel(ANode: TsdIDTreeNode; ALevel: Integer): string;  begin    Result := '';    if not Assigned(ANode) then Exit;    if ANode.Level = ALevel then      Result := ANode.Rec.ValueByName('Name').AsString    else if ANode.Level > ALevel then      Result := GetNameByLevel(ANode.Parent, ALevel);  end;  function GetPegNode(ANode: TsdIDTreeNode): TsdIDTreeNode;  begin    Result := nil;    if not Assigned(ANode) then Exit;    if CheckPeg(ANode.Rec.ValueByName('Name').AsString) then      Result := ANode    else      Result := GetPegNode(ANode.Parent);  end;  function GetNameDanWei(ANode: TsdIDTreeNode): string;  begin    // 取树结构的第二层节点的名称    Result := GetNameByLevel(ANode, 1);  end;  // ANode为计量单元节点,APegNode为桩号节点  function GetNameFenBu(ANode, APegNode: TsdIDTreeNode): string;  var    vCurNode: TsdIDTreeNode;  begin    // 如果计量单元节点的名称为桩号(转化为判断计量单元节点与桩号节点为同一个)    if not Assigned(APegNode) or (ANode.ID = APegNode.ID) then      // 取树结构的第三层节点的名称      Result := GetNameByLevel(ANode, 2)    // 否则,取桩号节点的子节点的名称    else    begin      vCurNode := ANode;      while vCurNode.Level > APegNode.Level + 1 do        vCurNode := vCurNode.Parent;      Result := vCurNode.Rec.ValueByName('Name').AsString;    end;  end;  function GetNameFenXiang(ANode, APegNode: TsdIDTreeNode): string;  var    iTopLevel: Integer;    vCurNode: TsdIDTreeNode;  begin    if Assigned(APegNode) then    begin      iTopLevel := 3;      if APegNode.ID <> ANode.ID then        iTopLevel := APegNode.Level + 2;      Result := '';      vCurNode := ANode.Parent;      while vCurNode.Level >= iTopLevel do      begin        Result := vCurNode.Rec.ValueByName('Name').AsString + ';' + Result;        vCurNode := vCurNode.Parent;      end;    end    else      Result := GetNameByLevel(ANode, 3);  end;  function GetNameUnit(ANode: TsdIDTreeNode): string;  begin    Result := ANode.Rec.ValueByName('Name').AsString;  end;  function GetDrawingCode(ANode: TsdIDTreeNode): string;  begin    Result := '';    if not Assigned(ANode) then Exit;    Result := ANode.Rec.ValueByName('DrawingCode').AsString;    if Result = '' then      Result := GetDrawingCode(ANode.Parent);  end;  function GetPegName(APegNode: TsdIDTreeNode): string;  begin    if Assigned(APegNode) then      Result := APegNode.Rec.ValueByName('Name').AsString    else      Result := '';  end;  procedure AddRelaXmj(ARec: TsdDataRecord);  var    vNode, vPeg: TsdIDTreeNode;  begin    vNode := GetFirstXmjParent(ARec.ValueByName('ID').AsInteger);    if not Assigned(vNode) then Exit;    cdsRelaXmj.Append;    cdsRelaXmjQuantity.AsFloat := ARec.ValueByName('Quantity').AsFloat;    cdsRelaXmjCode.AsString := vNode.Rec.ValueByName('Code').AsString;    cdsRelaXmjName.AsString := vNode.Rec.ValueByName('Name').AsString;    cdsRelaXmjUnits.AsString := vNode.Rec.ValueByName('Units').AsString;    vPeg := GetPegNode(vNode);    cdsRelaXmjPeg.AsString := GetPegName(vPeg);    cdsRelaXmjNameDanWei.AsString := GetNameDanWei(vNode);    cdsRelaXmjNameFenBu.AsString := GetNameFenBu(vNode, vPeg);    cdsRelaXmjNameFenXiang.AsString := GetNameFenXiang(vNode, vPeg);    cdsRelaXmjNameUnit.AsString := GetNameUnit(vNode);    cdsRelaXmjDrawingCode.AsString := GetDrawingCode(vNode);    cdsRelaXmj.Post;  end;var  I: Integer;  Rec: TsdDataRecord;begin  if AB_Code = '' then Exit;  with TProjectData(FProjectData).BillsData do    for I := 0 to sddBills.RecordCount - 1 do    begin      Rec := sddBills.Records[I];      if SameText(AB_Code, Rec.ValueByName('B_Code').AsString) and          SameText(AName, Trim(Rec.ValueByName('Name').AsString)) and          SameText(AUnits, Rec.ValueByName('Units').AsString) and          (APrice = Rec.ValueByName('Price').AsFloat) then        AddRelaXmj(Rec);    end;end;procedure TBillsGatherData.WriteGclBills;var  I: Integer;  GclNode: TGclNode;begin  for I := 0 to FGclList.Count - 1 do  begin    GclNode := TGclNode(FGclList.Items[I]);    cdsBillsGather.Append;    cdsBillsGatherB_Code.AsString := GclNode.FB_Code;    cdsBillsGatherIndexCode.AsString := GclNode.FIndexCode;    cdsBillsGatherName.AsString := GclNode.FName;    cdsBillsGatherUnits.AsString := GclNode.FUnits;    cdsBillsGatherPrice.AsFloat := GclNode.FPrice;    cdsBillsGatherNewPrice.AsFloat := GclNode.FNewPrice;    cdsBillsGatherDealQuantity.AsFloat := GclNode.FDealQuantity;    cdsBillsGatherDealTotalPrice.AsFloat := GclNode.FDealTotalPrice;    cdsBillsGatherQuantity.AsFloat := GclNode.FQuantity;    cdsBillsGatherTotalPrice.AsFloat := GclNode.FTotalPrice;    cdsBillsGatherBGLQuantity.AsFloat := GclNode.FBGLQuantity;    cdsBillsGatherBGLTotalPrice.AsFloat := GclNode.FBGLTotalPrice;    cdsBillsGatherDeal_BGLQuantity.AsFloat := GclNode.FQuantity + GclNode.FBGLQuantity;    cdsBillsGatherDeal_BGLTotalPrice.AsFloat := GclNode.FTotalPrice + GclNode.FBGLTotalPrice;    cdsBillsGatherCurDealQuantity.AsFloat := GclNode.FCurDealQuantity;    cdsBillsGatherCurDealTotalPrice.AsFloat := GclNode.FCurDealTotalPrice;    cdsBillsGatherCurQcQuantity.AsFloat := GclNode.FCurQcQuantity;    cdsBillsGatherCurQcTotalPrice.AsFloat := GclNode.FCurQcTotalPrice;    cdsBillsGatherCurPcQuantity.AsFloat := GclNode.FCurPcQuantity;    cdsBillsGatherCurPcTotalPrice.AsFloat := GclNode.FCurPcTotalPrice;    cdsBillsGatherCurGatherQuantity.AsFloat := GclNode.FCurGatherQuantity;    cdsBillsGatherCurGatherTotalPrice.AsFloat := GclNode.FCurGatherTotalPrice;    cdsBillsGatherEndDealQuantity.AsFloat := GclNode.FEndDealQuantity;    cdsBillsGatherEndDealTotalPrice.AsFloat := GclNode.FEndDealTotalPrice;    cdsBillsGatherEndQcQuantity.AsFloat := GclNode.FEndQcQuantity;    cdsBillsGatherEndQcTotalPrice.AsFloat := GclNode.FEndQcTotalPrice;    cdsBillsGatherEndPcQuantity.AsFloat := GclNode.FEndPcQuantity;    cdsBillsGatherEndPcTotalPrice.AsFloat := GclNode.FEndPcTotalPrice;    cdsBillsGatherEndGatherQuantity.AsFloat := GclNode.FEndGatherQuantity;    cdsBillsGatherEndGatherTotalPrice.AsFloat := GclNode.FEndGatherTotalPrice;    cdsBillsGatherAddDealQuantity.AsFloat := GclNode.FAddDealQuantity;    cdsBillsGatherAddDealTotalPrice.AsFloat := GclNode.FAddDealTotalPrice;    cdsBillsGatherAddQcQuantity.AsFloat := GclNode.FAddQcQuantity;    cdsBillsGatherAddQcTotalPrice.AsFloat := GclNode.FAddQcTotalPrice;    cdsBillsGatherAddPcQuantity.AsFloat := GclNode.FAddPcQuantity;    cdsBillsGatherAddPcTotalPrice.AsFloat := GclNode.FAddPcTotalPrice;    cdsBillsGatherAddGatherQuantity.AsFloat := GclNode.FAddGatherQuantity;    cdsBillsGatherAddGatherTotalPrice.AsFloat := GclNode.FAddGatherTotalPrice;    if (GclNode.FTotalPrice + GclNode.FBGLTotalPrice) <> 0 then      cdsBillsGatherCompletionRate.AsFloat := AdvRoundTo(          GclNode.FEndGatherTotalPrice/(GclNode.FTotalPrice + GclNode.FBGLTotalPrice)*100);    cdsBillsGather.Post;  end;end;procedure TBillsGatherData.FilterDealBills;var  iIndex: Integer;  Rec: TsdDataRecord;  GclNode: TGclNode;begin  with TProjectData(FProjectData).DealBillsData do    for iIndex := 0 to sddDealBills.RecordCount - 1 do    begin      Rec := sddDealBills.Records[iIndex];      GclNode := GetGclNode(Rec);      GclNode.FDealQuantity := GclNode.FDealQuantity + Rec.ValueByName('Quantity').AsFloat;      GclNode.FDealTotalPrice := GclNode.FDealTotalPrice + Rec.ValueByName('TotalPrice').AsFloat;    end;end;function TBillsGatherData.GetGclNode(ARec: TsdDataRecord): TGclNode;  procedure LoadBGLData(AGclNode: TGclNode);  begin    with TProjectData(FProjectData).BGLData do    begin      cdsBGBills.First;      while not cdsBGBills.Eof do      begin        if SameText(AGclNode.FB_Code, cdsBGBillsB_Code.AsString) and           SameText(AGclNode.FName, Trim(cdsBGBillsName.AsString)) and           SameText(AGclNode.FUnits, cdsBGBillsUnits.AsString) and           (AGclNode.FPrice = cdsBGBillsPrice.AsFloat) then        begin          AGclNode.FBGLQuantity := AGclNode.FBGLQuantity + cdsBGBillsQuantity.AsFloat;          AGclNode.FBGLTotalPrice := AGclNode.FBGLTotalPrice + cdsBGBillsTotalPrice.AsFloat;        end;        cdsBGBills.Next;      end;    end;  end;  function CreateGclNode: TGclNode;  begin    Result := TGclNode.Create;    FGclList.Add(Result);    Result.FB_Code := ARec.ValueByName('B_Code').AsString;    Result.FIndexCode := B_CodeToIndexCode(ARec.ValueByName('B_Code').AsString);    Result.FName := Trim(ARec.ValueByName('Name').AsString);    Result.FUnits := ARec.ValueByName('Units').AsString;    Result.FPrice := ARec.ValueByName('Price').AsFloat;    if Assigned(ARec.ValueByName('NewPrice')) then      Result.FNewPrice := ARec.ValueByName('NewPrice').AsFloat    else      Result.FNewPrice := 0;    LoadBGLData(Result);  end;var  I: Integer;  GclNode: TGclNode;begin  Result := nil;  for I := 0 to FGclList.Count - 1 do  begin    GclNode := TGclNode(FGclList.Items[I]);    if SameText(GclNode.FB_Code, ARec.ValueByName('B_Code').AsString) and        SameText(GclNode.FName, Trim(ARec.ValueByName('Name').AsString)) and        SameText(GclNode.FUnits, ARec.ValueByName('Units').AsString) and        (PriceRoundTo(GclNode.FPrice - ARec.ValueByName('Price').AsFloat) = 0) then    begin      Result := GclNode;      Break;    end;  end;  if not Assigned(Result) then    Result := CreateGclNode;end;end.
 |