메뉴 건너뛰기

SAP 한국 커뮤니티

REPORT Z15_24

가능 2025.09.22 01:21 조회 수 : 0

REPORT  z15_24.

DATA : gt_emplist LIKE zemplist OCCURS 0 WITH HEADER LINE.

DATA : con1_ref    TYPE REF TO    cl_gui_custom_container.
DATA : g_grid      TYPE REF TO    cl_gui_alv_grid.
DATA : gs_variant  TYPE disvariant.
DATA : gs_layout   TYPE lvc_s_layo.
DATA : gt_toolbar  TYPE ui_functions.
DATA : gt_sort     TYPE lvc_t_sort.
DATA : gt_fieldcat TYPE lvc_t_fcat.
DATA : gt_modified_rows TYPE STANDARD TABLE OF zemplist.

DATA : ok_code  TYPE sy-ucomm.

TYPE-POOLS: icon.
*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS : handle_toolbar
      FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING e_object e_interactive.

    METHODS : handle_command
      FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING e_ucomm.

    METHODS:
      handle_data_changed
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed.

ENDCLASS.                    "lcl_event_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_toolbar.

    DATA: ls_toolbar  TYPE stb_button.

    CLEAR ls_toolbar.
    ls_toolbar-butn_type = 3.
    APPEND ls_toolbar    TO e_object->mt_toolbar.

    CLEAR ls_toolbar.
    ls_toolbar-function  = 'RESH'.
    ls_toolbar-icon      = icon_refresh.
    ls_toolbar-quickinfo = 'Refresh'.
    ls_toolbar-text      = ' '.
    ls_toolbar-disabled  = ' '.
    APPEND ls_toolbar    TO e_object->mt_toolbar.

  ENDMETHOD.                    "handle_toolbar

  METHOD handle_command.
    DATA : l_scroll TYPE lvc_s_stbl.

    CASE e_ucomm.
      WHEN 'RESH'.
        SELECT *
          FROM zemplist
          INTO TABLE @gt_emplist.
        l_scroll-row = 'X'.
        l_scroll-col = 'X'.

        CALL METHOD g_grid->refresh_table_display
          EXPORTING
            i_soft_refresh = ''
            is_stable      = l_scroll.
    ENDCASE.
  ENDMETHOD.                    "handle_command

  METHOD handle_data_changed.
    DATA:
      ls_emplist TYPE zemplist,
      ls_outtab  LIKE LINE OF gt_emplist.

    FIELD-SYMBOLS: <fs> TYPE table.

    ASSIGN er_data_changed->mp_mod_rows->* TO <fs>.
    LOOP AT <fs> INTO ls_outtab.
      MOVE-CORRESPONDING ls_outtab TO ls_emplist.
      APPEND ls_emplist TO gt_modified_rows.
    ENDLOOP.
  ENDMETHOD.                    "handle_data_changed

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION


PARAMETERS: p_vari LIKE disvariant-variant.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
  gs_variant-report = sy-repid.
  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
      is_variant    = gs_variant
      i_save        = 'A'
    IMPORTING
      es_variant    = gs_variant
    EXCEPTIONS
      not_found     = 1
      program_error = 2
      OTHERS        = 3.

  IF sy-subrc EQ 0.
    p_vari = gs_variant-variant.
  ENDIF.

START-OF-SELECTION.
  SELECT *
    FROM zemplist
    INTO TABLE @gt_emplist.

  CALL SCREEN 100.


*&---------------------------------------------------------------------*
*&      Module  INIT_CON  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE init_con OUTPUT.
  IF con1_ref IS INITIAL.
    CREATE OBJECT con1_ref
      EXPORTING
        container_name = 'CON1'.

    CREATE OBJECT g_grid
      EXPORTING
        i_parent = con1_ref.


  ENDIF.


  gs_variant-report = sy-repid.
  gs_variant-username = sy-uname.

  PERFORM setting_layout CHANGING gs_layout.
  PERFORM setting_toolbar.
  PERFORM setting_sort.
  PERFORM getting_catalog.
  PERFORM setting_catalog.


  DATA :  event_receiver TYPE REF TO lcl_event_receiver.

*  CREATE OBJECT event_receiver.
*  SET HANDLER event_receiver->handle_data_changed FOR g_grid.
*
*  CALL METHOD g_grid->register_edit_event
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_modified.
*
*  CALL METHOD g_grid->register_edit_event
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_enter.

*



  CALL METHOD g_grid->set_table_for_first_display
    EXPORTING
*     i_structure_name     = 'SFLIGHT'
      is_variant           = gs_variant
      i_save               = 'A'
      i_default            = ''
      is_layout            = gs_layout
      it_toolbar_excluding = gt_toolbar
    CHANGING
      it_outtab            = gt_emplist[]
      it_fieldcatalog      = gt_fieldcat
      it_sort              = gt_sort.



ENDMODULE.                 " INIT_CON  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT. " 5번 저장 이벤트

  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANC'.
      LEAVE TO SCREEN 0.
    WHEN 'SAVE'.
      DATA: l_valid TYPE c.
      CALL METHOD g_grid->check_changed_data
        IMPORTING
          e_valid = l_valid.

      IF l_valid IS NOT INITIAL.
        PERFORM update_database.
      ENDIF.

  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '100_STATUS'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  SETTING_LAYOUT
*&---------------------------------------------------------------------*
FORM setting_layout   CHANGING  p_layout TYPE lvc_s_layo.

  p_layout-cwidth_opt = 'X'.  "칼럼 길이 자동조절
  p_layout-grid_title = 'ALV Grid Edit Test'.
  "타이틀 바
  p_layout-sel_mode = 'B'.  "선택모드 : 멀티 선택 가능
  p_layout-zebra      = 'X'.  "Sripe 속성 지정
*  p_layout-edit = 'X'.
ENDFORM.                    " setting_layout
*&---------------------------------------------------------------------*
*&      Form  SETTING_TOOLBAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM setting_toolbar .
  DATA: l_exclude TYPE ui_func.

  l_exclude =  cl_gui_alv_grid=>mc_fc_save_variant.
  APPEND l_exclude TO gt_toolbar.

  l_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant.
  APPEND l_exclude TO gt_toolbar.

ENDFORM.                    " SETTING_TOOLBAR
*&---------------------------------------------------------------------*
*&      Form  SETTING_SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM setting_sort .
  DATA : ls_sort TYPE lvc_s_sort.

  ls_sort-spos = '1'.
  ls_sort-fieldname = 'EMPCD'.
  ls_sort-up = 'X'.
  ls_sort-subtot = 'X'.
  APPEND ls_sort TO gt_sort.

ENDFORM.                    " SETTING_SORT
*&---------------------------------------------------------------------*
*&      Form  SETTING_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM setting_catalog .
  DATA : ls_fieldcat TYPE lvc_s_fcat.

  LOOP AT gt_fieldcat INTO ls_fieldcat.

    IF ls_fieldcat-fieldname EQ 'PSTION'.
      ls_fieldcat-edit = 'X'.
      MODIFY gt_fieldcat FROM ls_fieldcat.
    ENDIF.

  ENDLOOP.

ENDFORM.                    " SETTING_CATALOG
*&---------------------------------------------------------------------*
*&      Form  GETTING_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM getting_catalog .

  DATA : lt_fieldcat TYPE kkblo_t_fieldcat.

  CALL FUNCTION 'K_KKB_FIELDCAT_MERGE'
    EXPORTING
      i_callback_program = sy-repid
      i_tabname          = 'GT_EMPLIST'
      i_inclname         = sy-repid
    CHANGING
      ct_fieldcat        = lt_fieldcat[].

  IF sy-subrc EQ 0.
    CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO'
      EXPORTING
        it_fieldcat_kkblo = lt_fieldcat[]
      IMPORTING
        et_fieldcat_lvc   = gt_fieldcat[].
  ENDIF.


ENDFORM.                    " GETTING_CATALO
*&---------------------------------------------------------------------*
*&      Form  UPDATE_DATABASE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM update_database .
  MODIFY zemplist FROM TABLE gt_modified_rows.
  IF sy-subrc EQ 0.
    MESSAGE 'SAVE OK' TYPE 'I'.
  ENDIF.
ENDFORM.                    " UPDATE_DATABASE






































*REPORT  z15_24.
*
*DATA : gt_sflight LIKE sflight OCCURS 0 with header line.
*
*DATA : con1_ref    TYPE REF TO    cl_gui_custom_container.
*DATA : g_grid      TYPE REF TO    cl_gui_alv_grid.
*DATA : gs_variant  TYPE disvariant.
*DATA : gs_layout   TYPE lvc_s_layo.
*DATA : gt_toolbar  TYPE ui_functions.
*DATA : gt_sort     TYPE lvc_t_sort.
*DATA : gt_modified_rows TYPE STANDARD TABLE OF sflight.
*DATA : gt_fieldcat TYPE lvc_t_fcat.
*DATA : ok_code  TYPE sy-ucomm.
*
*TYPE-POOLS: icon.
**----------------------------------------------------------------------
**
**       CLASS lcl_event_receiver DEFINITION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS lcl_event_receiver DEFINITION.
*   PUBLIC SECTION.
*    METHODS : handle_toolbar
*     FOR EVENT toolbar OF cl_gui_alv_grid
*     IMPORTING e_object e_interactive.
*
*    METHODS : handle_command
*     FOR EVENT user_command OF cl_gui_alv_grid
*     IMPORTING e_ucomm.
*
*    METHODS : handle_data_changed " 6번 클래스 정의 (for 이벤트 핸들러 메서드)
*     FOR EVENT  data_changed OF cl_gui_alv_grid
*     IMPORTING er_data_changed.
*ENDCLASS.                    "lcl_event_receiver DEFINITION
*
**----------------------------------------------------------------------
**
**       CLASS lcl_event_receiver IMPLEMENTATION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS lcl_event_receiver IMPLEMENTATION.
*  METHOD handle_toolbar.
*
*    DATA: ls_toolbar  TYPE stb_button.
*
*    CLEAR ls_toolbar.
*    ls_toolbar-butn_type = 3.
*    APPEND ls_toolbar    TO e_object->mt_toolbar.
*
*    CLEAR ls_toolbar.
*    ls_toolbar-function  = 'RESH'.
*    ls_toolbar-icon      = icon_refresh.
*    ls_toolbar-quickinfo = 'Refresh'.
*    ls_toolbar-text      = ' '.
*    ls_toolbar-disabled  = ' '.
*    APPEND ls_toolbar    TO e_object->mt_toolbar.
*
*  ENDMETHOD.                    "handle_toolbar
*
*  METHOD handle_command.
*    DATA : l_scroll TYPE lvc_s_stbl.
*
*     CASE e_ucomm.
*      WHEN 'RESH'.
*      SELECT * FROM sflight INTO TABLE gt_sflight.
*      l_scroll-row = 'X'.
*      l_scroll-col = 'X'.
*
*      CALL METHOD g_grid->refresh_table_display
*         EXPORTING
*          i_soft_refresh = ''
*          is_stable = l_scroll.
*     ENDCASE.
*  ENDMETHOD.                    "handle_command
*
*  METHOD handle_data_changed. "7번 클래스 구현
*    DATA : ls_sflight TYPE sflight,
*               ls_outtab LIKE LINE OF gt_sflight.
*    FIELD-SYMBOLS : <fs> TYPE table.
*    ASSIGN er_data_changed->mp_mod_rows->* TO <fs>.
*    LOOP AT <fs> INTO ls_outtab.
*      MOVE-CORRESPONDING ls_outtab TO ls_sflight.
*      APPEND ls_sflight TO gt_modified_rows.
*    ENDLOOP.
*
*  ENDMETHOD.                    "handle_data_changed
*
*ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
*
*
*PARAMETERS: p_vari LIKE disvariant-variant.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
*   gs_variant-report = sy-repid.
*   CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
*      EXPORTING
*       is_variant = gs_variant
*       i_save = 'A'
*      IMPORTING
*       es_variant = gs_variant
*      EXCEPTIONS
*       not_found = 1
*       program_error = 2
*       OTHERS = 3.
*
*  IF sy-subrc EQ 0.
*     p_vari = gs_variant-variant.
*  ENDIF.
*
*START-OF-SELECTION.
*
*  SELECT * FROM sflight
*       INTO TABLE gt_sflight  UP TO 100 ROWS.
*
*  CALL SCREEN 100.
*
*
**&---------------------------------------------------------------------
**
**&      Module  INIT_CON  OUTPUT
**&---------------------------------------------------------------------
**
**       text
**----------------------------------------------------------------------
**
*MODULE init_con OUTPUT.
*  IF con1_ref IS INITIAL.
*     CREATE OBJECT con1_ref
*      EXPORTING
*        container_name = 'CON1'.
*
*    CREATE OBJECT g_grid
*        EXPORTING
*         i_parent = con1_ref.
*
*
*  ENDIF.
*
*
*  gs_variant-report = sy-repid.
*  gs_variant-username = sy-uname.
*
*  PERFORM setting_layout CHANGING gs_layout.
*  PERFORM setting_toolbar.
*  PERFORM setting_sort.
*  PERFORM getting_catalog.
*  PERFORM setting_catalog.
*
*
*   DATA :  event_receiver TYPE REF TO lcl_event_receiver.
*
*  CREATE OBJECT event_receiver.
*SET HANDLER event_receiver->handle_data_changed FOR g_grid. "8번 이벤트 핸들러
*메서드 등록
*
*  CALL METHOD g_grid->register_edit_event "9번 이벤트 호출
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_modified.
*
*  CALL METHOD g_grid->register_edit_event "9번 이벤트 호출
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_enter. "
*
*
*  CALL METHOD g_grid->set_table_for_first_display
*     EXPORTING
**      i_structure_name = 'SFLIGHT'
*         is_variant = gs_variant
*        i_save = 'A'
*         i_default = ''
*         is_layout = gs_layout
*         it_toolbar_excluding = gt_toolbar
*     CHANGING
*        it_outtab = gt_sflight[]
*         it_fieldcatalog = gt_fieldcat
*         it_sort = gt_sort.
*
*
*
*ENDMODULE.                 " INIT_CON  OUTPUT
**&---------------------------------------------------------------------
**
**&      Module  USER_COMMAND_0100  INPUT
**&---------------------------------------------------------------------
**
**       text
**----------------------------------------------------------------------
**
*MODULE user_command_0100 INPUT.
*  CASE  sy-ucomm..
*    WHEN 'BACK' OR' EXIT' OR 'CANC'.
*      LEAVE TO SCREEN 0.
*    WHEN 'SAVE'.
*     DATA: l_valid TYPE c.
*      CALL METHOD g_grid->check_changed_data
*        IMPORTING
*          e_valid = l_valid.
*
*      IF l_valid IS NOT INITIAL.
*
*        PERFORM update_database.
*
*      ENDIF.
*
*  ENDCASE.
*ENDMODULE.                 " USER_COMMAND_0100  INPUT
**&---------------------------------------------------------------------
**
**&      Module  STATUS_0100  OUTPUT
**&---------------------------------------------------------------------
**
**       text
**----------------------------------------------------------------------
**
*MODULE status_0100 OUTPUT.
*  SET PF-STATUS '100_STATUS'.
**  SET TITLEBAR 'xxx'.
*
*ENDMODULE.                 " STATUS_0100  OUTPUT
**&---------------------------------------------------------------------
**
**&      Form  SETTING_LAYOUT
**&---------------------------------------------------------------------
**
*FORM setting_layout   CHANGING  p_layout TYPE lvc_s_layo.
*
*   p_layout-cwidth_opt = ''.  "칼럼 길이 자동조절
*
*   p_layout-grid_title = 'ALV Grid Edit Test'.  "타이틀 바
*
*   p_layout-sel_mode = 'B'.  "선택모드 : 멀티 선택 가능
*
*   p_layout-zebra      = ''.  "Sripe 속성 지정
*
**   p_layout-edit = 'X'. "1번 레이아웃 설정 -> 필드 카탈로그 설정 시 주석처리 필요
*
*ENDFORM.                    " setting_layout
**&---------------------------------------------------------------------
**
**&      Form  SETTING_TOOLBAR
**&---------------------------------------------------------------------
**
**       text
**----------------------------------------------------------------------
**
**  -->  p1        text
**  <--  p2        text
**----------------------------------------------------------------------
**
*FORM setting_toolbar .
*  DATA: l_exclude TYPE ui_func.
*
*  l_exclude =  cl_gui_alv_grid=>mc_fc_save_variant.
*  APPEND l_exclude TO gt_toolbar.
*
*  l_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant.
*  APPEND l_exclude TO gt_toolbar.
*
*ENDFORM.                    " SETTING_TOOLBAR
**&---------------------------------------------------------------------
**
**&      Form  SETTING_SORT
**&---------------------------------------------------------------------
**
**       text
**----------------------------------------------------------------------
**
**  -->  p1        text
**  <--  p2        text
**----------------------------------------------------------------------
**
*FORM setting_sort .
*   DATA : ls_sort TYPE lvc_s_sort.
*
*        ls_sort-spos = '1'.
*   ls_sort-fieldname = 'CARRID'.
*   ls_sort-up = 'X'.
*   ls_sort-subtot = 'X'.
*   APPEND ls_sort TO gt_sort.
*
*ENDFORM.                    " SETTING_SORT
**&---------------------------------------------------------------------
**
**&      Form  SETTING_CATALOG
**&---------------------------------------------------------------------
**
**       text
**----------------------------------------------------------------------
**
**  -->  p1        text
**  <--  p2        text
**----------------------------------------------------------------------
**
*FORM setting_catalog .
*   DATA : ls_fieldcat TYPE lvc_s_fcat.
*   ls_fieldcat-fieldname = 'PRICE'.
*   ls_fieldcat-coltext = 'Airfare'.
*   ls_fieldcat-just = 'R'.
*   ls_fieldcat-key = ' '.
*ls_fieldcat-edit = 'X'. "2단계 필드 카탈로그 속성 -> PRICE 필드의 카탈로그에 EDIT 속성을
*설정하면 아래쪽 화면과 같이 해당 필드만 변경할 수 있도록 설정된다
*   ls_fieldcat-outputlen = '15'.
*   APPEND ls_fieldcat TO gt_fieldcat.
*ENDFORM.                    " SETTING_CATALOG
**&---------------------------------------------------------------------
**
**&      Form  GETTING_CATALOG
**&---------------------------------------------------------------------
**
**       text
**----------------------------------------------------------------------
**
**  -->  p1        text
**  <--  p2        text
**----------------------------------------------------------------------
**
*FORM getting_catalog .
*
*  DATA : lt_fieldcat TYPE kkblo_t_fieldcat.
*
*  CALL FUNCTION 'K_KKB_FIELDCAT_MERGE'
*     EXPORTING
*            i_callback_program     = SY-REPID
*      i_tabname = 'GT_SFLIGHT'
*            i_inclname             = SY-REPID
*     CHANGING
*      ct_fieldcat = lt_fieldcat[].
*
*  IF sy-subrc EQ 0.
*    CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO'
*       EXPORTING
*        it_fieldcat_kkblo = lt_fieldcat[]
*       IMPORTING
*        et_fieldcat_lvc = gt_fieldcat[].
*  ENDIF.
*
*
*ENDFORM.                    " GETTING_CATALOG
*
**&---------------------------------------------------------------------
**
**&      Form  UPDATE_DATABASE
**&---------------------------------------------------------------------
**
**       text
**----------------------------------------------------------------------
**
**  -->  p1        text
**  <--  p2        text
**----------------------------------------------------------------------
**
*FORM update_database .
*  MODIFY  sflight FROM TABLE gt_modified_rows.
*  IF sy-subrc EQ 0.
*    MESSAGE 'SAVE OK' TYPE 'I'.
*  ENDIF.
*ENDFORM.                    " UPDATE_DATABASE

번호 제목 글쓴이 날짜 조회 수
463 INCLUDE Z17_04_0100_PBOO01 가능 2025.09.22 0
462 REPORT Z17_04 가능 2025.09.22 1
461 REPORT Z17_03 가능 2025.09.22 0
460 REPORT Z17_02 가능 2025.09.22 0
459 REPORT Z17_01 가능 2025.09.22 0
458 REPORT Z16_09 가능 2025.09.22 1
457 REPORT Z16_08 가능 2025.09.22 0
456 REPORT Z16_07 가능 2025.09.22 0
455 REPORT Z16_06 가능 2025.09.22 0
454 REPORT Z16_05 가능 2025.09.22 0
453 REPORT Z16_04 가능 2025.09.22 1
452 REPORT Z16_03 가능 2025.09.22 0
451 REPORT z16_02 가능 2025.09.22 0
450 REPORT z16_01 가능 2025.09.22 0
449 REPORT Z15_28 가능 2025.09.22 1
448 REPORT Z15_27 가능 2025.09.22 0
447 REPORT Z15_26 가능 2025.09.22 0
446 REPORT Z15_25 가능 2025.09.22 0
» REPORT Z15_24 가능 2025.09.22 0
444 REPORT Z15_23 가능 2025.09.22 0