REPORT  zsr_test.

TABLES: mara, marc, mard, makt.

TYPE-POOLS: slis.

TYPES: BEGIN OF ty_mara,
        matnr TYPE mara-matnr,
        ersda TYPE mara-ersda,
        ernam TYPE mara-ernam,
        mtart TYPE mara-mtart,
       END OF ty_mara,

       BEGIN OF ty_marc,
         matnr TYPE marc-matnr,
         werks TYPE marc-werks,
         xchar TYPE marc-xchar,
       END OF ty_marc,

       BEGIN OF ty_mard,
         matnr TYPE mard-matnr,
         werks TYPE mard-werks,
         lgort TYPE mard-lgort,
       END OF ty_mard,

       BEGIN OF ty_makt,
         matnr TYPE makt-matnr,
         spras TYPE makt-spras,
         maktx TYPE makt-maktx,
       END OF ty_makt,

       BEGIN OF ty_out,
        sel,
        matnr TYPE mara-matnr,
        werks TYPE marc-werks,
        lgort TYPE mard-lgort,
        mtart TYPE mara-mtart,
        ersda TYPE mara-ersda,
        ernam TYPE mara-ernam,
        xchar TYPE marc-xchar,
        maktx TYPE makt-maktx,
       END OF ty_out.

DATA: wa_mara TYPE ty_mara,
      wa_marc TYPE ty_marc,
      wa_mard TYPE ty_mard,
      wa_makt TYPE ty_makt,
      wa_out  TYPE ty_out,
      it_mara TYPE STANDARD TABLE OF ty_mara,
      it_marc TYPE STANDARD TABLE OF ty_marc,
      it_mard TYPE STANDARD TABLE OF ty_mard,
      it_makt TYPE STANDARD TABLE OF ty_makt,
      it_out  TYPE STANDARD TABLE OF ty_out.

DATA: wa_fcat_out TYPE slis_fieldcat_alv,
      it_fcat_out TYPE slis_t_fieldcat_alv,
      wa_layout   TYPE slis_layout_alv,
      wa_top      TYPE slis_listheader,
      it_top      TYPE slis_t_listheader.

DATA: v_prog TYPE sy-repid,
      v_name TYPE sy-uname,
      v_date TYPE char12.

INITIALIZATION.
  v_prog = sy-repid.
  v_name = sy-uname.

  SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
  PARAMETERS       p_mtart TYPE mtart OBLIGATORY.
  SELECT-OPTIONS   s_matnr FOR mara-matnr.
  SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
  PERFORM get_material.
  PERFORM get_plant.
  PERFORM get_storage.
  PERFORM get_description.
  PERFORM prepare_output.

END-OF-SELECTION.
  PERFORM prepare_fieldcat.
  PERFORM prepare_layout.
  PERFORM alv_list_display.

TOP-OF-PAGE.
  PERFORM top_of_page.
*&---------------------------------------------------------------------*
*&      Form  GET_MATERIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_material .

  SELECT matnr ersda ernam mtart
    FROM mara INTO TABLE it_mara
    WHERE matnr IN s_matnr
      AND mtart =  p_mtart.

  IF sy-subrc = 0.
    SORT it_mara BY matnr.
  ELSE.
    MESSAGE 'Material doesn''t exist' TYPE 'I'.
  ENDIF.

ENDFORM.                    " GET_MATERIAL
*&---------------------------------------------------------------------*
*&      Form  GET_PLANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_plant .

  IF it_mara IS NOT INITIAL.
    SELECT matnr werks xchar
      FROM marc INTO TABLE it_marc
      FOR ALL ENTRIES IN it_mara
      WHERE matnr = it_mara-matnr.

    IF sy-subrc = 0.
      SORT it_marc BY matnr.
    ENDIF.
  ENDIF.

ENDFORM.                    " GET_PLANT
*&---------------------------------------------------------------------*
*&      Form  GET_STORAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_storage .

  IF it_marc IS NOT INITIAL.
    SELECT matnr werks lgort
      FROM mard INTO TABLE it_mard
      FOR ALL ENTRIES IN it_marc
      WHERE matnr = it_marc-matnr
        AND werks = it_marc-werks.

    IF sy-subrc = 0.
      SORT it_mard BY matnr.
    ENDIF.
  ENDIF.

ENDFORM.                    " GET_STORAGE
*&---------------------------------------------------------------------*
*&      Form  GET_DESCRIPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_description .

  IF it_mara IS NOT INITIAL.
    SELECT matnr spras maktx
      FROM makt INTO TABLE it_makt
      FOR ALL ENTRIES IN it_mara
      WHERE matnr = it_mara-matnr
        AND spras = sy-langu.

    IF sy-subrc = 0.
      SORT it_makt BY matnr.
    ENDIF.
  ENDIF.

ENDFORM.                    " GET_DESCRIPTION
*&---------------------------------------------------------------------*
*&      Form  PREPARE_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prepare_output .

  IF    it_mara IS NOT INITIAL
    AND it_marc IS NOT INITIAL
    AND it_mard IS NOT INITIAL.

    LOOP AT it_mara INTO wa_mara.
      wa_out-matnr = wa_mara-matnr.
      wa_out-ersda = wa_mara-ersda.
      wa_out-ernam = wa_mara-ernam.
      wa_out-mtart = wa_mara-mtart.

      READ TABLE it_makt INTO wa_makt
      WITH KEY matnr = wa_mara-matnr BINARY SEARCH.
      IF sy-subrc = 0.
        wa_out-maktx = wa_makt-maktx.
      ENDIF.

      LOOP AT it_marc INTO wa_marc
        WHERE matnr = wa_mara-matnr.
        wa_out-werks = wa_marc-werks.
        wa_out-xchar = wa_marc-xchar.

        LOOP AT it_mard INTO wa_mard
          WHERE matnr = wa_marc-matnr
            AND werks = wa_marc-werks.
          wa_out-lgort = wa_mard-lgort.

          APPEND wa_out TO it_out.
          CLEAR: wa_out, wa_mara, wa_makt.

          CLEAR wa_mard.
        ENDLOOP.
        CLEAR wa_marc.
      ENDLOOP.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " PREPARE_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prepare_fieldcat .

  CLEAR wa_fcat_out.
  REFRESH it_fcat_out.

  IF it_out IS NOT INITIAL.
    DATA: lv_col TYPE i VALUE 0.

    lv_col                = 1 + lv_col.
    wa_fcat_out-col_pos   = lv_col.
    wa_fcat_out-fieldname = 'MATNR'.
    wa_fcat_out-tabname   = 'IT_OUT'.
    wa_fcat_out-seltext_l = 'Material No.'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                = 1 + lv_col.
    wa_fcat_out-col_pos   = lv_col.
    wa_fcat_out-fieldname = 'WERKS'.
    wa_fcat_out-tabname   = 'IT_OUT'.
    wa_fcat_out-seltext_l = 'Plant'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                = 1 + lv_col.
    wa_fcat_out-col_pos   = lv_col.
    wa_fcat_out-fieldname = 'LGORT'.
    wa_fcat_out-tabname   = 'IT_OUT'.
    wa_fcat_out-seltext_l = 'Storage Location'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                = 1 + lv_col.
    wa_fcat_out-col_pos   = lv_col.
    wa_fcat_out-fieldname = 'MTART'.
    wa_fcat_out-tabname   = 'IT_OUT'.
    wa_fcat_out-seltext_l = 'Material Type'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                = 1 + lv_col.
    wa_fcat_out-col_pos   = lv_col.
    wa_fcat_out-fieldname = 'ERSDA'.
    wa_fcat_out-tabname   = 'IT_OUT'.
    wa_fcat_out-seltext_l = 'Date'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                = 1 + lv_col.
    wa_fcat_out-col_pos   = lv_col.
    wa_fcat_out-fieldname = 'ERNAM'.
    wa_fcat_out-tabname   = 'IT_OUT'.
    wa_fcat_out-seltext_l = 'Name'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                = 1 + lv_col.
    wa_fcat_out-col_pos   = lv_col.
    wa_fcat_out-fieldname = 'XCHAR'.
    wa_fcat_out-tabname   = 'IT_OUT'.
    wa_fcat_out-seltext_l = 'Batch No.'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.

    lv_col                = 1 + lv_col.
    wa_fcat_out-col_pos   = lv_col.
    wa_fcat_out-fieldname = 'MAKTX'.
    wa_fcat_out-tabname   = 'IT_OUT'.
    wa_fcat_out-seltext_l = 'Material Description'.
    APPEND wa_fcat_out TO it_fcat_out.
    CLEAR wa_fcat_out.
  ENDIF.

ENDFORM.                    " PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  ALV_LIST_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_list_display .

  IF    it_out IS NOT INITIAL
    AND it_fcat_out IS NOT INITIAL.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
*       I_INTERFACE_CHECK                 = ' '
*       I_BYPASSING_BUFFER                = ' '
*       I_BUFFER_ACTIVE                   = ' '
        i_callback_program                = v_prog
*       I_CALLBACK_PF_STATUS_SET          = ' '
*       I_CALLBACK_USER_COMMAND           = ' '
        i_callback_top_of_page            = 'TOP_OF_PAGE'
*       I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*       I_CALLBACK_HTML_END_OF_LIST       = ' '
*       I_STRUCTURE_NAME                  =
*       I_BACKGROUND_ID                   = ' '
*       I_GRID_TITLE                      =
*       I_GRID_SETTINGS                   =
        is_layout                         = wa_layout
        it_fieldcat                       = it_fcat_out
*       IT_EXCLUDING                      =
*       IT_SPECIAL_GROUPS                 =
*       IT_SORT                           =
*       IT_FILTER                         =
*       IS_SEL_HIDE                       =
*       I_DEFAULT                         = 'X'
*       I_SAVE                            = ' '
*       IS_VARIANT                        =
*       it_events                         = it_event
*       IT_EVENT_EXIT                     =
*       IS_PRINT                          =
*       IS_REPREP_ID                      =
*       I_SCREEN_START_COLUMN             = 0
*       I_SCREEN_START_LINE               = 0
*       I_SCREEN_END_COLUMN               = 0
*       I_SCREEN_END_LINE                 = 0
*       I_HTML_HEIGHT_TOP                 = 0
*       I_HTML_HEIGHT_END                 = 0
*       IT_ALV_GRAPHICS                   =
*       IT_HYPERLINK                      =
*       IT_ADD_FIELDCAT                   =
*       IT_EXCEPT_QINFO                   =
*       IR_SALV_FULLSCREEN_ADAPTER        =
*     IMPORTING
*       E_EXIT_CAUSED_BY_CALLER           =
*       ES_EXIT_CAUSED_BY_USER            =
      TABLES
        t_outtab                          = it_out
      EXCEPTIONS
        program_error                     = 1
        OTHERS                            = 2.
  ENDIF.

ENDFORM.                    " ALV_LIST_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM top_of_page .

  CLEAR wa_top.
  REFRESH it_top.

  CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
    EXPORTING
      date_internal            = sy-datum
    IMPORTING
      date_external            = v_date
    EXCEPTIONS
      date_internal_is_invalid = 1
      OTHERS                   = 2.

  wa_top-typ = 'H'.
  wa_top-info = 'Material Details Report'.
  APPEND wa_top TO it_top.
  CLEAR wa_top.

  wa_top-typ = 'S'.
  wa_top-info = 'Report: '.
  CONCATENATE wa_top-info v_prog
  INTO wa_top-info.
  APPEND wa_top TO it_top.
  CLEAR wa_top.

  wa_top-typ = 'S'.
  wa_top-info = 'User Name: '.
  CONCATENATE wa_top-info v_name
  INTO wa_top-info.
  APPEND wa_top TO it_top.
  CLEAR wa_top.

  wa_top-typ = 'S'.
  wa_top-info = 'Date: '.
  CONCATENATE wa_top-info v_date
  INTO wa_top-info.
  APPEND wa_top TO it_top.
  CLEAR wa_top.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary       = it_top
*     I_LOGO                   =
*     I_END_OF_LIST_GRID       =
*     I_ALV_FORM               =
            .

ENDFORM.                    " TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prepare_layout .

  wa_layout-zebra = 'X'.
  wa_layout-colwidth_optimize = 'X'.
  wa_layout-box_fieldname = 'SEL'.


ENDFORM.                    " PREPARE_LAYOUT

Ekran Görüntüsü



















Serkan AKKAVAK
Bilgisayar Mühendisi
serkurumsal@yandex.com