Quantcast
Viewing all articles
Browse latest Browse all 5579

ASN Cancellation using IDOC_INPUT_DESADV1

Dear All,

I’ve implemented the enhancement V55K0004 to delete the inbound deliveries when an ASN is performed on SNC by Vendor. It is working until the deletion, but always is creating a new inbound delivery number.

 

Before:

 

Image may be NSFW.
Clik here to view.

 

After:

 

The reference number continues the same, but a new delivery number is created.

 

Image may be NSFW.
Clik here to view.

 

Bellow you can see my code:

We are using the FM IDOC_INPUT_DESADV1 (DESADV. DELS – Inbound Processing).

Include: ZXTRKU12

 

TYPES: BEGIN OF ty_likp,

                vbeln TYPE vbeln,

       END OF ty_likp.

 

DATA: gs_likp TYPE ty_likp ,

      gt_likp TYPE TABLE OF ty_likp .

 

DATA: it_likp TYPE STANDARD TABLE OF ty_likp.

 

DATA: ls_e1edl18 TYPE e1edl18 ,

      ls_e1edl20            TYPE e1edl20 ,

      ls_e1adrm1            TYPE e1adrm1 .

 

 

FIELD-SYMBOLS:

               <ls_edidd>   TYPE edidd ,

               <ls_e1edl20> TYPE e1edl20 .

 

 

** Precisa preencher com o número da delivery para executar o

** cancelamento da ASN que saiu do sistema SNC.

READ TABLE idoc_data ASSIGNING <ls_edidd> WITH KEY segnam = 'E1EDL18'.

CHECK sy-subrc = 0.

 

ls_e1edl18 = <ls_edidd>-sdata.

CHECK ls_e1edl18-qualf = 'DEL'.

 

IF <ls_edidd> IS ASSIGNED .

  UNASSIGN <ls_edidd> .

ENDIF .

READ TABLE idoc_data ASSIGNING <ls_edidd> WITH KEY segnam = 'E1ADRM1' .

ls_e1adrm1  = <ls_edidd>-sdata .

 

** Pega o IDoc header com LIFEX e PARID

IF <ls_edidd> IS ASSIGNED .

  UNASSIGN <ls_edidd> .

ENDIF .

READ TABLE idoc_data ASSIGNING <ls_edidd> WITH KEY segnam = 'E1EDL20'.

 

IF sy-subrc = 0.

 

  ls_e1edl20 = <ls_edidd>-sdata.

 

** Pega o número da inbound delivery que venho na estrutura do IDoc.

 

  REFRESH gt_likp[] .

  SELECT vbeln

    FROM likp

    INTO TABLE gt_likp

    WHERE lifex = ls_e1edl20-lifex

      AND lifnr = ls_e1adrm1-partner_id .

*          lifnr = ls_e1edl20-parid.

 

  LOOP AT gt_likp INTO gs_likp .

 

** Remove todas as inbound deliveries armazenadas conforme tabela

**interna gs_likp.

 

*    IF sy-subrc = 0.

 

    DELETE FROM lips

      WHERE vbeln = gs_likp.

    COMMIT WORK.

 

    DELETE FROM likp

      WHERE vbeln = gs_likp.

    COMMIT WORK.

 

    DELETE FROM ekes

      WHERE vbeln = gs_likp.

    COMMIT WORK.

 

*    ENDIF.

 

*  ENDSELECT.

  ENDLOOP .

ENDIF.

 

Is there any problem with my code? Has anyone already implemented a solution for this issue?

 

Thanks.

Alberto.


Viewing all articles
Browse latest Browse all 5579

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>