cancel
Showing results for 
Search instead for 
Did you mean: 

Dúvida sobre J_1BNF_ADD_DATA (Additional Data BAdI)

alexandre_cristovao
Participant
0 Kudos

Olá pessoal, boa tarde.

Estamos com uma dúvida na utilização da J_1BNF_ADD_DATA (BAdI Nova para NFe). O entendimento inicial era que a BAdI nova viria para substituir a antiga e que, uma vez ativada, o standard não realizaria a chamada dos desenvolvimentos presentes na CL_NFE_PRINT, e que deve-se iniciar uma migração dos desenvolvimentos. Porém, com as mudanças desenvolvidas pela nota 2112507 - Additional Data x Mapping BAdI Enablement, permite-se a chamada das BAdI simultaneamente, auxiliando na migração.

Imaginando uma situação onde nenhuma das BAdIs estão implementadas (instalação nova, por exemplo), o caminho natural seria a utilização da BAdI nova. Porém, apenas os campos adicionais estão disponíveis para modificação (parâmetro Changing). Como poderíamos modificar o conteúdo dos demais campos?

Por exemplo: EXTIPI. Neste caso, ele somente existe no XML, não foi incluído na estrutura de item da nota fiscal (J_1BNFLIN) tampouco na de Additional Item Fields. Entendo que ele está contemplado no próprio campo NCM, mas gostaríamos de usar outra regra para sua utilização.

Em outras situações, implementaria a CL_NFE_PRINT-FILL_ITEM conforme a necessidade, porém como pretendemos usar apenas a nova, como poderíamos fazer? Lembrando que a pergunta não é específica deste campo, mas para qualquer outro. Toda a ajuda ou exemplo será bem vinda.

Obrigado pela atenção.

Accepted Solutions (1)

Accepted Solutions (1)

former_member182503
Active Contributor
0 Kudos

Alexandre,

Esse gap entre a BAdI nova e velha é de matar mesmo. Como solução, sugiro o bom e velho Dirty-assign.

Exemplo, no método IF_J_1BNF_ADD_DATA~FILL_EXPARAMETERS, alterando a tabela LIN


FIELD-SYMBOLS: <fs_lin> TYPE j_1bnflin.

ASSIGN ('(SAPLJ_1B_NFE)WK_ITEM') TO <fs_lin>.

IF <fs_lin> IS ASSIGNED.

"Altero qualquer campo da LIN

<fs_lin>-docref = '123456789'.

ENDIF.

Você pode ver o que você quer alterar(variavel, estrutura, tabela) dando uma olhada nos includes que chamam a nova BAdI. Vá na SE24 e veja o where-used list da interface IF_J_1BNF_ADD_DATA. Exemplo: Include LJ_1B_NFEF45 ou LJ1BIF27.

[]'s

JN

alexandre_cristovao
Participant
0 Kudos

Olá José, Obrigado pelo retorno.

Creio que o assing possa ajudar, mas neste caso em específico do EXTIPI, como o campo não existe na J_1BNFLIN apenas na comunicação com o XML, não iria funcionar, pois no momento da chamada do Mapping vai perder a informação.

former_member182503
Active Contributor
0 Kudos

Alexandre,

Com a técnica do dirty-assign você consegue alterar a maioria das variaveis, estruturas ou tabelas do programa, basta você saber usá-la e encontrar o momento oportuno para isso.

Vamos ao seu exemplo: Campo EXTIPI - ele é preenchido no FORM map_xmli_tab. A tabela é a xmli_tab (guarde esse nome). Após esse form ser chamado, o FORM call_badis_310. é executado. PRONTO! Encontramos o momento oportuno.

Usando a BAdI nova ou velha, o método a ser implementado é o FILL_AUTXML.

Lá dentro, coloque o código abaixo:


FIELD-SYMBOLS: <fs_xmli_tab> TYPE j_1b_nf_xml_item_tab,

<fs_xmli> TYPE j_1b_nf_xml_item.

ASSIGN ('(SAPLJ_1B_NFE)XMLI_TAB') TO <fs_xmli_tab>.

IF <fs_xmli_tab> IS ASSIGNED.

LOOP AT <fs_xmli_tab> ASSIGNING <fs_xmli>.

<fs_xmli>-extipi = lv_valor.

ENDLOOP.

ENDIF.

Se mesmo assim você achar que não está de bom tamanho... Implicit Enhancement Point: How To Do Implicit Enhancement - ABAP Development - SCN Wiki

[]'s

JN

Answers (1)

Answers (1)

former_member209197
Active Participant
0 Kudos

Olá Alexandre.

Existe uma intenção de que a maior parte (senão todos) dos campos seja suportado na BADI nova.

O que a BADI nova não vai permitir de forma geral é a alteração de campos que podem ser determinados pelo sistema.

Se existe um campo que não é suportado em nenhum ponto eu sugiro que também sempre entre em contato com a SAP através de um chamado para questionar se existe algo oficial ou se não é algo que foi esquecido.

O gap pode não ser intencional.

abs

André