Tuesday, 18 February 2020

Create and Change BOM-COM Master

Sample Code Using BDC :



Complete Code :

Report Z_SD_CRT_COM .

TABLES: MARA,ZTB_BOM_UPL_LOG.

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),
          IDNRK(018),
          MENGE(015),
          DATUVC(012),
          ALTBOM TYPE CSAP_MBOM-STLAL, "(20),
*          ALTEBOM(2),
          DATUV TYPE SY-DATUM,
          MAKTX(45),
          POSNR(6),
          MEINS(7),
          STLNR TYPE MAST-STLNR,
          WERKS TYPE WERKS,
          STLAN TYPE STLAN,
          STLAL TYPE STLAL,
          GRP(1) TYPE N,
          MSGV1(15),
          ERROR(100),
          MSGE(480),
          TRF_LIGHT(1),
          EXIST(1),
          STATUS(60),
        END OF TY_MM01.

TYPES : BEGIN OF TY_MAT,
          MATNR TYPE  MAST-MATNR,
          WERKS TYPE  MAST-WERKS,
          STLAN TYPE  MAST-STLAN,
          STLNR TYPE  MAST-STLNR,
          STLAL TYPE  MAST-STLAL,
          ANDAT TYPE  MAST-ANDAT,
          STLKN TYPE  STPO-STLKN,
          DATUV TYPE  STPO-DATUV,
          IDNRK TYPE  STPO-IDNRK,
          POSNR TYPE  STPO-POSNR,
          MEINS TYPE  STPO-MEINS,
          MENGE(2) TYPE P DECIMALS 0, " TYPE  STPO-MENGE,
          AENNR TYPE AENR-AENNR,
          MAKTX TYPE MAKT-MAKTX,
          DATUVC(012),
        END OF TY_MAT.

TYPES : BEGIN OF TY_BOM,
        STLNR TYPE STKO-STLNR,
        STLAL TYPE STKO-STLAL,
        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,

       IT_MMS1 TYPE TABLE OF TY_MM01,
       WA_MMS1 TYPE TY_MM01,

       IT_MMX1 TYPE TABLE OF TY_MM01,
       WA_MMX1 TYPE TY_MM01,

       IT_MMX2 TYPE TABLE OF TY_MM01,
       WA_MMX2 TYPE TY_MM01.

DATA : IT_MM11 TYPE TABLE OF TY_MM01,
       WA_MM11 TYPE TY_MM01.

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

DATA : IT_MMC2 TYPE TABLE OF TY_MM01,
       WA_MMC2 TYPE TY_MM01.

DATA : IT_MM02 TYPE TABLE OF TY_MM01,
       WA_MM02 TYPE TY_MM01.

DATA : IT_MM03 TYPE TABLE OF TY_MM01,
       WA_MM03 TYPE TY_MM01.

DATA : IT_MM04 TYPE TABLE OF TY_MM01,
       WA_MM04 TYPE TY_MM01.

DATA : IT_MMC4 TYPE TABLE OF TY_MM01,
       WA_MMC4 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,
      wa_sortinfo TYPE slis_sortinfo_alv,
      x_layout     TYPE slis_layout_alv,
      y_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.

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

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.

*  Check In Uplad File Have Same Component dan Date
DATA : DG_MATNR TYPE MATNR,
       DG_DATUV TYPE DATUV,
       DG_IDNRK TYPE IDNRK.

FIELD-SYMBOLS: <fs>.

DATA: DG_DATUVF TYPE SY-DATUM,
      DG_DATUVL TYPE SY-DATUM.

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 Z_DID_SD_COM_TMP WITH p_pdirp EQ pdirp
                            WITH psavep EQ p_psavep
      AND RETURN.
    STOP.
  ENDIF.

  IF RB_DWN = 'X'.
    SUBMIT Z_DID_SD_DWN_COM WITH p_pdirp EQ pdirp
                            WITH psavep = 'BOM 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-IDNRK TO UPPER CASE.

    SELECT SINGLE STLNR FROM MAST INTO WA_MM01-STLNR
                       WHERE MATNR EQ WA_MM01-MATNR.

    IF SY-SUBRC EQ 0.
       IF WA_MM01-ALTBOM IS INITIAL.
        WA_MM01-EXIST = 'N'.
        WA_MM01-STATUS = 'New BOM-Component Material'.
        WA_MM01-TRF_LIGHT =  '2'.
       ENDIF.
    ELSE. "IF SY-SUBRC NE 0.
      WA_MM01-EXIST = 'N'.
      WA_MM01-STATUS = 'New BOM-Component Material'.
      WA_MM01-TRF_LIGHT =  '2'.
    ENDIF.

    SELECT SINGLE MATNR FROM MARA INTO MARA-MATNR
          WHERE MATNR EQ WA_MM01-MATNR
            AND MTART EQ 'ZBOM'
            AND MEINS EQ 'SET'.

    IF SY-SUBRC NE 0.
      WA_MM01-EXIST = 'F'.
      WA_MM01-STATUS = 'Not BOM Material'.
    ENDIF.

    CLEAR MARA.
    SELECT SINGLE MAKTX FROM MAKT INTO WA_MM01-MAKTX
                WHERE MATNR EQ WA_MM01-IDNRK.

    SELECT SINGLE MEINS FROM MARA INTO WA_MM01-MEINS
           WHERE MATNR EQ WA_MM01-IDNRK.

    IF SY-SUBRC NE 0.

      IF WA_MM01-EXIST IS NOT INITIAL.
        WA_MM01-EXIST = 'F'.
        WA_MM01-STATUS = 'Bom or Material Does not Exist'.
      ELSE.
        WA_MM01-EXIST = 'F'.
        WA_MM01-STATUS = 'Material Does not Exist'.
      ENDIF.
    ENDIF.


    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.


    IF WA_MM01-DATUV LT SY-DATUM.
      IF WA_MM01-EXIST IS NOT INITIAL.
        WA_MM01-EXIST = 'F'.
        CONCATENATE WA_MM01-STATUS 'Valid From Can not Back Date' INTO WA_MM01-STATUS SEPARATED BY ','.
      ELSE.
        WA_MM01-EXIST = 'F'.
        WA_MM01-STATUS = 'Valid From Can not Back Date'.
      ENDIF.
    ENDIF.

    CONCATENATE '0' WA_MM01-ALTBOM INTO WA_MM01-ALTBOM.

    MODIFY IT_MM01 FROM WA_MM01.
  ENDLOOP.

  DATA: ALTEBOOM(2).

*    Compare BOM have Component or Not .
  SORT IT_MAT BY MATNR.
  SORT IT_MM01 BY MATNR. .
  LOOP AT IT_MM01 INTO WA_MM01 WHERE EXIST EQ SPACE.

    CLEAR ALTEBOOM.

    AT NEW MATNR.
      READ TABLE IT_MM01 INTO WA_MM01 INDEX SY-TABIX.

      WA_MM01-WERKS = '1000'.
      WA_MM01-STLAN = '5'.
      ALTEBOOM = WA_MM01-ALTBOM.

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


      IF T_STPO_READ[] IS NOT INITIAL.
        LOOP AT T_STPO_READ.
          MOVE-CORRESPONDING T_STPO_READ TO T_STPO_DATA.
          APPEND T_STPO_DATA.
          CLEAR: T_STPO_DATA,T_STPO_READ.
        ENDLOOP.
      ENDIF.
    ENDAT.
    MODIFY IT_MM01 FROM WA_MM01.
  ENDLOOP.

  SELECT * FROM STKO INTO CORRESPONDING FIELDS OF TABLE IT_BOM
   FOR ALL ENTRIES IN T_STPO_DATA
   WHERE STLNR EQ T_STPO_DATA-BOM_NO.

  SORT IT_BOM BY STLNR STLAL DESCENDING.
  DELETE ADJACENT DUPLICATES FROM IT_BOM COMPARING STLNR.

  IF T_STPO_DATA[] IS NOT INITIAL.
    CLEAR T_STPO_DATA.
    SORT IT_MM01 BY STLNR MATNR IDNRK.
    SORT T_STPO_DATA BY BOM_NO COMPONENT.
    LOOP AT IT_MM01 INTO WA_MM01 WHERE EXIST EQ SPACE.
      READ TABLE T_STPO_DATA WITH KEY BOM_NO = WA_MM01-STLNR
                                   COMPONENT = WA_MM01-IDNRK BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        IF WA_MM01-IDNRK = T_STPO_DATA-COMPONENT.
          WA_MM01-EXIST = 'D'.
          WA_MM01-STATUS = 'Already Exist, Will be deleted'.
          WA_MM01-TRF_LIGHT =  '2'.
          MOVE-CORRESPONDING WA_MM01 TO WA_MM04.
          APPEND WA_MM04 TO IT_MM04.
        ENDIF.
      ELSE.
        IF WA_MM01-DATUV LT SY-DATUM.
          WA_MM01-EXIST = 'F'.
          WA_MM01-STATUS = 'Valid From Cannot Back Date'.
          WA_MM01-MSGE = 'Fail To Process'.
          WA_MM01-TRF_LIGHT = '1'.
        ELSE.
          WA_MM01-STATUS = 'Add BOM-Component Material'.
          WA_MM01-EXIST  = 'C'.  "Change to Add
          WA_MM01-TRF_LIGHT = '2'.
          MOVE-CORRESPONDING WA_MM01 TO WA_MM02.
          APPEND WA_MM02 TO IT_MM02.
        ENDIF.
      ENDIF.
      MODIFY IT_MM01 FROM WA_MM01.
    ENDLOOP.
  ENDIF.


* Collect For Status Fail
  SORT IT_MM01 BY  STATUS MATNR IDNRK.
  LOOP AT  IT_MM01 INTO WA_MM01 WHERE EXIST = 'F'.
    WA_MM01-MSGE = 'Fail To Process'.
    WA_MM01-TRF_LIGHT = '1'.
    WA_MM01-STATUS = 'Can Not Process'.
    MOVE-CORRESPONDING WA_MM01 TO WA_MMXX.
    APPEND WA_MMXX TO IT_MMXX.
  ENDLOOP.

***************
  SORT IT_MM01 BY MATNR POSNR EXIST IDNRK.
*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.

ENDFORM.                    " BINT
*&---------------------------------------------------------------------*
*&      Form  MODIFY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_DATA.
  REFRESH IT_MAT.
  SELECT MAST~MATNR MAST~WERKS  MAST~STLAN MAST~STLNR MAST~STLAL  MAST~ANDAT
           STPO~STLKN STPO~DATUV IDNRK STPO~POSNR STPO~MEINS STPO~MENGE
           MAKT~MAKTX
       INTO CORRESPONDING FIELDS OF TABLE IT_MAT
       FROM MAST
       INNER JOIN STPO AS STPO ON STPO~STLNR = MAST~STLNR
       INNER JOIN MAKT AS MAKT ON MAKT~MATNR = STPO~IDNRK
      FOR ALL ENTRIES IN IT_MMC1
       WHERE MAST~MATNR EQ IT_MMC1-MATNR
        AND STPO~IDNRK EQ IT_MMC1-IDNRK.

  IF IT_MAT IS NOT INITIAL.
    SORT IT_MAT BY MATNR IDNRK.
    SORT IT_MMC1 BY MATNR IDNRK.
    LOOP AT IT_MMC1 INTO WA_MMC1 WHERE EXIST = 'N'.
      READ TABLE IT_MAT INTO WA_MAT WITH KEY MATNR = WA_MMC1-MATNR
                                             IDNRK = WA_MMC1-IDNRK BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        WA_MMC1-MSGE = 'Bom Component Create'.
        WA_MMC1-POSNR = WA_MAT-POSNR.
        WA_MMC1-MEINS = WA_MAT-MEINS.
        WA_MMC1-MAKTX = WA_MAT-MAKTX.
        WA_MMC1-DATUV = WA_MAT-DATUV.
        WA_MMC1-TRF_LIGHT = '3'.  "Green
      ENDIF.
      MODIFY IT_MMC1 FROM WA_MMC1.
      MOVE-CORRESPONDING WA_MMC1 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 'MATNR' '' 'Material Bom' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'POSNR' '' 'LIne Item' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'IDNRK' '' 'Material Component' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'MAKTX' '' 'Material Description' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'MENGE' '' 'Quantity' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'MEINS' '' 'Base Unit of Measure' '' 'L' ''  'CHAR' '' '' .
  f_fldcat2 'DATUV' '' 'Valid From' '' '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  MODIFY_MM02
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_MM02 .

  REFRESH IT_MAT.
  IF IT_MMC2 IS NOT INITIAL.
    SELECT MAST~MATNR MAST~WERKS  MAST~STLAN MAST~STLNR MAST~STLAL  MAST~ANDAT
             STPO~STLKN STPO~DATUV IDNRK STPO~POSNR STPO~MEINS STPO~MENGE
             MAKT~MAKTX
         INTO CORRESPONDING FIELDS OF TABLE IT_MAT
         FROM MAST
         INNER JOIN STPO AS STPO ON STPO~STLNR = MAST~STLNR
         INNER JOIN MAKT AS MAKT ON MAKT~MATNR = STPO~IDNRK
        FOR ALL ENTRIES IN IT_MMC2
         WHERE MAST~MATNR EQ IT_MMC2-MATNR
          AND STPO~IDNRK EQ IT_MMC2-IDNRK.
  ENDIF.



  IF IT_MAT IS NOT INITIAL.
    SORT IT_MAT BY MATNR IDNRK.
    SORT IT_MMC2 BY MATNR IDNRK.
    LOOP AT IT_MMC2 INTO WA_MMC2.
      READ TABLE IT_MAT INTO WA_MAT WITH KEY MATNR = WA_MMC2-MATNR
                                             IDNRK = WA_MMC2-IDNRK BINARY SEARCH.

      IF SY-SUBRC EQ 0.
        WA_MMC2-MSGE = 'Add Bom Component Success'.
        WA_MMC2-POSNR = WA_MAT-POSNR.
        WA_MMC2-MEINS = WA_MAT-MEINS.
        WA_MMC2-MAKTX = WA_MAT-MAKTX.
        WA_MMC2-DATUV = WA_MAT-DATUV.
        WA_MMC2-TRF_LIGHT = '3'.  "Green
      ELSE.
        WA_MMC2-MSGE = 'Bom Component Fail Change'.
        WA_MMC2-TRF_LIGHT = '1'.
      ENDIF.
      MODIFY IT_MMC2 FROM WA_MMC2.
      MOVE-CORRESPONDING WA_MMC2 TO WA_MMXX.
      APPEND WA_MMXX TO IT_MMXX.
    ENDLOOP.
  ENDIF.


  LOOP AT IT_MM03 INTO WA_MM03 WHERE EXIST EQ 'F'.
    WA_MM03-MSGE = 'Bom Component Fail Change'.
    WA_MM03-TRF_LIGHT = '1'.
    MODIFY IT_MM03 FROM WA_MM03.
    MOVE-CORRESPONDING WA_MM03 TO WA_MMXX.
    APPEND WA_MMXX TO IT_MMXX.
  ENDLOOP.

ENDFORM.                    " MODIFY_MM02
*&---------------------------------------------------------------------*
*&      Form  PROS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROS_DATA.

*  Add with New Bom and New Component
  IF IT_MM01[] IS NOT INITIAL.
*  Delete Component are Change
    DELETE IT_MM01 WHERE EXIST = 'C'  OR EXIST = 'F'.

*  Check New Component one Bom Have Different Valid From Make to Valid From
    CLEAR DG_DATUV.
    SORT IT_MM01 BY MATNR DATUV.
    LOOP AT IT_MM01 INTO WA_MM01.
      AT NEW MATNR.
        READ TABLE IT_MM01 INTO WA_MM01 INDEX SY-TABIX.
        DG_DATUV = WA_MM01-DATUV.
      ENDAT.
      WA_MM01-DATUV = DG_DATUV.
      MODIFY IT_MM01 FROM WA_MM01.
    ENDLOOP.

    REFRESH IT_MMC1.
    IT_MMC1 = IT_MM01.

    SORT IT_MM01 BY MATNR.
    DELETE ADJACENT DUPLICATES FROM IT_MM01 COMPARING MATNR DATUV.

    SORT IT_MM01 BY MATNR.
    SORT IT_MMC1 BY MATNR IDNRK.
    LOOP AT IT_MM01 INTO WA_MM01  WHERE EXIST = 'N'.
      perform bdc_dynpro      using 'SAPLCSDI' '0100'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29N-DATUV'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'RC29N-MATNR'
                                    WA_MM01-MATNR.
      perform bdc_field       using 'RC29N-WERKS'
                                    '1000'.
      perform bdc_field       using 'RC29N-STLAN'
                                    '5'.
      perform bdc_field       using 'RC29N-DATUV'
                                    WA_MM01-DATUVC.
      perform bdc_dynpro      using 'SAPLCSDI' '0110'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'RC29K-BMENG'
*                                     WA_MM01-STLAL.
                                    '1'.
      perform bdc_field       using 'RC29K-STLST'
                                    '1'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29K-EXSTL'.
      perform bdc_dynpro      using 'SAPLCSDI' '0111'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29K-LABOR'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.

      MOVE 1 TO IDX.
      CLEAR: WA_MMC1.
      SORT IT_MMC1 BY MATNR IDNRK.
      LOOP AT IT_MMC1 INTO WA_MMC1 WHERE MATNR = WA_MM01-MATNR.

        perform bdc_dynpro      using 'SAPLCSDI' '0140'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RC29P-IDNRK(01)'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.

        CONCATENATE 'RC29P-IDNRK('IDX')' INTO FNAM.
        perform bdc_field       using  FNAM
                                WA_MMC1-IDNRK.

        CONCATENATE 'RC29P-MENGE('IDX')' INTO FNAM.
        perform bdc_field       using  FNAM
                               WA_MMC1-MENGE.


        CONCATENATE 'RC29P-POSTP('IDX')' INTO FNAM.
        perform bdc_field       using  FNAM
                                'L'.

        perform bdc_dynpro      using 'SAPLCSDI' '0130'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
        perform bdc_dynpro      using 'SAPLCSDI' '0131'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
        IDX = IDX + 1.
      ENDLOOP.
      perform bdc_dynpro      using 'SAPLCSDI' '0140'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29P-POSNR(01)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=FCBU'.
      perform bdc_transaction using 'CS01'.
    ENDLOOP.
  ENDIF.



*  Add Component with Exist Component
  IF IT_MM02[] IS NOT INITIAL.

    REFRESH IT_MM03.
    IT_MM03 = IT_MM02.

    SORT IT_MM02 BY MATNR IDNRK EXIST.
    REFRESH: IT_MMC2.
    IT_MMC2 = IT_MM02.

    SORT IT_MM02 BY MATNR.
    DELETE ADJACENT DUPLICATES FROM IT_MM02 COMPARING MATNR.

    SORT IT_MM02 BY MATNR.
    SORT IT_MMC2 BY MATNR DATUV IDNRK.
    LOOP AT IT_MM02 INTO WA_MM02 WHERE EXIST = 'C'.
      perform bdc_dynpro      using 'SAPLCSDI' '0100'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29N-DATUV'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'RC29N-MATNR'
                                    WA_MM02-MATNR.
      perform bdc_field       using 'RC29N-WERKS'
                                    '1000'.
      perform bdc_field       using 'RC29N-STLAN'
                                    '5'.
      perform bdc_field       using 'RC29N-DATUV'
                                    WA_MM02-DATUVC.
      perform bdc_field       using 'RC29N-STLAL'
                                    WA_MM02-ALTBOM.

      perform bdc_dynpro      using 'SAPLCSDI' '0150'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29P-POSNR(01)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=FCNP'.

      MOVE 2 TO IDX.
      CLEAR: WA_MMC2.
      SORT IT_MMC2 BY MATNR IDNRK.
      LOOP AT IT_MMC2 INTO WA_MMC2 WHERE MATNR = WA_MM02-MATNR.

        perform bdc_dynpro      using 'SAPLCSDI' '0140'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RC29P-IDNRK(01)'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.

        CONCATENATE 'RC29P-IDNRK('IDX')' INTO FNAM.
        perform bdc_field       using  FNAM
                                WA_MMC2-IDNRK.


        CONCATENATE 'RC29P-MENGE('IDX')' INTO FNAM.
        perform bdc_field       using  FNAM
                               WA_MMC2-MENGE.

        CONCATENATE 'RC29P-POSTP('IDX')' INTO FNAM.
        perform bdc_field       using  FNAM
                                'L'.

        perform bdc_dynpro      using 'SAPLCSDI' '0130'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
        perform bdc_dynpro      using 'SAPLCSDI' '0131'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '/00'.
        IDX = IDX + 1.
      ENDLOOP.
      perform bdc_dynpro      using 'SAPLCSDI' '0140'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29P-POSNR(01)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=FCBU'.
      perform bdc_transaction using 'CS02'.
    ENDLOOP.
  ENDIF.

*  ****************************************


*  Delete  Component
  IF IT_MM04[] IS NOT INITIAL.

    REFRESH IT_MM03.
    IT_MM03 = IT_MM04.

    SORT IT_MM04 BY MATNR IDNRK EXIST.
    REFRESH: IT_MMC4.
    IT_MMC4 = IT_MM04.

    SORT IT_MM04 BY MATNR.
    DELETE ADJACENT DUPLICATES FROM IT_MM04 COMPARING MATNR.

    SORT IT_MM04 BY MATNR.
    SORT IT_MMC4 BY MATNR DATUV IDNRK.
    LOOP AT IT_MM04 INTO WA_MM04 WHERE EXIST = 'D'.
      perform bdc_dynpro      using 'SAPLCSDI' '0100'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29N-DATUV'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      perform bdc_field       using 'RC29N-MATNR'
                                    WA_MM04-MATNR.
      perform bdc_field       using 'RC29N-WERKS'
                                    '1000'.
      perform bdc_field       using 'RC29N-STLAN'
                                    '5'.
      perform bdc_field       using 'RC29N-DATUV'
                                    WA_MM04-DATUVC.
      perform bdc_field       using 'RC29N-STLAL'
                                    WA_MM04-ALTBOM.


      CLEAR: WA_MMC4.
      SORT IT_MMC4 BY MATNR IDNRK.
      LOOP AT IT_MMC4 INTO WA_MMC4 WHERE MATNR = WA_MM04-MATNR.
        perform bdc_dynpro      using 'SAPLCSDI' '0150'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RC29P-POSNR(01)'.

        perform bdc_field       using 'BDC_OKCODE'
                                     '=SETP'.
        perform bdc_dynpro      using 'SAPLCSDI' '0708'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=CLWI'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RC29P-SELID'.
        perform bdc_field       using 'RC29P-SELID'
                                      WA_MMC4-IDNRK. "'BRC1C62'.
        perform bdc_dynpro      using 'SAPLCSDI' '0150'.
        perform bdc_field       using 'BDC_CURSOR'
                                      'RC29P-AUSKZ(01)'.
        perform bdc_field       using 'RC29P-AUSKZ(01)'
                                      'X'.
        perform bdc_field       using 'BDC_OKCODE'
                                      '=FCDL'.
      ENDLOOP.

      perform bdc_dynpro      using 'SAPLCSDI' '0150'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RC29P-POSNR(01)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=FCBU'.
      perform bdc_transaction using 'CS02'.
    ENDLOOP.
  ENDIF.

* ******************************************

  MESSAGE ' ' TYPE 'S'.

*  Process Data
  IF IT_MM01[] IS NOT INITIAL.
    PERFORM Modify_data.
  ENDIF.

  IF IT_MM02[] IS NOT INITIAL.
    PERFORM MODIFY_MM02.
  ENDIF.

  IF IT_MM04[] IS NOT INITIAL.
    PERFORM MODIFY_MM03.
  ENDIF.

*Check Create or Update, Success or Not
  LOOP AT IT_MMXX INTO WA_MMXX.
    SELECT SINGLE MATNR
    FROM MARA INTO MARA-MATNR
    WHERE MATNR EQ WA_MMXX-MATNR.
    IF SY-SUBRC NE 0.
      WA_MMXX-TRF_LIGHT = '1'.
    ENDIF.
    MODIFY IT_MMXX FROM WA_MMXX.
  ENDLOOP.

  SORT IT_MMXX BY MATNR POSNR IDNRK.

*  Save to table
  PERFORM SAVE_TABLE.
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'.
  x_layout-lights_fieldname  = 'TRF_LIGHT'.
  x_layout-lights_tabname    = 'I_LIGHTS'.

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 'IDNRK' '' 'Material Component' '' 'L' ''  'CHAR' '' '' .
  f_fldcat 'MENGE' '' 'Quantity' '' 'L' ''  'CHAR' '' '' .
  f_fldcat 'DATUV' '' 'Valid From' '' 'L' ''  'DATS' '' '' .
  f_fldcat 'ALTBOM' '' 'Alternative Bom' '' 'L' ''  'CHAR' '' '' .
  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 '&BACK'.
      SUBMIT Z_DID_SD_CRT_COM via SELECTION-SCREEN.
  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 = 'BOM-COMP 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.
    ELSE.
      IF screen-name = 'PDIRP' OR  screen-name = 'P_PSAVEP'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR: PDIRP,P_PSAVEP.
    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_MMXX INTO WA_MMXX WHERE TRF_LIGHT NE '1'.
    ZTB_BOM_UPL_LOG-MATNR = WA_MMXX-MATNR.
    ZTB_BOM_UPL_LOG-CNTRL = LINE_NO.
    ZTB_BOM_UPL_LOG-IDNRK = WA_MMXX-IDNRK.
    ZTB_BOM_UPL_LOG-MENGE = WA_MMXX-MENGE.
    ZTB_BOM_UPL_LOG-MEINS = WA_MMXX-MEINS.
    ZTB_BOM_UPL_LOG-DATUV = WA_MMXX-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  MODIFY_MM03
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_MM03 .
  REFRESH IT_MAT.
  IF IT_MMC4 IS NOT INITIAL.
    SELECT MAST~MATNR MAST~WERKS  MAST~STLAN MAST~STLNR MAST~STLAL  MAST~ANDAT
             STPO~STLKN STPO~DATUV IDNRK STPO~POSNR STPO~MEINS STPO~MENGE
             MAKT~MAKTX
         INTO CORRESPONDING FIELDS OF TABLE IT_MAT
         FROM MAST
         INNER JOIN STPO AS STPO ON STPO~STLNR = MAST~STLNR
         INNER JOIN MAKT AS MAKT ON MAKT~MATNR = STPO~IDNRK
        FOR ALL ENTRIES IN IT_MMC4
         WHERE MAST~MATNR EQ IT_MMC4-MATNR
          AND STPO~IDNRK EQ IT_MMC4-IDNRK
          AND MAST~STLAL EQ IT_MMC4-ALTBOM.
  ENDIF.
    SORT IT_MMC4 BY MATNR IDNRK.
    LOOP AT IT_MMC4 INTO WA_MMC4.
      WA_MMC4-MSGE = 'Delete Bom Component Completed'.
      WA_MMC4-TRF_LIGHT = '3'.  "Green
      MODIFY IT_MMC4 FROM WA_MMC4.
      MOVE-CORRESPONDING WA_MMC4 TO WA_MMXX.
      APPEND WA_MMXX TO IT_MMXX.
    ENDLOOP.
ENDFORM.                    " MODIFY_MM03

No comments:

Post a Comment

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...