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, 10 de maio de 2019
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
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.
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
.......
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
.......
Assinar:
Postagens (Atom)