sexta-feira, 3 de maio de 2019

BADI CL_NFE_PRINT X ES_J_1BNF_ADD_DATA

======= ESSE TEXTO PODE NÃO SER 100% =======================
Peguei casos em q as 2 estão ativas e funcionando
============================================================

Voltei a ativa e já peguei um pepino..

Li umas notas e tal sobre esse caso, foi bem porque eu tinha um método para modificar um XML na BADI NFE_PRINT e tinha um código nessa outra BADI  ADD_DATA, aí tava vendo uns blogs e tal e falaram que se uma estivesse implementada a outra não funcionaria, fui nessa direção querendo passar tudo que tava numa para outra, mas aí reparei que não é bem assim, as duas podem estar ativadas e só é desconsiderado a NFE_PRINT se alguma alteração na estrutura for feita na ADD_DATA, ou seja mesmo as 2 ativadas se não tiver alteração nenhuma na ADD_DATA vai passar pela NFE_PRINT.
Existe um código logo após a ADD_DATA que verifica se houve modificação nos dados do que entrou para o que saiu da BADI, quando isso acontece que é no momento de criar a nota, fica um flag na J_1BNFDOC campo IND_BADI_CTRL que fica marcado, e é esse flag que ele verifica quando vai criar o XML e passa na NFE_PRINT, se estiver vazio passa na BADI se estiver marcado ele ignora.

==> CÓDIGO QUE ESTÁ NO MOMENTO DO XML

  IF obj_ref IS BOUND AND                                 "2112507
     wk_header-ind_badi_ctrl 'X' AND                    "2112507
     wk_header-cnpj_bupla IS NOT INITIAL"transitional phase 1844621
    lo_obj_ref obj_ref.                                       "1844621
    CLEAR obj_ref.               "save for later use            "1844621
  ENDIF.              

==> CÓDIGO QUE ESTÁ NA CRIAÇÃO DA NF - LOGO APÓS PASSAR NA BADI ADD_DATA
METHOD is_add_data_changed.
  IF mr_header        <> p_header       OR
     mt_item[]        <> p_item[]       OR
     mt_transvol[]    <> p_transvol[]   OR
     mt_trailer[]     <> p_trailer[]    OR
     mt_tradenotes[]  <> p_tradenotes[] OR
     mt_refproc[]     <> p_refproc[]    OR
     mt_add_info[]    <> p_add_info[]   OR
     mt_sugarsuppl[]  <> p_sugarsuppl[] OR
     mt_sugardeduc[]  <> p_sugardeduc[] OR
     mt_pharmaceut[]  <> p_pharmaceut[] OR
     mt_vehicle[]     <> p_vehicle[]    OR
     mt_fuel[]        <> p_fuel[]       OR
     mt_export[]      <> p_export[]     OR
     mt_import_adi[]  <> p_import_adi[] OR
     mt_import_di[]   <> p_import_di[]  OR
     mt_nve[]         <> p_nve[]           OR             "2459713
     mt_traceability[] <> p_traceability[] OR             "2459713
     mt_pharma[]       <> p_pharma[]       OR             "2459713
     mt_payment[]      <> p_payment[]      OR             "2747190
     mt_tec_resp[]     <> p_tec_resp[].                   "2747190
                                                          "2459713
     rv_flag abap_true.                                 "2459713
  ENDIF.
ENDMETHOD.



==> RETORNO DO MÉTODO IS_ADD_DATA_CHANGED acima
.....
RECEIVING                                           "2112507
        rv_flag       wnfdoc-ind_badi_ctrl.             "2112507
.......

Nenhum comentário:

Postar um comentário