메뉴 건너뛰기

SAP 한국 커뮤니티

REPORT Z15_23

가능 2025.09.22 01:20 조회 수 : 0

REPORT  z15_23.

DATA : BEGIN OF gt_empcert OCCURS 0.
         INCLUDE STRUCTURE zempcert.
DATA :   count   TYPE p LENGTH 3, " 자격증 개수 필드 추가
         chk     TYPE c,
         cellbtn TYPE lvc_t_styl.
DATA : END OF gt_empcert.

DATA : BEGIN OF gt_empcert_cnt OCCURS 0,
         empcd TYPE zempcert-empcd,
         count TYPE p LENGTH 3. " 자격증 개수 필드 추가
DATA : END OF gt_empcert_cnt.

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 : 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_button_click "5번 이벤트 메서드 정의
      FOR EVENT button_click OF cl_gui_alv_grid
      IMPORTING es_col_id es_row_no.

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 empcd, certid, cnum, COUNT( certid ) AS count
          FROM zempcert
          GROUP BY empcd, certid, cnum
          INTO CORRESPONDING FIELDS OF TABLE @gt_empcert.
        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_button_click. "6번 이벤트 메서드 구현
    CLEAR gt_empcert.
    READ TABLE gt_empcert INDEX es_row_no-row_id INTO gt_empcert.
    IF sy-subrc EQ 0.
      MESSAGE gt_empcert-empcd TYPE 'I'.
    ENDIF.
  ENDMETHOD.                    "handle_button_click

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 empcd, certid, cnum
    FROM zempcert
    INTO CORRESPONDING FIELDS OF TABLE @gt_empcert.

  IF sy-subrc EQ 0.
    SORT gt_empcert BY empcd cnum.
  ENDIF.

  SELECT empcd, COUNT( certid ) AS count
    FROM zempcert
    GROUP BY empcd
    INTO TABLE @gt_empcert_cnt.

  LOOP AT gt_empcert.  "자격증에 따라 신호등 색의 변화
    READ TABLE gt_empcert_cnt WITH KEY empcd = gt_empcert-empcd
      TRANSPORTING count.
    CHECK sy-subrc EQ 0.

    IF gt_empcert_cnt-count >= 3.    " Green.
*      gt_empcert-linecolor = 'C500'.
    ELSEIF gt_empcert_cnt-count = 2. " Yellow.
*      gt_empcert-linecolor = 'C300'.
    ELSEIF gt_empcert_cnt-count = 1. " Blue.
*      gt_empcert-linecolor = 'C100'.
    ENDIF.
    gt_empcert-count = gt_empcert_cnt-count.
    gt_empcert-chk = '    '.

    MODIFY gt_empcert.
  ENDLOOP.

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

  DATA :  event_receiver TYPE REF TO lcl_event_receiver.

  CREATE OBJECT event_receiver.
  SET HANDLER event_receiver->handle_toolbar FOR g_grid.
  SET HANDLER event_receiver->handle_button_click  FOR g_grid.
  " 버튼 클릭의 이벤트 등록 FOR g_grid.


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

ENDMODULE.                 " INIT_CON  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  IF ok_code = 'BACK'.
    DATA: l_row   TYPE i,
          l_value TYPE c,
          l_col   TYPE i,
          ls_row  TYPE lvc_s_row,
          ls_col  TYPE lvc_s_col,
          ls_roid TYPE lvc_s_roid.

    CALL METHOD g_grid->get_current_cell
      IMPORTING
        e_row     = l_row
        e_value   = l_value
        e_col     = l_col
        es_row_id = ls_row
        es_col_id = ls_col
        es_row_no = ls_roid.
    LEAVE PROGRAM.
  ENDIF.
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 = 'Pushbutton Test'.  "타이틀 바
  p_layout-sel_mode = 'B'.  "선택모드 : 멀티 선택 가능
  p_layout-zebra      = 'X'.  "Sripe 속성 지정
  p_layout-stylefname = 'CELLBTN'. "STYLEFNAME 필드 설정

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 .
  FIELD-SYMBOLS: <ls_fcat> TYPE lvc_s_fcat.

  LOOP AT gt_fieldcat ASSIGNING <ls_fcat>.

    IF <ls_fcat>-fieldname EQ 'MANDT'
    OR <ls_fcat>-fieldname EQ 'LIGHT'.
      <ls_fcat>-tech = 'X'.
    ENDIF.

    IF <ls_fcat>-fieldname EQ 'COUNT'.
      <ls_fcat>-coltext = '자격증 개수'.
    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_EMPCERT'
      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 setting_cell
*&---------------------------------------------------------------------*
FORM setting_cell .
  DATA : lt_cellbtn  TYPE lvc_t_styl,
         ls_cellbtn  TYPE lvc_s_styl,
         ls_fieldcat TYPE lvc_s_fcat,
         l_mode      TYPE raw4,
         index       TYPE i.

* Display cell as PUSHBUTTON
  CLEAR index.
  LOOP AT gt_empcert.
    index = index + 1.
    CLEAR: lt_cellbtn[], ls_cellbtn.

    LOOP AT gt_fieldcat INTO ls_fieldcat.
      ls_cellbtn-fieldname = ls_fieldcat-fieldname.

      IF ls_cellbtn-fieldname EQ 'CHK'. "3번 푸쉬버튼 처리 : chk필드를
        "푸쉬버튼으로 조회할 수 있도록 설정
        ls_cellbtn-fieldname = 'CHK'.
        ls_cellbtn-style     = cl_gui_alv_grid=>mc_style_button.
      ENDIF.
      INSERT ls_cellbtn INTO TABLE lt_cellbtn.

    ENDLOOP.
    INSERT LINES OF lt_cellbtn INTO TABLE gt_empcert-cellbtn.

    MODIFY gt_empcert INDEX index.
    CLEAR  gt_empcert.

  ENDLOOP.

ENDFORM.                    " SETTING_CELL

번호 제목 글쓴이 날짜 조회 수
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
445 REPORT Z15_24 가능 2025.09.22 0
» REPORT Z15_23 가능 2025.09.22 0