Skip to Content

TDF – Messaging Framework: Como criar eventos usando planilhas de Excel

Olá pessoal,

Neste post, vou falar sobre a funcionalidade disponível no Messaging Framework, ferramenta do Tax Declaration Framework (TDF), que permite criar eventos para o eSocial.

Essa ferramenta fornece uma planilha de Excel na qual os dados de entrada podem ser cadastrados manualmente e depois importados como eventos para o sistema.

Geração da planilha de Excel para entrada de dados

  1. Acesse a transação /TMF/SHEET_GEN_ESO, que pode ser encontrada no caminho abaixo:

2. Selecione a versão do leiaute para qual você precisa gerar os eventos.

3. Selecione os tipos de eventos para os quais você precisa criar as entradas.

O sistema exibe apenas os eventos para o leiaute que você selecionou. Aqui você tem a opção de selecionar apenas um tipo de evento ou vários dentro de uma série de tipos. Se você selecionar mais de um tipo de evento, o programa criará um arquivo Excel com uma planilha para cada tipo de evento presente na seleção.

4. Selecione o nome do arquivo e o local em que deseja salvá-lo.

5. Execute o programa.

Preenchimento da planilha de Excel

O preenchimento da planilha é uma parte importante do processo, pois os campos devem estar inteiramente preenchidos, com as informações corretas e de acordo com os guias do governo.

O arquivo apresenta algumas dicas logo acima dos campos a serem preenchidos, nas linhas marcadas como “==>HINTS”. Essas dicas possuem informações como formato de data e entradas possíveis de um campo, entre outras.

Exemplo de arquivo:

Não entrarei em detalhes sobre o preenchimento da planilha, pois pode variar de acordo com o evento.

Upload das informações para o sistema

Após ter todas as entradas prontas, você deve enviar o arquivo para o sistema.

Para efetuar o envio do arquivo, siga os passos abaixo:

  1. Acesse a transação /TMF/IMPEXL, que pode ser encontrada no caminho abaixo:

2. Clique em Browse para selecionar o arquivo que você criou e preencheu.

3. Selecione o cliente (mandante) para o qual os dados são válidos.

4. Selecione a opção “Running in test mode”(Rodar em modo de teste), pois o serviço faz uma validação rápida dos dados no arquivo.

Se houver erros, o sistema abre um o log com a descrição de cada erro encontrado.

Se não houver erros, o sistema retorna a mensagem abaixo:

5. Desmarque a opção “Running in test mode” e execute o programa novamente.

6. O sistema executa mais algumas verificações e, se todos os dados estiverem corretos, faz o upload das informações para o sistema no mandante selecionado.

7. As informações então estarão disponíveis no cockpit do eSocial.

8. Verifique se todas as informações importadas estão corretas.

Note que esta não é a única maneira de fazer a integração de dados com o sistema. Também é possível usar a transação /TMF/MF_METADATA que é o gerador de templates e visualizador de metadados dos eventos. Além disso, existem Web Services para importação de XML (/TMF/SI_ImportingXML e /TMF/TMFbatchServiceCtRSyncln). Mas isso é assunto para um outro post.

Você encontra mais informações sobre o Messaging Framework e também sobre o eSocial em:

Em caso de dúvidas e/ou sugestões, por favor deixem comentários abaixo.

Espero ter ajudado e até a próxima!

Karla Reis

Time de Desenvolvimento do TDF

35 Comments
You must be Logged on to comment or reply to a post.
  • Muito obrigado pelo post Karla.

     

    Ficou bastante claro o funcionamento. Essa ferramenta será útil para gerarmos as mensagens referentes a Segurança e Medicina do Trabalho, cujos eventos não são geridos no HCM.

    Quanto aos eventos gerenciados no HCM relevantes para o eSocial, eles vão diretamente para o cockpit do Messaging Framework, correto ?

     

    Att.

    Lindolfo

    • Oi Lindolfo,

      Que bom que ajudou! 🙂

      Por hora, isso ainda não está acontecendo. 🙁 Estamos trabalhando na integração e vamos manter vocês atualizados.

      Karla

    • Oi Lindolfo,

      As notas para integração do eSocial HCM e eSocial TDF já foram liberadas, segue a lista em ordem de instalação:

      2469919   – [TDF SP09] Note 045: MF – Automatic Implementation of Data Dictionary…

      2465479  –  [TDF SP09] Note 046: MF – E-Social Layout 2.2.01

      2471585  – [TDF SP09] Note 047: MF – Automatic Implementation of Table Contents

      2469919 – [TDF SP09] MF – Integration HCM and TDF eSocial

      Abraço,

      Karla

       

  • Karla, boa tarde. Parabéns pelo post, foi de bastante ajuda.

     

    Pode nos confirmar por gentileza se essa funcionalidade também está disponível para o REINF?

     

    Abraços, obrigado!

     

    Marcello Lanzoni

  • Boa tarde Karla,

     

    Mais uma dúvida: caso o evento tenha sido rejeitado ao enviar para o governo tem algum módulo de edição para ajustar o erro e reenviar ou só fazendo nova carga do mesmo evento novamente através de planilha ?

     

    Att.

    Lindolfo

     

  • Karla,

     

    Excelente artigo/conteúdo! Estou implementando um eSocial com TDF.

     

    Você sabe de algo sobre a tabela de Inscrição, que dá erro, quando colocamos CNPJ = 1 e quando informamos o CNPJ da Empresa/Local de Negócio, porém, quando dou a segunda entrada que também é CNPJ não permite, porque fala que já possui o código =1 na tabela. Ou seja, não permite incluir mais de uma Empresa.

     

    Agradeço, caso tenham algo pra compartilhar!

     

    Abraços

    • Oi Paula,

      Não consegui entender muito bem, qual tabela tu tens dúvida, qual evento tu estás preenchendo? Apenas tabela de inscrição não ficou claro.

      Caso seja identificado um erro, por favor, abra um incidente para a SAP com detalhes sobre o problema.

      Att,

      Felipe

  • Boa noite Felipe,

    Ao tentar gerar a planilha para o layout S2230, eu só encontrei disponível o layout versão S2.3. Esta correto ? tem nota atualizando ?

     

    Desde já agradeço,

     

    Ilton M. Oliveira Jr.

     

    • Olá,

       

      Já existe o layout 2.4 disponível sim, por favor, verifique se o teu sistema está atualizado.

      Principalmente se essa nota já foi implementada no sistema:

      2578105 – [TDF SP10] MF – eSocial – General Corrections for the GetEventData Enterprise Service and Messaging Framework

       

      Att,

       

      Felipe Prates Carvalho

  • Boa tarde,

    fiquei com uma dúvida em relação ao ID_EVENTO que deve ser preenchido nestas planilhas. Estamos trabalhando com o REINF, e ao fazer a carga manual dessa planilha precisamos informar o ID_EVENTO para que gere os dados do Evento R-2010, por exemplo, mas como o usuário saberá o que preencher neste campo? De fato ao fazer o upload as tabelas stanging são preenchidas, porém não fica simples o entendimento para o usuário.

    • Olá,

       

      O ID_EVENTO pode ser preenchido com qualquer informação, assim que ela chegar no Messaging Framework ele vai ser substituído por um número de controle que vai ser usado pelo sistema.

      Mas com certeza vamos tentar explicitar melhor essa informação nas próximas atualizações.

       

      Obrigado.

       

      Felipe Prates Carvalho

      Equipe de Desenvolvimento do TDF

  • Boa tarde Karla, tudo bem?

    Estou trabalhando em uma integração de sistema não-SAP com TDF usando SAP PI através do proxy /TMF/TMFbatchServiceCtRSyncln. Notei observando proxy que ele espera o nome da tabela shadow e a estrutura da mesma em um XSTRING convertido em Base64 mas não consegui enttender se há algum padrão para esta estrutura.
    Saberia me dizer se seria a estrura somente com nome dos campos e conteúdo? Tem alguma estrutura específica?
    Esta interface faz somente inserção ou faz modificação e exclusão também? Nestes casos teria algum preenchimento diferenciado?

    Desde já agradeço a atenção!

    Muito obrigado,

    Vinicius Silva

    • Olá Vinicius,

       

      Somente inserção e modificação e o formato é o mesmo. Deleção não é suportado.

      A estrutura é a seguinte (exemplo):

      <?xml version=”1.0″ encoding=”utf-8″?>
      <asx:abap xmlns:asx=”http://www.sap.com/abapxml” version=”1.0″>
      <asx:values>
      <asx:BATCHINFO>
      <asx:_-TMF_-D_PLCTA_CPL>
      <MANDT>XXX</MANDT>
      <EMPRESA>XXXX</EMPRESA>
      <COD_CTA>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</COD_CTA>
      <COD_CCUS>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</COD_CCUS>
      <CTA_B>X</CTA_B>
      <COD_LAN_ORIG>XXXXXXXXXXXXXXXXXXXX</COD_LAN_ORIG>
      <DESC_LAN_ORIG>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</DESC_LAN_ORIG>
      <DT_LIM_LAL>XXXXXXXX</DT_LIM_LAL>
      <TRIBUTO>X</TRIBUTO>
      <CNPJ_SIT_ESP>XXXXXXXXXXXXXX</CNPJ_SIT_ESP>
      <CNPJ_EST>XXXXXXXXXXXXXX</CNPJ_EST>
      </asx:_-TMF_-D_PLCTA_CPL>
      </asx:BATCHINFO>
      </asx:values>
      </asx:abap>

       

      Att,

      Juliano Bellini

      • Olá Juliano,

         

        Muito obrigado pela resposta!

         

        Testei com a estrutura que você me passou mas estou recebendo o erro abaixo:

        <n0:batchServiceInCTRResp xmlns:n0=”http://sap.com/xi/TMFLOCBR” xmlns:prx=”urn:sap.com:proxy:<EDITADO>”><response line=”1″ tableName=”/TMF/D_PLCTA_CPL”><return><message type=”E”><id>E003</id><description>XML entered is not valid; check XML</description><runid/></message></return></response></n0:batchServiceInCTRResp>

         

        Dados de entrada:

        <n0:batchServiceInCTR version=”1″ xmlns:n0=”http://sap.com/xi/TMFLOCBR”>
        <n0:table mandt=”100″>
        <n0:tableName>/TMF/D_PLCTA_CPL</n0:tableName>
        <n0:base64tableData>PD94bWwgdmVyc2lvbj3igJ0xLjDigLMgZW5jb2Rpbmc94oCddXRmLTjigLM/Pjxhc3g6YWJhcCB4bWxuczphc3g94oCdaHR0cDovL3d3dy5zYXAuY29tL2FiYXB4bWzigJ0gdmVyc2lvbj3igJ0xLjDigLM+PGFzeDp2YWx1ZXM+PGFzeDpCQVRDSElORk8+PGFzeDpfLVRNRl8tRF9QTENUQV9DUEw+PE1BTkRUPjEwMDwvTUFORFQ+PEVNUFJFU0E+MTAyMDwvRU1QUkVTQT48Q09EX0NUQT4xMjM0NTwvQ09EX0NUQT48Q09EX0NDVVM+MTIzNDwvQ09EX0NDVVM+PENUQV9CPlg8L0NUQV9CPjxDT0RfTEFOX09SSUc+MTIzPC9DT0RfTEFOX09SSUc+PERFU0NfTEFOX09SSUc+dGVzdGU8L0RFU0NfTEFOX09SSUc+PERUX0xJTV9MQUw+MjAxOTA2MDU8L0RUX0xJTV9MQUw+PFRSSUJVVE8+WDwvVFJJQlVUTz48Q05QSl9TSVRfRVNQPjk0MzcxMjQyMDAwMTM1PC9DTlBKX1NJVF9FU1A+PENOUEpfRVNUPjEzMTU5MTY0MDAwMTA4PC9DTlBKX0VTVD48L2FzeDpfLVRNRl8tRF9QTENUQV9DUEw+PC9hc3g6QkFUQ0hJTkZPPjwvYXN4OnZhbHVlcz48L2FzeDphYmFwPg==</n0:base64tableData>
        </n0:table>
        </n0:batchServiceInCTR>

         

         

        O Base64 foi gerado no site https://www.base64encode.org/ com base na estrutura abaixo:

        <?xml version=”1.0″ encoding=”utf-8″?><asx:abap xmlns:asx=”http://www.sap.com/abapxml” version=”1.0″><asx:values><asx:BATCHINFO><asx:_-TMF_-D_PLCTA_CPL><MANDT>100</MANDT><EMPRESA>1020</EMPRESA><COD_CTA>12345</COD_CTA><COD_CCUS>1234</COD_CCUS><CTA_B>X</CTA_B><COD_LAN_ORIG>123</COD_LAN_ORIG><DESC_LAN_ORIG>teste</DESC_LAN_ORIG><DT_LIM_LAL>20190605</DT_LIM_LAL><TRIBUTO>X</TRIBUTO><CNPJ_SIT_ESP>94371242000135</CNPJ_SIT_ESP><CNPJ_EST>13159164000108</CNPJ_EST></asx:_-TMF_-D_PLCTA_CPL></asx:BATCHINFO></asx:values></asx:abap>

         

        Debugando a classe  /TMF/CL_TMFBATCH_SERVICE_CTRSY, no método set_base64data notei que o programa lê o Base64 como um xstring quando, na verdade, o dado que foi encodado em base64 é um string. Seria esse o problema?

        O erro está ocorrendo no método execute_xslt quando tenta executar o xslt /TMF/XSLT_REMOVE_NS_AND_PREFIX. Você já encontrou este erro em algum momento? Seria necessário passar um XSTRING convertido em Base64 na interface?

        Obrigado!

        Vinicius Silva

        • Oi Vinicius,

           

          Tem um typo na linha que você está passando.

          Troca para: <asx:abap xmlns:asx=”http://www.sap.com/abapxml” version=”1.0″>

           

          Att,

          Juliano Bellini

          • Olá Juliano, obrigado novamente!

            Desculpe mas acho que não entendi… na mensagem a ser encodada no base64 tenho essa linha:

            <?xml version=”1.0″ encoding=”utf-8″?><asx:abap xmlns:asx=”http://www.sap.com/abapxml” version=”1.0″><asx:values><asx:BATCHINFO><asx:_-TMF_-D_PLCTA_CPL><MANDT>100</MANDT><EMPRESA>1020</EMPRESA><COD_CTA>12345</COD_CTA><COD_CCUS>1234</COD_CCUS><CTA_B>X</CTA_B><COD_LAN_ORIG>123</COD_LAN_ORIG><DESC_LAN_ORIG>teste</DESC_LAN_ORIG><DT_LIM_LAL>20190605</DT_LIM_LAL><TRIBUTO>X</TRIBUTO><CNPJ_SIT_ESP>94371242000135</CNPJ_SIT_ESP><CNPJ_EST>13159164000108</CNPJ_EST></asx:_-TMF_-D_PLCTA_CPL></asx:BATCHINFO></asx:values></asx:abap>

             

            Devo passar em outro lugar?

             

            Muito obrigado!!!

          • Oi Vinicius,

             

            Tenta o seguinte e parte deste:

            PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxhc3g6YWJhcCB4bWxuczphc3g9Imh0dHA6Ly93d3cuc2FwLmNvbS9hYmFweG1sIiB2ZXJzaW9uPSIxLjAiPg0KPGFzeDp2YWx1ZXM+DQo8YXN4OkJBVENISU5GTz4NCjxhc3g6Xy1UTUZfLURfUExDVEFfQ1BMPg0KPE1BTkRUPlhYWDwvTUFORFQ+DQo8RU1QUkVTQT5YWFhYPC9FTVBSRVNBPg0KPENPRF9DVEE+WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg8L0NPRF9DVEE+DQo8Q09EX0NDVVM+WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg8L0NPRF9DQ1VTPg0KPENUQV9CPlg8L0NUQV9CPg0KPENPRF9MQU5fT1JJRz5YWFhYWFhYWFhYWFhYWFhYWFhYWDwvQ09EX0xBTl9PUklHPg0KPERFU0NfTEFOX09SSUc+WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg8L0RFU0NfTEFOX09SSUc+DQo8RFRfTElNX0xBTD5YWFhYWFhYWDwvRFRfTElNX0xBTD4NCjxUUklCVVRPPlg8L1RSSUJVVE8+DQo8Q05QSl9TSVRfRVNQPlhYWFhYWFhYWFhYWFhYPC9DTlBKX1NJVF9FU1A+DQo8Q05QSl9FU1Q+WFhYWFhYWFhYWFhYWFg8L0NOUEpfRVNUPg0KPC9hc3g6Xy1UTUZfLURfUExDVEFfQ1BMPg0KPC9hc3g6QkFUQ0hJTkZPPg0KPC9hc3g6dmFsdWVzPg0KPC9hc3g6YWJhcD4=

             

            Att,

            Juliano Bellini

          • Boa tarde Juliano.

             

            Funcionou, muito obrigado!

             

            Eu testei com o meu XML com os espaços/quebras de linha e funcionou também… quando eu gerar no pi devo gerar com as quebras, é isso?

             

            Obrigado

      • Boa tarde,

        Estou tentando gravar alguns registros pela interface onde os campos de data estarão vazios. Passando o campo vazio ou zero (“00000000″) estou recebendo o erro abaixo:

        -<response tableName=”/TMF/D_ALT_ITEM” line=”1″>

        -<return>

        -<message type=”E”>

        <id>E008</id>

        <description>Field DT_INI: Conversion error</description>

        <runid/>

        </message>

        </return>

         

        Para checar campos de data a classe /TMF/CL_BATCHDATAENTRY_SERVICECP no método CHECK_DATA usa a função DATE_CHECK_PLAUSIBILITY que considera incorreta uma data zerada. Vocês já encontrar este problema? Conhecem algum modo de resolver e conseguir passar uma data vazia ou preenchida com zero?

        Segue prints do que verifiquei.

         

         

         

         

        Agradeço novamente pela ajuda!

         

        Muito obrigado,

        Vinicius Silva

        • Olá Vinicius,

           

          Para erros, peço que abra incidente para fazermos a análise.

          De qualquer forma, 00000000 não é uma data válida no ABAP, por isso o erro.

           

          Att,

          Juliano Bellini