Jump to content
Notícias do ACBr

click.png

click.png

click.png

click.png

click.png

click.png

logo_acbr_paygo.png

TEF ACBr PayGo
Seja um revendedor e ofereça uma solução completa para seu cliente.


Saiba mais

beneficios.png

click.png

click.png

click.png

ACBreSocial - Pegar nrRecibo XML retorno


coisvaes
Go to solution Solved by Italo Giurizzato Junior,
  • Este tópico foi criado há 1019 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui

Recommended Posts

Olá!

Estou utilizando o ExemploeSocial que acompanha o ACBr como base para enviar os eventos para o eSocial e queria saber como eu poderia pegar o campo nrRecibo, da Tag recibo do arquivo de retorno, e gravar na minha tabela. Já tentei de várias formas, mas não estou tendo sucesso. Alguém poderia me ajudar? Desde já, obrigado.

(...)

<?xml version="1.0" encoding="UTF-8"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/retornoProcessamento/v1_3_0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <retornoProcessamentoLoteEventos>
        <retornoEventos>
            <evento Id="ID1230691980000002018100312591100003">
                <retornoEvento>
                    <eSocial xmlns="http://www.esocial.gov.br/schema/evt/retornoEvento/v1_2_0">
                        <retornoEvento Id="ID1230691980000002018100312591100003">
                            <recepcao>
                                <tpAmb>1</tpAmb>
                                <dhRecepcao>2018-10-03T13:01:49.53</dhRecepcao>
                                <versaoAppRecepcao>0.1.0-A0349</versaoAppRecepcao>
                                <protocoloEnvioLote>1.1.201810.0000000000184437735</protocoloEnvioLote>
                            </recepcao>
                            <recibo>
                                <nrRecibo>1.1.0000000002076970009</nrRecibo>

(...)

Estou tentando adaptar um exemplo que encontrei na web,  mas estou "muito perdido":

procedure TFrmLerGravarTagXML.BtnnrRecibo(Sender: TObject);
var
   vXMLDoc: TXMLDocument;
   Node_retornoProcessamentoLoteEventos, Node_retornoEventos, Node_eSocial, Node_retornoEvento, Node_recibo  : IXMLNode;
begin
  vXMLDoc := TXMLDocument.Create(self);
  vXMLDoc.LoadFromFile('c:\LiDelphiXE\LerGravarTagXML\eSocial-sit.xml'); //Le Arquivo Recibo XML');
 
  Memo1.lines.Add( VXMLDoc.XML.Text +#13+#13 );

  repeat
    Node_retornoProcessamentoLoteEventos := vXMLDoc.DocumentElement.ChildNodes.FindNode('retornoProcessamentoLoteEventos');
    Node_retornoEventos := Node_retornoProcessamentoLoteEventos;
    Node_retornoEventos.ChildNodes.FindNode('retornoEventos');
    Node_eSocial := Node_retornoEventos;  
    Node_eSocial.ChildNodes.FindNode('eSocial');
    Node_retornoEvento := Node_eSocial;
    Node_retornoEvento.ChildNodes.FindNode('recibo');
    Node_recibo := Node_retornoEvento;

    if recibo <> '' then
       Memo2.Lines.Add( recibo );

  until Node_recibo = nil;;
end;

 

eSocial-sit-parte.xml

Link to comment
Share on other sites

2 horas atrás, Rafael Dias disse:

Pq não utiliza o componente ACBreSocial ?

Oi, Rafael. Obrigado! Ainda sou iniciante no excelente ACBr e sua sugestão é muita bem vinda. Analisei a procedure do botão consultar do ExemploeSocial e verifiquei que posso pegar o nrRecibo através dela. Mas eu preciso pegar, também, a Tag <evento Id="ID1230691980000002018100312591100003"> ou <retornoEvento Id="ID1230691980000002018100312591100003"> , que contem o ID que me permite identificar o funcionário na tabela de funcionarios. Você poderia me ajudar com a adaptação da procedure, listada abaixo?

 

        <retornoEventos>
            <evento Id="ID1230691980000002018100312591100003">
                <retornoEvento>
                    <eSocial xmlns="http://www.esocial.gov.br/schema/evt/retornoEvento/v1_2_0">
                        <retornoEvento Id="ID1230691980000002018100312591100003">
 

 

procedure TFExemploEsocial.btnConsultarClick(Sender: TObject);
var
  Protocolo: string;
  i, J: Integer;
  evtS5001: TS5001;
  evtS5002: TS5002;
  evtS5011: TS5011;
  evtS5012: TS5012;
begin
  Protocolo := '';
  if not(InputQuery('WebServices: Consulta Protocolo', 'Protocolo', Protocolo))
  then
    Exit;

  if ACBreSocial1.Consultar(Protocolo) then
  begin

    MemoResp.Lines.Text := ACBreSocial1.WebServices.ConsultaLote.RetWS;

    with MemoDados.Lines do
    begin
      with ACBreSocial1.WebServices.ConsultaLote.RetConsultaLote do
      begin
        Add('');
        Add('Código Retorno: ' + IntToStr(Status.cdResposta));
        Add('Mensagem: ' + Status.descResposta);

        if Status.cdResposta in [201, 202] then
        begin
          Add('ideEmpregador');
          Add(' - TpInsc: ' + eSTpInscricaoToStr(IdeEmpregador.TpInsc));
          Add(' - NrInsc: ' + IdeEmpregador.NrInsc);
          Add('ideTransmissor');
          Add(' - TpInsc: ' + eSTpInscricaoToStr(IdeTransmissor.TpInsc));
          Add(' - NrInsc: ' + IdeTransmissor.NrInsc);
          Add('dadosRecepcaoLote');
          Add(' - dhRecepcao..............: ' +
            DateTimeToStr(dadosRecLote.dhRecepcao));
          Add(' - versaoAplicativoRecepcao: ' +
            dadosRecLote.versaoAplicRecepcao);
          Add(' - protocoloEnvio..........: ' + dadosRecLote.Protocolo);

          for i := 0 to retEventos.Count - 1 do
          begin
            Add('Processamento');
            Add(' - cdResposta.........: ' +
              IntToStr(retEventos.Items.Processamento.cdResposta));
            Add(' - descResposta.......: ' + retEventos.Items
              .Processamento.descResposta);
            Add(' - versaoAplicProcLote: ' + retEventos.Items
              .Processamento.versaoAplicProcLote);
            Add(' - dhProcessamento....: ' + DateTimeToStr(retEventos.Items
              .Processamento.dhProcessamento));

            if retEventos.Items.Processamento.Ocorrencias.Count > 0 then
            begin
              Add('Ocorrencias do Processamento');
              for J := 0 to retEventos.Items.Processamento.Ocorrencias.
                Count - 1 do
              begin
                Add(' Ocorrencia ' + IntToStr(J));
                Add('   Código.....: ' +
                  IntToStr(retEventos.Items.Processamento.Ocorrencias.Items
                  [J].Codigo));
                Add('   Descrição..: ' + retEventos.Items
                  .Processamento.Ocorrencias.Items[J].Descricao);
                Add('   Tipo.......: ' +
                  IntToStr(retEventos.Items.Processamento.Ocorrencias.Items
                  [J].Tipo));
                Add('   Localização: ' + retEventos.Items
                  .Processamento.Ocorrencias.Items[J].Localizacao);
              end;
            end;

            for J := 0 to retEventos.Items.tot.Count - 1 do
            begin
              Add(' Tot ' + IntToStr(J));
              Add('   Tipo.........: ' + retEventos.Items.tot[J].Tipo);
              case retEventos.Items.tot[J].Evento.TipoEvento of
                teS5001:
                  begin
                    evtS5001 := TS5001(retEventos.Items.tot[J].Evento.GetEvento);
                    Add('   Id...........: ' + evtS5001.EvtBasesTrab.Id);
                    Add('   nrRecArqBase.: ' +
                      evtS5001.EvtBasesTrab.IdeEvento.nrRecArqBase);
                  end;
                teS5002:
                  begin
                    evtS5002 := TS5002(retEventos.Items.tot[J].Evento.GetEvento);
                    Add('   Id...........: ' + evtS5002.EvtirrfBenef.Id);
                    Add('   nrRecArqBase.: ' +
                      evtS5002.EvtirrfBenef.IdeEvento.nrRecArqBase);
                  end;
                teS5011:
                  begin
                    evtS5011 := TS5011(retEventos.Items.tot[J].Evento.GetEvento);
                    Add('   Id...........: ' + evtS5011.EvtCS.Id);
                    Add('   nrRecArqBase.: ' +
                      evtS5011.EvtCS.IdeEvento.nrRecArqBase);
                  end;
                teS5012:
                  begin
                    evtS5012 := TS5012(retEventos.Items.tot[J].Evento.GetEvento);
                    Add('   Id...........: ' + evtS5012.EvtIrrf.Id);
                    Add('   nrRecArqBase.: ' +
                      evtS5012.EvtIrrf.IdeEvento.nrRecArqBase);
                  end;
              end;
            end;

            Add('Recibo');
            Add(' - nrRecibo: ' + retEventos.Items.Recibo.NrRecibo);
            Add(' - hash....: ' + retEventos.Items.Recibo.hash);
          end;

        end
        else
        begin
          for i := 0 to Status.Ocorrencias.Count - 1 do
          begin
            with Status.Ocorrencias.Items do
            begin
              Add(' Ocorrencia ' + IntToStr(i));
              Add('   Código.....: ' + IntToStr(Codigo));
              Add('   Descrição..: ' + Descricao);
              Add('   Tipo.......: ' + IntToStr(Tipo));
              Add('   Localização: ' + Localizacao);
            end;
          end;
        end;
      end;
    end;

    pgWebservice.ActivePageIndex := 3;
  end;
end;

 

 

 

Link to comment
Share on other sites

  • Consultores

Boa tarde Coisvaes,

Primeiramente, lhe peço para não postar códigos longos como parte do texto da postagem.

Procure nestes casos anexar como um arquivo texto.

Segundo nesse código tem uma linha que retorna o ID dependendo do tipo de evento retornado, estude esse código com mais atenção.

Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

4 horas atrás, Italo Jurisato Junior disse:

Boa tarde Coisvaes,

Primeiramente, lhe peço para não postar códigos longos como parte do texto da postagem.

Procure nestes casos anexar como um arquivo texto.

Segundo nesse código tem uma linha que retorna o ID dependendo do tipo de evento retornado, estude esse código com mais atenção.

Oi, Ítalo...

1) Desculpe-me pela postagem dos códigos como parte do texto;

2) Não se trata dos eventos S-5001, S-5002, S-5011 e S-5012, mas o arquivo de retorno do S-2200 (S-1010, S-1030 e etc...) que são obtidos através do protocolo de envio.

Eu gerei o S-2200 de 50 funcionários, enviei e obtive o protocolo. Depois, consultei usando esse protocolo e obtive o XML que anexei no tópico. Eu rodei essa rotina de consulta linha por linha e observei que ela obtém o arquivo XML de retorno, lê esse arquivo linha por linha e cria o texto que é mostrada na aba "Dados" do exemplo, sem, contudo, preocupar-se com as Tags <evento Id="ID1230691980000002018100312591100003"> ou <retornoEvento Id="ID1230691980000002018100312591100003">, que é o que preciso, além do nrRecibo.

Sei que dá para incluir isso na rotina de consulta mas não estou sabendo como fazê-lo. Eu estou vendo o tópico indicado pelo Rafael, mas, se você puder dar uma dica , com certeza será muito útil. Obrigado.

5 horas atrás, Rafael Dias disse:

tem um tópico na área do SPED sobre isso
 

 

Obrigado, Rafael. Estou vendo o tópico...

Link to comment
Share on other sites

  • Consultores
  • Solution

Bom dia Coisvaes,

Para obter o ID basta ler o atributo ID do retorno da seguinte forma:

ACBreSocial1.WebServices.ConsultaLote.RetConsultaLote.retEventos.Items[ x ].Id

E para ler o numero do recibo:

ACBreSocial1.WebServices.ConsultaLote.RetConsultaLote.retEventos.Items[ x ].Recibo.nrRecibo

Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

9 minutos atrás, Italo Jurisato Junior disse:

Bom dia Coisvaes,

Para obter o ID basta ler o atributo ID do retorno da seguinte forma:

ACBreSocial1.WebServices.ConsultaLote.RetConsultaLote.retEventos.Items[ x ].Id

E para ler o numero do recibo:

ACBreSocial1.WebServices.ConsultaLote.RetConsultaLote.retEventos.Items[ x ].Recibo.nrRecibo

Ok, Ítalo. Já testei e deu certo. Muito obrigado.

  • Like 1
Link to comment
Share on other sites

  • Este tópico foi criado há 1019 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.