Eu tive um problema recente esses dias onde eu tinha um programa onde poderiam ser marcados mais de uma fatura (MM) para estorno (MR8M), para isso utilizando a BAPI BAPI_INCOMINGINVOICE_CANCEL, nesse meu processo além da fatura da MIRO eu tinha mais uma fatura MIRO tbm de nota de crédito e eliminação do pedido de compras. Essa nota de crédito sem NF e a fatura da MIRO ref. ao pedido de compras com NF.
No programa quando era marcado mais de um item para cancelamento, somente era processado o primeiro item selecionado, ou seja era estornado a MIRO de nota de crédito, a MIRO do pedido e o pedido de compra em si, a partir do segundo item ficava dando um erro de NF externo inválido, se saísse do programa e executasse novamente, somente a primeira linha selecionada era eliminado e o seguinte dava o erro.
Procurei alternativas de funções que limpassem o buffer, pois com certeza durante o processamento com o programa já carregado em memória, alguma coisa estava ficando para trás e não estava sendo limpo.. depois de algumas horas de DEBUG percebi que a estrutura NFHEADER do programa SAPLJ1BI continuava preenchido no segundo processamento com dados da NF estornada anterior, e além dessa estrutura a tabela interna X4_RSEG tbm, e essa tabela justamete possui o número do pedido relacionado a MIRO, dessa forma o programa sempre procurava o último pedido processado e não o pedido a ser cancelado.
Solução para o problema, foi apagar o BUFFER antes do processamento e tudo resolvido.
CALL FUNCTION 'J_1B_IM_NF_REFRESH'.
ASSIGN ('(SAPLJ1BI)NFHEADER') TO <lfsw_nfheader>.
IF sy-subrc = 0.
CLEAR <lfsw_nfheader>.
ENDIF.
ASSIGN ('(SAPLJ1BI)X4_RSEG[]') TO <lfst_rseg>.
IF sy-subrc = 0.
CLEAR <lfst_rseg>[].
ENDIF.
CALL FUNCTION 'BAPI_INCOMINGINVOICE_CANCEL'
EXPORTING
invoicedocnumber = lv_invoicedocnumber
fiscalyear = lv_fiscalyear
reasonreversal = '01'
IMPORTING
invoicedocnumber_reversal = lv_belnr
fiscalyear_reversal = lv_gjahr
TABLES
return = lt_return.
Cara...isso resolveu o meu problema..obrigado
ResponderExcluirOpa vlw pela dica, resolveu 90% do meu problema tive que limpar a tabela IM também ! obrigado
ResponderExcluirpra mim resolveu tambem setando:
ResponderExcluirASSIGN ('(SAPLJ1BI)STORNO_FLAG') TO .
IF sy-subrc = 0.
CLEAR .
ENDIF.
Bom saber.
ResponderExcluir