Problema com classes e objetos
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
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
Curtidas 0
Respostas
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
Me diga qual é o valor de I, e o valor length(T_ARQ_XI), por favor. Aguardo contato.
Att,
Wesley Y
GOSTEI 0
Devmedia
24/04/2009
Denis,
o consultor está esperando sua resposta para solucionar sua dúvida.
No aguardo.
o consultor está esperando sua resposta para solucionar sua dúvida.
No aguardo.
GOSTEI 0