micheus achei os erros acho q agora ta certo.
primeiro o loop é while "NOT" eu havia me esquecido.
segundo é um insert só na tabela para cada transaçao, e não um por registro. lembrando q este é o manual de peça/programacao. mas existem varios EDIs.
então o código fica assim:
procedure TFORMPROGRAMACAO.BTNIMPORTARClick(Sender: TObject);
Var
Txt:TextFile;
Linha,RegId,RegIdOld :string; // identificador do registro anterior
sArquivo: String;
BEGIN
if abrirarquivo.Execute then
begin
sArquivo:= (abrirarquivo.FileName);
end;
AssignFile(Txt,sArquivo);
Reset (txt);
{A variavel LINHA vai receceber linha a linha as informações do arquivo TXT.}
ReadLn(Txt,LINHA);
RegIdOld := '';
RegId := Copy(Linha, 1, 3);
if RegId = 'ITP' then
begin
// processa aqui os dados do registro ITP
TBLEDI.Insert;
{Nome do campo a ser gravado, coluna inicial e tamanho de cada campo.}
TBLEDI.FieldByName('ITPTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('ITPIDENTIFICACAOPROCESSO').ASSTRING :=(Copy(LINHA,04,03));
TBLEDI.FieldByName('ITPVERSAOTRANSACAO').ASSTRING :=(Copy(LINHA,07,02));
TBLEDI.FieldByName('ITPNUMEROCONTROLETRANSMISSAO').ASSTRING :=(Copy(LINHA,09,05));
TBLEDI.FieldByName('ITPIDGERACAOMOVIMENTO').ASSTRING :=(Copy(LINHA,14,12));
TBLEDI.FieldByName('ITPIDTRANSMISSORCOMUNICACAO').ASSTRING :=(Copy(LINHA,26,14));
TBLEDI.FieldByName('ITPIDRECEPTORCOMUNICACAO').ASSTRING :=(Copy(LINHA,40,14));
TBLEDI.FieldByName('ITPCODIGOINTERNOTRANSMISSOR').ASSTRING :=(Copy(LINHA,54,08));
TBLEDI.FieldByName('ITPCODIGOINTERNORECEPTOR').ASSTRING :=(Copy(LINHA,62,08));
TBLEDI.FieldByName('ITPNOMETRANSMISSOR').ASSTRING :=(Copy(LINHA,70,25));
TBLEDI.FieldByName('ITPNOMERECEPTOR').ASSTRING :=(Copy(LINHA,95,25));
TBLEDI.FieldByName('ITPESPACO').ASSTRING :=(Copy(LINHA,120,09));
// processa as linhas exceto a última que deverá ser do tipo 'FTP'
while not Eoln(Txt) do
begin
ReadLn(Txt,LINHA);
RegId := Copy(Linha, 1, 3);
if RegIdOld <> RegId then
begin
// quando há mudança do identificador, faz
// algum processamento/validação. Por ex, o
// tipo PE3 só pode aparecer depois de um tipo PE5
// ...
RegIdOld := RegId; // atualiza variável
end;
// processa aqui os dados do registro conforme identificador
if RegId = 'PE1' then
BEGIN
TBLEDI.FieldByName('PE1TIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE1CODFABRICADESTINO').ASSTRING :=(Copy(LINHA,04,03));
TBLEDI.FieldByName('PE1IDENTIFICACAOPROGRAMAATUAL').ASSTRING :=(Copy(LINHA,07,09));
TBLEDI.FieldByName('PE1DATAPROGRAMAATUAL').ASSTRING :=(Copy(LINHA,16,06));
TBLEDI.FieldByName('PE1IDPROGRAMAANTERIOR').ASSTRING :=(Copy(LINHA,22,09));
TBLEDI.FieldByName('PE1DATAPROGRAMAANTERIOR').ASSTRING :=(Copy(LINHA,31,06));
TBLEDI.FieldByName('PE1CODIGOITEMCLIENTE').ASSTRING :=(Copy(LINHA,37,30));
TBLEDI.FieldByName('PE1CODIGOITEMFORNECEDOR').ASSTRING :=(Copy(LINHA,67,30));
TBLEDI.FieldByName('PE1NUMEROPEDIDOCOMPRA').ASSTRING :=(Copy(LINHA,97,12));
TBLEDI.FieldByName('PE1CODIGOLOCALDESTINO').ASSTRING :=(Copy(LINHA,109,05));
TBLEDI.FieldByName('PE1IDENTIFICACAOCONTATO').ASSTRING :=(Copy(LINHA,114,11));
TBLEDI.FieldByName('PE1CODIGOUNIDADEMEDIDA').ASSTRING :=(Copy(LINHA,125,02));
TBLEDI.FieldByName('PE1QUANTIDADECASASDECIMAIS').ASSTRING :=(Copy(LINHA,127,01));
TBLEDI.FieldByName('PE1CODIGOTIPOFORNECIMENTO').ASSTRING :=(Copy(LINHA,128,01));
END
else if RegId = 'PE2' then
BEGIN
TBLEDI.FieldByName('PE2IDENTIFICACAOTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE2DATAULTIMAENTREGAEMBARQUE').ASSTRING :=(Copy(LINHA,04,06));
TBLEDI.FieldByName('PE2NUMEROULTIMANOTAFISCAL').ASSTRING :=(Copy(LINHA,10,06));
TBLEDI.FieldByName('PE2SERIEULTIMANOTAFISCAL').ASSTRING :=(Copy(LINHA,16,04));
TBLEDI.FieldByName('PE2DATAULTIMANOTAFISCAL').ASSTRING :=(Copy(LINHA,20,6));
TBLEDI.FieldByName('PE2QTULTIMAENTREGAEMBARQUE').ASSTRING :=(Copy(LINHA,26,12));
TBLEDI.FieldByName('PE2QTENTREGAEMBARQUEACUMULADA').ASSTRING :=(Copy(LINHA,38,14));
TBLEDI.FieldByName('PE2QTNECESSACUMULADA').ASSTRING :=(Copy(LINHA,52,14));
TBLEDI.FieldByName('PE2QTLOTEMINIMO').ASSTRING :=(Copy(LINHA,66,12));
TBLEDI.FieldByName('PE2CODFREQUENCIAFORNECIMENTO').ASSTRING :=(Copy(LINHA,78,03));
TBLEDI.FieldByName('PE2DATALIBERACAOPRODUCAO').ASSTRING :=(Copy(LINHA,81,04));
TBLEDI.FieldByName('PE2DATALIBERACAOMATERIAPRIMA').ASSTRING :=(Copy(LINHA,85,04));
TBLEDI.FieldByName('PE2CODLOCALDESCARGA').ASSTRING :=(Copy(LINHA,89,07));
TBLEDI.FieldByName('P2PERIODOENTREGAEMBARQUE').ASSTRING :=(Copy(LINHA,96,04));
TBLEDI.FieldByName('PE2SITUACAODOITEM').ASSTRING :=(Copy(LINHA,100,02));
TBLEDI.FieldByName('PE2IDENTTIPOPROGRAMACAO').ASSTRING :=(Copy(LINHA,102,01));
TBLEDI.FieldByName('PE2PEDIDODAREVENDA').ASSTRING :=(Copy(LINHA,103,13));
TBLEDI.FieldByName('PE2QUALIFICACAOPROGRAMACAO').ASSTRING :=(Copy(LINHA,116,01));
TBLEDI.FieldByName('PE2TIPODEPEDIDOREVENDA').ASSTRING :=(Copy(LINHA,117,02));
TBLEDI.FieldByName('PE2CODDAVIATRANSPORTE').ASSTRING :=(Copy(LINHA,119,03));
TBLEDI.FieldByName('PE2ESPACO').ASSTRING :=(Copy(LINHA,122,07));
END
else if RegId = 'PE9' then
BEGIN
TBLEDI.FieldByName('PE9IDENTTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE9PEDIDOCOMPRAREF1').ASSTRING :=(Copy(LINHA,04,14));
TBLEDI.FieldByName('PE9TIPODOPEDIDO').ASSTRING :=(Copy(LINHA,18,02));
TBLEDI.FieldByName('PE9PEDIDODECOMPRAREF2').ASSTRING :=(Copy(LINHA,20,10));
TBLEDI.FieldByName('PE9NUMEROLOTEPRODUCAO').ASSTRING :=(Copy(LINHA,30,12));
TBLEDI.FieldByName('PE9DATAENTREGABEMITEM').ASSTRING :=(Copy(LINHA,42,06));
TBLEDI.FieldByName('PE9HORAENTREGA').ASSTRING :=(Copy(LINHA,48,04));
TBLEDI.FieldByName('PE9QUANTIDADEENTREGA').ASSTRING :=(Copy(LINHA,52,09));
TBLEDI.FieldByName('PE9CONTROLEPRODUCAOINICIAL').ASSTRING :=(Copy(LINHA,61,03));
TBLEDI.FieldByName('PE9ESPACO').ASSTRING :=(Copy(LINHA,64,65));
END
ELSE if REGID = 'PE3' then
BEGIN
TBLEDI.FieldByName('PE3IDENTTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE3DATAENTREGAEMBARQUEITEM').ASSTRING :=(Copy(LINHA,04,06));
TBLEDI.FieldByName('PE3HORAENTREGAEMBARQUEITEM').ASSTRING :=(Copy(LINHA,10,02));
TBLEDI.FieldByName('PE3QTENTREGAEMBARQUEITEM').ASSTRING :=(Copy(LINHA,12,09));
TBLEDI.FieldByName('PE3DATAENTREGAEMBARQUEITEM1').ASSTRING :=(Copy(LINHA,21,06));
TBLEDI.FieldByName('PE3HORAENTREGAEMBARQUEITEM1').ASSTRING :=(Copy(LINHA,27,02));
TBLEDI.FieldByName('PE3QTENTREGAEMBARQUEITEM1').ASSTRING :=(Copy(LINHA,29,09));
TBLEDI.FieldByName('PE3DATAENTREGAEMBARQUEITEM2').ASSTRING :=(Copy(LINHA,38,06));
TBLEDI.FieldByName('PE3HORAENTREGAEMBARQUEITEM2').ASSTRING :=(Copy(LINHA,44,02));
TBLEDI.FieldByName('PE3QTENTREGAEMBARQUEITEM2').ASSTRING :=(Copy(LINHA,46,09));
TBLEDI.FieldByName('PE3DATAENTREGAEMBARQUEITEM3').ASSTRING :=(Copy(LINHA,55,06));
TBLEDI.FieldByName('PE3HORAENTREGAEMBARQUEITEM3').ASSTRING :=(Copy(LINHA,61,02));
TBLEDI.FieldByName('PE3QTENTREGAEMBARQUEITEM3').ASSTRING :=(Copy(LINHA,63,09));
TBLEDI.FieldByName('PE3DATAENTREGAEMBARQUEITEM4').ASSTRING :=(Copy(LINHA,72,06));
TBLEDI.FieldByName('PE3HORAENTREGAEMBARQUEITEM4').ASSTRING :=(Copy(LINHA,78,02));
TBLEDI.FieldByName('PE3QTENTREGAEMBARQUEITEM4').ASSTRING :=(Copy(LINHA,80,09));
TBLEDI.FieldByName('PE3DATAENTREGAEMBARQUEITEM5').ASSTRING :=(Copy(LINHA,89,06));
TBLEDI.FieldByName('PE3HORAENTREGAEMBARQUEITEM5').ASSTRING :=(Copy(LINHA,95,02));
TBLEDI.FieldByName('PE3QTENTREGAEMBARQUEITEM5').ASSTRING :=(Copy(LINHA,97,09));
TBLEDI.FieldByName('PE3DATAENTREGAEMBARQUEITEM6').ASSTRING :=(Copy(LINHA,106,06));
TBLEDI.FieldByName('PE3HORAENTREGAEMBARQUEITEM6').ASSTRING :=(Copy(LINHA,112,02));
TBLEDI.FIELDBYNAME('PE3QTENTREGAEMBARQUEITEM6').ASSTRING:= (Copy(LINHA,114,09));
TBLEDI.FieldByName('PE3ESPACO').ASSTRING :=(Copy(LINHA,123,06));
END
ELSE if REGID ='PE5' then
BEGIN
TBLEDI.FieldByName('PE5IDENTTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE5DATAINENTREGAEMBARQUEITEM').ASSTRING :=(Copy(LINHA,04,06));
TBLEDI.FieldByName('PE5IDENTIFICACAOPROGRAMACAO').ASSTRING :=(Copy(LINHA,10,01));
TBLEDI.FieldByName('PE5IDENTPROGRAMAATUAL').ASSTRING :=(Copy(LINHA,11,09));
TBLEDI.FieldByName('PE5DATAINENTREGAEMBARQUEITEM1').ASSTRING :=(Copy(LINHA,20,06));
TBLEDI.FieldByName('PE5IDENTIFICACAOPROGRAMACAO1').ASSTRING :=(Copy(LINHA,26,01));
TBLEDI.FieldByName('PE5IDENTPROGRAMAATUAL1').ASSTRING :=(Copy(LINHA,27,09));
TBLEDI.FieldByName('PE5DATAINICIALENTREGAEMBARQUE2').ASSTRING :=(Copy(LINHA,36,06));
TBLEDI.FieldByName('PE5IDENTIFICACAOPROGRAMACAO2').ASSTRING :=(Copy(LINHA,42,01));
TBLEDI.FieldByName('PE5IDENTIFICACAOPROGRAMAATUAL2').ASSTRING :=(Copy(LINHA,43,09));
TBLEDI.FieldByName('PE5DATAINENTREGAEMBARQUEITEM3').ASSTRING :=(Copy(LINHA,52,06));
TBLEDI.FieldByName('PE5IDENTIFICACAODEPROGRAMACAO3').ASSTRING :=(Copy(LINHA,58,01));
TBLEDI.FieldByName('PE5IDENTPROGRAMAATUAL3').ASSTRING :=(Copy(LINHA,59,09));
TBLEDI.FieldByName('PE5DATAINENTREGAEMBARQUEITEM4').ASSTRING :=(Copy(LINHA,68,06));
TBLEDI.FieldByName('PE5IDENTIFICACAODEPROGRAMACAO4').ASSTRING :=(Copy(LINHA,74,01));
TBLEDI.FieldByName('PE5IDENTPROGRAMAATUAL4').ASSTRING :=(Copy(LINHA,75,09));
TBLEDI.FieldByName('PE5DATAINENTREGAEMBARQUEITEM5').ASSTRING :=(Copy(LINHA,84,06));
TBLEDI.FieldByName('PE5IDENTIFICACAOPROGRAMACAO5').ASSTRING :=(Copy(LINHA,90,01));
TBLEDI.FieldByName('PE5IDENTPROGRAMAATUAL5').ASSTRING :=(Copy(LINHA,91,09));
TBLEDI.FieldByName('PE5DATAINENTREGAEMBARQUE6').ASSTRING :=(Copy(LINHA,100,06));
TBLEDI.FieldByName('PE5IDENTIFICACAOPROGRAMACAO6').ASSTRING :=(Copy(LINHA,106,01));
TBLEDI.FieldByName('PE5IDENTPROGRAMAATUAL6').ASSTRING :=(Copy(LINHA,107,09));
TBLEDI.FieldByName('PE5ESPACO').ASSTRING :=(Copy(LINHA,116,13));
END
ELSE if REGID = 'PE6' then
BEGIN
TBLEDI.FieldByName('PE6IDENTDOTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE6FATORDECONVERSAO').ASSTRING :=(Copy(LINHA,04,10));
TBLEDI.FieldByName('PE6ALTERACAOTECNICADOITEM').ASSTRING :=(Copy(LINHA,14,04));
TBLEDI.FieldByName('PE6CODIGODEMATERIAL').ASSTRING :=(Copy(LINHA,18,10));
TBLEDI.FieldByName('PE6PESODOITEM').ASSTRING :=(Copy(LINHA,28,12));
TBLEDI.FieldByName('PE6UNIDMEDIDAUSADAPPESO').ASSTRING :=(Copy(LINHA,40,02));
TBLEDI.FieldByName('PE6ESPACO').ASSTRING :=(Copy(LINHA,42,87));
END
ELSE if REGID = 'PE7' then
BEGIN
TBLEDI.FieldByName('PE7IDENTTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE7IDENTEMBALAGEMPRIMCLIENTE').ASSTRING :=(Copy(LINHA,04,30));
TBLEDI.FieldByName('PE7DESCRICAOEMBALAGEM').ASSTRING :=(Copy(LINHA,34,20));
TBLEDI.FieldByName('PE7ALTURAEMBALAGEM').ASSTRING :=(Copy(LINHA,54,12));
TBLEDI.FieldByName('PE7LARGURAEMBALAGEM').ASSTRING :=(Copy(LINHA,66,12));
TBLEDI.FieldByName('PE7COMPRIMENTOEMBALAGEM').ASSTRING :=(Copy(LINHA,78,12));
TBLEDI.FieldByName('PE7UNIDMEDIDADIMEMBALAGEM').ASSTRING :=(Copy(LINHA,90,02));
TBLEDI.FieldByName('PE7PESODAEMBALAGEM').ASSTRING :=(Copy(LINHA,92,12));
TBLEDI.FieldByName('PE7UNIDMEDIDAUSADAPPESO').ASSTRING :=(Copy(LINHA,104,02));
TBLEDI.FieldByName('PE7CAPACIDEMBALPRIMCLIENTE').ASSTRING :=(Copy(LINHA,106,12));
TBLEDI.FieldByName('PE7CODRESPONSAVELPEMBALAGEM').ASSTRING :=(Copy(LINHA,118,01));
TBLEDI.FieldByName('PE7ESPACO').ASSTRING :=(Copy(LINHA,119,10));
END
ELSE if REGID = 'PE8' then
BEGIN
TBLEDI.FieldByName('PE8IDENTTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE8IDEMBALAGEMSECUNDARIACLIE').ASSTRING :=(Copy(LINHA,04,20));
TBLEDI.FieldByName('PE8DESCRICAOEMBALAGEM').ASSTRING :=(Copy(LINHA,24,20));
TBLEDI.FieldByName('PE8ALTURAEMBALAGEM').ASSTRING :=(Copy(LINHA,44,12));
TBLEDI.FieldByName('PE8LARGURAEMBALAGEM').ASSTRING :=(Copy(LINHA,56,12));
TBLEDI.FieldByName('PE8COMPRIMENTOEMBALAGEM').ASSTRING :=(Copy(LINHA,68,12));
TBLEDI.FieldByName('PE8UNIDMEDIDADIMEMBALAGEM').ASSTRING :=(Copy(LINHA,80,02));
TBLEDI.FieldByName('PE8PESOEMBALAGEM').ASSTRING :=(Copy(LINHA,82,12));
TBLEDI.FieldByName('PE8UNIDMEDIDAUSADAPPESO').ASSTRING :=(Copy(LINHA,94,02));
TBLEDI.FieldByName('PE8CAPACEMBALAGEMSECUNDARIA').ASSTRING :=(Copy(LINHA,96,12));
TBLEDI.FieldByName('PE8NEMBPRIMCAMEMBSEC').ASSTRING :=(Copy(LINHA,108,03));
TBLEDI.FieldByName('PE8NUMCAMEMBSECUNDARIA').ASSTRING :=(Copy(LINHA,111,03));
TBLEDI.FieldByName('PE8ESPACO').ASSTRING :=(Copy(LINHA,114,15));
END
ELSE if REGID ='PE4' then
BEGIN
TBLEDI.FieldByName('PE4IDENTTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('PE4IDENTEMBALSECUNDARIACLIE').ASSTRING :=(Copy(LINHA,04,20));
TBLEDI.FieldByName('PE4IDENTEMBALSECUNDARIAFORN').ASSTRING :=(Copy(LINHA,24,30));
TBLEDI.FieldByName('PE4CAPCEMBALAGEMSECUNDARIA').ASSTRING :=(Copy(LINHA,54,12));
TBLEDI.FieldByName('PE4IDENTEMBALPRIMARIAFORN').ASSTRING :=(Copy(LINHA,66,30));
TBLEDI.FieldByName('PE4CAPACEMBALPRIMARIAFORN').ASSTRING :=(Copy(LINHA,96,12));
TBLEDI.FieldByName('PE4CODRESPONSAVELPEMBALAGEM').ASSTRING :=(Copy(LINHA,108,01));
TBLEDI.FieldByName('PE4ESPACO').ASSTRING :=(Copy(LINHA,109,20));
END
ELSE if REGID = 'TE1' then
BEGIN
TBLEDI.FieldByName('TE1IDENTTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('TE1TEXTOLIVREINFORMATIVO').ASSTRING :=(Copy(LINHA,04,40));
TBLEDI.FieldByName('TE1TEXTOLIVREINFORMATIVO1').ASSTRING :=(Copy(LINHA,44,40));
TBLEDI.FieldByName('TE1TEXTOLIVREINFORMATIVO2').ASSTRING :=(Copy(LINHA,84,40));
TBLEDI.FieldByName('TE1ESPACO').ASSTRING :=(Copy(LINHA,124,05));
END
end;
if regid = 'FTP' then
begin
// processa dados do identificador FTP
TBLEDI.FieldByName('FTPIDENTTIPOREGISTRO').ASSTRING :=(Copy(LINHA,01,03));
TBLEDI.FieldByName('FTPNUMEROCONTROLETRANSMISSAO').ASSTRING :=(Copy(LINHA,04,05));
TBLEDI.FieldByName('FTPQUANTREGISTROSTRANSACAO').ASSTRING :=(Copy(LINHA,09,09));
TBLEDI.FieldByName('FTPNUMEROTOTALVALORES').ASSTRING :=(Copy(LINHA,18,17));
TBLEDI.FieldByName('FTPCATEGORIAOPERACAO').ASSTRING :=(Copy(LINHA,35,01));
TBLEDI.FieldByName('FTPESPACO').ASSTRING :=(Copy(LINHA,36,93));
end;
TBLEDI.post;//Salva tabela
end else
TABELAEDI.SQL.CLEAR;
TABELAEDI.SQL.ADD('SELECT * FROM IMPORTACAOSCANIA');
TABELAEDI.ExecSQL;
TABELAEDI.OPEN;
end;
a mais uma coisa. muito obrigada mesmo pela sua ajuda.
sem sua ajuda não teria conseguido.