cancel
Showing results for 
Search instead for 
Did you mean: 

userexit

Former Member
0 Kudos

Requirement in my project:material quantity has to fill automatically in sales order.

Based on sales document type, and customer, material number system has to pick order quantity fro imrg table.

For this any user exit we have,

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi,

    Same sort of requirement in my project also what i did is, I have used the BAPI of BAPI_SALES_DEL_SCHEDULE_CREATE and then just created a zprogram to upload a text file in this BAPI after delivery also automatically created. check the below ABAP coding and use it.

FORM TEXT_FILE_ITAB.

   FILE1 = FILE.

   CALL FUNCTION 'GUI_UPLOAD'

     EXPORTING

       FILENAME = FILE1

       FILETYPE = 'ASC'

     TABLES

       DATA_TAB = IT_RAW.

   CALL FUNCTION 'TEXT_CONVERT_TEX_TO_SAP'

     EXPORTING

       I_FIELD_SEPERATOR    = '|'

       I_TAB_RAW_DATA       = IT_RAW[]

       I_FILENAME           = FILE

     TABLES

       I_TAB_CONVERTED_DATA = ITAB

     EXCEPTIONS

       CONVERSION_FAILED    = 1

       OTHERS               = 2.

   IF SY-SUBRC <> 0.

     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 RAISING CONVERSION_FAILED.

   ENDIF.

ENDFORM.                    "TEXT_FILE_ITAB

*&---------------------------------------------------------------------*

*&      Form GET_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM GET_DATA.

   IF ITAB[] IS NOT INITIAL.

     SELECT * FROM ZSD_DELI INTO CORRESPONDING FIELDS OF TABLE IT_DELI FOR ALL ENTRIES IN ITAB

                                     WHERE REF = ITAB-DAT9.

     SELECT * FROM VLPKM INTO CORRESPONDING FIELDS OF TABLE I_SCH2 FOR ALL ENTRIES IN ITAB

                                                   WHERE KDMAT = ITAB-DAT39 AND VBELN = VBE.

     SORT I_SCH2 BY VBELN POSNR.

   ENDIF.

   LOOP AT ITAB.

     READ TABLE I_SCH2 WITH KEY KDMAT = ITAB-DAT39 VBELN = VBE.

     IF SY-SUBRC = 0.

       MOVE-CORRESPONDING I_SCH2 TO I_SCH.

       I_SCH-REF = ITAB-DAT9.

       I_SCH-QTY = ITAB-DAT44.

       I_SCH-PDS_DTE = ITAB-DAT11.

       APPEND I_SCH.

     ENDIF.

   ENDLOOP.

   IF I_SCH[] IS NOT INITIAL.

     SELECT VBELN GBSTK FROM VBUK INTO CORRESPONDING FIELDS OF TABLE I_VBUK FOR ALL ENTRIES IN I_SCH

       WHERE VBELN = I_SCH-VBELN AND GBSTK NE 'C'.

     SELECT VBELN POSNR MATNR KDMAT WERKS FROM VBAP INTO CORRESPONDING FIELDS OF TABLE I_VBAP FOR ALL ENTRIES IN I_SCH

       WHERE VBELN = I_SCH-VBELN.

     SELECT VBELN POSNR ETENR FROM VBEP INTO CORRESPONDING FIELDS OF TABLE I_VBEP FOR ALL ENTRIES IN I_SCH

       WHERE VBELN = I_SCH-VBELN AND POSNR = I_SCH-POSNR.

     SORT I_VBEP DESCENDING BY VBELN POSNR ETENR.

*  SELECT VBELN POSNR VGBEL VGPOS FROM LIPS INTO CORRESPONDING FIELDS OF TABLE IT_LIPS FOR ALL ENTRIES IN I_SCH

*    WHERE VGBEL = I_SCH-VBELN AND VGPOS = I_SCH-POSNR.

   ENDIF.

   IF IT_DELI[] IS NOT INITIAL.

*    SELECT VBELN POSNR VGBEL FROM VBRP INTO CORRESPONDING FIELDS OF TABLE IT_VBRP FOR ALL ENTRIES IN IT_DELI

*       WHERE VGBEL = IT_DELI-DELIVER AND POSNR = IT_DELI-POSNR1.

     select VBELN FKSTK from vbuk INTO TABLE IT_VBUK FOR ALL ENTRIES IN IT_DELI WHERE

       VBELN = IT_dELI-DELIVER AND WBSTK NE 'C'.

   ENDIF.

   I_SCH_D[] = I_SCH[].

   SORT I_SCH_D BY VBELN POSNR.

   DELETE ADJACENT DUPLICATES FROM I_SCH_D COMPARING VBELN.

   DESCRIBE TABLE ITAB LINES TEXT_LIN.

   LOOP AT I_SCH_D.

     LOOP AT I_SCH WHERE VBELN = I_SCH_D-VBELN.

       CNT = CNT + 1.

       I_SCH-CNT = CNT.

       MODIFY I_SCH TRANSPORTING CNT WHERE VBELN = I_SCH_D-VBELN.

     ENDLOOP.

     I_SCH_D-CNT = CNT.

     MODIFY I_SCH_D TRANSPORTING CNT.

     CLEAR CNT.

   ENDLOOP.

   LOOP AT I_SCH.

     READ TABLE IT_DELI WITH KEY REF = I_SCH-REF VBELN = I_SCH-VBELN POSNR = I_SCH-POSNR.

     IF SY-SUBRC = 0.

       READ TABLE IT_VBUK WITH KEY VBELN = IT_DELI-DELIVER.

       IF SY-SUBRC = 0.

         SELECT SINGLE * FROM LIKP WHERE VBELN = IT_DELI-DELIVER.

         IF SY-SUBRC = 0.

           I_SCH-DEL_EXST = IT_DELI-DELIVER.

         ELSE.

           MOVE-CORRESPONDING IT_DELI TO WA_DELI.

           DELETE FROM ZSD_DELI WHERE REF = WA_DELI-REF AND VBELN = WA_DELI-VBELN AND POSNR = WA_DELI-POSNR

                                                        AND DELIVER = WA_DELI-DELIVER AND POSNR1 = WA_DELI-POSNR1.

           COMMIT WORK.

           DELETE IT_DELI WHERE REF = WA_DELI-REF AND VBELN = WA_DELI-VBELN AND POSNR = WA_DELI-POSNR

                                                        AND DELIVER = WA_DELI-DELIVER AND POSNR1 = WA_DELI-POSNR1.

         ENDIF.

       ENDIF.

     ENDIF.

     READ TABLE I_VBAP WITH KEY VBELN = I_SCH-VBELN POSNR = I_SCH-POSNR KDMAT = I_SCH-KDMAT.

     IF SY-SUBRC = 0.

       I_SCH-MATNR = I_VBAP-MATNR.

       I_SCH-WERKS = I_VBAP-WERKS.

     ENDIF.

     READ TABLE I_VBEP WITH KEY VBELN = I_SCH-VBELN POSNR = I_SCH-POSNR.

     IF SY-SUBRC = 0.

       I_SCH-ITM_NUMBER = I_VBEP-POSNR.

       SELECT SINGLE * FROM VBUP WHERE VBELN = I_SCH-VBELN AND POSNR = I_SCH-POSNR.

       IF SY-SUBRC = 0 AND VBUP-LFSTA NE 'C'.

         I_SCH-SCHED_LINE = I_VBEP-ETENR + 1.

       ELSEIF SY-SUBRC = 0 AND VBUP-LFSTA EQ 'C'.

         I_SCH-SCHED_LINE = I_VBEP-ETENR.

       ENDIF.

     ELSE.

       I_SCH-ITM_NUMBER = I_VBAP-POSNR.

       I_SCH-SCHED_LINE = 0001.

     ENDIF.

     I_SCH-REQ_DATE   = SY-DATUM.

     I_SCH-DATE_TYPE  = '1'.

     I_SCH-REQ_QTY    = I_SCH-QTY.

     I_SCH-VBELN1 = I_SCH-VBELN.

     SHIFT I_SCH-KUNNR LEFT DELETING LEADING '0'.

     SHIFT I_SCH-MATNR LEFT DELETING LEADING '0'.

     SHIFT I_SCH-VBELN1 LEFT DELETING LEADING '0'.

     MODIFY I_SCH TRANSPORTING KUNNR MATNR QTY REF ITM_NUMBER SCHED_LINE REQ_DATE DATE_TYPE REQ_QTY VBELN1 WERKS DEL_EXST.

     CLEAR I_SCH.

   ENDLOOP.

   CLEAR CHK.

   REFRESH: I_SCH2.

   I_SCH2[] = I_SCH[].

   SORT I_SCH2 BY MATNR.

   DELETE ADJACENT DUPLICATES FROM I_SCH2 COMPARING MATNR.

*  LOOP AT I_SCH WHERE CNT LT TEXT_LIN.

*    DELETE I_SCH.

*    CHK = 'X'.

*  ENDLOOP.

*

*  IF CHK = 'X'.

*    MESSAGE 'Uploaded file contains more items than scheduling agreement items' TYPE 'I'.

*    EXIT.

*  ENDIF.

   DATA: WMDVSX LIKE TABLE OF BAPIWMDVS WITH HEADER LINE,

         WMDVEX LIKE TABLE OF BAPIWMDVE WITH HEADER LINE.

EXE = 'X'.

IF EXE = 'X'.

     PERFORM SCHED_LINE_DELI_QTY.

ENDIF.

CLEAR EXE.

   LOOP AT I_SCH INTO WA_SCH.

     REFRESH: WMDVSX,WMDVEX.REFRESH: I_SCH-CELL.

     WMDVSX-REQ_DATE = SY-DATUM.

     WMDVSX-REQ_QTY = WA_SCH-QTY.

     APPEND WMDVSX.

     CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'

       EXPORTING

         PLANT      = WA_SCH-WERKS

         MATERIAL   = WA_SCH-MATNR

         UNIT       = 'EA'

         CHECK_RULE = 'A'

       TABLES

         WMDVSX     = WMDVSX

         WMDVEX     = WMDVEX.

     IF SY-SUBRC = 0.

       READ TABLE WMDVEX INDEX 1.

       IF SY-SUBRC = 0.

         WA_SCH-AQTY = WMDVEX-COM_QTY.

         WA_SCH-ADATE = WMDVEX-COM_DATE.

         WA_SCH-BQTY  = WA_SCH-QTY - WA_SCH-AQTY.

         MODIFY I_SCH FROM WA_SCH TRANSPORTING AQTY ADATE BQTY COLOR.

       ENDIF.

     ENDIF.

     READ TABLE IT_DELI WITH KEY REF = WA_SCH-REF VBELN = WA_SCH-VBELN POSNR = WA_SCH-POSNR.

     IF SY-SUBRC = 0.

       WA_SCH-SEL = 'X'.

       WA_SCH-DISABLE = 'X'.

       LS_STYLEROW-FIELDNAME = 'SEL' .

       LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.

       INSERT LS_STYLEROW INTO WA_SCH-FIELD_STYLE INDEX 1.

       MODIFY I_SCH FROM WA_SCH.

     ELSE.

       WA_SCH-COLOR = 'C010'.

       MODIFY I_SCH FROM WA_SCH.

       IF WA_SCH-QTY GT WA_SCH-AQTY.

         FS_CELL-FIELDNAME = 'BQTY'.

         FS_CELL-COLOR-COL = 6.

         FS_CELL-NOKEYCOL = 'X'.

         APPEND FS_CELL TO I_SCH-CELL.

         MODIFY I_SCH TRANSPORTING CELL.

      ELSEIF WA_SCH-QTY LE WA_SCH-AQTY.

         FS_CELL-FIELDNAME = 'BQTY'.

         FS_CELL-COLOR-COL = 5.

         FS_CELL-NOKEYCOL = 'X'.

         APPEND FS_CELL TO I_SCH-CELL.

         MODIFY I_SCH TRANSPORTING CELL.

        ENDIF.

     ENDIF.

     CLEAR: WA_SCH,FS_CELL.

   ENDLOOP.

ENDFORM.                    "GET_DATA

*&---------------------------------------------------------------------*

*&      Form USER_COMMAND

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->R_UCOMM      text

*      -->RS_SELFIELD  text

*----------------------------------------------------------------------*

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM  RS_SELFIELD TYPE SLIS_SELFIELD.

   DATA REF1 TYPE REF TO CL_GUI_ALV_GRID.

   DATA: FIELDTAB1 TYPE LVC_T_FCAT.

   DATA: WA TYPE LVC_S_FCAT.

   REFRESH: FIELDTAB1.

   RS_SELFIELD-REFRESH = 'X'.

   CASE R_UCOMM.

       CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

         IMPORTING

           E_GRID = REF1.

       CALL METHOD REF1->CHECK_CHANGED_DATA.

       RS_SELFIELD-REFRESH = 'X'.

     WHEN 'UPD'.

       READ TABLE I_SCH WITH KEY SEL = 'X'.

       IF SY-SUBRC NE 0.

         MESSAGE 'Select atleast one line' TYPE 'E'.

         EXIT.

       ENDIF.

       REFRESH: DELIVERY_IN,DELIVERY_INX,I_SCD.

       DELIVERY_IN-REL_TYPE  = '1'. APPEND DELIVERY_IN.

       DELIVERY_INX-REL_TYPE = '1'. APPEND DELIVERY_INX.

       ORDER_INX-UPDATEFLAG  = 'U'.

       DATA: PDS LIKE I_SCH-REF.

       DATA: MESS TYPE CHAR255,

             AQTY TYPE CHAR255.

       CLEAR: WA_SCD. REFRESH: I_SCD,LT_RETURN,DELIVERY_IN,DELIVERY_INX.

       "TO DELETE OPEN SCHEDULE LINES

       PERFORM SCHED_LINE_DELI_QTY.

       LOOP AT I_SCH WHERE SEL = 'X' AND DEL = '' AND DISABLE = ''.

         IF PDS NE I_SCH-REF AND PDS IS NOT INITIAL.

           MESSAGE 'Different PDS No not allowed to create one delivery' TYPE 'E'.

           EXIT.

         ENDIF.

         IF I_SCH-AQTY LT I_SCH-QTY.

          IF I_SCH-AQTY IS NOT INITIAL.

            AQTY = I_SCH-BQTY.

            SHIFT AQTY LEFT DELETING LEADING SPACE.

           CONCATENATE 'Stock - ' AQTY 'nos' 'required for material' i_sch-matnr INTO MESS SEPARATED BY SPACE.

          ELSE.

            CONCATENATE 'Stock not available for material' i_sch-matnr into MESS SEPARATED BY space.

          ENDIF.

           MESSAGE MESS TYPE 'E'.

           CLEAR MESS.

           EXIT.

           ENDIF.

         MOVE-CORRESPONDING I_SCH TO WA_SCD.

         MOVE-CORRESPONDING I_SCH TO I_SCD1.

         I_SCD1-UPDATEFLAG = 'I'. "d for delete

         APPEND I_SCD1.

         WA_SCD-PLAN_SCHED_TYPE = 'X'.

         MOVE-CORRESPONDING WA_SCD TO CAT.

         CAT-DOC_NUMBER = I_SCH-VBELN.

         CAT-SCHED_TYPE = 'CP'.

         APPEND CAT.

         PDS = I_SCH-REF.

         APPEND WA_SCD TO I_SCD.

       ENDLOOP.

       IF I_SCD[] IS NOT INITIAL.

         CALL FUNCTION 'BAPI_SALES_DEL_SCHEDULE_CREATE'

           EXPORTING

             SALESDOCUMENT    = I_SCH-VBELN

             ORDER_HEADER_INX = ORDER_INX

           TABLES

             SCHEDULE_LINES   = I_SCD

             SCHEDULE_LINESX  = I_SCD1

             DEL_SCHEDULE_IN  = DELIVERY_IN

             DEL_SCHEDULE_INX = DELIVERY_INX

             SCHEDULE_EX      = CAT

             RETURN           = LT_RETURN.

         READ TABLE LT_RETURN WITH KEY TYPE = 'E'.

         IF SY-SUBRC NE 0.

           CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

             EXPORTING

               WAIT = 'X'.

           CALL FUNCTION 'DIALOG_SET_WITH_DIALOG'.

           VSTEL = I_SCH-WERKS.

           CONCATENATE SY-DATUM+6(2) SY-DATUM+4(2) SY-DATUM+0(4) INTO DATBI.

           VBELN = I_SCH-VBELN.

           PERFORM SUB.

           LOOP AT I_SCH WHERE SEL = 'X' AND DEL = '' AND DISABLE = ''.

             READ TABLE MESSTAB WITH KEY MSGTYP = 'S' MSGV1 = 'Outbound Delivery'.

             IF SY-SUBRC = 0.

               I_SCH-DELIVER    = MESSTAB-MSGV2.

               ZSD_DELI-REF     = I_SCH-REF.

               ZSD_DELI-VBELN   = I_SCH-VBELN.

               ZSD_DELI-POSNR   = I_SCH-POSNR.

               CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

                 EXPORTING

                   INPUT  = I_SCH-DELIVER

                 IMPORTING

                   OUTPUT = I_SCH-DELIVER.

               ZSD_DELI-DELIVER = I_SCH-DELIVER.

               ZSD_DELI-POSNR1  = I_SCH-POSNR.

               MODIFY ZSD_DELI FROM ZSD_DELI.

               I_SCH-DEL = 'X'.

               FS_CELL-FIELDNAME = 'DELIVER'.

               FS_CELL-COLOR-COL = 5.

               FS_CELL-NOKEYCOL = 'X'.

               REFRESH: IT1, IT_HEAD.

               IT_HEAD-TDNAME = I_SCH-DELIVER.

               IT_HEAD-TDID = 'Z006'.

               IT_HEAD-TDOBJECT = 'VBBK'.

               IT_HEAD-TDSPRAS = 'E'.

               APPEND IT_HEAD.

               IT1-TDFORMAT = '*'.

               IT1-TDLINE = I_SCH-REF.

               APPEND IT1.

               CALL FUNCTION 'SAVE_TEXT'

                 EXPORTING

                   CLIENT          = SY-MANDT

                   HEADER          = IT_HEAD

                   INSERT          = ''

                   SAVEMODE_DIRECT = 'X'

                 TABLES

                   LINES           = IT1.

               IF SY-SUBRC = 0.

                 CALL FUNCTION 'UPDATE_TEXT_AFTER_COMMIT'

                   EXPORTING

                     HEADER = IT_HEAD

                   TABLES

                     LINES  = IT1.

               ENDIF.

               APPEND FS_CELL TO I_SCH-CELL.

               MODIFY I_SCH TRANSPORTING DELIVER CELL DEL FIELD_STYLE.

             ELSE.

               READ TABLE MESSTAB WITH KEY MSGTYP = 'E'.

               IF SY-SUBRC = 0.

                 I_SCH-ERR = MESSTAB-MSGV1.

                 I_SCH-DEL = 'X'.

                 FS_CELL-FIELDNAME = 'ERR'.

                 FS_CELL-COLOR-COL = 6.

                 FS_CELL-NOKEYCOL = 'X'.

                 APPEND FS_CELL TO I_SCH-CELL.

                 MODIFY I_SCH TRANSPORTING ERR CELL DEL.

               ENDIF.

             ENDIF.

           ENDLOOP.

         ELSEIF LT_RETURN-TYPE = 'E'.

           LOOP AT I_SCH WHERE SEL = 'X' AND DEL = '' AND DISABLE = ''.

             I_SCH-ERR = LT_RETURN-MESSAGE.

             FS_CELL-FIELDNAME = 'ERR'.

             FS_CELL-COLOR-COL = 6.

             FS_CELL-NOKEYCOL = 'X'.

             APPEND FS_CELL TO I_SCH-CELL.

             MODIFY I_SCH TRANSPORTING ERR CELL.

           ENDLOOP.

         ENDIF.

       ENDIF.

       DATA: REPID1 TYPE SY-REPID VALUE SY-REPID.

       REFRESH: FIELDTAB1.

       CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

         IMPORTING

           E_CALLBACK_PROGRAM = REPID1

           E_GRID             = REF1

           ET_FIELDCAT_LVC    = FIELDTAB1.

       DELETE FIELDTAB1 WHERE FIELDNAME = 'DELIVER' OR FIELDNAME = 'ERR'.

       SORT FIELDTAB1 BY COL_POS.

       DELETE ADJACENT DUPLICATES FROM FIELDTAB1 COMPARING COL_POS.

       LOOP AT I_SCH WHERE DELIVER IS NOT INITIAL.

         COL_POS      = COL_POS + 1.

         WA-COL_POS   = COL_POS.

         WA-FIELDNAME = 'DELIVER'.

         WA-HOTSPOT = 'X'.

         WA-TABNAME = 'I_SCH'.

         WA-SCRTEXT_L = 'Delivery Created'.

         WA-OUTPUTLEN = '14'.

         APPEND WA TO FIELDTAB1.

         CLEAR WA.

         EXIT.

       ENDLOOP.

       LOOP AT I_SCH WHERE ERR IS NOT INITIAL.

         COL_POS      = COL_POS + 1.

         WA-COL_POS   = COL_POS + 1.

         WA-FIELDNAME = 'ERR'.

         WA-TABNAME = 'I_SCH'.

         WA-SCRTEXT_L = 'Error'.

         WA-OUTPUTLEN = '255'.

         APPEND WA TO FIELDTAB1.

         CLEAR WA.

         EXIT.

       ENDLOOP.

       SORT FIELDTAB1 BY COL_POS.

       DELETE ADJACENT DUPLICATES FROM FIELDTAB1 COMPARING COL_POS.

       CALL METHOD REF1->SET_FRONTEND_FIELDCATALOG

         EXPORTING

           IT_FIELDCATALOG = FIELDTAB1.

       CALL METHOD REF1->CHECK_CHANGED_DATA.

       RS_SELFIELD-REFRESH = 'X'.

     WHEN '&IC1'.

       READ TABLE I_SCH INDEX RS_SELFIELD-TABINDEX.

       IF RS_SELFIELD-FIELDNAME = 'DELIVER'.

         SET PARAMETER ID 'VL' FIELD I_SCH-DELIVER.

         CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

       ELSEIF RS_SELFIELD-FIELDNAME = 'VBELN1'.

         SET PARAMETER ID 'AUN' FIELD I_SCH-VBELN.

         CALL TRANSACTION 'VA33' AND SKIP FIRST SCREEN.

       ELSEIF RS_SELFIELD-FIELDNAME = 'DEL_EXST'.

         SET PARAMETER ID 'VL' FIELD I_SCH-DEL_EXST.

         CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

       ELSEIF RS_SELFIELD-FIELDNAME = 'MATNR'.

         SET PARAMETER ID 'MAT' FIELD I_SCH-MATNR.

         SET PARAMETER ID 'WRK' FIELD I_SCH-WERKS.

         CALL TRANSACTION 'MMBE' AND SKIP FIRST SCREEN.

       ENDIF.

     WHEN 'SALL'.

       LOOP AT I_SCH WHERE SEL = ''.

         I_SCH-SEL = 'X'.

         MODIFY I_SCH TRANSPORTING SEL.

       ENDLOOP.

     WHEN 'DALL'.

       LOOP AT I_SCH WHERE SEL = 'X'.

         I_SCH-SEL = ''.

         MODIFY I_SCH TRANSPORTING SEL.

       ENDLOOP.

     WHEN 'DEL'.

       CLEAR: DEL.

       LOOP AT I_SCH WHERE CHECKBOX = 'X'.

         IF I_SCH-DEL_EXST IS NOT INITIAL.

           DEL = I_SCH-DEL_EXST.

         ELSEIF I_SCH-DELIVER IS NOT INITIAL.

           DEL = I_SCH-DELIVER.

         ENDIF.

        SELECT SINGLE * FROM LIKP WHERE VBELN = DEL.

          IF SY-SUBRC = 0.

            PERFORM DELETE_DELIVERY.

            ENDIF.

       ENDLOOP.

       CALL METHOD REF1->CHECK_CHANGED_DATA.

       RS_SELFIELD-REFRESH = 'X'.

   ENDCASE.

ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*

*&      Form SUB

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM SUB.

   DATA: ABPOS TYPE LV50C-ABPOS,

         BIPOS TYPE LV50C-BIPOS.

   REFRESH: MESSTAB,BDCDATA.CLEAR: ABPOS,BIPOS.

   SORT I_SCD BY ITM_NUMBER.

   DESCRIBE TABLE I_SCD LINES LINE.

   READ TABLE I_SCD INDEX 1.

   IF SY-SUBRC = 0. ABPOS = I_SCD-ITM_NUMBER.ENDIF.

   READ TABLE I_SCD INDEX LINE.

   IF SY-SUBRC = 0. BIPOS = I_SCD-ITM_NUMBER.ENDIF.

   IF ABPOS IS NOT INITIAL AND BIPOS IS NOT INITIAL AND VBELN IS NOT INITIAL.

     REFRESH: BDCDATA,MESSTAB.

     PERFORM BDC_DYNPRO      USING 'SAPMV50A' '4001'.

     PERFORM BDC_FIELD       USING 'BDC_CURSOR'

                                   'LV50C-VBELN'.

     PERFORM BDC_FIELD       USING 'BDC_OKCODE'

                                   '/00'.

     PERFORM BDC_FIELD       USING 'LIKP-VSTEL'

                                   VSTEL.

     PERFORM BDC_FIELD       USING 'LV50C-DATBI'

                                   DATBI.

     PERFORM BDC_FIELD       USING 'LV50C-VBELN'

                                   VBELN.

     PERFORM BDC_FIELD       USING 'LV50C-ABPOS'

                                   ABPOS.

     PERFORM BDC_FIELD       USING 'LV50C-BIPOS'

                                   BIPOS.

     PERFORM BDC_DYNPRO      USING 'SAPMV50A' '1000'.

     PERFORM BDC_FIELD       USING 'BDC_OKCODE'

                                   '=SICH_T'.

     CALL TRANSACTION 'VL01N' USING BDCDATA MODE 'E' MESSAGES INTO MESSTAB.

     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

       EXPORTING

         WAIT = 'X'.

   ENDIF.

ENDFORM.                    "SUB

*&---------------------------------------------------------------------*

*&      Form  BDC_DYNPRO

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_0150   text

*      -->P_0151   text

*----------------------------------------------------------------------*

FORM BDC_DYNPRO USING PROGRAM DYNPRO.

   CLEAR BDCDATA.

   BDCDATA-PROGRAM  = PROGRAM.

   BDCDATA-DYNPRO   = DYNPRO.

   BDCDATA-DYNBEGIN = 'X'.

   APPEND BDCDATA.

ENDFORM.                    " BDC_DYNPRO

*&---------------------------------------------------------------------*

*&      Form  BDC_FIELD

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_0155   text

*      -->P_0156   text

*----------------------------------------------------------------------*

FORM BDC_FIELD USING FNAM FVAL.

   CLEAR BDCDATA.

   BDCDATA-FNAM = FNAM.

   BDCDATA-FVAL = FVAL.

   APPEND BDCDATA.

ENDFORM.                    " BDC_FIELD

*&---------------------------------------------------------------------*

*&      Form  DELETE_DELIVERY

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM DELETE_DELIVERY.

   REFRESH: BDCDATA,MESSTAB.

   PERFORM BDC_DYNPRO      USING 'SAPMV50A' '4004'.

   PERFORM BDC_FIELD       USING 'BDC_CURSOR'

                                 'LIKP-VBELN'.

   PERFORM BDC_FIELD       USING 'BDC_OKCODE'

                                 '/00'.

   PERFORM BDC_FIELD       USING 'LIKP-VBELN'

                                 DEL.

   PERFORM BDC_DYNPRO      USING 'SAPMV50A' '1000'.

   PERFORM BDC_FIELD       USING 'BDC_OKCODE'

                                 '/ELOES_T'.

   CALL TRANSACTION 'VL02N' USING BDCDATA MODE 'E' MESSAGES INTO MESSTAB.

   CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

     EXPORTING

       WAIT = 'X'.

   COMMIT WORK.

   TABLES: LIPS.

   READ TABLE MESSTAB WITH KEY MSGTYP = 'S'.

   IF SY-SUBRC = 0.

     DELETE FROM ZSD_DELI WHERE DELIVER = DEL.

     COMMIT WORK.

   ELSE.

     SELECT SINGLE * FROM LIPS WHERE VBELN = I_SCH-VBELN.

     IF SY-SUBRC NE 0.

       DELETE FROM ZSD_DELI WHERE DELIVER = DEL.

       COMMIT WORK.

     ENDIF.

   ENDIF.

   READ TABLE MESSTAB WITH KEY MSGTYP = 'S' MSGV1 = 'Outbound Delivery'.

   IF SY-SUBRC = 0.

      DELI_D = 'X'.

      PERFORM SCHED_LINE_DELI_QTY.

      CLEAR DELI_D.

     IF DEL = I_SCH-DELIVER.

       I_SCH-DELIVER = ''.

       MODIFY I_SCH TRANSPORTING DELIVER WHERE DELIVER = DEL.

     ELSEIF DEL = I_SCH-DEL_EXST.

       I_SCH-DEL_EXST = ''.

       MODIFY I_SCH TRANSPORTING DEL_EXST WHERE DEL_EXST = DEL.

     ENDIF.

   ENDIF.

ENDFORM.                    " DELETE_DELIVERY