cancel
Showing results for 
Search instead for 
Did you mean: 

NFE: alteração na função standard J_1B_NFE_SEND_REQUESTS

Former Member

Boa tarde a todos!

Sou ABAP JR e estou num projeto de NFE (Mastersaf x SAP) e preciso de ajuda dos mais experientes.

Eu conversei com um outro ABAP e ele me disse que terei que alterar uma função standard do SAP (J_1B_NFE_SEND_REQUESTS) para pode recuperar o número e o tipo do documento no momento do cancelamento ou inutilização. Para isso, será preciso usar uma chave especial para alterar essa função.

Algum de vocês já passou por isso?

Existe alguma outra forma de obter esses dados?

Putabração à todos!

NORBERTO SILVA

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Norberto,

Qual versão do SAP você está trabalhando?

Uma opção é você usar enhancement-point.

Abraço,

Bruno Lima

Former Member
0 Kudos

Bruno, a versão é SAP ECC 6.0

Eu já havia conversado com outros 2 ABAPs SR e eles me disseram a mesma coisa: não dá pra usar enhancement-point nesse caso.

Obrigado,

Norberto Silva

Former Member
0 Kudos

Norberto,

Então você consegue sim criar/localizar Enhancement-points, porem é preciso saber o ponto correto.

Para encontrar um Ponto Implicito veja esse link SAP Implicit enhancement points - Changing standard SAP code using the ABAP implicit enhamcement cod...

Vamos ver se eu consigo entender e assim te ajudo.

Você está fazendo integração com Mastersaf, como você envia os dados da NFe para eles BADI? Enhancement? Em qual momento? Você usa a funçao J_1B_NFE_XML_OUT ?

Seu problema atual, está apenas na inutilização/cancelamento? Ambos são feitos através da J1BNFE?

Abraço,

Bruno Lima

former_member182114
Active Contributor
0 Kudos

Bom dia Norberto,

Siga as dicas do Bruno.

Para mensagerias não GRC, toda saída (envio/cancelamento/inutilização) se dá pela função J_1B_NFE_XML_OUT que é usada como interface à ser implementada num destino remoto.

Quando se tem como destino o próprio ERP, pode-se codificar nesta própria função ou colocar um include Z para sua codificação ficar separada. O Enhancement implícito pode ser feito no ENDFUNCTION desta função.

Atenciosamente, Fernando Da Rós

Pra pensar: Geralmente quando o sistema pede chave de modificação por ser standard é por que ainda não foi identificado a forma correta de se implementar.

Former Member
0 Kudos

Bruno, vou explicar como está a situação, assim vc poderá entender e me ajudar.

Projeto NFE, via mensageria Mastersaf, gerando aquivos TXT.

Para envio, utilizo BAdI CL_NFE_PRINT, instanciados os métodos FILL_HEADER e FILL_ITEM.

Tenho outros 5 Report's para controlar: retorno do envio, envio e retorno o cancelamento, envio e retorno da inutilização.

Nos casos de cancelamento e inutilização, através da J1BNFE, o SAP utiliza a função J_1B_NFE_SEND_REQUESTS.

Já pesquisei enhancements dentro dessa função, só tem no início e no final. O problema está aí, pois eu preciso colocar uma melhoria no meio dessa função, exatamente na linha 159, depois da chamada do Form CALL_XI, mas não tem.

Procurei enhancements dentro do Form CALL_XI e tem no início e fim, daria certo para colocar no final, mas o problema é que não tenho os dados da tabela interna ( ls_nfdoc ) e de uma variável ( lv_scsstatus ) que é local na função J_1B_NFE_SEND_REQUESTS.

Veja o código que preciso incluir nas linhas 31 e 159 da função J_1B_NFE_SEND_REQUESTS:

          • p/ linha 31 **********************************************************************

data: v_docnum TYPE j_1bnfdoc-docnum,

v_nftype TYPE j_1bnfdoc-nftype.

          • p/ linha 159 *********************************************************************

EXPORT v_docnum

v_nftype

FROM ls_nfdoc-docnum

ls_nfdoc-nftype

TO MEMORY ID 'ID0001'.

IF lv_scsstatus EQ '1'.

SUBMIT zb_nfe_cancelamento AND RETURN.

ELSE.

SUBMIT zb_nfe_inutilizacao AND RETURN.

ENDIF.

*******************************************************************************************************************************

Caso eu não tenha sido claro, questione-me.

Por favor, me ajude.

Muito obrigado pelas ajudas!!!

Norberto Silva

former_member182114
Active Contributor
0 Kudos

Bom dia Norberto,

Você pode colocar a geração do TXT dentro da rotina J_1B_NFE_XML_OUT. Este ponto é chamado por toda comunicação ERP para mensageria não SAP.

envio de NF-e, envio de cancelamento, envio de inutilização: J_1B_NFE_XML_OUT

retorno do envio, cancelamento e inutilização: BAdI CL_NFE_PRINT -> CALL_RSNAST00

Você não precisa mexer no standard para fazer o que precisa, coloque um enhancement na J_1B_NFE_XML_OUT.

Já tentou um breakpoint nela?

Observação: Pelo desenho esta função só será chamada se a RFC destination estiver configurada corretamente (é sempre uma chamada remota) então na pior das hipóteses crie uma RFC dummy, sem usuário, sem host, ou seja, irá rodar no mesmo sistema ERP e use esta RFC nas configurações de NF-e.

Atenciosamente, Fernando Da Ró

Former Member
0 Kudos

Bom dia Fernando.

Esse é meu primeiro projeto de NFE e estou seguindo uma documentação que outros ABAPs fizeram nos projetos anteriores.

Pela documentação, não usa-se J_1B_NFE_XML_OUT. Para envio, pede-se para instanciar 2 métodos (HEADER e ITEM) na BAdI CL_NFE_PRINT e também não tem referência para o método CALL_RSNAST00, o qual vc indicou.

Percebo que essa interface desenvolvida aqui não foi com base nas melhores práticas, fizeram de outra forma.

Infelizmente não tenho poderes e nem tempo para alterar esses processos agora.

Gostaria muitíssimo de entender cada passo desse processo sugerido por vc para que eu possa fazer dessa forma no próximo projeto.

O processo macro que me foi passado é assim:

- envio normal => através da BAdI CL_NE_PRINT;

- retorno do envio normal, envio e retorno do cancelamento, envio e retorno da inutilização => através de Report escalonado em JOBs;

- a comunicação através de RFC dummy;

- tudo com geração e leitura de arquivos TXT;

- a mensageria (Mastersaf) se encarrega de transformar TXT para XML, tanto no envio quanto no retorno da SEFAZ;

Agradeço a toda ajuda dispensada.

Abraço,

Norberto Silva

Former Member
0 Kudos

Norberto,

A BADI CL_NFE_PRINT e os métodos FILL_HEADER, FILL_ITEM tem como objetivo sanear campos que por algum motivo o standard não atende ou a regra de negócio da empresa necessita mesmo de um tratamento adicional.

E a função J_1B_NFE_XML_OUT é uma função standard "branca" para colocar o enhancement, os dados saneados na BADI acima já chegam neste ponto tratadas é a última etapa mesmo.

Outro ponto que você poderá ter problema usando tudo dentro da BADI é que neste momento caso não esteja usando as configurações/notas de decouple, não terá os dados comitado no banco de dados e você poderá ter problemas de não comitar o banco e ter enviado a nota e ficar perdido o processo. Acho que é um ponto para vocês analisarem.

Boa sorte e precisando de algo, abre uma thread que tentamos lhe ajudar.

Abraço,

Bruno Lima