Esse é um código desenvolvido para estorno de NFe feito para aqueles programas malucos onde além de fazer um processo de SD ou MM eu tenho um processo de estorno do mesmo e como hoje a maioria das NF são eletrônicas peguei uma parte da rotina do monitor J1BNFE para fazer no programa sem a necessidade de solicitar o cancelamento pelo monitor.
FUNCTION zfsd_cancela_nfe.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" REFERENCE(I_DOCNUM) TYPE J_1BNFDOC-DOCNUM
*" REFERENCE(I_REASON) TYPE J_1BNFE_ACTIVE-REASON
*" TABLES
*" IT_RETURN STRUCTURE BAPIRET2
*" EXCEPTIONS
*" ERROR_MESSAGE
*"----------------------------------------------------------------------
DATA: lt_tab_active TYPE TABLE OF j_1bnfe_active WITH HEADER LINE,
lt_tab_active_mod TYPE TABLE OF j_1bnfe_active WITH HEADER LINE,
lt_et_active_mod TYPE TABLE OF j_1bnfe_active WITH HEADER LINE,
lt_et_errtab TYPE TABLE OF j_1bnfe_active WITH HEADER LINE.
DATA: lw_doc TYPE j_1bnfdoc.
SELECT SINGLE *
INTO lw_doc
FROM j_1bnfdoc
WHERE docnum EQ i_docnum.
CHECK sy-subrc = 0 AND lw_doc-cancel = space.
CALL FUNCTION 'ENQUEUE_EJ_1BNFE'
EXPORTING
docnum = i_docnum
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '224'
i_docnum '' '' ''.
RAISE error_message.
ELSE.
CALL FUNCTION 'DEQUEUE_EJ_1BNFE'
EXPORTING
docnum = i_docnum.
ENDIF.
CLEAR lt_tab_active.
* Busca dados da NFE p/ NF de saída
SELECT SINGLE *
INTO lt_tab_active
FROM j_1bnfe_active
WHERE docnum EQ i_docnum.
IF sy-subrc <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '209'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
* O código 3 é o scan
IF lt_tab_active-conting = 'X'.
SELECT SINGLE *
INTO lw_doc
FROM j_1bnfdoc
WHERE docnum EQ i_docnum.
IF ( sy-subrc = 0 AND lw_doc-docstat = space ) OR
( sy-subrc <> 0 ).
RAISE contingencia.
ENDIF.
ELSEIF lt_tab_active-docsta = space. "Status enviado sem retorno
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '210'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
DO 60 TIMES.
SELECT SINGLE *
INTO lt_tab_active
FROM j_1bnfe_active
WHERE docnum EQ i_docnum.
IF lt_tab_active-docsta <> ''.
EXIT.
ENDIF.
WAIT UP TO 5 SECONDS.
ENDDO.
APPEND lt_tab_active.
lt_tab_active_mod[] = lt_tab_active[].
* Dados do cancelamento da NF
lt_tab_active_mod-reason = i_reason.
SELECT SINGLE reason1
INTO lt_tab_active_mod-reason1
FROM j_1bnfe_cancelrt
WHERE reason EQ lt_tab_active_mod-reason
AND spras EQ sy-langu.
IF sy-subrc <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '211'
'' '' '' ''.
RAISE error_message.
ENDIF.
MODIFY lt_tab_active_mod TRANSPORTING reason reason1
WHERE docnum EQ i_docnum.
CALL FUNCTION 'J_1B_NFE_SEND_REQUESTS'
TABLES
it_acttab = lt_tab_active
et_errtab = lt_et_errtab
et_active_mod = lt_et_active_mod
it_acttab_mod = lt_tab_active_mod
EXCEPTIONS
status_error = 1
rfc_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '212'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
DATA l_line TYPE i.
IF lines( lt_et_errtab ) <> 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '212'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
DO 100 TIMES.
SELECT COUNT( * )
FROM j_1bnfdoc
WHERE docnum EQ i_docnum
AND cancel EQ 'X'.
IF sy-subrc = 0.
EXIT.
ENDIF.
WAIT UP TO 1 SECONDS.
ENDDO.
IF sy-dbcnt = 0.
PERFORM monta_mensagem TABLES it_return
USING 'E' 'ZSD' '214'
i_docnum '' '' ''.
RAISE error_message.
ENDIF.
ENDFUNCTION.
Olá Administrador do Blog,
ResponderExcluirQuero apenas deixar esta mensagem aqui no seu blogue para dar a conhecer a alguém um apoio financeiro que o Sr. Pedro me oferece durante a época do covid-19 porque essa época foi muito má e difícil para mim depois do confinamento do país quase perdi o o meu negócio perante Pedro Jerome, um agente de crédito que me ajudou com um empréstimo à taxa de 2% em troca de financiar o meu negócio, estou muito grato e mostrar gratidão ao seu apoio testemunhará o quanto estou grato ao seu serviço e à sua equipa de trabalho como bem, depois de visitar o seu escritório na minha localidade, soube que era um bom homem com um coração agradecido.
Gostaria que qualquer pessoa aqui com condições financeiras contactasse o Sr Pedro Jerome no seu email pedroloanss@gmail.com e WhatsApp: +393510140339 ele irá ajudá-lo com qualquer tipo de crédito, crédito habitação, crédito automóvel, crédito construção, crédito empresarial, pessoal empréstimo, desde que seja honesto o suficiente para fazer um retorno.