Ir para conteúdo
  • Cadastre-se

dev botao

ACBreSocial - Pegar nrRecibo XML retorno


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 2239 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

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

Postado
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;

 

 

 

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
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...

  • Consultores
  • Solution
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
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.

  • Curtir 1
  • Este tópico foi criado há 2239 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.