Skip to Content

Dúvida sobre J_1BNF_ADD_DATA (Additional Data BAdI)

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.

Add a comment
10|10000 characters needed characters exceeded

Related questions

2 Answers

  • Best Answer
    Posted on Sep 18, 2015 at 06:57 PM

    Alexandre,

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

    Using dirty assigns in practice - using calling variables for indirect wagetype evaluation

    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

    Add a comment
    10|10000 characters needed characters exceeded

    • Jose Nunes Alexandre Cristovao

      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

  • Posted on Sep 22, 2015 at 12:39 PM

    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é

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.