Problema com classes e objetos

24/04/2009

Boa tarde   Estou desesperado, precisando resolver o problema abaixo:   Tenho a seguinte estrutura na unit u_sincroniza_ws_sap_rf.pas     TP_ARQ                  = String[02];         {Tipo do arquivo}
  NR_ARQ                  = String[08];         {Número do arquivo}
  COD_OPER                = String[14];         {CNPJ operador logístico}
  DATA                    = String[08];        
  HORA                    = String[06];           TP_REG                  = String[02];         {Tipo do registro}
  EBELN                   = String[10];         {Número do pedido}
  BLDAT                   = String[08];         {Data do pedido}
  LFSNR                   = String[16];         {Número da nota fiscal de venda}
  BKTXT                   = String[25];         {Número da nota fiscal de venda}
  MATNR                   = String[18];         {Código do material}
  ERFMG                   = String[13];         {Quantidade total do material}
  LGORT                   = String[04];         {Código do almoxarifado}
  TXT50                   = String[50];         {Denominação do imobilizado}
  SERIALNO                = String[18];         {Número de série - RG}
  EQART                   = String[18];         {Tipo do objeto técnico}
  HERST                   = String[30];         {Nome do fabricante}
  SERGE                   = String[30];         {Número de série do fabricante}
  WERKS_L                 = String[04];         {Centro de localização}
  WERKS_P                 = String[04];         {Centro de planejamento}
  WERKS                   = String[04];        
  INGRP                   = String[03];         {Grupo de Planejamento para serviços cliente e manutenção}
  LIFNR                   = String[10];         {Código do fornecedor}   ZSHEADER_ARQ_RF         = class;              { "urn:sap-com:document:sap:rfc:functions" }
  ZRECEB_FIS_MATERIAL     = class;              { "urn:sap-com:document:sap:rfc:functions" }
  Z_RECEB_FISICO_MATERIAL = class;              { "urn:sap-com:document:sap:rfc:functions" }       ZSHEADER_ARQ_RF = class(TRemotable)
  private
    FTP_ARQ: TP_ARQ;
    FNR_ARQ: NR_ARQ;
    FCOD_OPER: COD_OPER;
    FDATA: DATA;
    FHORA: HORA;
  published
    property TP_ARQ: TP_ARQ read FTP_ARQ write FTP_ARQ;
    property NR_ARQ: NR_ARQ read FNR_ARQ write FNR_ARQ;
    property COD_OPER: COD_OPER read FCOD_OPER write FCOD_OPER;
    property DATA: DATA read FDATA write FDATA;
    property HORA: HORA read FHORA write FHORA;
  end;         ZRECEB_FIS_MATERIAL = class(TRemotable)
  private
    FTP_REG: TP_REG;
    FEBELN: EBELN;
    FBLDAT: BLDAT;
    FLFSNR: LFSNR;
    FBKTXT: BKTXT;
    FMATNR: MATNR;
    FERFMG: ERFMG;
    FLGORT: LGORT;
    FTXT50: TXT50;
    FSERIALNO: SERIALNO;
    FEQART: EQART;
    FHERST: HERST;
    FSERGE: SERGE;
    FWERKS_L: WERKS_L;
    FWERKS_P: WERKS_P;
    FWERKS: WERKS;
    FINGRP: INGRP;
    FLIFNR: LIFNR;
  published
    property TP_REG: TP_REG read FTP_REG write FTP_REG;
    property EBELN: EBELN read FEBELN write FEBELN;
    property BLDAT: BLDAT read FBLDAT write FBLDAT;
    property LFSNR: LFSNR read FLFSNR write FLFSNR;
    property BKTXT: BKTXT read FBKTXT write FBKTXT;
    property MATNR: MATNR read FMATNR write FMATNR;
    property ERFMG: ERFMG read FERFMG write FERFMG;
    property LGORT: LGORT read FLGORT write FLGORT;
    property TXT50: TXT50 read FTXT50 write FTXT50;
    property SERIALNO: SERIALNO read FSERIALNO write FSERIALNO;
    property EQART: EQART read FEQART write FEQART;
    property HERST: HERST read FHERST write FHERST;
    property SERGE: SERGE read FSERGE write FSERGE;
    property WERKS_L: WERKS_L read FWERKS_L write FWERKS_L;
    property WERKS_P: WERKS_P read FWERKS_P write FWERKS_P;
    property WERKS: WERKS read FWERKS write FWERKS;
    property INGRP: INGRP read FINGRP write FINGRP;
    property LIFNR: LIFNR read FLIFNR write FLIFNR;
  end;     T_ARQ_XI   = array of ZRECEB_FIS_MATERIAL;    { "urn:sap-com:document:sap:rfc:functions" }     Z_RECEB_FISICO_MATERIAL = class(TRemotable)
  private
    FT_HEADER: ZSHEADER_ARQ_RF;
    FT_ARQ_XI: T_ARQ_XI;
    procedure SetT_ARQ_XI(const Value: T_ARQ_XI);
    procedure SetT_HEADER(const Value: ZSHEADER_ARQ_RF);
  public
    procedure Add(Item : ZRECEB_FIS_MATERIAL);
    constructor Create;
    destructor Destroy; override;
  published
    property T_HEADER: ZSHEADER_ARQ_RF  read FT_HEADER write SetT_HEADER;
    property T_ARQ_XI: T_ARQ_XI  read FT_ARQ_XI write SetT_ARQ_XI;
  end;
  Com a ajuda do Wesley, foi criado a procedure add abaixo:     procedure Z_RECEB_FISICO_MATERIAL.Add(Item: ZRECEB_FIS_MATERIAL);
  Var
    I : Integer;
begin
    i := High(T_ARQ_XI);
    if I =  length(T_ARQ_XI) then
    begin
       SetLength(FT_ARQ_XI,I+1);
       T_ARQ_XI[I+1] := Item;
    end;
end;
  Da unit u_sincroniza (que tem uses u_sincroniza_ws_sap_rf)     eu utilizo os objetos da seguinte maneira:         HeaderSap := ZSHEADER_ARQ_RF.Create;
      HeaderSap.TP_ARQ      := modulo_visa.sap_h_rfTipo_arquivo.AsString;
      HeaderSap.NR_ARQ      := modulo_visa.sap_h_rfNum_sequen.AsString;
      HeaderSap.COD_OPER    := modulo_visa.sap_h_rfCnpj_op_logistico.AsString;
      HeaderSap.DATA        := modulo_visa.sap_h_rfData_geracao.AsString;
      HeaderSap.HORA        := remove_char(modulo_visa.sap_h_rfHora_geracao.AsString);         ArqSap                := Z_RECEB_FISICO_MATERIAL.Create;
      ArqSap.T_HEADER       := HeaderSap;         while not modulo_visa.sap_i_rf.eof do begin            ItensSap           := ZRECEB_FIS_MATERIAL.Create;
         ItensSap.TP_REG    := modulo_visa.sap_i_rfTipo_registro.AsString;
         ItensSap.EBELN     := modulo_visa.sap_i_rfNum_pedido.AsString;
         ItensSap.BLDAT     := modulo_visa.sap_i_rfData_pedido.AsString;
         ItensSap.LFSNR     := modulo_visa.sap_i_rfNum_not_fisc_ven.AsString;
         ItensSap.BKTXT     := modulo_visa.sap_i_rfNum_not_fisc_rem.AsString;
         ItensSap.MATNR     := modulo_visa.sap_i_rfCod_material.AsString;
         ItensSap.ERFMG     := modulo_visa.sap_i_rfQtd_tot_mat.AsString;
         ItensSap.LGORT     := modulo_visa.sap_i_rfCod_almoxa.AsString;
         ItensSap.TXT50     := modulo_visa.sap_i_rfDen_imobilizado.AsString;
         ItensSap.SERIALNO  := modulo_visa.sap_i_rfNum_serie.AsString;
         ItensSap.EQART     := modulo_visa.sap_i_rfTipo_obj_tecnico.AsString;
         ItensSap.HERST     := modulo_visa.sap_i_rfNome_fab.AsString;
         ItensSap.SERGE     := modulo_visa.sap_i_rfNum_serie_fab.AsString;
         ItensSap.WERKS_L   := modulo_visa.sap_i_rfCentro_localizacao.AsString;
         ItensSap.WERKS_P   := modulo_visa.sap_i_rfCentro_plan.AsString;
         ItensSap.WERKS     := modulo_visa.sap_i_rfCentro.AsString;
         ItensSap.INGRP     := modulo_visa.sap_i_rfGrup_plan_serv_cli_man.AsString;
         ItensSap.LIFNR     := modulo_visa.sap_i_rfCod_fornecedor.AsString;            ArqSap.Add(ItensSap);            ItensSap.free;            modulo_visa.sap_i_rf.next;
      end;
  No entanto, nenhum item é adicionado...   Acompanhando a execução do programa, na de adição do item, nunca entra dentro do "if I =  length(T_ARQ_XI) then".   Para testar tirei o if, forçando a entrada e dá access violation...   Preciso de uma ajuda urgente neste assunto...   Muito obrigado...   Denis
 
Denis Godoi

Denis Godoi

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

24/04/2009

Olá Denis,
  Me diga qual é o valor de I, e o valor length(T_ARQ_XI), por favor. Aguardo contato.


Att,

Wesley Y
GOSTEI 0
Devmedia

Devmedia

24/04/2009

Denis,
o consultor está esperando sua resposta para solucionar sua dúvida.
No aguardo.
GOSTEI 0
POSTAR