sexta-feira, 10 de maio de 2019

Liberar tabelas customizing J1BTAX em QA e PRD

  Para ficar guardado na gaveta;

- É normal os funcionais solicitarem para abrir as tabelas da J1BTAX para modificação no QA ou PRD. Me bati um monte pq o que encontrei no google foi o básico que seria modificar na SOBJ a visão marcando o flag de "Opção em curso"/"Current setting", mas o diabo não funcionou..
 Teve um colega que acabou me ajudando, acho q deve ter diversas outras formas, mas enfim essa achei sem muito impacto, e sem mexer na customização do mandante SCC4.

Coisa simples na verdade.

A idéia é ir na SE54 no objeto da visão e alterar a opção "indicação para transporte de dados do diálogo".

O padrão é estar no "Rotina de registro standard".
Alterar para "Rotina de registro individual/nenhuma".


sexta-feira, 3 de maio de 2019

NFE NT 2018.005 - Erro no técnico responsável não passa na CL_NFE_PRINT

Talvez a SAP já tenha corrigido isso, mas quem implementou as notas para a NT 2018.005 que inclui o responsável técnico e umas outras funcionalidades.

Depois de implementado as notas parou de passar pela BADI CL_NFE_PRINT, no meu post anterior falei sobre a BADI ...ADD_DATA que marca o flag na J_1BFNDOC, eis que fui verificar e após aplicação das notas essa campo IND_BADI_CTRL da .j_1bnfdoc começou a ficar marcado, aí fui debugar e vi que mesmo não alterando nada na BADI ...ADD_DATA, a nota ficava como tivesse sido modificada na BADI marcando o campo.
Aí vi que após a ADD_DATA tem um método novo para o técnico responsável.(abaixo)

" Technical responsible has only the DocNum as Primary Key.
" Therefore it should be a structure during the badi fields editing (there will be only 1 entry per document)
    lo_nfe_persist_badi->tec_resp_move_str_to_table(        "2747190
      EXPORTING                                             "2747190
        is_tec_resp ls_tec_resp                           "2747190
      IMPORTING                                             "2747190
        et_tec_resp wnftec_resp[]                         "2747190
    ).                                                      "2747190

Dentro desse método mesmo que a estrutura LS_TEC_RESP estiver vazia ele grava em branco na tabela interna WNFTEC_RESP, aí fudeu !!!  logo depois qdo ele compara a estrutura.

   "Check if BAdI is active.                             "2112507
    CALL METHOD                                           "2112507
      lo_nfe_persist_badi->is_add_data_changed            "2112507
....
 p_tec_resp     wnftec_resp[]                    "2747190

Fica como se tivesse sido modificado pq tem uma linha em branco na tabela interna.

Acho q a SAP deve corrigir,  a principio coloquei um enhancement para resolver por hora.

  METHOD tec_resp_move_str_to_table.
ENHANCEMENT 1  ZSD_NFE_TEC_RESP.    "active version
    CHECK is_tec_resp IS NOT INITIAL.
ENDENHANCEMENT.
    " Method delivered by note 2747190
    CLEAR et_tec_resp[].
    APPEND is_tec_resp TO et_tec_resp.
  ENDMETHOD.

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
.......