Tuesday, 18 February 2020

Send Popup Message BAPI- RS_SET_SELSCREEN_STATUS

 



REPORT  Z_MSG_CLIENT.

INCLUDE ZMSGTOP.
INCLUDE ZMSGPRO

  AT SELECTION-SCREEN OUTPUT.
  APPEND :
    'PRIN' TO it_ucomm,  "for print
    'SPOS' TO it_ucomm,
    'E' TO it_ucomm.    "for back


  CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
    EXPORTING
      p_status  sy-pfkey
    TABLES
      p_exclude it_ucomm.


INITIALIZATION.
PERFORM BINT.

START-OF-SELECTION.
PERFORM COL_DATA.
*PERFORM DISPLAY.


Include------------
*&---------------------------------------------------------------------*
*&  Include           ZUSERTOP
*&---------------------------------------------------------------------*

TABLES USR02,USR06,USER_ADDR,ZTBUSRLCS.

CONTROLS ZCTRUSER TYPE TABLEVIEW USING SCREEN '100'.

RANGESR_BEFORE FOR BSIS-BUDAT,
        R_CURRENT FOR BSIS-BUDAT.
TYPE-POOLS slisicon,vimty.


*Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME.
SELECT-OPTIONSS_BNAME FOR USR02-BNAME.
PARAMETERSr_mess(128DEFAULT ' '."." like T100-TEXT.

*MESSAGE(128) default ' Error ! Please" logoff now ! '.
*            r_det RADIOBUTTON GROUP rad1 DEFAULT 'X',
*            r_sum RADIOBUTTON GROUP rad1.

SELECTION-SCREEN END OF BLOCK BLOCK1.
* interne Tabelle mit Auftragskopfdaten *

TYPES :
   BEGIN OF ty_mod,
      row TYPE i,
   END OF ty_mod.

DATA :
i_mod              TYPE STANDARD TABLE OF ty_mod,
i_del              TYPE STANDARD TABLE OF ty_mod.

DATAit_ucomm TYPE TABLE OF sy-ucomm.

TYPES:  BEGIN OF i_usr_s,
          BNAME type  USER_ADDR-BNAME,
          CLASS type  USR02-CLASS,
          UFLAG type  USR02-UFLAG,
          TRDAT type  USR02-TRDAT,
          LTIME type  USR02-LTIME,
          GLTGV type  USR02-GLTGV,
          GLTGB type  USR02-GLTGB,
          ERDAT type USR02-ERDAT,
          VONDAT  type  USR06-VONDAT,
          BISDAT  type  USR06-BISDAT,
          LIC_TYPE  type  USR06-LIC_TYPE,
          NAME_FIRST  type  USER_ADDR-NAME_FIRST,
          NAME_LAST type  USER_ADDR-NAME_LAST,
          NAME_TEXTC  type  USER_ADDR-NAME_TEXTC,
          DEPARTMENT  type  USER_ADDR-DEPARTMENT,
          ctr_stat(15type C,
          no(1type P,
          exp(1type C,
          lockby(30TYPE C,
        END OF i_usr_s.

TYPES:  BEGIN OF i_sum,
        ctr_stat(15type C,
        bname type usr02-bname,
        NO type  P" DECIMALS 0,
        gltgb TYPE usr02-gltgb,
        exp(1)  TYPE C,
        NOP(3type C,
        END OF i_sum.

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATAo_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.


DATAi_usr_usr2 LIKE TABLE OF usr02,
      i_usr_dat type standard Table OF i_usr_s WITH HEADER LINE,
      i_usr_su type standard Table OF i_sum WITH HEADER LINE,
      i_usr_susu type standard Table OF i_sum WITH HEADER LINE,
      i_usr_sum type standard Table OF i_sum WITH HEADER LINE,
      i_usr_summ LIKE TABLE OF ZTBUSRLCS with header line.

DATAtable_n TYPE i,
      table_nn TYPE i,
      sy_repid_save LIKE sy-repid,
      sumrec type i.

DATA datval type sy-datum,
       gstring TYPE c.

DATA ls_exclude TYPE ui_func,
       pt_exclude TYPE ui_functions,
       NO TYPE STRING.

DATAt_fldcat     TYPE slis_t_fieldcat_alv,
      s_fldcat     TYPE slis_fieldcat_alv,
      t_sort       TYPE slis_t_sortinfo_alv," WITH HEADER LINE,
      wa_sortinfo TYPE slis_sortinfo_alv,
      t_events     TYPE slis_t_event WITH HEADER LINE,
      t_event_exit TYPE slis_t_event_exit WITH HEADER LINE,
      x_layout     TYPE slis_layout_alv,
       gd_layout    TYPE lvc_s_layo,
      x_print      TYPE slis_print_alv,
      x_variant    TYPE disvariant,
      d_repid      TYPE sy-repid,
      ct_type(2,
      f_fldcat2 type slis_t_fieldcat_alv with header line,
      g_layout type slis_layout_alv,
      gs_fieldcatalog TYPE lvc_s_fcat OCCURS 0,
      gv_fcat LIKE LINE OF gs_fieldcatalog,
      gus_fieldcatalog TYPE lvc_s_fcat OCCURS 0.

DATABEGIN OF gt_outtab occurs ."with header line.
        include structure ZTBUSRLCS.
DATAcelltab type LVC_T_STYL.
DATAEND OF gt_outtab.
DATAit_table LIKE standard table of gt_outtab WITH HEADER LINE,
      t_table LIKE standard table of gt_outtab WITH HEADER LINE.


DATAOK_CODE LIKE sy-ucomm,
      save_ok like sy-ucomm,
      g_container TYPE scrfname VALUE 'ZCTRUSER',
      grid1  TYPE REF TO cl_gui_alv_grid,
      g_custom_container TYPE REF TO cl_gui_custom_container,
      gs_layout TYPE lvc_s_layo,
      g_max type value 100.

DATA user_name LIKE usr02-bname,
      user_mess LIKE t100-text.


AT SELECTION-SCREEN.
*--------------------------------------------------------------------
* C L A S S E S
*--------------------------------------------------------------------
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:   handle_data_changed
               FOR EVENT data_changed OF cl_gui_alv_grid
               IMPORTING er_data_changed.

ENDCLASS.                    "lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD  handle_data_changed.

*event is ttriggered when data is changed in the output

*    PERFORM check_data USING er_data_changed
*                             i_usr_summ.

  ENDMETHOD.                    "handle_data_changed
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION


*&---------------------------------------------------------------------*
*&  Include           ZUSERPRO
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  BINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BINT .

  DEFINE f_fldcat.
    clear s_fldcat.
    s_fldcat-fieldname &1.
*    s_fldcat-key       = &2.
    s_fldcat-decimals_out  &2.
    s_fldcat-seltext_l &3.
    s_fldcat-outputlen  &4.
    s_fldcat-just      &5.
    s_fldcat-no_out    &6.
    s_fldcat-datatype  &7.
    s_fldcat-qfieldname &8.
    s_fldcat-no_zero  &9.
*    s_fldcat-outputlen  = &10.

    append s_fldcat to t_fldcat.
  END-OF-DEFINITION.

ENDFORM.                    " BINT
*&---------------------------------------------------------------------*
*&      Form  SUMMARY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SUMMARY .
  IF NOT i_usr_dat IS INITIAL.
    LOOP AT i_usr_dat .
      MOVE-CORRESPONDING i_usr_dat to i_usr_su.
      Append i_usr_su.
    ENDLOOP.
  ELSE.
    STOP.
  ENDIF.

  SORT i_usr_su by ctr_stat.
  LOOP AT i_usr_su.
    AT END OF ctr_stat.
      Read table i_usr_su INDEX sy-tabix.
      SUM.
      i_usr_sum-ctr_stat i_usr_su-ctr_stat.
      i_usr_sum-no i_usr_su-no.
      APPEND i_usr_sum.
    ENDAT.
  ENDLOOP.

  LOOP AT i_usr_sum.
    i_usr_sum-nop i_usr_sum-no.
    modify i_usr_sum.
  ENDLOOP.

  i_usr_sum-ctr_stat 'TOTAL USER '.
  i_usr_sum-nop sumrec.
  APPEND i_usr_sum.

*  Update to Summary table
  IF SY-SUBRC EQ 0.
    LOOP AT i_usr_sum .
      i_usr_summ-CLIENT sy-mandt.
      i_usr_summ-USERSAP i_usr_sum-ctr_stat.
      i_usr_summ-SUMOF i_usr_sum-nop.
*      i_usr_summ-SAVEDATE = SY-DATUM.   " unmark this after test
      append  i_usr_summ.
    ENDLOOP.
  ENDIF.


*   Update itab From Table
  CLEAR i_usr_summ.
  LOOP AT i_usr_summ.
    SELECT SINGLE CURRLCS SAVEDATE from ZTBUSRLCS
   INTO (i_usr_summ-CURRLCS,i_usr_summ-SAVEDATE)
 WHERE USERSAP EQ i_usr_summ-USERSAP.
    MODIFY i_usr_summ.
  ENDLOOP.

ENDFORM.                    " SUMMARY
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  COL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM COL_DATA .

  CLEAR USR02,USR06,USER_ADDR .
  SELECT usr02~bname usr02~class usr02~uflag usr02~trdat usr02~ltime
         usr02~gltgv usr02~gltgb usr02~erdat
         user_addr~name_first user_addr~name_last user_addr~name_textc
         user_addr~department
  INTO CORRESPONDING FIELDS OF TABLE i_usr_dat
  FROM  usr02
  INNER JOIN user_addr AS user_addr ON user_addr~bname usr02~bname
  WHERE usr02~bname IN s_bname.

  table_n 0.
  DESCRIBE TABLE i_usr_dat LINES table_n.
  IF table_n EQ 0.
    CALL FUNCTION 'C14A_POPUP_NO_HITS'.
    STOP.
  ENDIF.


  LOOP AT i_usr_dat.
    user_name i_usr_dat-bname.
    user_mess r_mess.

    CALL FUNCTION 'TH_POPUP'
      EXPORTING
        CLIENT               sy-mandt
        USER                 user_name
        MESSAGE              r_mess
*   MESSAGE_LEN          = 0
*   CUT_BLANKS           = ' '
 EXCEPTIONS
   USER_NOT_FOUND       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.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " COL_DATA

*&---------------------------------------------------------------------*
*&      Form  SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SWITCH_EDIT_MODE .

*  PERFORM MODIFY_SCR.


  IF grid1->is_ready_for_inputeq 0.
* set edit enabled cells ready for input
    CALL METHOD grid1->set_ready_for_input
      EXPORTING
        i_ready_for_input 1.

    CALL METHOD GRID1->CHECK_CHANGED_DATA.
*    UPDATE ZTBUSRLCS FROM TABLE i_usr_summ.

  ELSE.
* lock edit enabled cells against input
    CALL METHOD grid1->set_ready_for_input
      EXPORTING
        i_ready_for_input 0.

  ENDIF.

ENDFORM.                    " SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
*&      Form  SAVEMONEY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SAVEMONEY .

  IF grid1->is_ready_for_inputEQ 0.
    MESSAGE ' Cannot Save Data in Display Mode' TYPE 'S'.
  ELSE.

    CALL METHOD grid1->set_table_for_first_display
      EXPORTING
        i_structure_name 'ZTBUSRLCS'
        is_layout        gs_layout
      CHANGING
        it_outtab        gt_outtab[].


    CALL METHOD grid1->register_edit_event
      EXPORTING
        i_event_id cl_gui_alv_grid=>mc_evt_modified.

    CALL METHOD grid1->register_edit_event
      EXPORTING
        i_event_id cl_gui_alv_grid=>mc_evt_enter.

    CALL METHOD Grid1->REGISTER_EDIT_EVENT
      EXPORTING
        I_EVENT_ID CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
      EXCEPTIONS
        ERROR      1
        OTHERS     2.


    CREATE OBJECT o_event_receiver.
    SET HANDLER o_event_receiver->handle_data_changed FOR grid1.

    CALL METHOD cl_gui_control=>set_focus
      EXPORTING
        control grid1.


    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        titlebar       'SAVING DATA'
        text_question  'Do you want save the data?'
        icon_button_1  'icon_booking_ok'
      IMPORTING
        answer         gstring
      EXCEPTIONS
        text_not_found 1
        OTHERS         2.

    IF gstring '1' ).
      MESSAGE ' Data Saved' TYPE 'S'.
      READ TABLE i_usr_summ INDEX sy-tabix"l_selfield-tabindex.

* Update or Save Data to Table
      Delete from ZTBUSRLCS.

*      IF SY-SUBRC EQ 0.
      IF i_usr_summ IS NOT INITIAL.
        LOOP AT gt_outtab.

          gt_outtab-SAVEDATE SY-DATUM.
          ZTBUSRLCS-CLIENT   SY-MANDT.
          ZTBUSRLCS-USERSAP  gt_outtab-USERSAP.
          ZTBUSRLCS-SUMOF    gt_outtab-SUMOF.
          ZTBUSRLCS-CURRLCS  gt_outtab-CURRLCS.
          ZTBUSRLCS-SAVEDATE gt_outtab-SAVEDATE.
          MODIFY gt_outtab.

          INSERT ZTBUSRLCS.
        ENDLOOP.
      ENDIF.
    ENDIF.


    CALL METHOD grid1->set_ready_for_input
      EXPORTING
        i_ready_for_input 0.


    CALL METHOD grid1->set_table_for_first_display
    EXPORTING
*        is_variant           = l2_layout
      i_structure_name 'ZTBUSRLCS'
        i_save               'A'
      it_toolbar_excluding pt_exclude
      is_layout        gs_layout
    CHANGING
      it_fieldcatalog  gus_fieldcatalog
      it_outtab        gt_outtab[].


  ENDIF.


ENDFORM.                    " SAVEMONEY
*&---------------------------------------------------------------------*
*&      Form  MODIFY_SCR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_SCR .


  SET PF-STATUS 'PF_PUSER'.
  refresh it_ucomm.

  APPEND :
    'PRIN' TO it_ucomm,  "for print
    'E' TO it_ucomm.    "for back

  CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
    EXPORTING
      p_status  sy-pfkey
    TABLES
      p_exclude it_ucomm.

 

ENDFORM.                    " MODIFY_SCR





Upload And Download Bom and Comp master Data



Sample Using BDC :


Repor  Z_SD_CRT_DEL_COM .
TABLES: MARA,ZTB_BOM_UPL_LOG.

DATA  ZCSAPII.

TYPE-POOLS : slis,icon,vimty,abap,truxs.

INCLUDE <icon>.
INCLUDE <symbol>.

*----------------------------------------------------------------------*
*   data definition
*----------------------------------------------------------------------*
*       Batchinputdata of single transaction
DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
*       messages of call transaction
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
*       error session opened (' ' or 'X')

DATA:  BEGIN OF IT_MESSTAB OCCURS 0 .
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA:  L_MSTRING(480) TYPE C.
DATA:  END OF IT_MESSTAB.

DATA:   E_GROUP_OPENED.
*       message texts
TABLES: T100.

TYPES : BEGIN OF TY_MM01,
         MATNR(018), "Material Bom
         AETXT(045), "Change Number Description
         DATUVC(040) ," TYPE AENR-DATUV, "Valid-From Date
         POSNR TYPE POSNR ,"(040), "Line Item
         OBJKT(040), "Material Component
         DATUV TYPE DATUV, "Valid-From Date
         AENNR TYPE AENNR,
         WERKS TYPE WERKS,
         STLAN TYPE STLAN,
         MSGE(480),
         TRF_LIGHT(1),
         EXIST(1),
         STATUS(40),
        END OF TY_MM01.

TYPES:   BEGIN OF TY_MAT,
         AENNR TYPE AENR-AENNR,
         AENST TYPE AENR-AENST,
         DATUV TYPE AENR-DATUV,
         ANDAT TYPE AENR-ANDAT,
         ANNAM TYPE AENR-ANNAM,
         AEDAT TYPE AENR-AEDAT,
         AETXT TYPE AENR-AETXT,
         FLUSE TYPE AENR-FLUSE,
         AEDIF TYPE AENR-AEDIF,
         STLNR TYPE STZU-STLNR,
         MATNR TYPE MAST-MATNR,
         AETYP TYPE AEOI-AETYP,
         OBJKT TYPE AEOI-OBJKT,
         USOBJ TYPE AEOI-USOBJ,
         MAKTX TYPE MAKT-MAKTX,
         DATUVC(12),
         ANDATC(12),
       END OF TY_MAT.

TYPES : BEGIN OF TY_BOM,
        MATNR TYPE MAST-MATNR,
        DATUV TYPE STPO-DATUV,
        END OF TY_BOM.

Data: begin of t_stpo occurs 0,
        matnr like mast-matnr,
        werks like mast-werks,
        stlan like mast-stlan,
        stlnr like stpo-stlnr,
        idnrk like stpo-idnrk,
        posnr like stpo-posnr,
        aennr like stpo-aennr,
        BULK(1) type c,
        mmbulk like marc-schgt,
        valid_from like STKO_API02-valid_from,
        error(220) type c,
      end of t_stpo.


DATA : IT_MM01 TYPE TABLE OF TY_MM01,
       WA_MM01 TYPE TY_MM01.

*
DATA : IT_MMC1 TYPE TABLE OF TY_MM01,
       WA_MMC1 TYPE TY_MM01.
*

DATA : IT_MMXX TYPE TABLE OF TY_MM01,
       WA_MMXX TYPE TY_MM01.

DATA :IT_MAT TYPE TABLE OF TY_MAT,
      WA_MAT TYPE TY_MAT.

DATA :IT_BOM TYPE TABLE OF TY_BOM,
      WA_BOM TYPE TY_BOM.

DATA : LV_FNAME TYPE STRING,
        TABLE_N TYPE I.

DATA: t_fldcat     TYPE slis_t_fieldcat_alv,
      s_fldcat     TYPE slis_fieldcat_alv,
      t_sort       TYPE slis_t_sortinfo_alv," WITH HEADER LINE,
      t_fldcat2     TYPE slis_t_fieldcat_alv,
      s_fldcat2     TYPE slis_fieldcat_alv,
      t_sort2       TYPE slis_t_sortinfo_alv," WITH HEADER LINE,
      t_fldcat3     TYPE slis_t_fieldcat_alv,
      s_fldcat3     TYPE slis_fieldcat_alv,
      t_sort3       TYPE slis_t_sortinfo_alv," WITH HEADER LINE,
      wa_sortinfo TYPE slis_sortinfo_alv,
      x_layout     TYPE slis_layout_alv,
      y_layout     TYPE slis_layout_alv,
      Z_layout     TYPE slis_layout_alv,
      gd_layout    TYPE lvc_s_layo,
      x_print      TYPE slis_print_alv,
      x_variant    TYPE disvariant,
      d_repid      TYPE sy-repid,
      ct_type(2) ,
      f_fldcat2 type slis_t_fieldcat_alv with header line,
      f_fldcat3 type slis_t_fieldcat_alv with header line,
      g_layout type slis_layout_alv,
      gs_fieldcatalog TYPE lvc_s_fcat OCCURS 0,
      gv_fcat LIKE LINE OF gs_fieldcatalog,
      gus_fieldcatalog TYPE lvc_s_fcat OCCURS 0.

DATA: IDX(2),
      FNAM(20).

DATA : rs_selfield TYPE slis_selfield.

DATA: OK_CODE LIKE sy-ucomm,
      save_ok like sy-ucomm,
      g_container TYPE scrfname VALUE 'ZCTRUSER',
      grid1  TYPE REF TO cl_gui_alv_grid,
      g_custom_container TYPE REF TO cl_gui_custom_container,
      gs_layout TYPE lvc_s_layo,
      g_max type i value 100.

DATA: it_folder   LIKE STANDARD TABLE OF sdokpath,
      it_file     LIKE STANDARD TABLE OF sdokpath,
      it_fol_fil  LIKE STANDARD TABLE OF sdokpath,
      wa_fol_fil  LIKE sdokpath,
      file_count  TYPE i,
      dir_count   TYPE i.

DATA : CNTR_NO(4) TYPE N,
       LINE_NO(4) TYPE N.

DATA : vf_start_col TYPE i,   "start column
       vf_start_row TYPE i,   "start row
       vf_end_col   TYPE i,   "maximum column
       vf_end_row   TYPE i,   "maximum row
       p_text(20).

DATA: itabb TYPE STANDARD TABLE OF kcde_cells WITH HEADER LINE,
      vf_index TYPE i.

DATA: tab type table of itab,
      wa_tab like itab.

DATA:
       t_stpo_read like STPO_API02 occurs 0 with header line,
       t_stpo_update like STPO_API03 occurs 0 with header line,
       i_stko LIKE stko_api01,
       T_STKO LIKE STKO_API02 OCCURS 0 WITH HEADER LINE,
       wrk_date like CSAP_MBOM-DATUV.

FIELD-SYMBOLS: <fs>.

SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME TITLE TEXT-003.
PARAMETERS : RB_UP RADIOBUTTON GROUP RB_1 DEFAULT 'X' USER-COMMAND ucom.
PARAMETERS : P_FNAME TYPE IBIPPARMS-PATH .

SELECTION-SCREEN SKIP 1.
PARAMETERS : RB_TMP RADIOBUTTON GROUP RB_1.
PARAMETER  : pdirp   TYPE pfeflnamel DEFAULT 'D:\',
             p_psavep  TYPE string DEFAULT 'Material Template.XLS'.
SELECTION-SCREEN SKIP 1.
PARAMETERS : RB_DWN RADIOBUTTON GROUP RB_1.

SELECTION-SCREEN END OF BLOCK SEL1.

AT SELECTION-SCREEN OUTPUT.
  PERFORM MODIFY_SCREEN.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
  DATA: PATH LIKE RLGRAP-FILENAME.
  PATH = 'D:\'.
  CALL FUNCTION 'WS_FILENAME_GET'
  EXPORTING
    DEF_FILENAME     = SPACE
    DEF_PATH         = PATH
*    MASK             = ',.xls , .xlsx.'
*      MASK             = ', .txt , .txt.'
    MODE             = 'O'
    TITLE            = 'PC-File-Selection'
  IMPORTING
    FILENAME         = p_fname
  EXCEPTIONS
    INV_WINSYS       = 1
    NO_BATCH         = 2
    SELECTION_CANCEL = 3
    SELECTION_ERROR  = 4
    OTHERS           = 5.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR pdirp.
  DATA: fname TYPE string.

  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      window_title         = 'Select Directory'
    CHANGING
      selected_folder      = fname
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  pdirp = fname.

INITIALIZATION.
  PERFORM BINT.

START-OF-SELECTION.

  IF RB_TMP = 'X'.
    SUBMIT ZDID_SD_DEL_COM_TMP  WITH p_pdirp EQ pdirp
                            WITH psavep EQ p_psavep
      AND RETURN.
    STOP.
  ENDIF.


  IF RB_DWN = 'X'.
    SUBMIT ZDID_SD_DEL_COM_DWN  WITH p_pdirp EQ pdirp
                                 WITH psavep = 'Change Component Master.XLS' via SELECTION-SCREEN
      AND RETURN.
    STOP.
  ENDIF.

*  SPLIT data Form Excel
  vf_start_col = '1'.
  vf_start_row = '2'.
  vf_end_col = '60'.
  vf_end_row = '10000'.

  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT' " Function to download data
                                               " from excel
        EXPORTING
          filename                = p_fname
          i_begin_col             = vf_start_col
          i_begin_row             = vf_start_row
          i_end_col               = vf_end_col
          i_end_row               = vf_end_row
        TABLES
          intern                  = itabb "B09
        EXCEPTIONS
          inconsistent_parameters = 1
          upload_ole              = 2
          OTHERS                  = 3.
  IF sy-subrc <> 0.
    MESSAGE i454(0) WITH 'File not found'.
  ENDIF.

  CLEAR: itabb .
  SORT itabb BY row col.
  LOOP AT itabb.
    MOVE : itabb-col TO vf_index.
    ASSIGN COMPONENT vf_index OF STRUCTURE WA_MM01 TO <fs>.
    MOVE : itabb-value TO <fs>.
    AT END OF row.
      APPEND WA_MM01 to IT_MM01.
      CLEAR WA_MM01.
    ENDAT.
  ENDLOOP.

  table_n = 0.
  DESCRIBE TABLE IT_MM01 LINES table_n.
  IF table_n EQ 0.
    MESSAGE I208(00) WITH 'Different File Type'.
    STOP.
  ENDIF.


  LOOP AT IT_MM01 INTO WA_MM01.
    TRANSLATE WA_MM01-MATNR TO UPPER CASE.
    TRANSLATE WA_MM01-OBJKT TO UPPER CASE.

    REPLACE ALL OCCURRENCES OF '.' IN WA_MM01-DATUVC WITH SPACE.
    CONCATENATE  WA_MM01-DATUVC+4(4) WA_MM01-DATUVC+2(2) WA_MM01-DATUVC(2) INTO WA_MM01-DATUV.
    MODIFY IT_MM01 FROM WA_MM01.
  ENDLOOP.

**Check for New or exist Material

  REFRESH IT_MAT.
  SELECT  AENR~AENNR AENR~AENST AENR~DATUV AENR~ANDAT AENR~ANNAM AENR~AEDAT AENR~AETXT AENR~FLUSE AENR~AEDIF
          AEOI~AETYP AEOI~OBJKT AEOI~USOBJ AEOI~ANDAT AEOI~ANNAM
          MAKT~MAKTX
         INTO CORRESPONDING FIELDS OF TABLE IT_MAT
  FROM AENR
  INNER JOIN AEOI AS AEOI ON AEOI~AENNR EQ AENR~AENNR
  INNER JOIN MAKT AS MAKT ON MAKT~MATNR EQ AEOI~OBJKT
  FOR ALL ENTRIES IN IT_MM01
  WHERE AENR~DATUV EQ IT_MM01-DATUV.

  IF IT_MAT IS NOT INITIAL.
    SORT IT_MAT BY DATUV.
    SORT IT_MM01 BY DATUV.
    LOOP AT IT_MM01 INTO WA_MM01.
      READ TABLE IT_MAT INTO WA_MAT WITH KEY DATUV = WA_MM01-DATUV BINARY SEARCH.

      IF SY-SUBRC EQ 0.
        WA_MM01-EXIST = 'F'.
        WA_MM01-STATUS = 'Already Have Change Number'.
      ELSE.
        WA_MM01-EXIST  = 'N'.
        WA_MM01-STATUS = 'Create Change Number'.
      ENDIF.
      MODIFY IT_MM01 FROM WA_MM01.
    ENDLOOP.
  ENDIF.

  LOOP AT IT_MM01 INTO WA_MM01 WHERE EXIST EQ SPACE.
    WA_MM01-STATUS = 'Create Change Number'.
    WA_MM01-EXIST  = 'N'.
    MODIFY IT_MM01 FROM WA_MM01.
  ENDLOOP.

*Processing data
  PERFORM FIRST_VIEW_DATA.
*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
  DATA: L_MSTRING(480).
  DATA: L_SUBRC LIKE SY-SUBRC.
  REFRESH MESSTAB.
  CALL TRANSACTION TCODE USING BDCDATA
                   MODE  'N' " 'N' "'A' "CTUMODE
                   UPDATE 'L' "'L' "'S' "CUPDATE
                   MESSAGES INTO MESSTAB.

  LOOP AT MESSTAB.
    MESSAGE ID     MESSTAB-MSGID
            TYPE   MESSTAB-MSGTYP
            NUMBER MESSTAB-MSGNR
            INTO L_MSTRING
            WITH MESSTAB-MSGV1
                 MESSTAB-MSGV2
                 MESSTAB-MSGV3
                 MESSTAB-MSGV4.

    IT_MESSTAB-MSGTYP = MESSTAB-MSGTYP.
    IT_MESSTAB-MSGV1 = MESSTAB-MSGV1.
    IT_MESSTAB-MSGV2 = MESSTAB-MSGV2.
    IF MESSTAB-MSGV2 IS NOT INITIAL.
      IT_MESSTAB-MSGV1 = MESSTAB-MSGV2.
    ENDIF.
    IT_MESSTAB-MSGV3 = MESSTAB-MSGV3.
    IT_MESSTAB-MSGV4 = MESSTAB-MSGV4.
    IT_MESSTAB-L_MSTRING = L_MSTRING.

    APPEND IT_MESSTAB .
  ENDLOOP.

  REFRESH BDCDATA.
ENDFORM.                    "BDC_TRANSACTION

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  IF FVAL <> SPACE. "NODATA.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
  ENDIF.
ENDFORM.                    "BDC_FIELD
*&---------------------------------------------------------------------*
*&      Form  BINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BINT .

  DEFINE f_fldcat.
    clear s_fldcat.
    s_fldcat-fieldname = &1.
    s_fldcat-decimals_out  = &2.
    s_fldcat-seltext_l = &3.
    s_fldcat-outputlen  = &4.
    s_fldcat-just      = &5.
    s_fldcat-no_out    = &6.
    s_fldcat-datatype  = &7.
    s_fldcat-qfieldname = &8.
    s_fldcat-no_zero  = &9.
    append s_fldcat to t_fldcat.
  END-OF-DEFINITION.

  DEFINE f_fldcat2.
    clear s_fldcat2.
    s_fldcat2-fieldname = &1.
    s_fldcat2-decimals_out  = &2.
    s_fldcat2-seltext_l = &3.
    s_fldcat2-outputlen  = &4.
    s_fldcat2-just      = &5.
    s_fldcat2-no_out    = &6.
    s_fldcat2-datatype  = &7.
    s_fldcat2-qfieldname = &8.
    s_fldcat2-no_zero  = &9.
    append s_fldcat2 to t_fldcat2.
  END-OF-DEFINITION.

  DEFINE f_fldcat3.
    clear s_fldcat3.
    s_fldcat3-fieldname = &1.
    s_fldcat3-decimals_out  = &2.
    s_fldcat3-seltext_l = &3.
    s_fldcat3-outputlen  = &4.
    s_fldcat3-just      = &5.
    s_fldcat3-no_out    = &6.
    s_fldcat3-datatype  = &7.
    s_fldcat3-qfieldname = &8.
    s_fldcat3-no_zero  = &9.
    append s_fldcat3 to t_fldcat3.
  END-OF-DEFINITION.

ENDFORM.                    " BINT
*&---------------------------------------------------------------------*
*&      Form  MODIFY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_DATA.  "HERE

  REFRESH IT_MAT.
  SELECT  AENR~AENNR AENR~AENST AENR~DATUV AENR~ANDAT AENR~ANNAM AENR~AEDAT AENR~AETXT AENR~FLUSE AENR~AEDIF
          AEOI~AETYP AEOI~OBJKT AEOI~USOBJ AEOI~ANDAT AEOI~ANNAM
         INTO CORRESPONDING FIELDS OF TABLE IT_MAT
  FROM AENR
  INNER JOIN AEOI AS AEOI ON AEOI~AENNR EQ AENR~AENNR
  FOR ALL ENTRIES IN IT_MM01
  WHERE AENR~DATUV EQ IT_MM01-DATUV.

  IF IT_MAT IS NOT INITIAL.
    SORT IT_MAT BY DATUV.
    SORT IT_MM01 BY DATUV.
    LOOP AT IT_MM01 INTO WA_MM01 WHERE EXIST = 'N'.
      READ TABLE IT_MAT INTO WA_MAT WITH KEY DATUV = WA_MM01-DATUV BINARY SEARCH.

      IF SY-SUBRC EQ 0.
        WA_MM01-MSGE = 'Change Number Created'.
        WA_MM01-AENNR = WA_MAT-AENNR.
        WA_MM01-TRF_LIGHT = '3'.  "Green
      ENDIF.
      MODIFY IT_MM01 FROM WA_MM01.
      MOVE-CORRESPONDING WA_MM01 TO WA_MMXX.
      APPEND WA_MMXX TO IT_MMXX.
    ENDLOOP.
*  ENDIF.

    LOOP AT IT_MM01 INTO WA_MM01 WHERE EXIST EQ 'F'.
      READ TABLE IT_MAT INTO WA_MAT WITH KEY DATUV = WA_MM01-DATUV BINARY SEARCH.

      IF SY-SUBRC EQ 0.
        WA_MM01-MSGE = 'Change Number Created'.
        WA_MM01-AENNR = WA_MAT-AENNR.
        WA_MM01-TRF_LIGHT = '3'.  "Green
      ENDIF.
      MODIFY IT_MM01 FROM WA_MM01.
      MOVE-CORRESPONDING WA_MM01 TO WA_MMXX.
      APPEND WA_MMXX TO IT_MMXX.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " MODIFY_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT .
*   *   *  *             1     2  3           4   5  6  7      8  9
  f_fldcat2 'AENNR' '' 'Change Number Component' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'MATNR' '' 'Material Bom' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'DATUV' '' 'Valid To' '' 'L' ''  'DATS' '' '' .
  f_fldcat2 'AETXT' '' 'Change Number Description' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'OBJKT' '' 'Material Component' '' 'L' ''  'DATS' '' '' .
  f_fldcat2 'MSGE' '' 'Status' '' 'L' '' 'CHAR' '' ''.
  CLEAR S_FLDCAT2.

ENDFORM.                    " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  L_BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM L_BUILD_LAYOUT .
  y_layout-colwidth_optimize  = 'X'.
  y_layout-info_fieldname     = 'LINE_COLOR'.
  y_layout-def_status         = 'X'.
*  y_layout-lights_fieldname  = 'TRF_LIGHT'.
  y_layout-lights_tabname    = 'I_LIGHTS'.
ENDFORM.                    " L_BUILD_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY .
  d_repid = sy-repid.
  Call function 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = d_repid
      i_callback_pf_status_set = 'STATUS_SET'
      i_callback_user_command  = 'USR_CMD'
      it_fieldcat        = t_fldcat2[]
      it_sort            = t_sort2[]
      is_layout          = y_layout
*        i_default          = 'X'
        i_save             = 'U'
*        is_variant         = x_variant
*        it_event_exit      = t_event_exit[]
*        is_print           = x_print
    TABLES
      t_outtab           = IT_MMXX[]
    EXCEPTIONS
      program_error      = 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.
  ENDIF.

ENDFORM.                    " DISPLAY

*&---------------------------------------------------------------------*
*&      Form  f_status_set
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM STATUS_SET USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZALV'.
ENDFORM.                    "f_status_set
*&---------------------------------------------------------------------*
*&      Form  PROS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROS_DATA.
  IF IT_MM01 IS NOT INITIAL.

    SORT IT_MM01 BY MATNR POSNR OBJKT DATUV.
    DELETE ADJACENT DUPLICATES FROM IT_MM01 COMPARING MATNR POSNR OBJKT DATUV.
*
    SORT IT_MM01 BY DATUV.
    LOOP AT IT_MM01 INTO WA_MM01  WHERE EXIST = 'N'.
*
      perform bdc_dynpro      using 'SAPMC29C' '0100'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29A-AENNR'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'RAD_BUT_ECNTYP-NORM'
                                    'X'.
      perform bdc_field       using 'RAD_AEFUN-OHFR'
                                    'X'.
      perform bdc_dynpro      using 'SAPMC29C' '0010'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'RC29A-AETXT'
                                    WA_MM01-AETXT.
*                                  'Change BRCxxx'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29A-AENST'.
      perform bdc_field       using 'RC29A-DATUV'
                                    WA_MM01-DATUVC.
*                                  '26.07.2016'.
      perform bdc_field       using 'RC29A-AENST'
                                    '01'.
      perform bdc_dynpro      using 'SAPMC29C' '0020'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=ENT1'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29A-AEERL(01)'.
      perform bdc_field       using 'RC29A-AEERL(01)'
                                    'X'.
      perform bdc_dynpro      using 'SAPMC29C' '0020'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=ENT1'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29A-AEERL(04)'.
      perform bdc_field       using 'RC29A-AEERL(04)'
                                    'X'.
      perform bdc_dynpro      using 'SAPMC29C' '0020'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=UEOB'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29A-AEERL(04)'.
      perform bdc_dynpro      using 'SAPMC29C' '2000'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29A-MATNR(01)'.
      perform bdc_field       using 'RC29A-MATNR(01)'
                                    WA_MM01-OBJKT.
*                                  'FT15LV14'.
      perform bdc_dynpro      using 'SAPMC29C' '2000'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=FCBU'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29A-OITXT(01)'.
      perform bdc_transaction using 'CC01'.

    ENDLOOP.
  ENDIF.

  MESSAGE ' ' TYPE 'S'.

*  Process Data
  IF IT_MM01 IS NOT INITIAL.
    PERFORM Modify_data.
  ENDIF.
  SORT IT_MMXX BY AENNR DATUV.
ENDFORM.                    " PROS_DATA
*&---------------------------------------------------------------------*
*&      Form  END_VIEW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM END_VIEW_DATA .  "Sini
  rs_selfield-refresh = abap_true.
  PERFORM build_fieldcat.
  PERFORM l_build_layout.
  PERFORM display.
ENDFORM.                    " END_VIEW_DATA
*&---------------------------------------------------------------------*
*&      Form  FIRST_VIEW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FIRST_VIEW_DATA .
  PERFORM  build_fieldcat_ist.
  PERFORM  l_build_layout_ist.
  PERFORM  display_ist.
ENDFORM.                    " FIRST_VIEW_DATA
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_IST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_IST.
  d_repid = sy-repid.
  Call function 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = d_repid
      i_callback_pf_status_set = 'STAT_SET'
      i_callback_user_command  = 'USER_COMMAND'
      it_fieldcat              = t_fldcat[]
      it_sort                  = t_sort[]
      is_layout                = x_layout
      i_default                = ''
      i_save                   = ''
    TABLES
      t_outtab                 = IT_MM01[]
    EXCEPTIONS
      program_error            = 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.
  ENDIF.

ENDFORM.                    " DISPLAY_IST
*&---------------------------------------------------------------------*
*&      Form  L_BUILD_LAYOUT_IST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM L_BUILD_LAYOUT_IST .
  x_layout-colwidth_optimize  = 'X'.
  x_layout-info_fieldname     = 'LINE_COLOR'.
  x_layout-def_status         = 'X'.
ENDFORM.                    " L_BUILD_LAYOUT_IST
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT_IST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT_IST.
  f_fldcat 'MATNR' '' 'Material Bom' '' 'L' ''  'CHAR' '' '' .
  f_fldcat 'DATUV' '' 'Valid To' '' 'L' ''  'DATS' '' '' .
  f_fldcat 'AETXT' '' 'Change Number Description' '' 'L' ''  'CHAR' '' '' .
  f_fldcat 'POSNR' '' 'Line Item' '' 'L' ''  'CHAR' '' '' .
  f_fldcat 'OBJKT' '' 'Material Component' '' 'L' ''  'DATS' '' '' .
  f_fldcat 'STATUS' '' 'Status' '' 'L' '' 'CHAR' '' ''.
  CLEAR S_FLDCAT.
ENDFORM.                    " BUILD_FIELDCAT_IST

*&---------------------------------------------------------------------*
*&      Form  f_status_set
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM stat_set USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZALV2'.
ENDFORM.                    "stat_set
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND  USING p_ucomm    LIKE sy-ucomm
                         rs_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&PRO'.
      PERFORM PROS_DATA.
      PERFORM END_VIEW_DATA.
    WHEN '&BACK'.
      LEAVE TO SCREEN 0.
    WHEN '&EXIT'.
      LEAVE TO SCREEN 0.
    WHEN '&CNCL'.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USR_CMD USING p_ucomm    LIKE sy-ucomm
                  rs_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&CHG'.
      PERFORM PROS_CHG.
      PERFORM LAST_VIEW_DATA.
    WHEN '&BACK'.
      SUBMIT Z_DID_SD_CRT_DEL_COM via SELECTION-SCREEN.
    WHEN '&EXIT'.
      LEAVE TO SCREEN 0.
    WHEN '&CNCL'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  MODIFY_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_SCREEN .

  LOOP AT SCREEN.
    IF RB_UP = 'X' .
      IF screen-name = 'PDIRP' OR  screen-name = 'P_PSAVEP'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR : PDIRP,P_PSAVEP.
    ELSEIF RB_TMP = 'X' .
      IF screen-name = 'P_FNAME'.
        screen-input = '0'.
        P_PSAVEP = 'Change Number Master.xls'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR: P_FNAME.
    ELSEIF RB_DWN = 'X'.
      IF screen-name = 'P_FNAME' OR screen-name = 'PDIRP' OR  screen-name = 'P_PSAVEP'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR : PDIRP,P_PSAVEP,P_FNAME.
    ELSE.
      IF screen-name = 'PDIRP' OR  screen-name = 'P_PSAVEP'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR: PDIRP,P_PSAVEP,P_FNAME.
    ENDIF.

  ENDLOOP.
ENDFORM.                    " MODIFY_SCREEN
*&---------------------------------------------------------------------*
*&      Form  SAVE_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_TABLE .

  SELECT MAX( CNTRL ) FROM ZTB_BOM_UPL_LOG INTO CNTR_NO.

  LINE_NO = 1.
  LINE_NO  = LINE_NO + CNTR_NO.

  LOOP AT  IT_MM01 INTO WA_MM01 WHERE TRF_LIGHT NE '1'.
    ZTB_BOM_UPL_LOG-CNTRL = LINE_NO.
    ZTB_BOM_UPL_LOG-BLART = 'CC'.  " Change Component
    ZTB_BOM_UPL_LOG-MATNR = WA_MM01-MATNR.
    ZTB_BOM_UPL_LOG-POSNR = WA_MM01-POSNR.
    ZTB_BOM_UPL_LOG-IDNRK = WA_MM01-OBJKT.
    ZTB_BOM_UPL_LOG-DATUB = WA_MM01-DATUV.
    ZTB_BOM_UPL_LOG-USNAM = SY-UNAME.
    ZTB_BOM_UPL_LOG-CPUDT = SY-DATUM.
    LINE_NO  = LINE_NO + 1.
    INSERT ZTB_BOM_UPL_LOG.
  ENDLOOP.

ENDFORM.                    " SAVE_TABLE
*&---------------------------------------------------------------------*
*&      Form  PROS_CHG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROS_CHG.


  SORT IT_MM01 BY MATNR.
  LOOP AT IT_MM01 INTO WA_MM01.
    WA_MM01-WERKS = '1000'.
    WA_MM01-STLAN = '5'.

    CALL FUNCTION 'CSAP_MAT_BOM_READ'
      EXPORTING
        MATERIAL  = WA_MM01-MATNR
        PLANT     = WA_MM01-WERKS
        BOM_USAGE = WA_MM01-STLAN
        CHANGE_NO = WA_MM01-AENNR
      TABLES
        T_STPO    = T_STPO_READ
        T_STKO    = T_STKO
      EXCEPTIONS
        ERROR     = 1
        OTHERS    = 2.

    LOOP AT T_STPO_READ WHERE COMPONENT = WA_MM01-OBJKT AND
                 ITEM_NO =  WA_MM01-POSNR.


      MOVE-CORRESPONDING T_STPO_READ TO T_STPO_UPDATE.
      T_STPO_UPDATE-ITEM_NO = WA_MM01-POSNR.                    "ITEM IDENTIFICATION.
      T_STPO_UPDATE-FLDELETE   = 'X'.
      APPEND T_STPO_UPDATE.
      CLEAR T_STPO_UPDATE.

      PERFORM BEGIN_OF_API USING 'CSAP_MAT_BOM_MAINTAIN'.
      CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
        EXPORTING
          MATERIAL           = WA_MM01-MATNR
          PLANT              = WA_MM01-WERKS
          BOM_USAGE          = WA_MM01-STLAN
          CHANGE_NO          = WA_MM01-AENNR
          I_STKO             = I_STKO
          FL_COMMIT_AND_WAIT = 'X'
        TABLES
          T_STPO             = T_STPO_UPDATE
        EXCEPTIONS
          ERROR              = 1
          OTHERS             = 2.


      IF SY-SUBRC NE 0.
        WA_MM01-TRF_LIGHT = '1'.
        WA_MM01-EXIST = 'C'.
        WA_MM01-MSGE = 'DisActive BOM Component Fail'.
      ELSE.
        WA_MM01-TRF_LIGHT = '3'.
        WA_MM01-MSGE = 'DisActive BOM Component Successfull'.
      ENDIF.

    ENDLOOP.
    IF SY-SUBRC NE 0.
      WA_MM01-TRF_LIGHT = '1'.
      WA_MM01-EXIST = 'C'.
      WA_MM01-MSGE = 'DisActive BOM Component Fail'.
    ENDIF.
    MODIFY IT_MM01 FROM WA_MM01.
    REFRESH T_STPO_UPDATE.
  ENDLOOP.



*  Save to table
  PERFORM SAVE_TABLE.

  SORT IT_MM01 BY AENNR.
  PERFORM LAST_VIEW_DATA.
ENDFORM.                    " PROS_CHG
*&---------------------------------------------------------------------*
*&      Form  BEGIN_OF_API
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_2011   text
*----------------------------------------------------------------------*
FORM BEGIN_OF_API  USING    api_name..
  CALL FUNCTION 'CALO_INIT_API'.

*---- initialize log
  CALL FUNCTION 'STAP_INIT_SINGLE_API'
    EXPORTING
      api_name = api_name.
ENDFORM.                    " BEGIN_OF_API
*&---------------------------------------------------------------------*
*&      Form  LAST_VIEW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM LAST_VIEW_DATA .
  PERFORM  build_fieldcat_Lst.
  PERFORM  l_build_layout_Lst.
  PERFORM  display_Lst.
ENDFORM.                    " LAST_VIEW_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT_LST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT_LST .
  f_fldcat3 'AENNR' '' 'Change Number Component' '' 'L' ''  'CHAR' '' '' .
  f_fldcat3 'MATNR' '' 'Material Bom' '' 'L' ''  'CHAR' '' '' .
  f_fldcat3 'DATUV' '' 'Valid To' '' 'L' ''  'DATS' '' '' .
  f_fldcat3 'AETXT' '' 'Change Number Description' '' 'L' ''  'CHAR' '' '' .
  f_fldcat3 'OBJKT' '' 'Material Component' '' 'L' ''  'DATS' '' '' .
  f_fldcat3 'MSGE' '' 'Status' '' 'L' '' 'CHAR' '' ''.
  CLEAR S_FLDCAT3.
ENDFORM.                    " BUILD_FIELDCAT_LST
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_LST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_LST .
  d_repid = sy-repid.
  Call function 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = d_repid
      i_callback_pf_status_set = 'STATUS_ST'
      i_callback_user_command  = 'USER_CMD'
      it_fieldcat              = t_fldcat3[]
      it_sort                  = t_sort3[]
      is_layout                = z_layout
      i_default                = ''
      i_save                   = ''
    TABLES
      t_outtab                 = IT_MM01[]
    EXCEPTIONS
      program_error            = 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.
  ENDIF.
ENDFORM.                    " DISPLAY_LST
*&---------------------------------------------------------------------*
*&      Form  L_BUILD_LAYOUT_LST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM L_BUILD_LAYOUT_LST .
  Z_layout-colwidth_optimize  = 'X'.
  Z_layout-info_fieldname     = 'LINE_COLOR'.
  Z_layout-def_status         = 'X'.
  Z_layout-lights_fieldname  = 'TRF_LIGHT'.
  Z_layout-lights_tabname    = 'I_LIGHTS'.
ENDFORM.                    " L_BUILD_LAYOUT_LST


*&---------------------------------------------------------------------*
*&      Form  f_status_set
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM STATUS_ST USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZALV3'.
ENDFORM.                    "stat_set
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_CMD USING p_ucomm    LIKE sy-ucomm
                  rs_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&BACK'.
      SUBMIT Z_DID_SD_CRT_DEL_COM via SELECTION-SCREEN.
    WHEN '&EXIT'.
      LEAVE TO SCREEN 0.
    WHEN '&CNCL'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDFORM.                    "USER_COMMAND

Visitor

Code Syntax Try...Endtry

  Code : Report Try. Parameters  NUMBER  type  I . data  RESULT  type  P  decimals  2 . data  OREF  type  ref  to  CX_ROOT . data  TEXT  typ...