⚡ Resumo rápido
- 🔌BAdI = tomada para encaixar sua regra sem mexer no padrão
- 🆕J_1BNF_ADD_DATA: a nova, grava os dados na própria nota
- 👴CL_NFE_PRINT: a clássica, mexe só no XML na hora do envio
- 🤝As duas juntas: SAP Note 2112507 (migração)
- 💵 PR00: 100 CX × R$ 180,00 = R$ 18.000,00
- 🏬 ICMS: R$ 18.000,00 × 18% = R$ 3.240,00 (já embutido no preço, "por dentro")
- 🏛️ CBS3: R$ 18.000,00 × 0,9% = R$ 162,00
- 🏙️ IB3S/IB3M: R$ 18.000,00 × 0,1% = R$ 18,00 (parte do estado + parte do município)
- ⚙️ A ordem das condições e as fórmulas vêm do procedimento de cálculo (esquema de pricing + TAXBRA), configurado na SPRO.
👉 Aqui nasce tudo: cliente, material, preço e, desde 2026, as condições de CBS e IBS no pricing. 👆 Clique nas abas.
👉 A logística separa (picking) e prepara a carga. Ainda não há nota fiscal.
👉 A saída de mercadoria (movimento 601) baixa o estoque. É o momento em que a carga "sai" no sistema.
👉 O faturamento gera três coisas: a fatura, a contabilização e a Nota Fiscal.
👉 A NF fica gravada nas tabelas J_1BNFDOC (cabeçalho) e J_1BNFLIN (itens). É daqui que o XML é montado. 👆 Clique nas abas.
👉 Ilustração: o que cada BAdI acrescentou. As regras são customizadas por empresa.
<det nItem="1">
<prod> <cProd>GORD-REC-20</cProd> <CFOP>5101</CFOP>
<xPed>PC-7781</xPed> <nItemPed>10</nItemPed> </prod>
<imposto> ...
<IBSCBS> <CST>000</CST> <cClassTrib>000001</cClassTrib>
<gIBSCBS> <vBC>18000.00</vBC> ... <vCBS>162.00</vCBS> </gIBSCBS>
</IBSCBS> </imposto>
</det>
<infAdic> <infCpl>Pedido do cliente: PC-7781</infCpl> </infAdic>👉 Trecho simplificado do XML (leiaute 4.00 com os grupos da Reforma). Em destaque, o que veio da ordem e das BAdIs.
👉 A mensageria (SAP DRC, Mastersaf, NDD, Synchro…) assina, envia, recebe a resposta e devolve o status ao SAP. É o "carteiro" de ida e volta.
👉 A SEFAZ confere centenas de regras. Passou: status 100. Não passou: um código de rejeição que diz o que corrigir.
👉 A mensageria (SAP DRC, Mastersaf, NDD, Synchro…) assina, envia, recebe a resposta e devolve o status ao SAP. É o "carteiro" de ida e volta.
👉 De volta ao SAP: o J1BNFE mostra o semáforo de cada nota. Verde = autorizada; vermelho = rejeitada (dá para corrigir e reenviar daqui).
👉 Só depois da autorização o DANFE é impresso e o XML vai por e-mail ao cliente (mensagem de saída da NF).
- 💵 PR00: 100 CX × R$ 180,00 = R$ 18.000,00
- 🏬 ICMS: R$ 18.000,00 × 18% = R$ 3.240,00 (já embutido no preço, "por dentro")
- 🏛️ CBS3: R$ 18.000,00 × 0,9% = R$ 162,00
- 🏙️ IB3S/IB3M: R$ 18.000,00 × 0,1% = R$ 18,00 (parte do estado + parte do município)
- ⚙️ A ordem das condições e as fórmulas vêm do procedimento de cálculo (esquema de pricing + TAXBRA), configurado na SPRO.
👉 Aqui nasce tudo: cliente, material, preço e, desde 2026, as condições de CBS e IBS no pricing. 👆 Clique nas abas.
👉 A logística separa (picking) e prepara a carga. Ainda não há nota fiscal.
👉 A saída de mercadoria (movimento 601) baixa o estoque. É o momento em que a carga "sai" no sistema.
👉 O faturamento gera três coisas: a fatura, a contabilização e a Nota Fiscal.
👉 A NF fica gravada nas tabelas J_1BNFDOC (cabeçalho) e J_1BNFLIN (itens). É daqui que o XML é montado. 👆 Clique nas abas.
👉 Ilustração: o que cada BAdI acrescentou. As regras são customizadas por empresa.
<det nItem="1">
<prod> <cProd>GORD-REC-20</cProd> <CFOP>5101</CFOP>
<xPed>PC-7781</xPed> <nItemPed>10</nItemPed> </prod>
<imposto> ...
<IBSCBS> <CST>000</CST> <cClassTrib>000001</cClassTrib>
<gIBSCBS> <vBC>18000.00</vBC> ... <vCBS>162.00</vCBS> </gIBSCBS>
</IBSCBS> </imposto>
</det>
<infAdic> <infCpl>Pedido do cliente: PC-7781</infCpl> </infAdic>👉 Trecho simplificado do XML (leiaute 4.00 com os grupos da Reforma). Em destaque, o que veio da ordem e das BAdIs.
👉 A mensageria (SAP DRC, Mastersaf, NDD, Synchro…) assina, envia, recebe a resposta e devolve o status ao SAP. É o "carteiro" de ida e volta.
👉 A SEFAZ confere centenas de regras. Passou: status 100. Não passou: um código de rejeição que diz o que corrigir.
👉 De volta ao SAP: o J1BNFE mostra o semáforo de cada nota. Verde = autorizada; vermelho = rejeitada (dá para corrigir e reenviar daqui).
👉 Só depois da autorização o DANFE é impresso e o XML vai por e-mail ao cliente (mensagem de saída da NF).
A fatura do SD (VF01). É dela que nasce a Nota Fiscal.
Ex.: fatura 90000789Gravada nas tabelas J_1BNFDOC (cabeçalho) e J_1BNFLIN (itens).
Ex.: NF 000123O pricing calcula ICMS, IPI, CBS e IBS; a Reforma define CST e cClassTrib.
Condições CBS3, IB3SBAdIs completam o que o padrão não preenche.
J_1BNF_ADD_DATA, CL_NFE_PRINTArquivo no leiaute 4.00 com as tags definidas nas Notas Técnicas.
infCpl, xPed, gIBSCBSRecebe o XML por RFC, assina com o certificado, envia à SEFAZ e devolve a resposta.
SAP DRC, Mastersaf, NDD…A assinatura que prova que a nota é mesmo da empresa.
Certificado A1Deu certo: status 100 e protocolo de autorização.
Monitor J1BNFEAlgo errado: código de erro, corrige e reenvia.
Ex.: 225 (falha no schema)Depois de autorizada, imprime o DANFE e manda o XML ao cliente.
Mensagem de saída NAST- Pensa na BAdI como uma tomada na parede: a SAP construiu a casa (o código padrão) e deixou tomadas em pontos certos.
- Você pluga o seu "aparelho" (a sua regra) sem quebrar a parede.
- Se a SAP reformar a casa (aplicar SAP Notes), a tomada continua lá.
🔌 As duas BAdIs da NF-e de saída: a clássica e a nova
- As duas servem para a mesma coisa: colocar no XML o que o SAP padrão não preenche.
- A diferença é quando rodam e onde o dado fica guardado.
- Uma mexe só no "envelope" na hora de enviar; a outra escreve na própria nota, no momento de salvar.
CL_NFE_PRINT
apelido: "a NFE print"
- ⏰ Roda na hora do envio do XML à mensageria
- ✉️ Mexe só no XML: nada fica gravado na NF do SAP
- 🔍 Na J1B3N você não vê o que ela preencheu
- 🧩 Métodos:
FILL_HEADER,FILL_ITEM,FILL_CTE_400, além de impressão e lote (CALL_RSNAST00,GET_SERVER)
J_1BNF_ADD_DATA
apelido: "a J1BNF add data"
- 💾 Roda quando a NF é salva (VF01, MIGO/MIRO, J1B1N)
- 📝 Grava os dados na própria NF: o XML só copia
- 🔍 Aparece na J1B3N, entra na auditoria e no SPED
- 🧩 Métodos:
ADD_DATA,ADD_DATA_J1B1N,FILL_AUTXML - ✅ É a recomendada pela SAP (ECC 6 EHP5 em diante e S/4HANA)
VF01cria a NFJ_1BNF_ADD_DATAgrava em J_1BNFDOC / J_1BNFLINJ1B3Ndados já aparecem aquiCL_NFE_PRINTmexe só no XML, sem gravarJ_1B_NFE_XML_OUTenvio à SEFAZ| 👴 CL_NFE_PRINT | 🆕 J_1BNF_ADD_DATA | |
|---|---|---|
| Quando roda | No envio para a mensageria | Ao salvar a NF |
| Onde o dado fica | Só no XML | Na NF do SAP (e daí no XML) |
| Aparece na J1B3N? | ❌ Não | ✅ Sim |
| Reenvio da nota | Roda de novo: pode sair diferente se a regra mudou | Usa o que já está gravado: sai igual |
| Auditoria / SPED | Nota no SAP ≠ XML enviado | SAP e XML batem |
| Recomendação | Manter o legado e migrar aos poucos | Usar em tudo que for novo |
- Com a clássica, a nota gravada no SAP e o XML que foi para a SEFAZ podiam ser diferentes.
- Na hora de uma fiscalização, de um reenvio ou de gerar o SPED, ninguém achava no SAP o texto ou a tag que tinha ido no XML: ficava "invisível".
- Gravando na própria nota, o que está no SAP é exatamente o que foi para o governo.
- Sim.
- A SAP Note 2112507 permite as duas ativas ao mesmo tempo, justamente para a empresa migrar da clássica para a nova sem parar.
- Regra prática:
- campo que existe nas estruturas da nova (
J_1BNF_BADI_HEADER/J_1BNF_BADI_ITEM) → use a nova. - Tag que só existe no mapeamento (grupos de extensão) → ainda pode precisar da clássica.
🧰 E as outras BAdIs que aparecem no projeto
| BAdI | Para que serve | Quando roda |
|---|---|---|
J_1BNFE_IN | 📥 Ajusta como o XML do fornecedor vira dados no SAP: unidade, material, depósito. | No recebimento automático (entrada) |
BADI_J1B_TAX_SITN 🆕 | 🏷️ Reforma: regra própria de CST e cClassTrib de CBS/IBS por item (método DETERMINE_FOR_OUTGOING). | No cálculo do imposto, antes da NF |
Fontes: blog SAP "Utilização de ambas as BAdIs de NF-e (J_1BNF_ADD_DATA e CL_NFE_PRINT)", SAP Note 2112507, KBA 2777794 e metadados públicos das BAdIs. Não reproduzimos texto de SAP Notes.
Preenche o texto complementar e o pedido do cliente em cada item.
METHOD if_j_1bnf_add_data~add_data.
" ⚠️ EXEMPLO DIDÁTICO: adapte às regras e tabelas da sua empresa.
" Parâmetros reais: IS_HEADER (J_1BNFDOC), IT_NFLIN (itens), IT_VBRP/IT_VBFA (faturamento)
" ES_HEADER (J_1BNF_BADI_HEADER), ET_ITEM (J_1BNF_BADI_ITEM_TAB)
DATA lv_bstkd TYPE bstkd. " nº do pedido do cliente
" lv_bstkd = ... ler VBKD-BSTKD da ordem de venda (via IT_VBRP-AUBEL)
" 1) Texto nas informações complementares → tag infAdic/infCpl
IF lv_bstkd IS NOT INITIAL.
es_header-infcpl = |{ es_header-infcpl } Pedido do cliente: { lv_bstkd }|.
ENDIF.
" 2) Pedido do cliente em cada item → tags det/prod/xPed e nItemPed
LOOP AT it_nflin INTO DATA(ls_lin).
READ TABLE et_item ASSIGNING FIELD-SYMBOL(<ls_item>)
WITH KEY itmnum = ls_lin-itmnum.
IF sy-subrc <> 0.
APPEND VALUE #( itmnum = ls_lin-itmnum ) TO et_item ASSIGNING <ls_item>.
ENDIF.
<ls_item>-xped = lv_bstkd.
<ls_item>-nitemped = ls_lin-itmnum. " ou o item do pedido do cliente
ENDLOOP.
ENDMETHOD.Completa uma tag do cabeçalho do XML.
METHOD if_ex_cl_nfe_print~fill_header.
" ⚠️ EXEMPLO DIDÁTICO: adapte às regras da sua empresa.
" Parâmetros reais: IN_DOC (J_1BNFDOC), IN_TEXT (textos da NF), IN_XML_HEADER
" OUT_HEADER (J1B_NF_XML_BADI_HEADER), CH_EXTENSION1/2 (grupos novos)
" Informação ao fisco → tag infAdic/infAdFisco
IF in_doc-nftype = 'ZD'. " tipo de NF ilustrativo (ex.: nota de débito)
out_header-infadfisco = 'Nota de débito de pagamento antecipado'.
ENDIF.
" Tags que o SAP padrão ainda não monta costumam ir nas extensões
" (CH_EXTENSION1 / CH_EXTENSION2), conforme a SAP Note da sua versão.
ENDMETHOD.Converte a unidade do XML do fornecedor para a unidade do SAP.
METHOD if_j_1bnfe_in~unit_conversion.
" ⚠️ EXEMPLO DIDÁTICO: tabela Z ilustrativa.
" Parâmetros reais: I_MSEH3 (unidade do XML), I_LIFNR (fornecedor),
" I_MATNR, I_EBELN/I_EBELP → C_ERFME (unidade no SAP)
SELECT SINGLE unid_sap FROM zunid_fornecedor
WHERE lifnr = @i_lifnr
AND unid_xml = @i_mseh3
INTO @DATA(lv_unid).
IF sy-subrc = 0.
c_erfme = lv_unid. " ex.: fornecedor manda 'CX', o SAP usa 'KAR'
ENDIF.
ENDMETHOD.Ideia de regra própria de CST/cClassTrib. É pseudocódigo, porque a assinatura muda por versão.
" ⚠️ PSEUDOCÓDIGO: a assinatura completa depende da versão.
" Confirme na SAP Note 3641807 (e correções) antes de implementar.
" BAdI BADI_J1B_TAX_SITN · método DETERMINE_FOR_OUTGOING
METHOD ...~determine_for_outgoing.
" Regra da empresa: hospital público usa um cClassTrib de redução
IF cliente_e_hospital_publico( ).
situacao_tributaria = 'Z_HOSP'. " situação interna → CST e cClassTrib
ENDIF.
" Resultado gravado na NF: J_1BNFLIN-CST e J_1BNFLIN-CCLASSTRIB
ENDMETHOD.🗺️ Como um dado viaja até a SEFAZ
Mapear é decidir de onde vem cada informação e em qual campo ela entra em cada etapa, até virar uma tag do XML. Olha três exemplos reais:
VBKD-BSTKDpedido do cliente na ordemES_HEADER-INFCPLJ_1BNF_ADD_DATAJ1B_NF_XML_HEADER-INFCOMPmontada pelo NF WriterinfAdic/infCplJ_1B_NFE_XML_OUTRFC de saídastatus 100nota autorizadaVBKD-BSTKDe o item do pedidoET_ITEM-XPED / NITEMPEDcasando pelo ITMNUMJ1B_NF_XML_ITEM-XPEDdet/prod/xPede nItemPedJ_1B_NFE_XML_OUTstatus 100Tabela ZCNPJ do contador (não existe campo padrão)FILL_AUTXMLCL_NFE_PRINT ou J_1BNF_ADD_DATAautXML/CNPJassina e enviarejeição 486/487em algumas UFs, se faltar- 1️⃣ Liste as tags novas da Nota Técnica (ex.: grupos de IBS/CBS, DFeReferenciado).
- 2️⃣ Para cada tag, ache a origem do dado no SAP (tabela/campo ou tabela Z).
- 3️⃣ Veja se o padrão SAP já preenche (SAP Notes da sua versão). Se não, escolha a BAdI.
- 4️⃣ Monte a planilha de-para: origem → campo da BAdI → tag do XML.
- 5️⃣ Teste em homologação e confira o XML gerado no monitor da mensageria.
🧭 O caminho de uma NF-e e onde cada BAdI entra
👆 Passe o mouse (ou toque) em cada passo para ver o detalhe
- 🆕 Projeto novo, campo existe nas estruturas da nova? →
J_1BNF_ADD_DATA(grava na nota) - 👴 Tag que só sai pelo mapeamento, ou legado que já funciona? →
CL_NFE_PRINT - 📥 É o XML que chega do fornecedor? →
J_1BNFE_IN - 🏷️ É CST/cClassTrib da Reforma? →
BADI_J1B_TAX_SITN
🧪 Exemplos do dia a dia
📝 Texto nas informações complementares
A Vale Verde quer imprimir "Pedido do cliente nº 123" na nota. → J_1BNF_ADD_DATA, método ADD_DATA, preenchendo o texto do cabeçalho.
👔 Contador pode baixar o XML
Autorizar o CNPJ do escritório contábil no grupo autXML. → FILL_AUTXML.
🔁 Nota de débito apontando a nota original
Levar a chave e o item da venda para o DFeReferenciado. → CL_NFE_PRINT, FILL_ITEM.
📦 Fornecedor manda "CX", o SAP usa "UN"
Converter a unidade no recebimento automático. → J_1BNFE_IN, UNIT_CONVERSION.
🏷️ cClassTrib por cliente
Hospital público usa um cClassTrib, cliente comum usa outro. → BADI_J1B_TAX_SITN.
🖨️ Não imprimir DANFE de amostra
Pular a impressão em certos tipos de nota. → CL_NFE_PRINT, CALL_RSNAST00.
📥 E na entrada (XML do fornecedor)?
👆 Passe o mouse (ou toque) em cada passo para ver o detalhe
🆕 O que a Reforma mudou nas BAdIs
- 🏷️ Nasceu a
BADI_J1B_TAX_SITNpara CST/cClassTrib de CBS e IBS (SAP Notes 3641807 e 3703142 trazem detalhes e novos parâmetros, como data e documento de referência). - 🧩
FILL_HEADEReFILL_CTE_400ganharam parâmetros novos para grupos da Reforma (pagamento antecipado, IBS/CBS no CT-e). - 📮 Com SAP DRC, a
BADI_NFE_DRCCE_EMAILpermite desligar o e-mail automático da nota autorizada. - ☁️ No S/4HANA Cloud (public), o papel da
J_1BNF_ADD_DATAé feito pela BAdINFE_ADDITIONAL_FIELDS_DETERMIN.
J_1BNF_BADI_HEADEReJ_1BNF_BADI_ITEMsão estruturas (os "formulários" que a BAdI preenche), não BAdIs.- Não existe BAdI para "conversar" com a mensageria: isso é feito por RFC e funções do conector.
- Para ver e ativar:
SE18(definição) eSE19(implementação).
❓ Perguntas frequentes
Qual a diferença entre J_1BNF_ADD_DATA e CL_NFE_PRINT?
A J_1BNF_ADD_DATA preenche dados da nota quando ela é criada. A CL_NFE_PRINT completa tags do XML na hora de montar e enviar, e controla a impressão do DANFE.
Preciso de BAdI para a Reforma Tributária?
Depende. Se a determinação padrão de CST/cClassTrib atende, não. Regras próprias por cliente ou material costumam ir na BADI_J1B_TAX_SITN.
📦 Materiais para ir além
Kit Reforma no SAP
Checklist de SAP Notes, roteiro de testes do CNPJ alfanumérico, matriz de ND/NC × eventos e modelo de EF para ND/NC automática.
Entrar na lista de esperaMapa de ND/NC e eventos (para imprimir)
Todos os tpNFDebito, tpNFCredito e eventos numa página, com quem emite, quando usar e o efeito no imposto.
Entrar na lista de espera