Tuesday, 18 February 2020

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

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