diff --git a/.abapgit.xml b/.abapgit.xml
new file mode 100644
index 0000000..5c616cb
--- /dev/null
+++ b/.abapgit.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ 3
+ /src/
+ PREFIX
+
+
+
diff --git a/src/package.devc.xml b/src/package.devc.xml
new file mode 100644
index 0000000..5e4a6de
--- /dev/null
+++ b/src/package.devc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ 공통코드관리
+
+
+
+
diff --git a/src/zcme_code.dtel.xml b/src/zcme_code.dtel.xml
new file mode 100644
index 0000000..899db3a
--- /dev/null
+++ b/src/zcme_code.dtel.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ ZCME_CODE
+ CHAR30LOW
+ 21
+ 04
+ 16
+ 21
+ E
+ D
+
+
+ E
+
+
+ -
+ E
+ Code Management Field
+ Code Management Field
+ Code
+ Code Magt. Field
+ Code Management Field
+
+
+
+
+
diff --git a/src/zcme_md_desc.dtel.xml b/src/zcme_md_desc.dtel.xml
new file mode 100644
index 0000000..e0ce837
--- /dev/null
+++ b/src/zcme_md_desc.dtel.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ ZCME_MD_DESC
+ CHAR50LOW
+ 18
+ 08
+ 18
+ 18
+ E
+ D
+
+
+ E
+
+
+ -
+ E
+ Module Description
+ Module Description
+ MD Desc.
+ Module Description
+ Module Description
+
+
+
+
+
diff --git a/src/zcmh_zmodule.shlp.xml b/src/zcmh_zmodule.shlp.xml
new file mode 100644
index 0000000..1efe85f
--- /dev/null
+++ b/src/zcmh_zmodule.shlp.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+ ZCMH_ZMODULE
+ 3
+ Module
+ X
+ ZCMT0003
+ T
+ D
+ 0.8
+
+
+
+ ZCMH_ZMODULE
+ ZMODULE
+ 0001
+ ZCME_MODULE
+ X
+ X
+ 01
+ 01
+ 06
+
+
+ ZCMH_ZMODULE
+ ZMD_DESC
+ 0002
+ ZCME_MD_DESC
+ X
+ 02
+ 02
+ X
+ 18
+
+
+
+
+
diff --git a/src/zcmr0001.prog.abap b/src/zcmr0001.prog.abap
new file mode 100644
index 0000000..617cd80
--- /dev/null
+++ b/src/zcmr0001.prog.abap
@@ -0,0 +1,63 @@
+*&---------------------------------------------------------------------*
+*& 프로그램 ID : ZCMR0001
+*& 프로그램 명 : [CM] Common Code Management
+*& 생성일 : 2025.05.20
+*& 생성자 : ZENABAP04
+*& 프로그램 설명 : Common Code Management
+*&---------------------------------------------------------------------*
+* Modification Log
+*----------------------------------------------------------------------*
+* Tag Date Author Description
+*----------------------------------------------------------------------*
+* N 2025.05.20 Initial Release
+*----------------------------------------------------------------------*
+*& 변경번호 : #1(CTS No) 변경자 : XXX 변경일자 : YYYY..MM.DD
+*& 변경내용 : 간단한 설명,(상세내용은 변경부분에 주석처리)
+*&---------------------------------------------------------------------*
+REPORT zcmr0001 MESSAGE-ID zcmm01.
+
+INCLUDE zcmr0001c01. "ALV Class
+INCLUDE zcmr0001top. "Top Include
+INCLUDE zcmr0001s01. "Screen
+INCLUDE zcmr0001pbo. "PBO-Modules
+INCLUDE zcmr0001pai. "PAI-Modules
+INCLUDE zcmr0001f01. "Business FORM Routine
+
+*----------------------------------------------------------------------*
+* AT SELECTION-SCREEN
+*----------------------------------------------------------------------*
+*AT SELECTION-SCREEN OUTPUT.
+* PERFORM modify_screen.
+
+
+AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_class-low.
+ PERFORM select_class USING s_module-low gv_f4_class.
+ s_class-low = gv_f4_class.
+
+AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_class-high.
+ PERFORM select_class USING s_module-low gv_f4_class.
+ s_class-high = gv_f4_class.
+
+*----------------------------------------------------------------------*
+* START-OF-SELECTION
+*----------------------------------------------------------------------*
+START-OF-SELECTION.
+ CHECK gv_error <> 'X'.
+ PERFORM get_module_text.
+ PERFORM get_class_data.
+ PERFORM get_detail_data.
+ PERFORM make_data.
+
+*----------------------------------------------------------------------*
+* END-OF-SELECTION
+*----------------------------------------------------------------------*
+END-OF-SELECTION.
+ CLEAR gv_total.
+ DESCRIBE TABLE gt_class LINES gv_total.
+ IF gv_total >= 0.
+ CALL SCREEN 100.
+
+ ELSE.
+ MESSAGE s003 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
diff --git a/src/zcmr0001.prog.xml b/src/zcmr0001.prog.xml
new file mode 100644
index 0000000..50d6b05
--- /dev/null
+++ b/src/zcmr0001.prog.xml
@@ -0,0 +1,571 @@
+
+
+
+
+
+ ZCMR0001
+ 1
+ 3
+ X
+ X
+
+
+ -
+
+ ZCMR0001
+ 0100
+ E
+ N
+ 0100
+ 027
+ 120
+
+
+
+ SCREEN
+ SCREEN
+
+
+
+
+ SCREEN
+ SCREEN
+ OKCODE
+ GV_OKCODE
+ ____________________
+ 020
+ 020
+ 001
+ CHAR
+ X
+
+
+
+
+ PROCESS BEFORE OUTPUT.
+
+
+ MODULE STATUS_0100.
+
+
+ MODULE CREATE_ALV_0100.
+
+
+
+ PROCESS AFTER INPUT.
+
+
+ MODULE EXIT AT EXIT-COMMAND.
+
+
+ MODULE USER_COMMAND_0100.
+
+
+
+
+ -
+
+ ZCMR0001
+ 0110
+ E
+ M
+ 0110
+ 027
+ 121
+
+
+
+ SCREEN
+ SCREEN
+
+
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT001
+ Language
+ 001
+ 002
+ 008
+ 008
+ 001
+ CHAR
+ N
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GV_LANGU
+ __
+ 001
+ 011
+ 002
+ 002
+ 001
+ CHAR
+ ISOLA
+ X
+ X
+ H_T002
+
+
+ SCREEN
+ SCREEN
+ OKCODE
+ GV_OKCODE
+ ____________________
+ 020
+ 020
+ 001
+ CHAR
+ X
+
+
+
+
+ PROCESS BEFORE OUTPUT.
+
+
+ MODULE status_0110.
+
+
+ *
+
+
+ PROCESS AFTER INPUT.
+
+
+ MODULE exit_0110 AT EXIT-COMMAND.
+
+
+ MODULE user_command_0110.
+
+
+
+
+
+
+ 000001
+ 000002
+
+
+
+ 0100
+ D
+ 000001
+ 000001
+ 0001
+ zcmr0001
+
+
+ 0110
+ P
+ 000002
+ 0001
+ 공통 코드 관리
+
+
+
+
+ BACK
+ 001
+ E
+ S
+ 뒤로
+
+
+ CANC
+ 001
+ E
+ S
+ ICON_CANCEL
+ @0W@
+ 취소
+
+
+ CANCEL
+ 001
+ S
+ ICON_CANCEL
+ @0W@
+ Exit
+ Exit
+ Exit
+
+
+ COPY
+ 001
+ S
+ ICON_CREATE_COPY
+ @EZ@
+ 추가 언어적용
+ 추가 언어적용
+ 추가 언어적용
+
+
+ EXIT
+ 001
+ E
+ S
+ ICON_CANCEL
+ @0W@
+ 나가기
+ Exit
+ Exit
+
+
+ OKAY
+ 001
+ S
+ ICON_OKAY
+ @0V@
+ Okay
+ Okay
+ Okay
+
+
+
+
+ 000001
+ 0001
+ 01
+ 08
+
+
+ 000002
+ 0001
+ 01
+ 00
+
+
+ 000002
+ 0001
+ 02
+ 12
+
+
+
+
+ 000001
+ 03
+ BACK
+ 001
+
+
+ 000001
+ 08
+ COPY
+ 001
+
+
+ 000001
+ 12
+ CANC
+ 001
+
+
+ 000001
+ 15
+ EXIT
+ 001
+
+
+ 000002
+ 00
+ OKAY
+ 001
+
+
+ 000002
+ 02
+ CANCEL
+ 001
+
+
+ 000002
+ 12
+ CANCEL
+ 001
+
+
+
+
+ 0100
+ BACK
+
+
+ 0100
+ CANC
+
+
+ 0100
+ COPY
+
+
+ 0100
+ EXIT
+
+
+ 0110
+ CANCEL
+
+
+ 0110
+ OKAY
+
+
+
+
+ A
+ 000001
+ D
+ 공통 코드 관리공통 코드 관리
+
+
+ P
+ 000001
+ D
+ 공통 코드 관리
+
+
+ B
+ 000001
+ 0001
+ D
+ 공통 코드 관리
+
+
+ P
+ 000002
+ P
+ Language
+
+
+ B
+ 000002
+ 0001
+ P
+ Language
+
+
+
+
+ -
+ I
+ B01
+ Conditions
+ 20
+
+ -
+ I
+ E01
+ Not found data.
+ 18
+
+ -
+ I
+ E02
+ Select at least one line
+ 48
+
+ -
+ I
+ E03
+ Error to save
+ 23
+
+ -
+ I
+ E04
+ Exist Duplicated Key
+ 40
+
+ -
+ I
+ E05
+ Key Field is Blank
+ 28
+
+ -
+ I
+ E06
+ Invalid Language !
+ 28
+
+ -
+ I
+ E07
+ Selected Language is same with Logon Language !
+ 94
+
+ -
+ I
+ F01
+ Class
+ 15
+
+ -
+ I
+ F02
+ Class Name
+ 20
+
+ -
+ I
+ F03
+ Sort Key
+ 18
+
+ -
+ I
+ F04
+ Changed by
+ 20
+
+ -
+ I
+ F05
+ Changed on
+ 20
+
+ -
+ I
+ F06
+ Changed at
+ 20
+
+ -
+ I
+ F07
+ Using Program
+ 23
+
+ -
+ I
+ Q01
+ Delete Selected Data
+ 40
+
+ -
+ I
+ Q02
+ Save Data
+ 19
+
+ -
+ I
+ Q03
+ Additional adjust for Other Language ?
+ 76
+
+ -
+ I
+ S01
+ Save Complete
+ 23
+
+ -
+ I
+ T01
+ Code
+ 14
+
+ -
+ I
+ T02
+ Field
+ 15
+
+ -
+ I
+ T04
+ Add Row
+ 17
+
+ -
+ I
+ T05
+ Del. Row
+ 18
+
+ -
+ I
+ T06
+ Delete Complete
+ 25
+
+ -
+ I
+ T07
+ Yes
+ 13
+
+ -
+ I
+ T08
+ No
+ 12
+
+ -
+ I
+ T09
+ Success :
+ 10
+
+ -
+ I
+ T10
+ , Fail :
+ 10
+
+ -
+ I
+ T11
+ Confirm
+ 17
+
+ -
+ I
+ T12
+ Refresh
+ 17
+
+ -
+ I
+ T13
+ Save
+ 14
+
+ -
+ I
+ T14
+ Additional Language
+ 30
+
+ -
+ R
+ Common Code Management
+ 22
+
+ -
+ S
+ S_CLASS
+ .
+ 9
+ D
+
+ -
+ S
+ S_MODULE
+ .
+ 9
+ D
+
+
+
+
+
diff --git a/src/zcmr0001c01.prog.abap b/src/zcmr0001c01.prog.abap
new file mode 100644
index 0000000..c9fa0b6
--- /dev/null
+++ b/src/zcmr0001c01.prog.abap
@@ -0,0 +1,109 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0001C01
+*&---------------------------------------------------------------------*
+
+*&---------------------------------------------------------------------*
+*& LCL_EVEN_RECEIVER DEFINITION.
+*&---------------------------------------------------------------------*
+CLASS LCL_EVENT_RECEIVER DEFINITION.
+ PUBLIC SECTION.
+ METHODS :
+ HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
+ IMPORTING ER_DATA_CHANGED
+ E_ONF4_AFTER,
+
+ HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
+ IMPORTING E_UCOMM,
+
+ HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
+ IMPORTING E_OBJECT
+ E_INTERACTIVE,
+
+ HANDLE_MENU_BUTTON FOR EVENT MENU_BUTTON OF CL_GUI_ALV_GRID
+ IMPORTING E_OBJECT
+ E_UCOMM,
+
+ HANDLE_ONF4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID
+ IMPORTING E_FIELDNAME
+ E_FIELDVALUE
+ ES_ROW_NO
+ ER_EVENT_DATA
+ ET_BAD_CELLS
+ E_DISPLAY,
+
+ HANDLE_DATA_CHANGED_FINISHED
+ FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
+ IMPORTING E_MODIFIED
+ ET_GOOD_CELLS,
+
+ HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
+ IMPORTING E_ROW
+ E_COLUMN
+ ES_ROW_NO,
+
+ HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
+ IMPORTING E_ROW_ID
+ E_COLUMN_ID
+ ES_ROW_NO,
+
+ HANDLE_TOP_OF_PAGE FOR EVENT TOP_OF_PAGE OF CL_GUI_ALV_GRID
+ IMPORTING E_DYNDOC_ID.
+
+ PRIVATE SECTION.
+
+ENDCLASS. "LCL_EVENT_RECEIVER
+
+*&---------------------------------------------------------------------*
+*& LCL_EVENT_RECEIVER IMPLEMENTATION
+*&---------------------------------------------------------------------*
+CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
+ METHOD HANDLE_DATA_CHANGED.
+ PERFORM ALV_DATA_CHANGED USING ER_DATA_CHANGED
+ E_ONF4_AFTER.
+ ENDMETHOD. "HANDLE_DATA_CHANGED
+
+ METHOD HANDLE_USER_COMMAND.
+ PERFORM ALV_USER_COMMAND USING E_UCOMM.
+ ENDMETHOD. "HANDLE_USER_COMMAND
+
+ METHOD HANDLE_TOOLBAR.
+ PERFORM ALV_EVENT_TOOLBAR USING E_OBJECT
+ E_INTERACTIVE.
+ ENDMETHOD. "HANDLE_TOOLBAR
+
+ METHOD HANDLE_MENU_BUTTON.
+* PERFORM alv_menu_button USING e_object
+* e_ucomm.
+ ENDMETHOD. "HANDLE_MENU_BUTTON
+
+ METHOD HANDLE_ONF4.
+ ER_EVENT_DATA->M_EVENT_HANDLED = 'x'.
+* PERFORM alv_onf4 USING e_fieldname
+* e_fieldvalue
+* es_row_no
+* er_event_data
+* et_bad_cells
+* e_display.
+ ENDMETHOD. "HANDLE_ONF4
+
+ METHOD HANDLE_DATA_CHANGED_FINISHED.
+ PERFORM ALV_DATA_CHANGED_FINISHED TABLES ET_GOOD_CELLS USING E_MODIFIED.
+ ENDMETHOD. "HANDLE_CHANGED_FINISHED
+
+ METHOD HANDLE_DOUBLE_CLICK.
+ PERFORM ALV_DOUBLE_CLICK USING E_ROW
+ E_COLUMN
+ ES_ROW_NO.
+ ENDMETHOD. "HANDLE_DOUBLE_CLICK
+
+ METHOD HANDLE_HOTSPOT_CLICK.
+ PERFORM ALV_HOTSPOT_CLICK USING E_ROW_ID
+ E_COLUMN_ID
+ ES_ROW_NO.
+ ENDMETHOD. "HANDLE_HOTSPOT_CLICK
+
+ METHOD HANDLE_TOP_OF_PAGE.
+* PERFORM top_of_page USING e_dyndoc_id.
+ ENDMETHOD. "HANDLE_TOP_OF_PAGE
+
+ENDCLASS. "LCL_EVENT_RECEIVER
diff --git a/src/zcmr0001c01.prog.xml b/src/zcmr0001c01.prog.xml
new file mode 100644
index 0000000..c01373e
--- /dev/null
+++ b/src/zcmr0001c01.prog.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ ZCMR0001C01
+ I
+ 3
+ X
+
+
+ -
+ R
+ Include ZCMR0001C01
+ 19
+
+
+
+
+
diff --git a/src/zcmr0001f01.prog.abap b/src/zcmr0001f01.prog.abap
new file mode 100644
index 0000000..4316cc0
--- /dev/null
+++ b/src/zcmr0001f01.prog.abap
@@ -0,0 +1,2157 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0001F01
+*&---------------------------------------------------------------------*
+*&---------------------------------------------------------------------*
+*& Form MODIFY_SCREEN
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM modify_screen.
+
+ LOOP AT SCREEN.
+* IF SCREEN-GROUP1 = 'MOD'.
+* SCREEN-INPUT = 0.
+* MODIFY SCREEN.
+* ENDIF.
+ ENDLOOP.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form GET_MODULE_TEXT
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_MODULE
+*&---------------------------------------------------------------------*
+FORM get_module_text.
+
+ CLEAR : gv_module_desc.
+
+* SELECT DOMVALUE_L, DDTEXT FROM DD07T
+* INTO TABLE @DATA(LT_DD07T)
+* WHERE DOMNAME = @C_MODULE
+* AND DDLANGUAGE = @SY-LANGU
+* AND DOMVALUE_L IN @S_MODULE.
+
+ SELECT *
+ INTO TABLE @DATA(lt_0030)
+ FROM zcmt0003
+ WHERE zmodule IN @s_module.
+
+ IF sy-subrc = 0 AND sy-dbcnt = 1.
+ READ TABLE lt_0030 INTO DATA(ls_0030) INDEX 1.
+ CONCATENATE '-' ls_0030-zmodule '(' INTO gv_module_desc SEPARATED BY space.
+ CONCATENATE gv_module_desc ls_0030-zmd_desc ')' INTO gv_module_desc.
+
+
+* READ TABLE LT_DD07T INTO DATA(LS_DD07T) INDEX 1.
+* CONCATENATE '-' LS_DD07T-DOMVALUE_L '(' INTO GV_MODULE_DESC SEPARATED BY SPACE.
+* CONCATENATE GV_MODULE_DESC LS_DD07T-DDTEXT ')' INTO GV_MODULE_DESC.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form GET_CLASS_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM get_class_data.
+
+ CLEAR : gt_0070, gt_0070[].
+ SELECT zmodule zclass zclss_desc zprgname
+ zcode2_ox zcode3_ox zcode4_ox
+ zcode5_ox zcode6_ox zcode7_ox zcode8_ox
+ zcd1_desc zcd2_desc zcd3_desc zcd4_desc
+ zcd5_desc zcd6_desc zcd7_desc zcd8_desc
+ zf01_ox zf01_desc zf02_ox zf02_desc
+ zf03_ox zf03_desc zf04_ox zf04_desc
+ zf05_ox zf05_desc zf06_ox zf06_desc
+ zf07_ox zf07_desc zf08_ox zf08_desc
+ zf09_ox zf09_desc zf10_ox zf10_desc
+ zf11_ox zf11_desc zf12_ox zf12_desc
+ zf13_ox zf13_desc zf14_ox zf14_desc
+ zf15_ox zf15_desc zf16_ox zf16_desc
+ zf17_ox zf17_desc
+ FROM zcmt0001
+ INTO TABLE gt_0070
+ WHERE spras = sy-langu
+ AND zmodule IN s_module
+ AND zclass IN s_class.
+
+ CHECK sy-subrc = 0.
+ SORT gt_0070 BY zmodule zclass.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form GET_DETAIL_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM get_detail_data.
+
+ CLEAR : gt_0071, gt_0071[].
+
+ READ TABLE gt_0070 INDEX 1.
+ CHECK sy-subrc = 0.
+
+ SELECT zmodule zclass
+ zcm_code1 zcm_code2 zcm_code3 zcm_code4
+ zcm_code5 zcm_code6 zcm_code7 zcm_code8
+ zcmf01_ch zcmf02_ch zcmf03_ch zcmf04_ch
+ zcmf05_ch zcmf06_ch zcmf07_ch zcmf08_ch
+ zcmf09_ch zcmf10_ch zcmf11_qu zcmf12_ut
+ zcmf13_cr zcmf14_ck zcmf15_nm zcmf16_nm zcmf17_dc
+ zsort_key
+ ernam erdat erzet
+ aenam aedat aezet
+ FROM zcmt0002
+ INTO CORRESPONDING FIELDS OF TABLE gt_0071
+ WHERE spras = sy-langu
+ AND zmodule = gt_0070-zmodule
+ AND zclass = gt_0070-zclass.
+* AND zclass IN s_class.
+
+ CHECK sy-subrc = 0.
+ SORT gt_0071 BY zmodule zclass.
+
+* PERFORM check_cm_authority.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form MAKE_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM make_data.
+
+ CLEAR : gv_class, gt_class, gt_class[].
+ LOOP AT gt_0070.
+ MOVE-CORRESPONDING gt_0070 TO gt_class.
+ APPEND gt_class.
+
+ CLEAR : gt_class, gt_0070.
+ ENDLOOP.
+
+ CHECK NOT gt_class[] IS INITIAL.
+
+ SORT gt_class BY zmodule zclass.
+ READ TABLE gt_class INDEX 1.
+ gv_module = gt_class-zmodule.
+ gv_class = gt_class-zclass.
+ READ TABLE gt_0070 WITH KEY zmodule = gt_class-zmodule
+ zclass = gt_class-zclass
+ BINARY SEARCH.
+
+ PERFORM make_detail_data USING gt_0070.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form MAKE_DETAIL_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> GT_CLASS
+*&---------------------------------------------------------------------*
+FORM make_detail_data USING ps_0070 STRUCTURE gt_0070.
+
+ CLEAR : gs_chk, gv_mode,
+ gt_detail, gt_detail[].
+
+ CLEAR gt_0071.
+ READ TABLE gt_0071 INDEX 1.
+ IF sy-subrc = 0.
+* 첫번째 Class에 등록된 정보를 보여줌.
+ gv_mode = 'RO'.
+
+ CLEAR gt_0071.
+ LOOP AT gt_0071 WHERE zmodule = ps_0070-zmodule AND zclass = ps_0070-zclass.
+ MOVE-CORRESPONDING gt_0071 TO gt_detail.
+
+ PERFORM get_code_data USING ps_0070
+ gt_0071.
+
+ PERFORM get_field_data USING ps_0070
+ gt_0071.
+
+ REFRESH : gt_detail-celltab, gt_celltab.
+
+ PERFORM append_celltab USING gv_mode.
+
+ INSERT LINES OF gt_celltab INTO TABLE gt_detail-celltab.
+
+ APPEND gt_detail.
+ CLEAR : gt_0071, gt_detail.
+ ENDLOOP.
+ ELSE.
+* 신규의 경우에는 데이터는 없으나 헤더 구성을 위해 GS_CHK를 구성해야 함
+ PERFORM get_code_data USING ps_0070
+ gt_0071.
+
+ PERFORM get_field_data USING ps_0070
+ gt_0071.
+ ENDIF.
+
+ SORT gt_detail BY zsort_key zcm_code1 zcm_code2 zcm_code3
+ zcm_code4 zcm_code5 zcm_code6 zcm_code7 zcm_code8.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form GET_CODE_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> PS_0070
+*&---------------------------------------------------------------------*
+FORM get_code_data USING ps_0070 STRUCTURE gt_0070
+ ps_0071 STRUCTURE gt_0071.
+
+ DATA : lv_no TYPE n,
+ lv_ox(17),
+ lv_chk_c(14),
+ lv_chk_ct(14),
+ lv_code(17).
+
+ FIELD-SYMBOLS : , , , .
+
+* 코드1~8의 사용유무에 따라 itab GT_DETAIL에 추가한다.
+* 코드1은 무조건 포함하나,
+* 코드2~8는 사용유무가 'X'인 건만 추가한다.
+* 코드 8은 자릿수 18자리이다.
+ CLEAR lv_no.
+ DO 8 TIMES.
+ CLEAR : lv_ox, lv_chk_c, lv_chk_ct, lv_code.
+ lv_no = lv_no + 1.
+
+ CONCATENATE 'PS_0070-ZCODE' lv_no '_OX' INTO lv_ox.
+ CONCATENATE 'PS_0070-ZCD' lv_no '_DESC' INTO lv_code.
+ CONCATENATE 'GS_CHK-CD' lv_no INTO lv_chk_c.
+ CONCATENATE 'GS_CHK-F_CD' lv_no INTO lv_chk_ct.
+
+ ASSIGN (lv_ox) TO .
+ ASSIGN (lv_code) TO .
+ ASSIGN (lv_chk_c) TO .
+ ASSIGN (lv_chk_ct) TO .
+
+ IF lv_no = 1 OR = 'X'.
+ = 'X'.
+
+ IF IS INITIAL.
+ CLEAR lv_code.
+ CONCATENATE TEXT-t01 lv_no INTO lv_code.
+ = lv_code.
+ ENDIF.
+
+ = .
+ ENDIF.
+ ENDDO.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form GET_FIELD_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> PS_0070
+*&---------------------------------------------------------------------*
+FORM get_field_data USING ps_0070 STRUCTURE gt_0070
+ ps_0071 STRUCTURE gt_0071.
+
+ DATA : lv_no TYPE n LENGTH 2,
+ lv_ox(15),
+ lv_chk_f(12),
+ lv_chk_t(14),
+ lv_field(17).
+
+ FIELD-SYMBOLS : , , , .
+
+* 필드 1~17 사용유무에 따라 itab GT_DETAIL에 추가한다.
+* 필드명은 zcmt0001-ZF1_DESC를 FIELD CATALOG에 표시
+* 없으면 ??
+ CLEAR lv_no.
+ DO 17 TIMES.
+ CLEAR : lv_ox, lv_chk_f, lv_chk_t, lv_field.
+ lv_no = lv_no + 1.
+
+ CONCATENATE 'PS_0070-ZF' lv_no '_OX' INTO lv_ox.
+ CONCATENATE 'PS_0070-ZF' lv_no '_DESC' INTO lv_field.
+ CONCATENATE 'GS_CHK-FLD' lv_no INTO lv_chk_f.
+ CONCATENATE 'GS_CHK-F_FLD' lv_no INTO lv_chk_t.
+
+ ASSIGN (lv_ox) TO .
+ ASSIGN (lv_field) TO .
+ ASSIGN (lv_chk_f) TO .
+ ASSIGN (lv_chk_t) TO .
+
+ IF = 'X'.
+ = 'X'.
+
+ IF IS INITIAL.
+ CLEAR lv_field.
+ CONCATENATE TEXT-t02 lv_no INTO lv_field.
+ = lv_field.
+ ENDIF.
+
+ = .
+ ENDIF.
+ ENDDO.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form APPEND_CELLTAB
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> GT_CELLTAB
+*&---------------------------------------------------------------------*
+FORM append_celltab USING pv_mode.
+
+ DATA : lv_style TYPE raw4,
+ ls_style TYPE lvc_s_styl.
+
+ CLEAR : lv_style, ls_style.
+ CASE pv_mode.
+ WHEN 'RO'.
+ lv_style = cl_gui_alv_grid=>mc_style_disabled.
+
+ WHEN 'RW'.
+ lv_style = cl_gui_alv_grid=>mc_style_enabled.
+ ENDCASE.
+
+* ls_style-fieldname = 'ZCLASS'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+
+ CLEAR ls_style.
+ ls_style-fieldname = 'ZCM_CODE1'.
+ ls_style-style = lv_style. APPEND ls_style TO gt_celltab.
+
+ CLEAR ls_style.
+ ls_style-fieldname = 'ZCM_CODE2'.
+ ls_style-style = lv_style. APPEND ls_style TO gt_celltab.
+
+ CLEAR ls_style.
+ ls_style-fieldname = 'ZCM_CODE3'.
+ ls_style-style = lv_style. APPEND ls_style TO gt_celltab.
+
+ CLEAR ls_style.
+ ls_style-fieldname = 'ZCM_CODE4'.
+ ls_style-style = lv_style. APPEND ls_style TO gt_celltab.
+
+ CLEAR ls_style.
+ ls_style-fieldname = 'ZCM_CODE5'.
+ ls_style-style = lv_style. APPEND ls_style TO gt_celltab.
+
+ CLEAR ls_style.
+ ls_style-fieldname = 'ZCM_CODE6'.
+ ls_style-style = lv_style. APPEND ls_style TO gt_celltab.
+
+ CLEAR ls_style.
+ ls_style-fieldname = 'ZCM_CODE7'.
+ ls_style-style = lv_style. APPEND ls_style TO gt_celltab.
+
+ CLEAR ls_style.
+ ls_style-fieldname = 'ZCM_CODE8'.
+ ls_style-style = lv_style. APPEND ls_style TO gt_celltab.
+
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCMF1_CH'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCMF2_CH'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCMF3_CH'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCMF4_CH'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCMF5_CH'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCMF6_CH'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCMF7_CH'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCMF8_CH'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZSORT_KEY'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_enabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCRNAME'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCRSDATE'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCRSTIME'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCRLDATE'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZCRLTIME'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZUDNAME'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZUDSDATE'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZUDSTIME'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZUDLDATE'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+*
+* CLEAR ls_style.
+* ls_style-fieldname = 'ZUDLTIME'.
+* ls_style-style = cl_gui_alv_grid=>mc_style_disabled. APPEND ls_style TO gt_celltab.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form CHECK_PK_DUPLICATE
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& <-- GV_ERROR
+*&---------------------------------------------------------------------*
+FORM check_pk_duplicate.
+
+ CLEAR : gt_0071_pk, gt_0071_pk[].
+ SELECT zmodule zclass
+ zcm_code1 zcm_code2 zcm_code3 zcm_code4
+ zcm_code5 zcm_code6 zcm_code7 zcm_code8
+ FROM zcmt0002
+ INTO TABLE gt_0071_pk
+ WHERE spras = sy-langu
+ AND zmodule = gv_module.
+
+ CHECK sy-subrc = 0.
+ SORT gt_0071_pk BY zmodule zclass
+ zcm_code1 zcm_code2 zcm_code3 zcm_code4
+ zcm_code5 zcm_code6 zcm_code7 zcm_code8.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form MAKE_SAVE_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM make_save_data.
+
+ DATA : lv_valid,
+ lt_data LIKE TABLE OF gt_detail WITH HEADER LINE,
+ ls_data LIKE LINE OF lt_data,
+ lt_save LIKE TABLE OF zcmt0002 WITH HEADER LINE.
+
+ CLEAR : gv_error, lt_data, lt_data[], lt_save, lt_save[].
+
+* 1. 변경된 데이터 여부 확인
+ CLEAR lv_valid.
+ CALL METHOD g_grid2->check_changed_data
+ IMPORTING
+ e_valid = lv_valid.
+
+* 2. PK 중복 체크
+ LOOP AT gt_detail.
+ " 문서에서 복사해서 저장하는 경우 클래스값이 공란으로 들어가는 현상
+ IF gt_detail-zmodule IS INITIAL.
+ gt_detail-zmodule = gv_module.
+ ENDIF.
+
+ IF gt_detail-zclass IS INITIAL.
+ gt_detail-zclass = gv_class.
+ ENDIF.
+
+* PK값이 모두 공란인 경우 >> 오류 처리
+ IF gt_detail-zcm_code1 IS INITIAL AND
+ gt_detail-zcm_code2 IS INITIAL AND
+ gt_detail-zcm_code3 IS INITIAL AND
+ gt_detail-zcm_code4 IS INITIAL AND
+ gt_detail-zcm_code5 IS INITIAL AND
+ gt_detail-zcm_code6 IS INITIAL AND
+ gt_detail-zcm_code7 IS INITIAL AND
+ gt_detail-zcm_code8 IS INITIAL.
+
+ gv_error = 'X'.
+ MESSAGE s000 WITH TEXT-e05 DISPLAY LIKE 'E'.
+ EXIT.
+ ELSE.
+ MOVE-CORRESPONDING gt_detail TO lt_data.
+ APPEND lt_data.
+ MODIFY gt_detail.
+ ENDIF.
+
+ CLEAR : lt_data, gt_detail.
+ ENDLOOP.
+
+ CHECK gv_error <> 'X'.
+ IF NOT lt_data[] IS INITIAL.
+ SORT lt_data BY zmodule zclass zcm_code1 zcm_code2 zcm_code3 zcm_code4 zcm_code5 zcm_code6 zcm_code7 zcm_code8.
+ ENDIF.
+
+ CLEAR ls_data.
+ LOOP AT lt_data.
+ IF NOT ls_data IS INITIAL AND
+ ( ls_data-zmodule = lt_data-zmodule AND
+ ls_data-zclass = lt_data-zclass AND
+ ls_data-zcm_code1 = lt_data-zcm_code1 AND
+ ls_data-zcm_code2 = lt_data-zcm_code2 AND
+ ls_data-zcm_code3 = lt_data-zcm_code3 AND
+ ls_data-zcm_code4 = lt_data-zcm_code4 AND
+ ls_data-zcm_code5 = lt_data-zcm_code5 AND
+ ls_data-zcm_code6 = lt_data-zcm_code6 AND
+ ls_data-zcm_code7 = lt_data-zcm_code7 AND
+ ls_data-zcm_code8 = lt_data-zcm_code8 ).
+
+ gv_error = 'X'.
+ MESSAGE e000 WITH TEXT-e04 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+ CLEAR ls_data.
+ ls_data = lt_data.
+ CLEAR lt_data.
+ ENDLOOP.
+
+ CHECK gv_error <> 'X'.
+
+* 3. 저장할 데이터 생성
+ LOOP AT gt_detail.
+ MOVE-CORRESPONDING gt_detail TO lt_save.
+ lt_save-spras = sy-langu.
+* lt_save-zmodule = p_module.
+
+* CALL FUNCTION 'ZCM_CBO_DATE_SINGLE'
+* CHANGING
+* c_data = lt_save.
+
+ IF gt_detail-ernam IS INITIAL.
+ gt_detail-ernam = lt_save-ernam = sy-uname.
+ gt_detail-erdat = lt_save-erdat = sy-datum.
+ gt_detail-erzet = lt_save-erzet = sy-uzeit.
+ ENDIF.
+
+ gt_detail-aenam = lt_save-aenam = sy-uname.
+ gt_detail-aedat = lt_save-aedat = sy-datum.
+ gt_detail-aezet = lt_save-aezet = sy-uzeit.
+
+ gv_mode = 'RO'.
+ REFRESH : gt_detail-celltab, gt_celltab.
+ PERFORM append_celltab USING gv_mode.
+ INSERT LINES OF gt_celltab INTO TABLE gt_detail-celltab.
+
+ MODIFY gt_detail.
+ APPEND lt_save.
+
+ CLEAR : lt_save, gt_detail.
+ ENDLOOP.
+
+ CHECK gv_error <> 'X'.
+ CHECK NOT lt_save[] IS INITIAL.
+ SORT lt_save BY zmodule zclass zcm_code1 zcm_code2 zcm_code3 zcm_code4 zcm_code5 zcm_code6 zcm_code7 zcm_code8 .
+
+ MODIFY zcmt0002 FROM TABLE lt_save.
+ IF sy-subrc = 0.
+ COMMIT WORK.
+ MESSAGE s000 WITH TEXT-s01.
+ ELSE.
+ ROLLBACK WORK.
+ MESSAGE s000 WITH TEXT-e03 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form CHECK_CM_AUTHORITY
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM check_cm_authority.
+
+ DATA: lv_check, lv_field1, lv_field2.
+
+ RANGES: lr_zcode3 FOR zcmt0002-zcm_code3.
+
+ CHECK gt_0070-zmodule = 'CM' AND gt_0070-zclass = 'CMART' AND gt_0071[] IS NOT INITIAL.
+ LOOP AT gt_0071.
+ REFRESH lr_zcode3. CLEAR lr_zcode3.
+ CONCATENATE 'ICP' gt_0071-zcm_code3 INTO lr_zcode3. APPEND lr_zcode3.
+
+ IF sy-uname IN lr_zcode3.
+ lv_check = 'X'.
+ IF gt_0071-zcmf01_ch = 'Y'.
+ lv_field1 = 'X'.
+ ELSEIF gt_0071-zcmf02_ch = 'Y'.
+ lv_field2 = 'X'.
+ ENDIF.
+ ENDIF.
+ ENDLOOP.
+
+ IF lv_check = space.
+ CLEAR gv_zauthority. " ID 미등록시 권한 없음
+ ELSEIF lv_field1 = 'X'. " 전체권한
+ ELSEIF lv_field2 = 'X'. " 조회권한
+ gv_zauthority = 'D'.
+ ELSE.
+ CLEAR gv_zauthority. " 필드체크안한경우 권한없음
+ ENDIF.
+
+ IF gv_zauthority = space.
+ DELETE gt_0071 WHERE zclass = 'CMART'.
+ MESSAGE s000 WITH TEXT-m01.
+ ENDIF.
+
+ENDFORM.
+
+
+*&---------------------------------------------------------------------*
+*& Form SELECT_CLASS
+*&---------------------------------------------------------------------*
+FORM select_class USING p_module
+ p_class.
+
+ DATA: BEGIN OF ls_class.
+ DATA: zmodule TYPE zcmt0001-zmodule,
+ zclss_desc TYPE zcmt0001-zclss_desc,
+ zclass TYPE zcmt0001-zclass.
+ DATA : END OF ls_class.
+ DATA: lt_class LIKE TABLE OF ls_class.
+
+ DATA : BEGIN OF lt_popup OCCURS 0, "팝업의 데이타를 가지고 있을 테이블
+ datas(50) TYPE c,
+ END OF lt_popup.
+
+ DATA : lt_map LIKE STANDARD TABLE OF dselc INITIAL SIZE 0 WITH HEADER LINE.
+
+ SELECT zmodule,
+ zclass,
+ zclss_desc
+ INTO CORRESPONDING FIELDS OF TABLE @lt_class
+ FROM zcmt0001
+ WHERE zmodule = @p_module
+ AND spras = @sy-langu.
+
+ SORT lt_class BY zclass.
+
+ LOOP AT lt_class INTO ls_class.
+ lt_popup-datas = ls_class-zmodule.
+ APPEND lt_popup.
+ lt_popup-datas = ls_class-zclass.
+ APPEND lt_popup.
+ lt_popup-datas = ls_class-zclss_desc.
+ APPEND lt_popup.
+ ENDLOOP.
+
+*&---------------------------------------------------------------------*
+*& Search Help 필드 카탈로그
+*&---------------------------------------------------------------------*
+ DATA : lt_field LIKE STANDARD TABLE OF dfies INITIAL SIZE 0 WITH HEADER LINE.
+
+ CALL FUNCTION 'DDIF_FIELDINFO_GET'
+ EXPORTING
+ tabname = 'zcmt0001'
+ fieldname = 'ZMODULE'
+ lfieldname = 'ZMODULE'
+ IMPORTING
+ dfies_wa = lt_field.
+
+ lt_field-scrtext_s = '모듈'.
+ lt_field-scrtext_m = '모듈'.
+ lt_field-scrtext_l = '모듈'.
+ lt_field-reptext = '모듈'.
+ APPEND lt_field.
+ CLEAR lt_field.
+
+ CALL FUNCTION 'DDIF_FIELDINFO_GET'
+ EXPORTING
+ tabname = 'zcmt0001'
+ fieldname = 'ZCLASS'
+ lfieldname = 'ZCLASS'
+ IMPORTING
+ dfies_wa = lt_field.
+
+ lt_field-scrtext_s = '클래스'.
+ lt_field-scrtext_m = '클래스'.
+ lt_field-scrtext_l = '클래스'.
+ lt_field-reptext = '클래스'.
+ APPEND lt_field.
+ CLEAR lt_field.
+
+ CALL FUNCTION 'DDIF_FIELDINFO_GET'
+ EXPORTING
+ tabname = 'zcmt0001'
+ fieldname = 'ZCLSS_DESC'
+ lfieldname = 'ZCLSS_DESC'
+ IMPORTING
+ dfies_wa = lt_field.
+
+ lt_field-scrtext_s = '클래스명'.
+ lt_field-scrtext_m = '클래스명'.
+ lt_field-scrtext_l = '클래스명'.
+ lt_field-reptext = '클래스명'.
+ APPEND lt_field.
+ CLEAR lt_field.
+
+*&---------------------------------------------------------------------*
+*& Search Help DYFLDNAME
+*&---------------------------------------------------------------------*
+ lt_map-fldname = 'ZCLASS'.
+ lt_map-dyfldname = 'P_CLASS'.
+ APPEND lt_map.
+
+*&---------------------------------------------------------------------*
+*& Search Help 본 펑션
+*&---------------------------------------------------------------------*
+ CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
+ EXPORTING
+ retfield = 'ZCLASS'
+ dynpprog = sy-cprog
+ dynpnr = sy-dynnr
+ window_title = 'CLASS'
+ value_org = 'C'
+ TABLES
+ value_tab = lt_popup
+ field_tab = lt_field
+ return_tab = gt_rtntab
+ dynpfld_mapping = lt_map
+ EXCEPTIONS
+ parameter_error = 1
+ no_values_found = 2
+ OTHERS = 3.
+
+ READ TABLE gt_rtntab INDEX 1 .
+ p_class = gt_rtntab-fieldval.
+ IF sy-subrc <> 0.
+* Implement suitable error handling here
+ ENDIF.
+
+ CLEAR :gt_rtntab, gt_rtntab[].
+
+ENDFORM.
+*&---------------------------------------------------------------------*
+*& Form CREATE_GRID
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM create_grid.
+
+* Docking Container
+ CREATE OBJECT g_docking_container
+ EXPORTING
+ repid = sy-repid
+ dynnr = sy-dynnr
+ side = g_docking_container->dock_at_top
+ extension = 3000.
+
+ CREATE OBJECT g_splitter
+ EXPORTING
+ parent = g_docking_container
+ rows = 1
+ columns = 2.
+
+ CALL METHOD g_splitter->set_column_width
+ EXPORTING
+ id = 1
+ width = 35.
+
+ CALL METHOD g_splitter->get_container
+ EXPORTING
+ row = 1
+ column = 1
+ RECEIVING
+ container = g_grid_left.
+
+ CALL METHOD g_splitter->get_container
+ EXPORTING
+ row = 1
+ column = 2
+ RECEIVING
+ container = g_grid_right.
+
+ CREATE OBJECT g_grid1
+ EXPORTING
+ i_parent = g_grid_left.
+
+ CREATE OBJECT g_grid2
+ EXPORTING
+ i_parent = g_grid_right.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form SET_FCAT_CLASS
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM set_fcat_class.
+
+ CLEAR col_pos.
+ REFRESH gt_fcat.
+
+ PERFORM field_setting USING :
+* option Field Text Ref_tab REF_FIELD Just EDIT
+ '1' 'ZCLASS' TEXT-f01 'zcmt0001' 'ZCLASS' 'C' ' ',
+ '1' 'ZCLSS_DESC' TEXT-f02 'zcmt0001' 'ZCLSS_DESC' 'L' ' ',
+ '1' 'ZPRGNAME' TEXT-f07 'zcmt0001' 'ZPRGNAME' 'L' ' '.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form SET_FCAT_DETAIL
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM set_fcat_detail.
+
+ CLEAR col_pos.
+ REFRESH gt_fcat2.
+
+ PERFORM field_setting USING
+* option Field Text Ref_tab REF_FIELD Just EDIT
+ '2' 'ZCM_CODE1' gs_chk-f_cd1 'zcmt0002' 'ZCM_CODE1' 'L' 'X'.
+
+ IF gs_chk-cd2 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCM_CODE2' gs_chk-f_cd2 'zcmt0002' 'ZCM_CODE2' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-cd3 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCM_CODE3' gs_chk-f_cd3 'zcmt0002' 'ZCM_CODE3' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-cd4 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCM_CODE4' gs_chk-f_cd4 'zcmt0002' 'ZCM_CODE4' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-cd5 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCM_CODE5' gs_chk-f_cd5 'zcmt0002' 'ZCM_CODE5' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-cd6 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCM_CODE6' gs_chk-f_cd6 'zcmt0002' 'ZCM_CODE6' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-cd7 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCM_CODE7' gs_chk-f_cd7 'zcmt0002' 'ZCM_CODE7' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-cd8 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCM_CODE8' gs_chk-f_cd8 'zcmt0002' 'ZCM_CODE8' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld01 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF01_CH' gs_chk-f_fld01 'zcmt0002' 'ZCMF01_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld02 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF02_CH' gs_chk-f_fld02 'zcmt0002' 'ZCMF02_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld03 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF03_CH' gs_chk-f_fld03 'zcmt0002' 'ZCMF03_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld04 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF04_CH' gs_chk-f_fld04 'zcmt0002' 'ZCMF04_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld05 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF05_CH' gs_chk-f_fld05 'zcmt0002' 'ZCMF05_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld06 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF06_CH' gs_chk-f_fld06 'zcmt0002' 'ZCMF06_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld07 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF07_CH' gs_chk-f_fld07 'zcmt0002' 'ZCMF07_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld08 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF08_CH' gs_chk-f_fld08 'zcmt0002' 'ZCMF08_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld09 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF09_CH' gs_chk-f_fld09 'zcmt0002' 'ZCMF09_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld10 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF10_CH' gs_chk-f_fld10 'zcmt0002' 'ZCMF10_CH' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld11 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF11_QU' gs_chk-f_fld11 'zcmt0002' 'ZCMF11_QU' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld12 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF12_UT' gs_chk-f_fld12 'zcmt0002' 'ZCMF12_UT' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld13 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF13_CR' gs_chk-f_fld13 'zcmt0002' 'ZCMF13_CR' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld14 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF14_CK' gs_chk-f_fld14 'zcmt0002' 'ZCMF14_CK' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld15 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF15_NM' gs_chk-f_fld15 'zcmt0002' 'ZCMF15_NM' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld16 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF16_NM' gs_chk-f_fld16 'zcmt0002' 'ZCMF16_NM' 'L' 'X'.
+ ENDIF.
+
+ IF gs_chk-fld17 = 'X'.
+ PERFORM field_setting USING
+ '2' 'ZCMF17_DC' gs_chk-f_fld17 'zcmt0002' 'ZCMF17_DC' 'L' 'X'.
+ ENDIF.
+
+ PERFORM field_setting USING :
+ '2' 'ZSORT_KEY' TEXT-f03 'zcmt0002' 'ZSORT_KEY' 'L' 'X',
+ '2' 'AENAM' TEXT-f04 'zcmt0002' 'AENAM' 'C' ' ',
+ '2' 'AEDAT' TEXT-f05 'zcmt0002' 'AEDAT' 'C' ' ',
+ '2' 'AEZET' TEXT-f06 'zcmt0002' 'AEZET' 'C' ' '.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form FIELD_SETTING
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_
+*& --> TEXT_F01
+*& --> P_
+*&---------------------------------------------------------------------*
+FORM field_setting USING option field text ref_tab ref_fld just edit.
+
+ DATA ls_fcat TYPE lvc_s_fcat.
+
+ CLEAR ls_fcat.
+ col_pos = col_pos + 1.
+
+ ls_fcat-col_pos = col_pos.
+ ls_fcat-fieldname = field.
+ ls_fcat-scrtext_l =
+ ls_fcat-scrtext_m =
+ ls_fcat-scrtext_s =
+ ls_fcat-reptext = text.
+ ls_fcat-just = just.
+ ls_fcat-edit = edit.
+ ls_fcat-lowercase = 'X'.
+
+ CASE field.
+ WHEN 'ZCLASS'.
+ ls_fcat-outputlen = 6.
+ ls_fcat-hotspot = 'X'.
+
+ WHEN 'ZCLSS_DESC' .
+ ls_fcat-outputlen = 50.
+
+ WHEN 'ZCMF10_CH'.
+ ls_fcat-outputlen = 50.
+ ls_fcat-intlen = 400.
+ ls_fcat-ref_table = 'zcmt0002'.
+ ls_fcat-ref_field = 'ZCMF10_CH'.
+
+ WHEN 'ZCMF11_QU'.
+ ls_fcat-outputlen = 18.
+ ls_fcat-ref_table = ref_tab.
+ ls_fcat-ref_field = ref_fld.
+ ls_fcat-qfieldname = 'ZCMF12_UT'.
+
+ WHEN 'ZCMF12_UT'.
+ ls_fcat-outputlen = 3.
+ ls_fcat-ref_table = ref_tab.
+ ls_fcat-ref_field = ref_fld.
+ ls_fcat-f4availabl = 'X'.
+ ls_fcat-checktable = 'T006'.
+
+ WHEN 'ZCMF13_CR'.
+ ls_fcat-outputlen = 17.
+ ls_fcat-ref_table = ref_tab.
+ ls_fcat-ref_field = ref_fld.
+ ls_fcat-cfieldname = 'ZCMF14_CK'.
+
+ WHEN 'ZCMF14_CK'.
+ ls_fcat-outputlen = 5.
+ ls_fcat-ref_table = ref_tab.
+ ls_fcat-ref_field = ref_fld.
+ ls_fcat-f4availabl = 'X'.
+ ls_fcat-checktable = 'TCURC'.
+
+ WHEN 'ZCMF17_DC'.
+ ls_fcat-outputlen = 17.
+ ls_fcat-ref_table = ref_tab.
+ ls_fcat-ref_field = ref_fld.
+
+ WHEN OTHERS.
+ CASE field(4).
+ WHEN 'ZCM_'.
+ ls_fcat-dd_outlen = 20.
+ ls_fcat-key = 'X'.
+
+ WHEN 'ZCMF'.
+ ls_fcat-dd_outlen = 30.
+
+ WHEN OTHERS.
+ ENDCASE.
+ ENDCASE.
+
+ CASE option.
+ WHEN '1'.
+ APPEND ls_fcat TO gt_fcat.
+
+ WHEN '2'.
+ APPEND ls_fcat TO gt_fcat2.
+ ENDCASE.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form EXCLUDE_TOOLBAR
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> GT_EXCLUDE
+*&---------------------------------------------------------------------*
+FORM exclude_toolbar.
+
+ CLEAR : gt_exclude, gt_exclude[].
+
+ APPEND:
+ cl_gui_alv_grid=>mc_fc_loc_undo TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_auf TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_average TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_back_classic TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_abc TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_chain TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_crbatch TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_crweb TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_lineitems TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_master_data TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_more TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_report TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_xint TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_xxl TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_col_invisible TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_col_optimize TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_current_variant TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_data_save TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_delete_filter TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_deselect_all TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_detail TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_expcrdata TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_expcrdesig TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_expcrtempl TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_html TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_url_copy_to_clipboard TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_expmdb TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_extend TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_f4 TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_filter TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_find TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_fix_columns TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_graph TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_help TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_info TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_load_variant TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_copy TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_html TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_copy_row TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_cut TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_delete_row TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_insert_row TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_move_row TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_append_row TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_paste TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_loc_paste_new_row TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_maintain_variant TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_maximum TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_minimum TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_pc_file TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_call_xml_export TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_print TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_print_back TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_print_prev TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_refresh TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_reprep TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_save_variant TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_select_all TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_send TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_separator TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_sort TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_sort_asc TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_sort_dsc TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_sum TO gt_exclude,
+* cl_gui_alv_grid=>mc_fc_subtot TO gt_exclude,
+ cl_gui_alv_grid=>mc_mb_sum TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_sum TO gt_exclude,
+* cl_gui_alv_grid=>mc_mb_export TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_to_office TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_to_rep_tree TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_unfix_columns TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_views TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_view_crystal TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_view_excel TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_view_grid TO gt_exclude,
+ cl_gui_alv_grid=>mc_fc_word_processor TO gt_exclude.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form SET_LAYOUT
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM set_layout.
+
+ CLEAR : gs_variant, gs_layout.
+
+ gs_variant-report = sy-repid.
+ gs_variant-username = sy-uname.
+* gs_variant-handle = 1.
+
+* gs_layout-grid_title = 'ALV TITLE'. "Alv title
+* gs_layout-smalltitle = 'X'. "Small title
+ gs_layout-cwidth_opt = 'X'. "Optimize field
+ gs_layout-zebra = 'X'. "Zebra line color
+* gs_layout-no_rowmark = ' '. "Hide rowmark
+ gs_layout-no_toolbar = 'X'. "Hide toolbar
+* gs_layout-ctab_fname = 'COLOR'. "Cell color control field
+* gs_layout-stylefname = 'CELLTAB'. "Cell edit control field
+* gs_layout-excp_fname = 'ICON'. "Exception field
+ gs_layout-sel_mode = 'B'. "Alv selection mode
+* 'A': Multiple Columns. Multiple Rows. Button Enable. Single Cell
+* 'B': Multiple Columns. Single Rows. Button Disable. No Cell
+* 'C': Multiple Columns. Multiple Rows. Button Disable. No Cell
+* 'D': Multiple Columns. Multiple Rows. Button Enable. Multiple Cell
+
+ CLEAR gs_layout2.
+ gs_layout2-cwidth_opt = 'A'.
+ gs_layout2-zebra = 'X'.
+ gs_layout2-smalltitle = 'X'. "Small title
+ gs_layout2-sel_mode = 'D'.
+ gs_layout2-stylefname = 'CELLTAB'.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form SET_EVENT_RECEIVER
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM set_event_receiver .
+
+** 0 - No Edit / 1 - Edit mode
+* CALL METHOD g_grid2->set_ready_for_input
+* EXPORTING
+* i_ready_for_input = 1.
+
+** Enter
+* CALL METHOD g_grid2->register_edit_event
+* EXPORTING
+* i_event_id = cl_gui_alv_grid=>mc_evt_enter.
+
+* Modify
+ CALL METHOD g_grid2->register_edit_event
+ EXPORTING
+ i_event_id = cl_gui_alv_grid=>mc_evt_enter.
+
+** Data Change
+* CALL METHOD g_grid2->check_changed_data
+* IMPORTING
+* e_valid = g_valid.
+
+* Event receiver 생성 및 활성화
+ CREATE OBJECT g_event_receiver.
+* SET HANDLER g_event_receiver->handle_data_changed FOR g_grid1.
+* SET HANDLER g_event_receiver->handle_user_command FOR g_grid1.
+* SET HANDLER g_event_receiver->handle_toolbar FOR g_grid1.
+* SET HANDLER g_event_receiver->handle_onf4 FOR g_grid1.
+* SET HANDLER g_event_receiver->handle_double_click FOR g_grid1.
+ SET HANDLER g_event_receiver->handle_hotspot_click FOR g_grid1.
+* SET HANDLER g_event_receiver->handle_top_of_page FOR g_grid1.
+ SET HANDLER g_event_receiver->handle_data_changed FOR g_grid2.
+* SET HANDLER g_event_receiver->handle_data_changed_finished FOR g_grid2.
+ SET HANDLER g_event_receiver->handle_user_command FOR g_grid2.
+ SET HANDLER g_event_receiver->handle_toolbar FOR g_grid2.
+* SET HANDLER g_event_receiver->handle_onf4 FOR g_grid2.
+* SET HANDLER g_event_receiver->handle_double_click FOR g_grid2.
+* SET HANDLER g_event_receiver->handle_hotspot_click FOR g_grid2.
+* SET HANDLER g_event_receiver->handle_top_of_page FOR g_grid2.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form DISPLAY_GRID
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM display_grid.
+
+ CALL METHOD g_grid1->set_table_for_first_display
+ EXPORTING
+ is_layout = gs_layout
+ is_variant = gs_variant
+* it_toolbar_excluding = gt_exclude
+ i_save = 'A'
+* 'A' : USER별, 기본세팅 선택 가능 / 'U' : USER별 / ' ' 저장불가
+ i_default = 'X'
+* 'X' DEFAULT 변형 저장 가능 / ' 'DEFAULT 변형 저장 불가능
+ CHANGING
+ it_fieldcatalog = gt_fcat[]
+ it_outtab = gt_class[].
+* it_sort = gt_sort[].
+
+ CALL METHOD g_grid2->set_table_for_first_display
+ EXPORTING
+ is_layout = gs_layout2
+ is_variant = gs_variant
+ it_toolbar_excluding = gt_exclude
+ i_save = 'A'
+* 'A' : USER별, 기본세팅 선택 가능 / 'U' : USER별 / ' ' 저장불가
+ i_default = 'X'
+* 'X' DEFAULT 변형 저장 가능 / ' 'DEFAULT 변형 저장 불가능
+ CHANGING
+ it_fieldcatalog = gt_fcat2[]
+ it_outtab = gt_detail[].
+* it_sort = gt_sort2[].
+
+ IF gv_zauthority = 'X'.
+ g_grid2->set_ready_for_input( 1 ).
+ ELSE.
+ g_grid2->set_ready_for_input( 0 ).
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form REFRESH_ALV
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_
+*&---------------------------------------------------------------------*
+FORM refresh_alv.
+
+ CLEAR gs_stbl.
+ gs_stbl-row = 'X'.
+ gs_stbl-col = 'X'.
+
+ CALL METHOD g_grid1->refresh_table_display
+ EXPORTING
+ is_stable = gs_stbl.
+
+ CALL METHOD g_grid2->refresh_table_display
+ EXPORTING
+ is_stable = gs_stbl.
+
+ IF gv_zauthority = 'X'.
+ g_grid2->set_ready_for_input( 1 ).
+ ELSE.
+ g_grid2->set_ready_for_input( 0 ).
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_EVENT_TOOLBAR
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> E_OBJECT
+*& --> E_INTERACTIVE
+*&---------------------------------------------------------------------*
+FORM alv_event_toolbar USING e_object TYPE REF TO cl_alv_event_toolbar_set
+ e_interactive TYPE c.
+
+ IF gv_zauthority = 'X'.
+ PERFORM alv_append_toolbar USING
+ 'INSERT'
+ 0
+ icon_system_save
+ 'SAVE'
+ TEXT-t13 "저장
+ TEXT-t13
+ ' '
+ ' '
+ 4
+ CHANGING e_object->mt_toolbar.
+
+ PERFORM alv_append_toolbar USING
+ 'INSERT'
+ 0
+ icon_delete_row
+ 'DEL'
+ TEXT-t05 "행 삭제
+ TEXT-t05
+ ' '
+ ' '
+ 3
+ CHANGING e_object->mt_toolbar.
+
+ PERFORM alv_append_toolbar USING
+ 'INSERT'
+ 0
+ icon_insert_row
+ 'NEW'
+ TEXT-t04 "행 추가
+ TEXT-t04
+ ' '
+ ' '
+ 2
+ CHANGING e_object->mt_toolbar.
+
+ PERFORM alv_append_toolbar USING
+ 'INSERT'
+ 0
+ icon_refresh
+ 'REF'
+ TEXT-t12 "새로고침
+ TEXT-t12
+ ' '
+ ' '
+ 1
+ CHANGING e_object->mt_toolbar.
+
+* .. Separator
+ PERFORM alv_append_toolbar USING
+ 'INSERT'
+ 0
+ icon_create_copy
+ 'COPY'
+ TEXT-t14 "추가언어적용
+ TEXT-t14
+ ' '
+ ' '
+ 5
+ CHANGING e_object->mt_toolbar.
+
+ ENDIF.
+
+* .. Separator
+ PERFORM alv_append_toolbar USING
+ 'APPEND'
+ 3
+ ' '
+ ' '
+ ' '
+ ' '
+ ' '
+ ' '
+ '3'
+ CHANGING e_object->mt_toolbar.
+
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_APPEND_TOOLBAR
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_
+*& --> P_0
+*& --> ICON_SELECT_ALL
+*& --> ZCMG1_UCOMM_SELA
+*& --> LV_NATXT
+*& --> P_
+*& --> P_d
+*& --> P_
+*& <-- PRF_OBJECT_>MT_TOOLBAR
+*&---------------------------------------------------------------------*
+FORM alv_append_toolbar USING pv_ttype TYPE any
+ pv_btype TYPE tb_btype
+ pv_icon TYPE any
+ pv_function TYPE any
+ pv_quickinfo TYPE any
+ pv_text TYPE any
+ pv_disabled TYPE any
+ pv_checked TYPE any
+ pv_index TYPE any
+ CHANGING pt_button TYPE ttb_button.
+
+ DATA ls_toolbar TYPE stb_button.
+
+ CLEAR ls_toolbar.
+ CASE pv_btype.
+ WHEN 0. "0:Button (normal)
+ MOVE: pv_icon TO ls_toolbar-icon,
+ pv_function TO ls_toolbar-function,
+ pv_quickinfo TO ls_toolbar-quickinfo,
+ pv_text TO ls_toolbar-text,
+ pv_disabled TO ls_toolbar-disabled,
+ pv_checked TO ls_toolbar-checked.
+
+ WHEN 3. "3:Separator
+ MOVE pv_btype TO ls_toolbar-butn_type.
+
+ WHEN OTHERS.
+ EXIT.
+ ENDCASE.
+
+ CASE pv_ttype.
+ WHEN 'INSERT'.
+ INSERT ls_toolbar INTO pt_button INDEX 1.
+
+ WHEN OTHERS.
+ INSERT ls_toolbar INTO pt_button INDEX pv_index.
+ ENDCASE.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_USER_COMMAND
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> E_UCOMM
+*&---------------------------------------------------------------------*
+FORM alv_user_command USING e_ucomm TYPE sy-ucomm.
+
+ DATA lv_ans.
+
+ CASE e_ucomm.
+ WHEN 'NEW'.
+ PERFORM insert_row.
+
+ WHEN 'DEL'.
+ PERFORM delete_row.
+
+ WHEN 'SAVE'.
+ PERFORM popup_to_confirm USING TEXT-t11
+ TEXT-q02
+ TEXT-t07
+ TEXT-t08
+ space
+ CHANGING lv_ans.
+
+ IF lv_ans = '1'.
+ PERFORM make_save_data.
+ ENDIF.
+
+ WHEN 'REF'.
+ SORT gt_detail BY zsort_key zcm_code1 zcm_code2 zcm_code3 zcm_code4 zcm_code5 zcm_code6 zcm_code7 zcm_code8.
+ PERFORM refresh_alv.
+
+ WHEN 'COPY'. " 언어별 라인 추가
+ PERFORM data_copy_ind_languge.
+
+ ENDCASE.
+
+ CALL METHOD cl_gui_cfw=>set_new_ok_code
+ EXPORTING
+ new_code = 'REFRESH'.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form INSERT_ROW
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM insert_row.
+
+ CLEAR gt_detail.
+ gt_detail-zclass = gv_class.
+ gt_detail-zmodule = gv_module.
+
+ gv_mode = 'RW'.
+ REFRESH : gt_detail-celltab, gt_celltab.
+ PERFORM append_celltab USING gv_mode.
+ INSERT LINES OF gt_celltab INTO TABLE gt_detail-celltab.
+
+ APPEND gt_detail.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form DELETE_ROW
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM delete_row.
+
+ DATA lv_ans TYPE c.
+
+* 1. 선택한 행 체크
+ PERFORM get_selected_rows CHANGING gv_error.
+ CHECK gv_error <> 'X'.
+
+* 2. 삭제 확인 Popup
+ PERFORM popup_to_confirm USING TEXT-t06
+ TEXT-q01
+ TEXT-t07
+ TEXT-t08
+ space
+ CHANGING lv_ans.
+
+ IF lv_ans = '1'.
+ PERFORM check_pk_duplicate.
+ PERFORM delete_data.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form GET_SELECTED_ROWS
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& <-- GV_ERROR
+*&---------------------------------------------------------------------*
+FORM get_selected_rows CHANGING o_error.
+
+ DATA ls_row TYPE lvc_s_row.
+
+ CLEAR o_error.
+ CALL METHOD g_grid2->get_selected_rows
+ IMPORTING
+ et_index_rows = gt_rows.
+
+ IF gt_rows[] IS INITIAL.
+ o_error = 'X'.
+ MESSAGE s000 WITH TEXT-e02 DISPLAY LIKE 'E'.
+ EXIT.
+ ELSE.
+ LOOP AT gt_detail.
+ CLEAR gt_detail-mark.
+ MODIFY gt_detail TRANSPORTING mark.
+ ENDLOOP.
+
+ CLEAR ls_row.
+ LOOP AT gt_rows INTO ls_row.
+ CLEAR gt_detail.
+ READ TABLE gt_detail INDEX ls_row-index.
+ IF sy-subrc = 0.
+ gt_detail-mark = 'X'.
+ MODIFY gt_detail INDEX ls_row-index.
+ ENDIF.
+
+ CLEAR ls_row.
+ ENDLOOP.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form POPUP_TO_CONFIRM
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> TEXT_T06
+*& --> TEXT_Q01
+*& --> TEXT_T12
+*& --> TEXT_T13
+*& --> SPACE
+*& <-- LV_ANS
+*&---------------------------------------------------------------------*
+FORM popup_to_confirm USING title question button1 button2 cancel
+ CHANGING o_ans.
+
+ CLEAR o_ans.
+
+ CALL FUNCTION 'POPUP_TO_CONFIRM'
+ EXPORTING
+ titlebar = title
+ text_question = question
+ text_button_1 = button1
+ text_button_2 = button2
+ default_button = '2'
+ display_cancel_button = cancel
+ IMPORTING
+ answer = o_ans
+ EXCEPTIONS
+ text_not_found = 1
+ OTHERS = 2.
+
+ IF sy-subrc <> 0.
+* Implement suitable error handling here
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form DELETE_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> GV_ERROR
+*&---------------------------------------------------------------------*
+FORM delete_data.
+
+ DATA : lv_suc(5) ,
+ lv_err(5).
+
+ CLEAR : lv_suc, lv_err.
+
+ LOOP AT gt_detail WHERE mark = 'X'.
+ CLEAR gt_0071_pk.
+ READ TABLE gt_0071_pk WITH KEY zmodule = gt_detail-zmodule
+ zclass = gt_detail-zclass
+ zcm_code1 = gt_detail-zcm_code1
+ zcm_code2 = gt_detail-zcm_code2
+ zcm_code3 = gt_detail-zcm_code3
+ zcm_code4 = gt_detail-zcm_code4
+ zcm_code5 = gt_detail-zcm_code5
+ zcm_code6 = gt_detail-zcm_code6
+ zcm_code7 = gt_detail-zcm_code7
+ zcm_code8 = gt_detail-zcm_code8
+ BINARY SEARCH.
+
+ IF sy-subrc = 0.
+ DELETE FROM zcmt0002 WHERE spras = sy-langu
+ AND zmodule = gt_detail-zmodule
+ AND zclass = gt_detail-zclass
+ AND zcm_code1 = gt_detail-zcm_code1
+ AND zcm_code2 = gt_detail-zcm_code2
+ AND zcm_code3 = gt_detail-zcm_code3
+ AND zcm_code4 = gt_detail-zcm_code4
+ AND zcm_code5 = gt_detail-zcm_code5
+ AND zcm_code6 = gt_detail-zcm_code6
+ AND zcm_code7 = gt_detail-zcm_code7
+ AND zcm_code8 = gt_detail-zcm_code8.
+
+ IF sy-subrc = 0.
+ COMMIT WORK.
+ lv_suc = lv_suc + 1.
+ DELETE gt_detail.
+ ELSE.
+ ROLLBACK WORK.
+ lv_err = lv_err + 1.
+ ENDIF.
+ ELSE.
+ DELETE gt_detail.
+ IF sy-subrc = 0.
+ lv_suc = lv_suc + 1.
+ ELSE.
+ lv_err = lv_err + 1.
+ ENDIF.
+ ENDIF.
+
+ CLEAR gt_detail.
+ ENDLOOP.
+
+ CONDENSE : lv_suc NO-GAPS,
+ lv_err NO-GAPS.
+
+ MESSAGE i000 WITH TEXT-t09 lv_suc TEXT-t10 lv_err.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_DOUBLE_CLICK
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> E_ROW
+*& --> E_COLUMN
+*& --> ES_ROW_NO
+*&---------------------------------------------------------------------*
+FORM alv_double_click USING e_row
+ e_column
+ es_row_no.
+
+ DATA ls_class LIKE LINE OF gt_class.
+
+ CLEAR ls_class.
+
+ CASE e_column.
+ WHEN 'ZCLASS' OR 'ZCLSS_DESC'.
+ READ TABLE gt_class INTO ls_class INDEX e_row.
+
+ IF ls_class-zclass IS INITIAL.
+ ELSE.
+ CLEAR : gv_module, gv_class.
+ gv_module = ls_class-zmodule.
+ gv_class = ls_class-zclass.
+ PERFORM display_detail_data USING ls_class.
+ ENDIF.
+
+ CALL METHOD cl_gui_cfw=>set_new_ok_code
+ EXPORTING
+ new_code = 'REFRESH'.
+
+ WHEN OTHERS.
+ ENDCASE.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form DISPLAY_DETAIL_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> LS_CLASS
+*&---------------------------------------------------------------------*
+FORM display_detail_data USING ps_class STRUCTURE gt_class.
+
+ SORT gt_0070 BY zmodule zclass.
+ CLEAR gt_0070.
+ READ TABLE gt_0070 WITH KEY zmodule = ps_class-zmodule
+ zclass = ps_class-zclass BINARY SEARCH.
+
+ CHECK sy-subrc = 0.
+
+ CLEAR : gt_0071, gt_0071[].
+ SELECT zmodule zclass
+ zcm_code1 zcm_code2 zcm_code3 zcm_code4
+ zcm_code5 zcm_code6 zcm_code7 zcm_code8
+ zcmf01_ch zcmf02_ch zcmf03_ch zcmf04_ch
+ zcmf05_ch zcmf06_ch zcmf07_ch zcmf08_ch
+ zcmf09_ch zcmf10_ch zcmf11_qu zcmf12_ut
+ zcmf13_cr zcmf14_ck zcmf15_nm zcmf16_nm zcmf17_dc
+ zsort_key
+ ernam erdat erzet
+ aenam aedat aezet
+ FROM zcmt0002
+ INTO CORRESPONDING FIELDS OF TABLE gt_0071
+ WHERE spras = sy-langu
+ AND zmodule = gt_0070-zmodule
+ AND zclass = gt_0070-zclass.
+
+ IF sy-subrc = 0.
+ SORT gt_0071 BY zmodule zclass.
+ ENDIF.
+
+ PERFORM check_cm_authority.
+
+ PERFORM make_detail_data USING gt_0070.
+
+ PERFORM set_fcat_detail.
+
+ CALL METHOD g_grid2->set_frontend_fieldcatalog
+ EXPORTING
+ it_fieldcatalog = gt_fcat2.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_DATA_CHANGED
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> ER_DATA_CHANGED
+*& --> E_ONF4_AFTER
+*&---------------------------------------------------------------------*
+FORM alv_data_changed USING er_data_changed TYPE REF TO cl_alv_changed_data_protocol
+ e_onf4_after.
+
+ DATA : ls_mod_cells TYPE lvc_s_modi,
+ ls_cells TYPE lvc_s_modi,
+ lv_code LIKE zcmt0002-zcm_code1,
+ lv_fld_c LIKE zcmt0002-zcmf01_ch,
+ lv_fld_c2 LIKE zcmt0002-zcmf10_ch,
+ lv_fld_n LIKE zcmt0002-zcmf15_nm,
+ lv_fld_d LIKE zcmt0002-zcmf17_dc.
+
+ LOOP AT er_data_changed->mt_good_cells INTO ls_mod_cells.
+
+ CASE ls_mod_cells-fieldname.
+ WHEN 'ZCM_CODE1' OR 'ZCM_CODE2' OR
+ 'ZCM_CODE3' OR 'ZCM_CODE4' OR
+ 'ZCM_CODE5' OR 'ZCM_CODE6' OR
+ 'ZCM_CODE7' OR 'ZCM_CODE8' .
+
+ PERFORM get_cell_value USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ CHANGING lv_code.
+
+ PERFORM modify_cell USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ lv_code.
+
+ WHEN 'ZCMF01_CH' OR 'ZCMF02_CH' OR 'ZCMF03_CH' OR
+ 'ZCMF04_CH' OR 'ZCMF05_CH' OR 'ZCM06_CH' OR
+ 'ZCMF07_CH' OR 'ZCMF08_CH' OR 'ZCM09_CH'.
+
+ PERFORM get_cell_value USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ CHANGING lv_fld_c.
+
+ PERFORM modify_cell USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ lv_fld_c.
+
+ WHEN 'ZCMF10_CH'.
+ PERFORM get_cell_value USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ CHANGING lv_fld_c2.
+
+ PERFORM modify_cell USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ lv_fld_c2.
+
+ WHEN 'ZCMF15_NM' OR 'ZCMF16_NM'.
+ PERFORM get_cell_value USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ CHANGING lv_fld_n.
+
+ PERFORM modify_cell USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ lv_fld_n.
+
+ WHEN 'ZCMF17_DC' .
+ PERFORM get_cell_value USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ CHANGING lv_fld_d.
+
+ PERFORM modify_cell USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ lv_fld_d.
+
+ WHEN 'ZCMF11_QU' OR 'ZCMF12_UT' OR 'ZCM13_CR' OR
+ 'ZCMF14_CK'.
+
+ PERFORM get_cell_value USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ CHANGING lv_fld_c.
+
+ PERFORM modify_cell USING er_data_changed
+ ls_mod_cells-row_id
+ ls_mod_cells-fieldname
+ lv_fld_c.
+
+ PERFORM refresh_alv.
+
+ WHEN OTHERS.
+ ENDCASE.
+ ENDLOOP.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form GET_CELL_VALUE
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> ER_DATA_CHANGED
+*& --> LV_ROW_ID
+*& --> LV_TABIX
+*& --> LV_FNAME
+*& <--
+*&---------------------------------------------------------------------*
+FORM get_cell_value USING er_data_changed TYPE REF TO cl_alv_changed_data_protocol
+ pv_row_id TYPE lvc_s_modi-row_id
+ pv_fname TYPE any
+ CHANGING pv_value.
+
+ CLEAR pv_value.
+ CALL METHOD er_data_changed->get_cell_value
+ EXPORTING
+ i_row_id = pv_row_id
+ i_fieldname = pv_fname
+ IMPORTING
+ e_value = pv_value.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form MODIFY_CELL
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> ER_DATA_CHANGED
+*& --> LV_ROW_ID
+*& --> LV_TABIX
+*& --> P_
+*& --> _ZCM_CODE1
+*&---------------------------------------------------------------------*
+FORM modify_cell USING er_data_changed TYPE REF TO cl_alv_changed_data_protocol
+ pv_row_id TYPE lvc_s_modi-row_id
+ pv_fname ": TYPE any
+ pv_value. " TYPE any.
+
+ CALL METHOD er_data_changed->modify_cell
+ EXPORTING
+ i_row_id = pv_row_id
+ i_fieldname = pv_fname
+ i_value = pv_value.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_DATA_CHANGED_FINISHED
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> E_MODIFIED
+*&---------------------------------------------------------------------*
+FORM alv_data_changed_finished TABLES pt_good_cells TYPE lvc_t_modi
+ USING pv_modified TYPE c.
+
+ DATA : lt_good_cells TYPE TABLE OF lvc_s_modi-fieldname,
+ ls_good_cells LIKE LINE OF lt_good_cells,
+ lv_refresh TYPE c.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_HOTSPOT_CLICK
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> E_ROW_ID
+*& --> E_COLUMN_ID
+*& --> ES_ROW_NO
+*&---------------------------------------------------------------------*
+FORM alv_hotspot_click USING e_row_id TYPE lvc_s_row
+ e_column_id TYPE lvc_s_col
+ es_row_no TYPE lvc_s_roid.
+
+ DATA ls_class LIKE LINE OF gt_class.
+
+ CLEAR ls_class.
+
+ CHECK e_column_id-fieldname = 'ZCLASS' .
+
+ gv_zauthority = 'X'.
+
+ READ TABLE gt_class INTO ls_class INDEX es_row_no-row_id.
+
+ IF ls_class-zclass IS INITIAL.
+ ELSE.
+ CLEAR gv_class.
+ gv_class = ls_class-zclass.
+ PERFORM display_detail_data USING ls_class.
+ ENDIF.
+
+ CALL METHOD cl_gui_cfw=>set_new_ok_code
+ EXPORTING
+ new_code = 'REFRESH'.
+
+ CALL METHOD cl_gui_control=>set_focus
+ EXPORTING
+ control = g_grid1.
+
+ CONCATENATE '▶' ls_class-zclass ls_class-zclss_desc INTO gv_gridtitle SEPARATED BY space.
+ CALL METHOD g_grid2->set_gridtitle
+ EXPORTING
+ i_gridtitle = gv_gridtitle.
+
+ENDFORM.
+*&---------------------------------------------------------------------*
+*& Form data_copy_ind_languge
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM data_copy_ind_languge .
+
+* EN으로 Login 후에 작업한 내용을 KO로 로그인해서 별도 작업 없이 같은 값을 확장시켜 주고 싶은 경우
+* 해당언어를 입력하여 확장시키는 기능 구현
+
+* 확인 Popup
+ CLEAR lv_ans.
+ PERFORM popup_to_confirm USING TEXT-t14
+ TEXT-q03
+ TEXT-t07
+ TEXT-t08
+ space
+ CHANGING lv_ans.
+
+ IF lv_ans = '1'.
+ CLEAR gv_langu.
+ CALL SCREEN 0110 STARTING AT 35 10 .
+ ENDIF.
+
+
+ENDFORM.
+*&---------------------------------------------------------------------*
+*& Form ADD_ADJUST_TABLE
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM add_adjust_table .
+
+ DATA: lt_0010 LIKE zcmt0001 OCCURS 0 WITH HEADER LINE,
+ lt_0020 LIKE zcmt0002 OCCURS 0 WITH HEADER LINE.
+
+* 화면에 선택한 라인에 대한 code 값을 먼저 모두 삭제하고 다시 생성하는 형태
+
+ IF gt_detail[] IS INITIAL.
+ MESSAGE i001 WITH TEXT-e01.
+ ELSE.
+
+ " 여기서 zcmt0001 을 굳이 삭제하지 않는 이유는
+ " 어차피 한건당 1 line 으로 구성되어 있고 modify 작업시 없으면 insert 작업이 이루어지므로 여기서 굳이 삭제하지 않음.
+
+ READ TABLE gt_detail INDEX 1.
+ CHECK sy-subrc = 0.
+
+
+ BREAK zenabap04.
+* DELETE FROM zcmt0002
+* WHERE zmodule = gv_module
+* AND zclass = gv_class
+* AND spras = gv_langu.
+* IF sy-subrc = 0.
+* COMMIT WORK.
+* ENDIF.
+
+ " Time stamp......... 유저, 현재일, 현재시각
+ gs_0000-ernam = gs_0000-aenam = sy-uname.
+ gs_0000-erdat = gs_0000-aedat = sy-datum.
+ gs_0000-erzet = gs_0000-aezet = sy-uzeit.
+ "=======================================
+
+ SELECT *
+ INTO TABLE @lt_0010
+ FROM zcmt0001
+ WHERE zmodule = @gv_module
+ AND zclass = @gv_class
+ AND spras = @sy-langu.
+
+ IF lt_0010[] IS NOT INITIAL.
+ lt_0010-spras = gv_langu.
+ MOVE-CORRESPONDING gs_0000 TO lt_0010.
+
+ MODIFY lt_0010 TRANSPORTING spras ernam erdat erzet aenam aedat aezet
+ WHERE spras = sy-langu.
+
+ MODIFY zcmt0001 FROM TABLE lt_0010.
+ IF sy-subrc = 0.
+
+ COMMIT WORK.
+ SELECT *
+ INTO TABLE @lt_0020
+ FROM zcmt0002
+ WHERE zmodule = @gv_module
+ AND zclass = @gv_class
+ AND spras = @sy-langu.
+
+ IF lt_0020[] IS NOT INITIAL.
+ lt_0020-spras = gv_langu.
+ MOVE-CORRESPONDING gs_0000 TO lt_0020.
+
+ MODIFY lt_0020 TRANSPORTING spras ernam erdat erzet aenam aedat aezet
+ WHERE spras = sy-langu.
+
+ MODIFY zcmt0002 FROM TABLE lt_0020.
+ IF sy-subrc = 0.
+ COMMIT WORK.
+ MESSAGE s001 WITH TEXT-s01.
+ ENDIF.
+ ENDIF.
+
+ ENDIF.
+ ENDIF.
+ ENDIF.
+
+ENDFORM.
diff --git a/src/zcmr0001f01.prog.xml b/src/zcmr0001f01.prog.xml
new file mode 100644
index 0000000..f753640
--- /dev/null
+++ b/src/zcmr0001f01.prog.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ ZCMR0001F01
+ I
+ 3
+ X
+
+
+ -
+ R
+ Include ZCMR0001F01
+ 19
+
+
+
+
+
diff --git a/src/zcmr0001pai.prog.abap b/src/zcmr0001pai.prog.abap
new file mode 100644
index 0000000..157f689
--- /dev/null
+++ b/src/zcmr0001pai.prog.abap
@@ -0,0 +1,90 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0001PAI
+*&---------------------------------------------------------------------*
+*&---------------------------------------------------------------------*
+*& Module EXIT INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE exit INPUT.
+
+ CHECK gv_okcode = 'EXIT'.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module USER_COMMAND_0100 INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE user_command_0100 INPUT.
+
+ DATA lv_ans.
+
+ CLEAR gv_saveok.
+ gv_saveok = gv_okcode.
+ CLEAR gv_okcode.
+
+ CASE gv_saveok.
+ WHEN 'BACK' OR 'CANC'.
+ LEAVE TO SCREEN 0.
+
+ WHEN 'SAVE'.
+* 툴바 대체 요청 2020.03.30
+* . 삭제 확인 Popup
+* PERFORM popup_to_confirm USING TEXT-t11
+* TEXT-q02
+* TEXT-t07
+* TEXT-t08
+* space
+* CHANGING lv_ans.
+* IF lv_ans = '1'.
+* PERFORM make_save_data.
+* ENDIF.
+ ENDCASE.
+
+ cl_gui_cfw=>dispatch( ).
+
+ENDMODULE.
+*&---------------------------------------------------------------------*
+*& Module USER_COMMAND_0110 INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE user_command_0110 INPUT.
+
+ CLEAR gv_saveok.
+ gv_saveok = gv_okcode.
+ CLEAR gv_okcode.
+
+ CASE gv_saveok.
+ WHEN 'OKAY'.
+ SELECT SINGLE spras
+ INTO gv_langu
+ FROM t002
+ WHERE spras = gv_langu.
+ IF sy-subrc = 0.
+ PERFORM ADD_ADJUST_TABLE.
+ LEAVE TO SCREEN 0.
+ ELSE.
+ IF gv_langu IS INITIAL.
+ MESSAGE i000 WITH TEXT-e05.
+ ELSE.
+ MESSAGE i000 WITH TEXT-e06.
+ ENDIF.
+ ENDIF.
+ WHEN OTHERS.
+ LEAVE TO SCREEN 0.
+ ENDCASE.
+
+ENDMODULE.
+*&---------------------------------------------------------------------*
+*& Module EXIT_0110 INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE exit_0110 INPUT.
+
+ LEAVE TO SCREEN 0.
+
+ENDMODULE.
diff --git a/src/zcmr0001pai.prog.xml b/src/zcmr0001pai.prog.xml
new file mode 100644
index 0000000..ec16124
--- /dev/null
+++ b/src/zcmr0001pai.prog.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ ZCMR0001PAI
+ I
+ 3
+ X
+
+
+ -
+ R
+ Include ZCMR0001PAI
+ 19
+
+
+
+
+
diff --git a/src/zcmr0001pbo.prog.abap b/src/zcmr0001pbo.prog.abap
new file mode 100644
index 0000000..fd78443
--- /dev/null
+++ b/src/zcmr0001pbo.prog.abap
@@ -0,0 +1,44 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0001PBO
+*&---------------------------------------------------------------------*
+*&---------------------------------------------------------------------*
+*& Module STATUS_0100 OUTPUT
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+MODULE STATUS_0100 OUTPUT.
+
+ SET PF-STATUS '0100'.
+ SET TITLEBAR '0100' WITH GV_MODULE_DESC.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module CREATE_ALV_0100 OUTPUT
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+MODULE CREATE_ALV_0100 OUTPUT.
+
+ IF G_DOCKING_CONTAINER IS INITIAL.
+ PERFORM CREATE_GRID.
+ PERFORM SET_FCAT_CLASS.
+ PERFORM SET_FCAT_DETAIL.
+ PERFORM EXCLUDE_TOOLBAR.
+ PERFORM SET_LAYOUT.
+ PERFORM SET_EVENT_RECEIVER.
+ PERFORM DISPLAY_GRID.
+ ELSE.
+ PERFORM REFRESH_ALV.
+ ENDIF.
+
+ENDMODULE.
+*&---------------------------------------------------------------------*
+*& Module STATUS_0110 OUTPUT
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+MODULE status_0110 OUTPUT.
+ SET PF-STATUS '0110'.
+ SET TITLEBAR '0110'.
+ENDMODULE.
diff --git a/src/zcmr0001pbo.prog.xml b/src/zcmr0001pbo.prog.xml
new file mode 100644
index 0000000..7be2c73
--- /dev/null
+++ b/src/zcmr0001pbo.prog.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ ZCMR0001PBO
+ I
+ 3
+ X
+
+
+ -
+ R
+ Include ZCMR0001PBO
+ 19
+
+
+
+
+
diff --git a/src/zcmr0001s01.prog.abap b/src/zcmr0001s01.prog.abap
new file mode 100644
index 0000000..c486403
--- /dev/null
+++ b/src/zcmr0001s01.prog.abap
@@ -0,0 +1,12 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0001S01
+*&---------------------------------------------------------------------*
+*----------------------------------------------------------------------*
+* SELECTION-SCREEN
+*----------------------------------------------------------------------*
+SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. " TITLE TEXT-B01.
+ SELECT-OPTIONS: s_module FOR zcmt0002-zmodule
+ OBLIGATORY " MODIF ID mod
+ MATCHCODE OBJECT zcmh_zmodule,
+ s_class FOR zcmt0002-zclass.
+SELECTION-SCREEN END OF BLOCK b1.
diff --git a/src/zcmr0001s01.prog.xml b/src/zcmr0001s01.prog.xml
new file mode 100644
index 0000000..100d73a
--- /dev/null
+++ b/src/zcmr0001s01.prog.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ ZCMR0001S01
+ I
+ 3
+ X
+
+
+ -
+ R
+ Include ZCMR0001S01
+ 19
+
+
+
+
+
diff --git a/src/zcmr0001top.prog.abap b/src/zcmr0001top.prog.abap
new file mode 100644
index 0000000..68d655c
--- /dev/null
+++ b/src/zcmr0001top.prog.abap
@@ -0,0 +1,243 @@
+
+
+*----------------------------------------------------------------------*
+* Tables
+*----------------------------------------------------------------------*
+TABLES: zcmt0003, zcmt0002.
+
+*----------------------------------------------------------------------*
+* Types, Internal Table, Structure
+*----------------------------------------------------------------------*
+TYPES : BEGIN OF ty_chk,
+ cd1, "사용유무
+ cd2,
+ cd3,
+ cd4,
+ cd5, "사용유무
+ cd6,
+ cd7,
+ cd8,
+ f_cd1(30), "Code1 필드명
+ f_cd2(30), "Code1 필드명
+ f_cd3(30), "Code1 필드명
+ f_cd4(30), "Code1 필드명
+ f_cd5(30), "Code1 필드명
+ f_cd6(30), "Code1 필드명
+ f_cd7(30), "Code1 필드명
+ f_cd8(30), "Code1 필드명
+ fld01, "사용유무
+ fld02,
+ fld03,
+ fld04,
+ fld05,
+ fld06,
+ fld07,
+ fld08,
+ fld09,
+ fld10,
+ fld11,
+ fld12,
+ fld13,
+ fld14,
+ fld15,
+ fld16,
+ fld17,
+ f_fld01(30), "Code1 필드
+ f_fld02(30), "Code2 필드
+ f_fld03(30), "Code3 필드
+ f_fld04(30), "Code4 필드
+ f_fld05(30), "Code5 필드
+ f_fld06(30), "Code6 필드
+ f_fld07(30), "Code7 필드
+ f_fld08(30), "Code8 필드
+ f_fld09(30), "Code9 필드
+ f_fld10(30), "Code10 필드
+ f_fld11(30), "Code11 필드
+ f_fld12(30), "Code12 필드
+ f_fld13(30), "Code13 필드
+ f_fld14(30), "Code14 필드
+ f_fld15(30), "Code15 필드
+ f_fld16(30), "Code16 필드
+ f_fld17(30), "Code17 필드
+ END OF ty_chk.
+
+DATA gs_chk TYPE ty_chk.
+
+DATA : BEGIN OF gt_0070 OCCURS 0,
+ zmodule LIKE zcmt0001-zmodule,
+ zclass LIKE zcmt0001-zclass,
+ zclss_desc LIKE zcmt0001-zclss_desc,
+ zprgname LIKE zcmt0001-zprgname,
+ zcode2_ox LIKE zcmt0001-zcode2_ox,
+ zcode3_ox LIKE zcmt0001-zcode3_ox,
+ zcode4_ox LIKE zcmt0001-zcode4_ox,
+ zcode5_ox LIKE zcmt0001-zcode5_ox,
+ zcode6_ox LIKE zcmt0001-zcode6_ox,
+ zcode7_ox LIKE zcmt0001-zcode7_ox,
+ zcode8_ox LIKE zcmt0001-zcode8_ox,
+ zcd1_desc LIKE zcmt0001-zcd1_desc,
+ zcd2_desc LIKE zcmt0001-zcd2_desc,
+ zcd3_desc LIKE zcmt0001-zcd3_desc,
+ zcd4_desc LIKE zcmt0001-zcd4_desc,
+ zcd5_desc LIKE zcmt0001-zcd5_desc,
+ zcd6_desc LIKE zcmt0001-zcd6_desc,
+ zcd7_desc LIKE zcmt0001-zcd7_desc,
+ zcd8_desc LIKE zcmt0001-zcd8_desc,
+ zf01_ox LIKE zcmt0001-zf01_ox,
+ zf01_desc LIKE zcmt0001-zf01_desc,
+ zf02_ox LIKE zcmt0001-zf02_ox,
+ zf02_desc LIKE zcmt0001-zf02_desc,
+ zf03_ox LIKE zcmt0001-zf03_ox,
+ zf03_desc LIKE zcmt0001-zf03_desc,
+ zf04_ox LIKE zcmt0001-zf04_ox,
+ zf04_desc LIKE zcmt0001-zf04_desc,
+ zf05_ox LIKE zcmt0001-zf05_ox,
+ zf05_desc LIKE zcmt0001-zf05_desc,
+ zf06_ox LIKE zcmt0001-zf06_ox,
+ zf06_desc LIKE zcmt0001-zf06_desc,
+ zf07_ox LIKE zcmt0001-zf07_ox,
+ zf07_desc LIKE zcmt0001-zf07_desc,
+ zf08_ox LIKE zcmt0001-zf08_ox,
+ zf08_desc LIKE zcmt0001-zf08_desc,
+ zf09_ox LIKE zcmt0001-zf09_ox,
+ zf09_desc LIKE zcmt0001-zf09_desc,
+ zf10_ox LIKE zcmt0001-zf10_ox,
+ zf10_desc LIKE zcmt0001-zf10_desc,
+ zf11_ox LIKE zcmt0001-zf11_ox,
+ zf11_desc LIKE zcmt0001-zf11_desc,
+ zf12_ox LIKE zcmt0001-zf12_ox,
+ zf12_desc LIKE zcmt0001-zf12_desc,
+ zf13_ox LIKE zcmt0001-zf13_ox,
+ zf13_desc LIKE zcmt0001-zf13_desc,
+ zf14_ox LIKE zcmt0001-zf14_ox,
+ zf14_desc LIKE zcmt0001-zf14_desc,
+ zf15_ox LIKE zcmt0001-zf15_ox,
+ zf15_desc LIKE zcmt0001-zf15_desc,
+ zf16_ox LIKE zcmt0001-zf16_ox,
+ zf16_desc LIKE zcmt0001-zf16_desc,
+ zf17_ox LIKE zcmt0001-zf17_ox,
+ zf17_desc LIKE zcmt0001-zf17_desc,
+ END OF gt_0070.
+
+DATA gt_0071 TYPE TABLE OF zcmt0002 WITH HEADER LINE.
+
+DATA : BEGIN OF gt_0071_pk OCCURS 0,
+ zmodule LIKE zcmt0002-zmodule,
+ zclass LIKE zcmt0002-zclass,
+ zcm_code1 LIKE zcmt0002-zcm_code1,
+ zcm_code2 LIKE zcmt0002-zcm_code2,
+ zcm_code3 LIKE zcmt0002-zcm_code3,
+ zcm_code4 LIKE zcmt0002-zcm_code4,
+ zcm_code5 LIKE zcmt0002-zcm_code5,
+ zcm_code6 LIKE zcmt0002-zcm_code6,
+ zcm_code7 LIKE zcmt0002-zcm_code7,
+ zcm_code8 LIKE zcmt0002-zcm_code8,
+ END OF gt_0071_pk.
+
+* AL:V - 클래스
+DATA : BEGIN OF gt_class OCCURS 0,
+ zmodule LIKE zcmt0001-zmodule,
+ zclass LIKE zcmt0001-zclass,
+ zclss_desc LIKE zcmt0001-zclss_desc,
+ zprgname LIKE zcmt0001-zprgname,
+ END OF gt_class.
+
+* ALV - 클래스 별 상세 정보
+DATA : BEGIN OF gt_detail OCCURS 0,
+ mark,
+ zmodule LIKE zcmt0002-zmodule,
+ zclass LIKE zcmt0002-zclass,
+ zcm_code1 LIKE zcmt0002-zcm_code1,
+ zcm_code2 LIKE zcmt0002-zcm_code2,
+ zcm_code3 LIKE zcmt0002-zcm_code3,
+ zcm_code4 LIKE zcmt0002-zcm_code4,
+ zcm_code5 LIKE zcmt0002-zcm_code5,
+ zcm_code6 LIKE zcmt0002-zcm_code6,
+ zcm_code7 LIKE zcmt0002-zcm_code7,
+ zcm_code8 LIKE zcmt0002-zcm_code8,
+ zcmf01_ch LIKE zcmt0002-zcmf01_ch,
+ zcmf02_ch LIKE zcmt0002-zcmf02_ch,
+ zcmf03_ch LIKE zcmt0002-zcmf03_ch,
+ zcmf04_ch LIKE zcmt0002-zcmf04_ch,
+ zcmf05_ch LIKE zcmt0002-zcmf05_ch,
+ zcmf06_ch LIKE zcmt0002-zcmf06_ch,
+ zcmf07_ch LIKE zcmt0002-zcmf07_ch,
+ zcmf08_ch LIKE zcmt0002-zcmf08_ch,
+ zcmf09_ch LIKE zcmt0002-zcmf09_ch,
+ zcmf10_ch LIKE zcmt0002-zcmf10_ch,
+ zcmf11_qu LIKE zcmt0002-zcmf11_qu,
+ zcmf12_ut LIKE zcmt0002-zcmf12_ut,
+ zcmf13_cr LIKE zcmt0002-zcmf13_cr,
+ zcmf14_ck LIKE zcmt0002-zcmf14_ck,
+ zcmf15_nm LIKE zcmt0002-zcmf15_nm,
+ zcmf16_nm LIKE zcmt0002-zcmf16_nm,
+ zcmf17_dc LIKE zcmt0002-zcmf17_dc,
+ zsort_key LIKE zcmt0002-zsort_key,
+ ernam LIKE zcmt0001-ernam,
+ erdat LIKE zcmt0001-erdat,
+ erzet LIKE zcmt0001-erzet,
+ aenam LIKE zcmt0001-aenam,
+ aedat LIKE zcmt0001-aedat,
+ aezet LIKE zcmt0001-aezet,
+ celltab TYPE lvc_t_styl, "Cell Style,
+ colinfo TYPE lvc_t_scol, "Cell Color
+ END OF gt_detail.
+
+*----------------------------------------------------------------------*
+* Global Variable
+*----------------------------------------------------------------------*
+DATA : gv_module_desc LIKE dd07t-ddtext,
+ gv_class LIKE zcmt0001-zclass,
+ gv_module LIKE zcmt0001-zmodule,
+ gv_total TYPE i,
+ gv_cursor(50) TYPE c,
+ gv_error,
+ gv_mode(2), "Edit Mode
+ gv_okcode TYPE sy-ucomm,
+ gv_saveok TYPE sy-ucomm.
+
+DATA: gv_zauthority VALUE 'X'.
+DATA: gv_f4_module(2),
+ gv_f4_class(5).
+
+DATA: gv_langu LIKE sy-langu,
+ gs_0000 LIKE zcms0010.
+*----------------------------------------------------------------------*
+* Constants
+*----------------------------------------------------------------------*
+CONSTANTS c_module(15) TYPE c VALUE 'ZDMODULE'.
+
+*----------------------------------------------------------------------*
+* Search Help
+*----------------------------------------------------------------------*
+DATA: gt_rtntab LIKE ddshretval OCCURS 0 WITH HEADER LINE,
+ gt_dynpread LIKE dynpread OCCURS 0 WITH HEADER LINE.
+
+*&---------------------------------------------------------------------*
+*& Data & Variables
+*&---------------------------------------------------------------------*
+DATA : g_event_receiver TYPE REF TO lcl_event_receiver,
+ g_docking_container TYPE REF TO cl_gui_docking_container,
+ g_custom_container TYPE REF TO cl_gui_custom_container,
+ g_grid1 TYPE REF TO cl_gui_alv_grid,
+ g_grid2 TYPE REF TO cl_gui_alv_grid,
+ gs_variant TYPE disvariant,
+ gs_layout TYPE lvc_s_layo,
+ gs_layout2 TYPE lvc_s_layo,
+ col_pos TYPE i,
+ gt_fcat TYPE lvc_t_fcat,
+ gt_fcat2 TYPE lvc_t_fcat,
+ gt_sort TYPE lvc_t_sort WITH HEADER LINE,
+ gt_exclude TYPE ui_functions,
+ gs_stbl TYPE lvc_s_stbl,
+ gv_valid TYPE c,
+ gt_celltab TYPE lvc_t_styl, "ALV 제어: 셀에 대한 스타일 테이블
+ gt_rows TYPE lvc_t_row,
+ gt_fcode TYPE TABLE OF sy-ucomm,
+ gv_gridtitle TYPE lvc_title.
+
+* Title
+DATA : g_document TYPE REF TO cl_dd_document,
+ g_splitter TYPE REF TO cl_gui_splitter_container,
+ g_grid_left TYPE REF TO cl_gui_container,
+ g_grid_right TYPE REF TO cl_gui_container.
diff --git a/src/zcmr0001top.prog.xml b/src/zcmr0001top.prog.xml
new file mode 100644
index 0000000..ac8742f
--- /dev/null
+++ b/src/zcmr0001top.prog.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ ZCMR0001TOP
+ I
+ 3
+ X
+
+
+ -
+ R
+ Include ZCMR0001TOP
+ 19
+
+
+
+
+
diff --git a/src/zcmr0002.prog.abap b/src/zcmr0002.prog.abap
new file mode 100644
index 0000000..08581da
--- /dev/null
+++ b/src/zcmr0002.prog.abap
@@ -0,0 +1,61 @@
+*&---------------------------------------------------------------------*
+*& 프로그램 ID : ZCMR0002
+*& 프로그램 명 : [CM] Common Code Define
+*& 생성일 : 2025.05.20
+*& 생성자 :
+*& 프로그램 설명 : Common Code Define
+*&---------------------------------------------------------------------*
+* Modification Log
+*----------------------------------------------------------------------*
+* Tag Date Author Description
+*----------------------------------------------------------------------*
+* N 2025.05.20 Initial Release
+*----------------------------------------------------------------------*
+*& 변경번호 : #1(CTS No) 변경자 : XXX 변경일자 : YYYY..MM.DD
+*& 변경내용 : 간단한 설명,(상세내용은 변경부분에 주석처리)
+*&---------------------------------------------------------------------*
+REPORT zcmr0002 MESSAGE-ID zcmm01.
+
+INCLUDE zcmr0002c01. "ALV Class
+INCLUDE zcmr0002top. "Top Include
+INCLUDE zcmr0002s01. "Screen
+INCLUDE zcmr0002pbo. "PBO-Modules
+INCLUDE zcmr0002pai. "PAI-Modules
+INCLUDE zcmr0002f01. "Business FORM Routine
+
+
+*----------------------------------------------------------------------*
+* AT SELECTION-SCREEN
+*----------------------------------------------------------------------*
+*AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MODULE-LOW.
+* PERFORM SELECT_MODULE USING MODULE.
+* S_MODULE-LOW = MODULE.
+
+*----------------------------------------------------------------------*
+* INITIALIZATION
+*----------------------------------------------------------------------*
+INITIALIZATION.
+ PERFORM SCRFIELDS_FUNCTXT.
+
+*----------------------------------------------------------------------*
+AT SELECTION-SCREEN.
+*----------------------------------------------------------------------*
+ CASE SSCRFIELDS-UCOMM.
+ WHEN 'FC01'.
+ PERFORM SCR_USER_COMMAND. "Module Code Management
+ ENDCASE.
+
+*----------------------------------------------------------------------*
+* START-OF-SELECTION
+*----------------------------------------------------------------------*
+START-OF-SELECTION.
+ PERFORM GET_TITLE.
+* PERFORM CHECK_PARAM.
+ PERFORM GET_DATA.
+ PERFORM MAKE_DATA.
+
+*----------------------------------------------------------------------*
+* END-OF-SELECTION
+*----------------------------------------------------------------------*
+END-OF-SELECTION.
+ CALL SCREEN 100.
diff --git a/src/zcmr0002.prog.xml b/src/zcmr0002.prog.xml
new file mode 100644
index 0000000..b8adf98
--- /dev/null
+++ b/src/zcmr0002.prog.xml
@@ -0,0 +1,1349 @@
+
+
+
+
+
+ ZCMR0002
+ 1
+ 3
+ X
+ X
+
+
+ -
+
+ ZCMR0002
+ 0100
+ 3
+ Common Code Define Screen
+ N
+ 0100
+ 200
+ 255
+
+
+
+ SCREEN
+ SCREEN
+
+
+ CUST_CTRL
+ CONT1
+ SCREEN
+ 001
+ 001
+ 101
+ 031
+ X
+ X
+ 010
+ 010
+
+
+ TABLE_CTRL
+ TC_FLD
+ SCREEN
+ 017
+ 104
+ 066
+ 015
+ X
+ X
+ ENTRY
+ X
+ X
+ X
+ X
+ X
+ NONE
+ NONE
+
+
+
+
+ SCREEN
+ SCREEN
+ PUSH
+ %#AUTOTEXT001
+ Create_
+ ICON_CREATE
+ X
+ 001
+ 105
+ 012
+ 009
+ 001
+ NEW
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ PUSH
+ %#AUTOTEXT043
+ Save__
+ ICON_SYSTEM_SAVE
+ X
+ 001
+ 116
+ 011
+ 009
+ 001
+ SAVE
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ PUSH
+ %#AUTOTEXT002
+ Delete_
+ ICON_DELETE
+ X
+ 001
+ 127
+ 012
+ 010
+ 001
+ DEL
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ FRAME
+ %#AUTOTEXT041
+ _________________________________________________________________
+ 002
+ 104
+ 066
+ 066
+ 005
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT053
+ Module
+ 003
+ 105
+ 006
+ 006
+ 001
+ CHAR
+ N
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZMODULE
+ __
+ 003
+ 112
+ 002
+ 002
+ 001
+ GR1
+ CHAR
+ X
+ X
+ ZCMH_ZMODULE
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-MODULE_T
+ ____________________
+ 003
+ 115
+ 020
+ 020
+ 001
+ CHAR
+ X
+ X
+ N
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT004
+ Class
+ 004
+ 105
+ 005
+ 005
+ 001
+ CHAR
+ N
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCLASS
+ ______
+ 004
+ 112
+ 006
+ 006
+ 001
+ GR1
+ CHAR
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCLSS_DESC
+ _________________________________________________
+ 004
+ 119
+ 049
+ 049
+ 001
+ GR2
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT052
+ Using_Program
+ 005
+ 105
+ 013
+ 013
+ 001
+ CHAR
+ N
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZPRGNAME
+ _________________________________________________
+ 005
+ 119
+ 049
+ 049
+ 001
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ FRAME
+ %#AUTOTEXT005
+ Key_Field__________
+ 007
+ 104
+ 020
+ 020
+ 010
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ FRAME
+ %#AUTOTEXT006
+ Key_Field_Name______________________________
+ 007
+ 125
+ 045
+ 045
+ 010
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT042
+ Key_1(13)__
+ 008
+ 106
+ 011
+ 011
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ CHECK
+ NO_MEANS
+ 008
+ 121
+ 001
+ 001
+ 001
+ GR2
+ CHAR
+ X
+ N
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT008
+ Key_1
+ 008
+ 127
+ 005
+ 005
+ 001
+ CHAR
+ N
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCD1_DESC
+ ______________________________
+ 008
+ 134
+ 030
+ 030
+ 001
+ GR3
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT007
+ Key_2(13)__
+ 009
+ 106
+ 011
+ 011
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ CHECK
+ GS_DATA-ZCODE2_OX
+ 009
+ 121
+ 001
+ 001
+ 001
+ GR2
+ CHAR
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT010
+ Key_2
+ 009
+ 127
+ 005
+ 005
+ 001
+ CHAR
+ N
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCD2_DESC
+ ______________________________
+ 009
+ 134
+ 030
+ 030
+ 001
+ GR3
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT009
+ Key_3(13)__
+ 010
+ 106
+ 011
+ 011
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ CHECK
+ GS_DATA-ZCODE3_OX
+ 010
+ 121
+ 001
+ 001
+ 001
+ GR2
+ CHAR
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT012
+ Key_3
+ 010
+ 127
+ 005
+ 005
+ 001
+ CHAR
+ N
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCD3_DESC
+ ______________________________
+ 010
+ 134
+ 030
+ 030
+ 001
+ GR3
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT011
+ Key_4(13)__
+ 011
+ 106
+ 011
+ 011
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ CHECK
+ GS_DATA-ZCODE4_OX
+ 011
+ 121
+ 001
+ 001
+ 001
+ GR2
+ CHAR
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT013
+ Key_4
+ 011
+ 127
+ 005
+ 005
+ 001
+ CHAR
+ N
+ X
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCD4_DESC
+ ______________________________
+ 011
+ 134
+ 030
+ 030
+ 001
+ GR3
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT044
+ Key_5(13)__
+ 012
+ 106
+ 011
+ 011
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ CHECK
+ GS_DATA-ZCODE5_OX
+ 012
+ 121
+ 001
+ 001
+ 001
+ GR2
+ CHAR
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT048
+ Key_5
+ 012
+ 127
+ 005
+ 005
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCD5_DESC
+ ______________________________
+ 012
+ 134
+ 030
+ 030
+ 001
+ GR3
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT045
+ Key_6(13)__
+ 013
+ 106
+ 011
+ 011
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ CHECK
+ GS_DATA-ZCODE6_OX
+ 013
+ 121
+ 001
+ 001
+ 001
+ GR2
+ CHAR
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT049
+ Key_6
+ 013
+ 127
+ 005
+ 005
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCD6_DESC
+ ______________________________
+ 013
+ 134
+ 030
+ 030
+ 001
+ GR3
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT046
+ Key_7(13)__
+ 014
+ 106
+ 011
+ 011
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ CHECK
+ GS_DATA-ZCODE7_OX
+ 014
+ 121
+ 001
+ 001
+ 001
+ GR2
+ CHAR
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT050
+ Key_7
+ 014
+ 127
+ 005
+ 005
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCD7_DESC
+ ______________________________
+ 014
+ 134
+ 030
+ 030
+ 001
+ GR3
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT047
+ Key_8(18)__
+ 015
+ 106
+ 011
+ 011
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ CHECK
+ GS_DATA-ZCODE8_OX
+ 015
+ 121
+ 001
+ 001
+ 001
+ GR2
+ CHAR
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ TEXT
+ %#AUTOTEXT051
+ Key_8
+ 015
+ 127
+ 005
+ 005
+ 001
+ CHAR
+ N
+
+
+ SCREEN
+ SCREEN
+ TEMPLATE
+ GS_DATA-ZCD8_DESC
+ ______________________________
+ 015
+ 134
+ 030
+ 030
+ 001
+ GR3
+ CHAR
+ X
+ X
+ X
+
+
+ SCREEN
+ SCREEN
+ OKCODE
+ GV_OKCODE
+ ____________________
+ 020
+ 020
+ 001
+ CHAR
+ X
+
+
+ TABLE_CTRL
+ TC_FLD
+ TEXT
+ %#AUTOTEXT035
+ Field
+ 001
+ 005
+ 065
+ 001
+ CHAR
+ N
+ X
+
+
+ TABLE_CTRL
+ TC_FLD
+ TEXT
+ %#AUTOTEXT036
+ Field
+ 001
+ 001
+ 005
+ 009
+ 001
+ CHAR
+ N
+ X
+
+
+ TABLE_CTRL
+ TC_FLD
+ TEXT
+ %#AUTOTEXT037
+ Type
+ 001
+ 002
+ 004
+ 010
+ 001
+ CHAR
+ N
+ X
+
+
+ TABLE_CTRL
+ TC_FLD
+ TEXT
+ %#AUTOTEXT040
+ Use
+ 001
+ 003
+ 003
+ 004
+ 001
+ CHAR
+ N
+ X
+
+
+ TABLE_CTRL
+ TC_FLD
+ TEXT
+ %#AUTOTEXT039
+ Filed_Name
+ 001
+ 004
+ 010
+ 002
+ 001
+ CHAR
+ N
+ X
+
+
+ TABLE_CTRL
+ TC_FLD
+ TEMPLATE
+ GT_FLD-TXT1
+ ______
+ 001
+ 001
+ 006
+ 009
+ 001
+ CHAR
+ X
+ X
+ N
+
+
+ TABLE_CTRL
+ TC_FLD
+ TEMPLATE
+ GT_FLD-TXT2
+ __________
+ 001
+ 002
+ 010
+ 010
+ 001
+ CHAR
+ X
+ X
+ N
+
+
+ TABLE_CTRL
+ TC_FLD
+ CHECK
+ GT_FLD-OX
+ 001
+ 003
+ 001
+ 008
+ 001
+ GR4
+ CHAR
+ X
+ X
+
+
+ TABLE_CTRL
+ TC_FLD
+ TEMPLATE
+ GT_FLD-DESC
+ ______________________________
+ 001
+ 004
+ 030
+ 030
+ 001
+ GR4
+ CHAR
+ X
+ X
+ X
+
+
+
+
+ PROCESS BEFORE OUTPUT.
+
+
+ MODULE STATUS_0100.
+
+
+ MODULE SET_SCREEN.
+
+
+ MODULE CREATE_ALV_0100.
+
+
+
+ LOOP WITH CONTROL TC_FLD.
+
+
+ MODULE GET_FLD_DATA.
+
+
+ ENDLOOP.
+
+
+
+ MODULE SET_CURSOR.
+
+
+
+ PROCESS AFTER INPUT.
+
+
+ MODULE EXIT AT EXIT-COMMAND.
+
+
+
+ FIELD GS_DATA-ZMODULE MODULE CHECK_ZMODULE ON REQUEST.
+
+
+
+ CHAIN.
+
+
+ FIELD : GS_DATA-ZMODULE, GS_DATA-ZCLASS MODULE CHECK_KEY
+
+
+ ON CHAIN-REQUEST.
+
+
+ ENDCHAIN.
+
+
+
+ LOOP WITH CONTROL TC_FLD.
+
+
+ MODULE MODIFY_FLD.
+
+
+ ENDLOOP.
+
+
+
+ MODULE USER_COMMAND_0100.
+
+
+
+ *PROCESS ON VALUE-REQUEST.
+
+
+ * FIELD GS_DATA-ZMODULE MODULE GET_MODULE_TEXT.
+
+
+
+
+
+
+ 000001
+ 000001
+
+
+
+ 100
+ D
+ 000001
+ 000001
+ 0001
+ ZCMR0002
+
+
+
+
+ BACK
+ 001
+ S
+ Back
+
+
+ CANC
+ 001
+ S
+ ICON_CANCEL
+ @0W@
+ Cancel
+
+
+ EXIT
+ 001
+ E
+ S
+ Exit
+
+
+ SAVE
+ 001
+ S
+ ICON_SYSTEM_SAVE
+ @2L@
+ Save
+
+
+
+
+ 000001
+ 03
+ BACK
+ 001
+
+
+ 000001
+ 11
+ SAVE
+ 001
+
+
+ 000001
+ 12
+ CANC
+ 001
+
+
+ 000001
+ 15
+ EXIT
+ 001
+
+
+
+
+ 100
+ BACK
+
+
+ 100
+ CANC
+
+
+ 100
+ EXIT
+
+
+ 100
+ SAVE
+
+
+
+
+ A
+ 000001
+ D
+ Common Code Define
+
+
+ P
+ 000001
+ D
+ Common Code Define
+
+
+ B
+ 000001
+ 0001
+ D
+ Common Code Define
+
+
+
+
+ 100
+ &
+
+
+
+
+ -
+ I
+ E01
+ Not found data
+ 17
+
+ -
+ I
+ E02
+ Exist Duplicated Data.
+ 44
+
+ -
+ I
+ E03
+ Save Fail
+ 19
+
+ -
+ I
+ E04
+ Delete Fail
+ 21
+
+ -
+ I
+ E05
+ Check Module Field
+ 28
+
+ -
+ I
+ E06
+ Check Module Field
+ 28
+
+ -
+ I
+ E07
+ Module and Class do not match.
+ 60
+
+ -
+ I
+ F01
+ Module
+ 16
+
+ -
+ I
+ F02
+ Class
+ 15
+
+ -
+ I
+ F03
+ Class Name
+ 20
+
+ -
+ I
+ F04
+ Changed by
+ 20
+
+ -
+ I
+ F05
+ Changed on
+ 20
+
+ -
+ I
+ F06
+ Changed at
+ 20
+
+ -
+ I
+ F07
+ Using Program
+ 23
+
+ -
+ I
+ M01
+ Progressing....
+ 25
+
+ -
+ I
+ M02
+ Progressing....
+ 25
+
+ -
+ I
+ M03
+ Not Exitst Module
+ 27
+
+ -
+ I
+ M04
+ Already Exist Class Name.
+ 50
+
+ -
+ I
+ M05
+ Save Complete
+ 23
+
+ -
+ I
+ M06
+ This module can't delete
+ 46
+
+ -
+ I
+ M07
+ Delete Complete
+ 25
+
+ -
+ I
+ Q01
+ There is data being generated. Would you want to exit?
+ 108
+
+ -
+ I
+ Q02
+ Delete Data
+ 21
+
+ -
+ I
+ SB1
+ %
+ 11
+
+ -
+ I
+ T01
+ Field
+ 10
+
+ -
+ I
+ T02
+ Char
+ 14
+
+ -
+ I
+ T03
+ Num
+ 13
+
+ -
+ I
+ T04
+ Dec.
+ 17
+
+ -
+ I
+ T11
+ Confirm
+ 13
+
+ -
+ I
+ T12
+ Yes
+ 12
+
+ -
+ I
+ T13
+ No
+ 12
+
+ -
+ I
+ T21
+ Fill out all required entry fields
+ 68
+
+ -
+ I
+ T22
+ Common Code
+ 21
+
+ -
+ I
+ T23
+ Common Class
+ 22
+
+ -
+ I
+ T24
+ Common Code Define
+ 28
+
+ -
+ I
+ T25
+ Module unavailable. Check again
+ 64
+
+ -
+ I
+ U01
+ Module Code Management
+ 44
+
+ -
+ R
+ Common Code Define
+ 18
+
+ -
+ S
+ S_MODULE
+ .
+ 14
+ D
+
+
+
+
+
diff --git a/src/zcmr0002c01.prog.abap b/src/zcmr0002c01.prog.abap
new file mode 100644
index 0000000..ec37a4d
--- /dev/null
+++ b/src/zcmr0002c01.prog.abap
@@ -0,0 +1,120 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0002C01
+*&---------------------------------------------------------------------*
+CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
+
+DATA G_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
+
+*----------------------------------------------------------------------*
+* CLASS LCL_EVENT_HANDLER DEFINITION
+*----------------------------------------------------------------------*
+CLASS LCL_EVENT_RECEIVER DEFINITION.
+ PUBLIC SECTION.
+
+ METHODS:
+ HANDLE_DATA_CHANGED
+ FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
+ IMPORTING ER_DATA_CHANGED
+ E_ONF4_AFTER,
+
+ HANDLE_USER_COMMAND
+ FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
+ IMPORTING E_UCOMM,
+
+ HANDLE_TOOLBAR
+ FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
+ IMPORTING E_OBJECT
+ E_INTERACTIVE,
+
+ HANDLE_MENU_BUTTON
+ FOR EVENT MENU_BUTTON OF CL_GUI_ALV_GRID
+ IMPORTING E_OBJECT
+ E_UCOMM,
+
+ HANDLE_ONF4
+ FOR EVENT ONF4 OF CL_GUI_ALV_GRID
+ IMPORTING E_FIELDNAME
+ E_FIELDVALUE
+ ES_ROW_NO
+ ER_EVENT_DATA
+ ET_BAD_CELLS
+ E_DISPLAY,
+
+ HANDLE_CHANGED_FINISHED
+ FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
+ IMPORTING E_MODIFIED,
+
+ HANDLE_DOUBLE_CLICK
+ FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
+ IMPORTING E_ROW
+ E_COLUMN
+ ES_ROW_NO,
+
+ HANDLE_HOTSPOT_CLICK
+ FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
+ IMPORTING E_ROW_ID
+ E_COLUMN_ID
+ ES_ROW_NO,
+
+ HANDLE_TOP_OF_PAGE
+ FOR EVENT TOP_OF_PAGE OF CL_GUI_ALV_GRID
+ IMPORTING E_DYNDOC_ID.
+
+ PRIVATE SECTION.
+
+ENDCLASS.
+
+*----------------------------------------------------------------------*
+* CLASS LCL_EVENT_HANDLER IMPLEMENTATION
+*----------------------------------------------------------------------*
+CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
+ METHOD HANDLE_DATA_CHANGED.
+* PERFORM alv_data_changed USING er_data_changed
+* e_onf4_after.
+ ENDMETHOD. "HANDLE_DATA_CHANGED
+
+ METHOD HANDLE_USER_COMMAND.
+* PERFORM alv_user_command USING e_ucomm.
+ ENDMETHOD. "HANDLE_USER_COMMAND
+
+ METHOD HANDLE_TOOLBAR.
+* PERFORM alv_event_toolbar USING e_object
+* e_interactive.
+ ENDMETHOD. "HANDLE_TOOLBAR
+
+ METHOD HANDLE_MENU_BUTTON.
+* PERFORM alv_menu_button USING e_object
+* e_ucomm.
+ ENDMETHOD. "HANDLE_MENU_BUTTON
+
+ METHOD HANDLE_ONF4.
+ ER_EVENT_DATA->M_EVENT_HANDLED = 'x'.
+* PERFORM alv_onf4 USING e_fieldname
+* e_fieldvalue
+* es_row_no
+* er_event_data
+* et_bad_cells
+* e_display.
+ ENDMETHOD. "HANDLE_ONF4
+
+ METHOD HANDLE_CHANGED_FINISHED.
+* PERFORM alv_changed_finished USING e_modified.
+ ENDMETHOD. "HANDLE_CHANGED_FINISHED
+
+ METHOD HANDLE_DOUBLE_CLICK.
+ PERFORM ALV_DOUBLE_CLICK USING E_ROW
+ E_COLUMN
+ ES_ROW_NO.
+ ENDMETHOD. "HANDLE_DOUBLE_CLICK
+
+ METHOD HANDLE_HOTSPOT_CLICK.
+ PERFORM ALV_HOTSPOT_CLICK USING E_ROW_ID
+ E_COLUMN_ID
+ ES_ROW_NO.
+ ENDMETHOD. "HANDLE_HOTSPOT_CLICK
+
+ METHOD HANDLE_TOP_OF_PAGE.
+* PERFORM top_of_page USING e_dyndoc_id.
+ ENDMETHOD. "HANDLE_TOP_OF_PAGE
+
+ENDCLASS.
diff --git a/src/zcmr0002c01.prog.xml b/src/zcmr0002c01.prog.xml
new file mode 100644
index 0000000..1c6a5e8
--- /dev/null
+++ b/src/zcmr0002c01.prog.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ ZCMR0002C01
+ I
+ E
+ X
+
+
+ -
+ E
+
+
-
+ R
+ Include ZCMR0002C01
+ 19
+
+
+
+
+
+
+
diff --git a/src/zcmr0002f01.prog.abap b/src/zcmr0002f01.prog.abap
new file mode 100644
index 0000000..95bcb98
--- /dev/null
+++ b/src/zcmr0002f01.prog.abap
@@ -0,0 +1,1163 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0002F01
+*&---------------------------------------------------------------------*
+
+*&---------------------------------------------------------------------*
+*& Form GET_DATA
+*&---------------------------------------------------------------------*
+*& 조회 조건에 해당하는 공통코드 관리 데이터를 추출한다.
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM get_data.
+
+ PERFORM progress_indicator USING 1 TEXT-m01.
+
+ CLEAR : gt_zcmt0001, gt_zcmt0001[].
+
+* 1. 공통 코드 관리 테이블 데이터 추출
+ SELECT zmodule zclass zclss_desc zprgname "ZAUTHORITY
+ zcode2_ox zcode3_ox zcode4_ox zcode5_ox
+ zcode6_ox zcode7_ox zcode8_ox
+ zcd1_desc zcd2_desc zcd3_desc zcd4_desc
+ zcd5_desc zcd6_desc zcd7_desc zcd8_desc
+ zf01_ox zf01_desc zf02_ox zf02_desc
+ zf03_ox zf03_desc zf04_ox zf04_desc
+ zf05_ox zf05_desc zf06_ox zf06_desc
+ zf07_ox zf07_desc zf08_ox zf08_desc
+ zf09_ox zf09_desc zf10_ox zf10_desc
+ zf11_ox zf11_desc zf12_ox zf12_desc
+ zf13_ox zf13_desc zf14_ox zf14_desc
+ zf15_ox zf15_desc zf16_ox zf16_desc
+ zf17_ox zf17_desc
+ ernam erdat erzet
+ aenam aedat aezet
+ FROM zcmt0001
+ INTO CORRESPONDING FIELDS OF TABLE gt_zcmt0001
+ WHERE spras = sy-langu
+ AND zmodule IN s_module.
+
+ CHECK sy-subrc = 0.
+ SORT gt_zcmt0001 BY zmodule zclass.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form PROGRESS_INDICATOR
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_1
+*& --> TEXT_M01
+*&---------------------------------------------------------------------*
+FORM progress_indicator USING percentage
+ text.
+
+ DATA : lv_no TYPE p, "For Calculation
+ lv_perc TYPE sy-index,
+ lv_text(255).
+
+ CLEAR : lv_perc, lv_text.
+ IF percentage IS INITIAL.
+ CLEAR lv_no.
+
+ IF gv_total = 0.
+ lv_no = sy-tabix / gv_total * 100. "현재 건/ 총 건수 X 100
+ ENDIF.
+
+ lv_perc = lv_no.
+ lv_text = lv_perc.
+ CONDENSE lv_text NO-GAPS.
+ CONCATENATE lv_text TEXT-sb1 text INTO lv_text SEPARATED BY space.
+ ELSE.
+ lv_perc = percentage.
+ lv_text = text.
+ ENDIF.
+
+ CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
+ EXPORTING
+ percentage = lv_perc
+ text = lv_text.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form MAKE_DATA
+*&---------------------------------------------------------------------*
+*& 결과 화면의 ALV를 구성한다.
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM make_data.
+
+* 1. 화면 오른쪽 내용은 모두 clear함
+* 단, 필드 정의 테이블 구성 (데이터 없음)
+ CLEAR : gs_data, gs_data_old.
+ PERFORM make_fld_data USING 'N'.
+
+* 2. 모듈 텍스트 구하기
+ CLEAR : gt_module_t, gt_module_t[].
+ SELECT *
+ INTO TABLE @gt_module_t
+ FROM zcmt0003.
+ IF sy-subrc = 0.
+ SORT gt_module_t.
+ ENDIF.
+
+* 3. ALV 데이터
+ CLEAR gv_total.
+ DESCRIBE TABLE gt_zcmt0001 LINES gv_total.
+ CHECK gv_total >= 1.
+
+ CLEAR : gt_disp, gt_disp[].
+ LOOP AT gt_zcmt0001.
+ MOVE-CORRESPONDING gt_zcmt0001 TO gt_disp.
+ APPEND gt_disp.
+ CLEAR : gt_disp, gt_zcmt0001.
+ ENDLOOP.
+
+ CHECK NOT gt_disp[] IS INITIAL.
+ SORT gt_disp BY zmodule zclass.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form CHECK_DATA_CHANGED
+*&---------------------------------------------------------------------*
+*& 변경된 데이터 유무체크
+*&---------------------------------------------------------------------*
+*& <-- GV_ERROR
+*&---------------------------------------------------------------------*
+FORM check_data_changed CHANGING o_result.
+
+ DATA lv_ans TYPE n.
+
+ CLEAR o_result.
+
+ IF gs_data_old <> gs_data.
+ PERFORM popup_to_confirm USING TEXT-t11
+ TEXT-q01
+ TEXT-t12
+ TEXT-t13
+ space
+ CHANGING lv_ans.
+
+ IF lv_ans <> '1'.
+ o_result = 'X'.
+ ENDIF.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form POPUP_TO_CONFIRM
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> TEXT_T11
+*& --> TEXT_Q01
+*& --> TEXT_T12
+*& --> TEXT_T13
+*& <-- LV_ANS
+*&---------------------------------------------------------------------*
+FORM popup_to_confirm USING title question button1 button2 cancel
+ CHANGING o_ans.
+
+ CLEAR o_ans.
+
+ CALL FUNCTION 'POPUP_TO_CONFIRM'
+ EXPORTING
+ titlebar = title
+ text_question = question
+ text_button_1 = button1
+ text_button_2 = button2
+ default_button = '2'
+ display_cancel_button = cancel
+ IMPORTING
+ answer = o_ans
+ EXCEPTIONS
+ text_not_found = 1
+ OTHERS = 2.
+
+ IF sy-subrc <> 0.
+* Implement suitable error handling here
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form DISPLAY_CLASS_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> LS_DISP
+*&---------------------------------------------------------------------*
+FORM display_class_data USING ps_disp STRUCTURE gt_disp
+ CHANGING o_result.
+
+ DATA ls_0070 LIKE zcmt0001.
+
+ CLEAR : ls_0070, o_result.
+
+ SELECT SINGLE zmodule zclass zclss_desc zprgname "zauthority
+ zcode2_ox zcode3_ox zcode4_ox
+ zcode5_ox zcode6_ox zcode7_ox zcode8_ox
+ zcd1_desc zcd2_desc zcd3_desc zcd4_desc
+ zcd5_desc zcd6_desc zcd7_desc zcd8_desc
+ zf01_ox zf01_desc zf02_ox zf02_desc
+ zf03_ox zf03_desc zf04_ox zf04_desc
+ zf05_ox zf05_desc zf06_ox zf06_desc
+ zf07_ox zf07_desc zf08_ox zf08_desc
+ zf09_ox zf09_desc zf10_ox zf10_desc
+ zf11_ox zf11_desc zf12_ox zf12_desc
+ zf13_ox zf13_desc zf14_ox zf14_desc
+ zf15_ox zf15_desc zf16_ox zf16_desc
+ zf17_ox zf17_desc
+ ernam erdat erzet
+ aenam aedat aezet
+ FROM zcmt0001
+ INTO CORRESPONDING FIELDS OF ls_0070
+ WHERE spras = sy-langu
+ AND zmodule = ps_disp-zmodule
+ AND zclass = ps_disp-zclass.
+
+ IF sy-subrc = 0.
+ CLEAR : gs_data, gs_data_old.
+ MOVE-CORRESPONDING ls_0070 TO gs_data.
+ gs_data-mode = 'X'.
+ gs_data_old = gs_data.
+
+ PERFORM make_fld_data USING 'D'.
+
+ CALL METHOD cl_gui_cfw=>set_new_ok_code
+ EXPORTING
+ new_code = 'REFRESH'.
+ ELSE.
+ o_result = 'X'.
+ MESSAGE s000 WITH TEXT-e01 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form MAKE_FLD_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_
+*& --> GS_DATA
+*&---------------------------------------------------------------------*
+FORM make_fld_data USING option.
+
+ DATA : lv_index(2) TYPE n,
+ lv_fld_ox(15),
+ lv_fld_desc(17),
+ lv_intig TYPE i,
+ lv_length(10),
+ lv_decimals(10).
+
+ FIELD-SYMBOLS : , .
+
+ REFRESH gt_fld.
+
+ SELECT fieldname, datatype, leng, decimals, domname
+ FROM dd03l
+ WHERE tabname = 'ZCMT0002'
+ AND fieldname LIKE 'ZCMF%'
+ AND substring( fieldname,5,2 ) >= '01'
+ AND substring( fieldname,5,2 ) <= '17'
+ ORDER BY position
+ INTO TABLE @DATA(lt_dd03l).
+
+ DO 17 TIMES.
+ CLEAR : lv_fld_ox, lv_fld_desc, gt_fld.
+ lv_index = lv_index + 1.
+
+ CONCATENATE TEXT-t01 lv_index INTO gt_fld-txt1 SEPARATED BY space.
+
+ READ TABLE lt_dd03l INTO DATA(ls_dd03l) INDEX lv_index.
+
+ IF sy-subrc NE 0. CLEAR ls_dd03l. ENDIF.
+ lv_intig = ls_dd03l-leng.
+ lv_length = lv_intig. CONDENSE lv_length.
+
+ CASE ls_dd03l-datatype.
+ WHEN 'DEC' OR 'QUAN' OR 'CURR'.
+ lv_intig = ls_dd03l-decimals.
+ lv_decimals = lv_intig. CONDENSE lv_decimals.
+ CONCATENATE ls_dd03l-datatype '(' lv_length '.' lv_decimals ')' INTO gt_fld-txt2.
+
+ WHEN OTHERS.
+ CONCATENATE ls_dd03l-datatype '(' lv_length ')' INTO gt_fld-txt2.
+ ENDCASE.
+
+* CASE lv_index.
+* WHEN '7' OR '8'.
+* gt_fld-txt2 = TEXT-t03.
+*
+* WHEN '9'.
+* gt_fld-txt2 = TEXT-t04.
+*
+* WHEN OTHERS.
+* gt_fld-txt2 = TEXT-t02.
+* ENDCASE.
+
+* 신규(N)일땐 공란으로 처리하고,
+* 조회(D)일때만 사용유무와 필드명 데이터를 표시함.
+ IF option = 'D'. "D: Display
+ CONCATENATE 'GS_DATA-ZF' lv_index '_OX' INTO lv_fld_ox.
+ ASSIGN (lv_fld_ox) TO .
+
+ CONCATENATE 'GS_DATA-ZF' lv_index '_DESC' INTO lv_fld_desc.
+ ASSIGN (lv_fld_desc) TO .
+
+ gt_fld-ox = .
+ gt_fld-desc = .
+ ENDIF.
+
+ APPEND gt_fld.
+ ENDDO.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form CHECK_MODULE
+*&---------------------------------------------------------------------*
+*& 프로그램 실행 시 모듈을 선택한 경우와 그냥 조회한 경우에 따라 모듈명 설정을 한다.
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM check_module.
+
+ DATA : lv_no(3) TYPE n,
+ lv_class LIKE zcmt0001-zclass.
+
+ CLEAR s_module.
+ READ TABLE s_module INDEX 1.
+ CHECK NOT s_module-low IS INITIAL.
+* 모듈을 선택하고 프로그램을 실행한 상태에서 신규 버튼을 클릭 시,
+* 모듈은 자동으로 입력
+
+* 모듈을 선택하지 않고 실행한 경우는 그냥 공란으로 표시
+
+ gs_data-zmodule = s_module-low.
+
+* 클래스는 해당 모듈의 최종 번호 + 1로 자동 채번한다. (필수값)
+ CLEAR : lv_no, lv_class.
+ SELECT SINGLE MAX( zclass ) FROM zcmt0001
+ INTO lv_class
+ WHERE spras = sy-langu
+ AND zmodule IN s_module.
+
+ IF lv_class IS INITIAL.
+ CONCATENATE s_module-low '001' INTO gs_data-zclass.
+ ELSE.
+ lv_no = lv_class+2(3).
+ lv_no = lv_no + 1.
+
+ PERFORM conversion_exit_alpha_input USING lv_no
+ CHANGING lv_no.
+
+ CONCATENATE lv_class(2) lv_no INTO gs_data-zclass.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form CONVERSION_EXIT_ALPHA_INPUT
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> LV_NO
+*& <-- LV_NO
+*&---------------------------------------------------------------------*
+FORM conversion_exit_alpha_input USING input
+ CHANGING output.
+
+ CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
+ EXPORTING
+ input = input
+ IMPORTING
+ output = output.
+
+ENDFORM.
+*&---------------------------------------------------------------------*
+*& Module MODIFY_FLD INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE modify_fld INPUT.
+
+ DATA : lv_no TYPE n LENGTH 2,
+ lv_ox(18),
+ lv_desc(18).
+
+ FIELD-SYMBOLS : , .
+
+ MODIFY gt_fld INDEX tc_fld-current_line FROM gt_fld.
+
+ CLEAR : lv_no, lv_ox, lv_desc.
+ lv_no = tc_fld-current_line.
+ CONCATENATE 'GS_DATA-ZF' lv_no '_OX' INTO lv_ox.
+ CONCATENATE 'GS_DATA-ZF' lv_no '_DESC' INTO lv_desc.
+
+ ASSIGN (lv_ox) TO .
+ ASSIGN (lv_desc) TO .
+
+ = gt_fld-ox.
+ = gt_fld-desc.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Form CHECK_PK_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& <-- GV_ERROR
+*&---------------------------------------------------------------------*
+FORM check_pk_data USING option
+ CHANGING o_result.
+
+* 모듈 - 필수 항목
+ IF gs_data-zmodule IS INITIAL.
+ o_result = 'X'.
+ MESSAGE s000 WITH TEXT-f01 TEXT-t21 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+* 클래스 - 필수 항목
+ IF gs_data-zclass IS INITIAL.
+ o_result = 'X'.
+ MESSAGE s000 WITH TEXT-f02 TEXT-t21 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+ IF option = 'S'. "S: Save
+* 클래스명 - 필수 항목
+ IF gs_data-zclss_desc IS INITIAL.
+ o_result = 'X'.
+ MESSAGE s000 WITH TEXT-f03 TEXT-t21 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+* 모듈은 도메인에 등록된 건만 입력 가능
+ IF s_module[] IS INITIAL.
+ READ TABLE gt_module_t WITH KEY zmodule = gs_data-zmodule
+ BINARY SEARCH.
+ IF sy-subrc <> 0.
+ o_result = 'X'.
+ MESSAGE s000 WITH TEXT-e05 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+ ELSE.
+ IF gs_data-zmodule NOT IN s_module.
+ o_result = 'X'.
+ MESSAGE s000 WITH TEXT-e06 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+ ENDIF.
+
+* 모듈 = 클래스 앞 2자리는 동일해야 함
+ IF gs_data-zmodule <> gs_data-zclass(2).
+ o_result = 'X'.
+ MESSAGE s000 WITH TEXT-e07 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form CHECK_PK_DUPLICATE
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& <-- G_ERROR
+*&---------------------------------------------------------------------*
+FORM check_pk_duplicate CHANGING o_result.
+
+ DATA : BEGIN OF ls_0070_pk OCCURS 10,
+ zmodule LIKE zcmt0001-zmodule,
+ zclass LIKE zcmt0001-zclass,
+ END OF ls_0070_pk.
+
+ CLEAR : ls_0070_pk, o_result.
+
+ SELECT SINGLE zmodule zclass FROM zcmt0001
+ INTO ls_0070_pk
+ WHERE spras = sy-langu
+ AND zmodule = gs_data-zmodule
+ AND zclass = gs_data-zclass.
+
+ IF sy-subrc = 0.
+ o_result = 'X'.
+ MESSAGE s000 WITH TEXT-e02 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form SAVE_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& <-- GV_ERROR
+*&---------------------------------------------------------------------*
+FORM save_data USING option.
+
+ DATA ls_save LIKE zcmt0001.
+
+ CLEAR ls_save.
+ MOVE-CORRESPONDING gs_data TO ls_save.
+ ls_save-spras = sy-langu.
+ PERFORM move_gt_fld CHANGING ls_save.
+
+** TIme Stamp
+* CALL FUNCTION 'ZCM_CBO_DATE_SINGLE'
+* CHANGING
+* c_data = ls_save.
+
+ ls_save-aenam = sy-uname.
+ ls_save-aedat = sy-datum.
+ ls_save-aezet = sy-uzeit.
+
+ CASE option.
+ WHEN 'X'.
+ UPDATE zcmt0001 FROM ls_save.
+
+ WHEN OTHERS.
+ ls_save-ernam = sy-uname.
+ ls_save-erdat = sy-datum.
+ ls_save-erzet = sy-uzeit.
+
+ INSERT zcmt0001 FROM ls_save.
+ ENDCASE.
+
+ IF sy-subrc = 0.
+ COMMIT WORK.
+ MESSAGE s000 WITH TEXT-m05. "'저장완료'.
+ ELSE.
+ ROLLBACK WORK.
+ MESSAGE s000 WITH TEXT-e03 DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+ gs_data-ernam = ls_save-ernam.
+ gs_data-erdat = ls_save-erdat.
+ gs_data-erzet = ls_save-erzet.
+ gs_data-aenam = ls_save-aenam.
+ gs_data-aedat = ls_save-aedat.
+ gs_data-aezet = ls_save-aezet.
+ gs_data-mode = 'X'.
+
+ CASE option.
+ WHEN 'X'.
+ PERFORM modify_alv_data USING 'U' gs_data.
+
+ WHEN OTHERS.
+ PERFORM modify_alv_data USING 'I' gs_data.
+ ENDCASE.
+
+ CLEAR gs_data_old.
+ MOVE-CORRESPONDING gs_data TO gs_data_old.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form MOVE_GT_FLD
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& <-- LS_SAVE
+*&---------------------------------------------------------------------*
+FORM move_gt_fld CHANGING ps_save STRUCTURE zcmt0001.
+
+ DATA : lv_no TYPE n LENGTH 2,
+ lv_ox(15) TYPE c,
+ lv_desc(17) TYPE c.
+ FIELD-SYMBOLS : , .
+
+ CLEAR : lv_no, lv_ox, lv_desc.
+
+ LOOP AT gt_fld.
+ lv_no = lv_no + 1.
+
+ CONCATENATE 'PS_SAVE-ZF' lv_no '_OX' INTO lv_ox.
+ CONCATENATE 'PS_SAVE-ZF' lv_no '_DESC' INTO lv_desc.
+ ASSIGN (lv_ox) TO .
+ ASSIGN (lv_desc) TO .
+
+ = gt_fld-ox.
+ = gt_fld-desc.
+
+ CLEAR gt_fld.
+ ENDLOOP.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form DELETE_DATA
+*&---------------------------------------------------------------------*
+*& 선택한 데이터를 DB table에서 삭제
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM delete_data USING option.
+
+ DATA ls_71 TYPE zcmt0002.
+
+ IF gs_data-zmodule = 'CM' AND gs_data-zclass = 'CMART' AND sy-uname(1) <> 'C'.
+ MESSAGE s000 WITH TEXT-m06 DISPLAY LIKE 'E'. " '해당 클래스는 삭제 불가능 합니다.'
+ EXIT.
+ ENDIF.
+
+ IF option = 'X'. "DB table에 존재하는 경우,
+ CLEAR : gv_error, ls_71.
+ SELECT SINGLE zmodule zclass FROM zcmt0002
+ INTO CORRESPONDING FIELDS OF ls_71
+ WHERE spras = sy-langu
+ AND zmodule = gs_data-zmodule
+ AND zclass = gs_data-zclass.
+
+ IF ls_71-zmodule IS INITIAL.
+* zcmt0001테이블에만 존재하고, 71번 테이블에는 데이터가 없는 경우
+ PERFORM delete_db_data USING '70'.
+ ELSE.
+* zcmt0001과 71번 2개의 테이블 모두에 데이터 존재하는 경우
+* 1. 상세 코드 내역 삭제
+ PERFORM delete_db_data USING '71'.
+
+* 2. Class 데이터 삭제
+ CHECK gv_error <> 'X'.
+ PERFORM delete_db_data USING '70'.
+ ENDIF.
+ ELSE.
+* 아직 DB에 저장되지 않은 데이터의 경우,
+* >> ALV리스트에서 삭제 함
+ PERFORM modify_alv_data USING 'D' gs_data.
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form DELETE_DB_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_
+*& --> GS_DATA_ZMODULE
+*& --> GS_DATA_ZCLASS
+*&---------------------------------------------------------------------*
+FORM delete_db_data USING tab_nm.
+
+ DATA lv_text(100).
+
+ CASE tab_nm.
+ WHEN '70'.
+ DELETE FROM zcmt0001 WHERE spras = sy-langu
+ AND zmodule = gs_data-zmodule
+ AND zclass = gs_data-zclass.
+ IF sy-subrc = 0.
+ COMMIT WORK.
+ MESSAGE s000 WITH TEXT-m07. "'삭제완료'.
+
+ PERFORM modify_alv_data USING 'D' gs_data.
+ CLEAR : gs_data, gs_data_old.
+
+ CLEAR : gt_fld-ox, gt_fld-desc.
+ MODIFY gt_fld TRANSPORTING ox desc WHERE ox NE space OR desc NE space.
+ ELSE.
+ ROLLBACK WORK.
+
+ CLEAR lv_text.
+ CONCATENATE '(' TEXT-t23 ')' INTO lv_text.
+ MESSAGE s000 WITH TEXT-e04 lv_text DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+
+ WHEN '71'.
+ DELETE FROM zcmt0002 WHERE spras = sy-langu
+ AND zmodule = gs_data-zmodule
+ AND zclass = gs_data-zclass.
+ IF sy-subrc = 0.
+ COMMIT WORK.
+
+ ELSE.
+ ROLLBACK WORK.
+
+ gv_error = 'X'.
+ CLEAR lv_text.
+ CONCATENATE '(' TEXT-t22 ')' INTO lv_text.
+ MESSAGE s000 WITH TEXT-e04 lv_text DISPLAY LIKE 'E'.
+ EXIT.
+ ENDIF.
+ ENDCASE.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form MODIFY_ALV_DATA
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_
+*& --> GS_DATA
+*&---------------------------------------------------------------------*
+FORM modify_alv_data USING option
+ ps_data STRUCTURE gs_data.
+
+ DATA ls_disp LIKE gt_disp.
+
+ CASE option.
+ WHEN 'D'.
+ DELETE gt_disp WHERE zmodule = ps_data-zmodule
+ AND zclass = ps_data-zclass.
+
+ WHEN 'I'.
+ CLEAR ls_disp.
+ MOVE-CORRESPONDING ps_data TO ls_disp.
+ APPEND ls_disp TO gt_disp.
+ SORT gt_disp BY zmodule zclass.
+
+ WHEN 'U'.
+ CLEAR ls_disp.
+ MOVE-CORRESPONDING ps_data TO ls_disp.
+ MODIFY TABLE gt_disp FROM ls_disp.
+ ENDCASE.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form GET_MODULE_TEXT
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> GS_DATA_MODULE
+*& <-- GS_DATA_MODULE_T
+*&---------------------------------------------------------------------*
+FORM get_module_text USING pv_module
+ CHANGING o_text.
+
+ CLEAR : o_text, gt_module_t.
+ READ TABLE gt_module_t WITH KEY zmodule = pv_module
+ BINARY SEARCH.
+
+ CHECK sy-subrc = 0.
+ o_text = gt_module_t-zmd_desc.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form SELECT_MODULE
+*&---------------------------------------------------------------------*
+FORM select_module USING p_module.
+
+ SELECT domvalue_l,
+ ddtext
+ INTO TABLE @DATA(lt_ddtext)
+ FROM dd07t
+ WHERE domname = @c_module
+ AND ddlanguage = @sy-langu.
+
+ DATA : lt_field LIKE STANDARD TABLE OF dfies INITIAL SIZE 0 WITH HEADER LINE.
+ CALL FUNCTION 'DDIF_FIELDINFO_GET'
+ EXPORTING
+ tabname = 'DD07T'
+ fieldname = 'DOMVALUE_L'
+ lfieldname = 'DOMVALUE_L'
+ IMPORTING
+ dfies_wa = lt_field.
+
+* LT_FIELD-SCRTEXT_S = '모듈'.
+* LT_FIELD-SCRTEXT_M = '모듈'.
+* LT_FIELD-SCRTEXT_L = '모듈'.
+* LT_FIELD-REPTEXT = '모듈'.
+* APPEND LT_FIELD.
+*
+* CALL FUNCTION 'DDIF_FIELDINFO_GET'
+* EXPORTING
+* TABNAME = 'DD07T'
+* FIELDNAME = 'DDTEXT'
+* LFIELDNAME = 'DDTEXT'
+* IMPORTING
+* DFIES_WA = LT_FIELD.
+*
+* LT_FIELD-SCRTEXT_S = '모듈'.
+* LT_FIELD-SCRTEXT_M = '모듈'.
+* LT_FIELD-SCRTEXT_L = '모듈'.
+* LT_FIELD-REPTEXT = '모듈'.
+* APPEND LT_FIELD.
+*
+* DATA : LT_MAP LIKE STANDARD TABLE OF DSELC INITIAL SIZE 0 WITH HEADER LINE.
+*
+* LT_MAP-FLDNAME = 'DOMVALUE_L'.
+* APPEND LT_MAP.
+*
+* LT_MAP-FLDNAME = 'DDTEXT'.
+* APPEND LT_MAP.
+
+ CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
+ EXPORTING
+* DDIC_STRUCTURE = ' '
+ retfield = 'DOMVALUE_L'
+* PVALKEY = ' '
+ dynpprog = sy-cprog
+ dynpnr = sy-dynnr
+ dynprofield = 'S_MODULE'
+* STEPL = 0
+ window_title = 'MODULE'
+* VALUE = ' '
+ value_org = 'S'
+* MULTIPLE_CHOICE = ' '
+* DISPLAY = ' '
+* CALLBACK_PROGRAM = ' '
+* CALLBACK_FORM = ' '
+* CALLBACK_METHOD =
+* MARK_TAB =
+* IMPORTING
+* USER_RESET =
+ TABLES
+ value_tab = lt_ddtext
+ field_tab = lt_field
+ return_tab = gt_rtntab
+* DYNPFLD_MAPPING = LT_MAP
+ EXCEPTIONS
+ parameter_error = 1
+ no_values_found = 2
+ OTHERS = 3.
+
+ READ TABLE gt_rtntab INDEX 1.
+
+ p_module = gt_rtntab-fieldval.
+ IF p_module IS INITIAL.
+ p_module = s_module-low .
+ ENDIF.
+
+ IF sy-subrc <> 0.
+* Implement suitable error handling here
+ ENDIF.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form CHECK_PARAM
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM check_param.
+
+ SELECT domvalue_l,
+ ddtext
+ INTO TABLE @DATA(lt_ddtext)
+ FROM dd07t
+ WHERE domname = @c_module
+ AND ddlanguage = @sy-langu.
+
+ READ TABLE lt_ddtext INTO DATA(ls_ddtext) WITH KEY domvalue_l = s_module-low.
+
+ IF sy-subrc NE 0.
+* MESSAGE S001 WITH '사용할 수 없는 모듈입니다 다시 확인해주세요' DISPLAY LIKE 'E'.
+ MESSAGE s001 WITH TEXT-t25 DISPLAY LIKE 'E'.
+ LEAVE TO LIST-PROCESSING.
+ LEAVE LIST-PROCESSING.
+ ENDIF.
+
+ENDFORM.
+*&---------------------------------------------------------------------*
+*& Form GET_TITLE
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM get_title.
+
+ CLEAR : gv_module_desc.
+
+* SELECT DOMVALUE_L, DDTEXT FROM DD07T
+* INTO TABLE @DATA(LT_DD07T)
+* WHERE DOMNAME = @C_MODULE
+* AND DDLANGUAGE = @SY-LANGU
+* AND DOMVALUE_L IN @S_MODULE.
+
+ SELECT *
+ INTO TABLE @DATA(lt_0030)
+ FROM zcmt0003
+ WHERE zmodule IN @s_module.
+
+ IF sy-subrc = 0 AND sy-dbcnt = 1.
+ READ TABLE lt_0030 INTO DATA(ls_0030) INDEX 1.
+ CONCATENATE '-' ls_0030-zmodule '(' INTO gv_module_desc SEPARATED BY space.
+ CONCATENATE gv_module_desc ls_0030-zmd_desc ')' INTO gv_module_desc.
+
+ ELSE.
+ MESSAGE s001 WITH TEXT-t25 DISPLAY LIKE 'E'.
+ LEAVE TO LIST-PROCESSING.
+ LEAVE LIST-PROCESSING.
+* READ TABLE LT_DD07T INTO DATA(LS_DD07T) INDEX 1.
+* CONCATENATE '-' LS_DD07T-DOMVALUE_L '(' INTO GV_MODULE_DESC SEPARATED BY SPACE.
+* CONCATENATE GV_MODULE_DESC LS_DD07T-DDTEXT ')' INTO GV_MODULE_DESC.
+ ENDIF.
+
+ENDFORM.
+*&---------------------------------------------------------------------*
+*& Form SET_FCAT
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM set_fcat.
+
+ CLEAR gv_col_pos.
+ REFRESH gt_fcat.
+
+ PERFORM field_setting USING :
+* Field Text Just
+ 'ZMODULE' TEXT-f01 'C',
+ 'ZCLASS' TEXT-f02 'C',
+ 'ZCLSS_DESC' TEXT-f03 'L',
+ 'ZPRGNAME' TEXT-f07 'L',
+ 'AENAM' TEXT-f04 'C',
+ 'AEDAT' TEXT-f05 'C',
+ 'AEZET' TEXT-f06 'C'.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form FIELD_SETTING
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> P_
+*& --> TEXT_F01
+*& --> P_
+*&---------------------------------------------------------------------*
+FORM field_setting USING field text just.
+
+ DATA ls_fcat TYPE lvc_s_fcat.
+
+ CLEAR ls_fcat.
+ gv_col_pos = gv_col_pos + 1.
+
+ ls_fcat-col_pos = gv_col_pos.
+ ls_fcat-fieldname = field.
+ ls_fcat-scrtext_l =
+ ls_fcat-scrtext_m =
+ ls_fcat-scrtext_s =
+ ls_fcat-reptext = text.
+ ls_fcat-just = just.
+
+ CASE ls_fcat-fieldname.
+ WHEN 'ZCLASS'.
+ ls_fcat-hotspot = 'X'.
+ ENDCASE.
+
+ APPEND ls_fcat TO gt_fcat.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form SET_LAYOUT
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM set_layout.
+
+ CLEAR : gs_variant, gs_layout.
+ gs_variant-report = sy-repid.
+ gs_variant-username = sy-uname.
+ gs_variant-handle = 1.
+
+* gs_layout-grid_title = 'ALV TITLE'. "Alv title
+* gs_layout-smalltitle = 'X'. "Small title
+ gs_layout-cwidth_opt = 'A'. "Optimize field
+ gs_layout-zebra = 'X'. "Zebra line color
+* gs_layout-no_rowmark = ' '. "Hide rowmark
+* gs_layout-no_toolbar = 'X'. "Hide toolbar
+* gs_layout-ctab_fname = 'COLOR'. "Cell color control field
+* gs_layout-stylefname = 'CELLTAB'. "Cell edit control field
+* gs_layout-excp_fname = 'ICON'. "Exception field
+ gs_layout-sel_mode = 'B'. "Alv selection mode
+* 'A': Multiple Columns. Multiple Rows. Button Enable. Single Cell
+* 'B': Multiple Columns. Single Rows. Button Disable. No Cell
+* 'C': Multiple Columns. Multiple Rows. Button Disable. No Cell
+* 'D': Multiple Columns. Multiple Rows. Button Enable. Multiple Cell
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form SET_EVENT_RECEIVER
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM set_event_receiver.
+
+* Event receiver 생성 및 활성화
+ CREATE OBJECT g_event_receiver.
+* SET HANDLER g_event_receiver->handle_data_changed FOR g_grid.
+* SET HANDLER g_event_receiver->handle_user_command FOR g_grid.
+* SET HANDLER g_event_receiver->handle_toolbar FOR g_grid.
+* SET HANDLER g_event_receiver->handle_onf4 FOR g_grid.
+* SET HANDLER g_event_receiver->handle_double_click FOR g_grid.
+ SET HANDLER g_event_receiver->handle_hotspot_click FOR g_grid.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form DISPLAY_GRID
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM display_grid.
+
+ CALL METHOD g_grid->set_table_for_first_display
+ EXPORTING
+ is_layout = gs_layout
+ is_variant = gs_variant
+* it_toolbar_excluding = gt_exclude
+ i_save = ' '
+* 'A' : USER별, 기본세팅 선택 가능 / 'U' : USER별 / ' ' 저장불가
+ i_default = ' '
+* 'X' DEFAULT 변형 저장 가능 / ' 'DEFAULT 변형 저장 불가능
+ CHANGING
+ it_fieldcatalog = gt_fcat[]
+ it_outtab = gt_disp[].
+* it_sort = gt_sort[].
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form REFRESH_ALV
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM refresh_alv.
+
+ CLEAR gs_stbl.
+ gs_stbl-row = 'X'.
+ gs_stbl-col = 'X'.
+
+ CALL METHOD g_grid->refresh_table_display
+ EXPORTING
+ is_stable = gs_stbl.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_DOUBLE_CLICK
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> E_ROW
+*& --> E_COLUMN
+*& --> ES_ROW_NO
+*&---------------------------------------------------------------------*
+FORM alv_double_click USING e_row_id TYPE lvc_s_row
+ e_column_id TYPE lvc_s_col
+ es_row_no TYPE lvc_s_roid.
+
+ DATA ls_disp LIKE LINE OF gt_disp.
+
+ CASE e_column_id-fieldname.
+ WHEN 'ZCLASS' OR 'ZCLSS_DESC'.
+ CLEAR ls_disp.
+ READ TABLE gt_disp INTO ls_disp INDEX es_row_no-row_id.
+
+ IF NOT ls_disp-zclass IS INITIAL.
+ PERFORM check_data_changed CHANGING gv_error.
+ CHECK gv_error <> 'X'.
+ PERFORM display_class_data USING ls_disp
+ CHANGING gv_error.
+ ENDIF.
+
+ WHEN OTHERS.
+ ENDCASE.
+
+ENDFORM.
+
+*&---------------------------------------------------------------------*
+*& Form ALV_HOTSPOT_CLICK
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> E_ROW_ID
+*& --> E_COLUMN_ID
+*& --> ES_ROW_NO
+*&---------------------------------------------------------------------*
+FORM alv_hotspot_click USING e_row_id TYPE lvc_s_row
+ e_column_id TYPE lvc_s_col
+ es_row_no TYPE lvc_s_roid.
+
+ DATA ls_disp LIKE LINE OF gt_disp.
+
+ CASE e_column_id-fieldname.
+ WHEN 'ZCLASS'.
+ CLEAR ls_disp.
+ READ TABLE gt_disp INTO ls_disp INDEX es_row_no-row_id.
+
+ IF NOT ls_disp-zclass IS INITIAL.
+ PERFORM check_data_changed CHANGING gv_error.
+ CHECK gv_error IS INITIAL.
+ PERFORM display_class_data USING ls_disp
+ CHANGING gv_error.
+ ENDIF.
+
+ WHEN OTHERS.
+ ENDCASE.
+
+ENDFORM.
+*&---------------------------------------------------------------------*
+*& Form SCRFIELDS_FUNCTXT
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM scrfields_functxt .
+
+ GS_FUNTXT-ICON_ID = ICON_IMPORT.
+ GS_FUNTXT-QUICKINFO = TEXT-U01.
+ GS_FUNTXT-ICON_TEXT = TEXT-U01.
+
+ SSCRFIELDS-FUNCTXT_01 = GS_FUNTXT.
+
+ENDFORM.
+*&---------------------------------------------------------------------*
+*& Form SCR_USER_COMMAND
+*&---------------------------------------------------------------------*
+*& text
+*&---------------------------------------------------------------------*
+*& --> p1 text
+*& <-- p2 text
+*&---------------------------------------------------------------------*
+FORM scr_user_command .
+
+call TRANSACTION 'zcmt0003'.
+
+ENDFORM.
diff --git a/src/zcmr0002f01.prog.xml b/src/zcmr0002f01.prog.xml
new file mode 100644
index 0000000..e327264
--- /dev/null
+++ b/src/zcmr0002f01.prog.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ ZCMR0002F01
+ I
+ E
+ X
+
+
+ -
+ E
+
+
-
+ R
+ Include ZCMR0002F01
+ 19
+
+
+
+
+
+
+
diff --git a/src/zcmr0002pai.prog.abap b/src/zcmr0002pai.prog.abap
new file mode 100644
index 0000000..cef78bd
--- /dev/null
+++ b/src/zcmr0002pai.prog.abap
@@ -0,0 +1,169 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0002PAI
+*&---------------------------------------------------------------------*
+*&---------------------------------------------------------------------*
+*& Module EXIT INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE exit INPUT.
+
+ CHECK gv_OKCODE = 'EXIT'.
+
+ PERFORM check_data_changed CHANGING gv_error.
+ CHECK gv_error IS INITIAL.
+
+ LEAVE PROGRAM.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module USER_COMMAND_0100 INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE user_command_0100 INPUT.
+
+ DATA lv_ans.
+
+ GET CURSOR FIELD gv_field LINE gv_tcline.
+
+ CLEAR gv_saveok.
+ gv_saveok = gv_okcode.
+ CLEAR gv_okcode.
+
+ CASE gv_saveok.
+ WHEN 'BACK' OR 'CANC'.
+ PERFORM check_data_changed CHANGING gv_error.
+ CHECK gv_error IS INITIAL.
+ LEAVE TO SCREEN 0.
+
+ WHEN 'NEW'.
+ PERFORM check_data_changed CHANGING gv_error.
+ CHECK gv_error IS INITIAL.
+
+ CLEAR : gs_data, gs_data_old.
+
+* 모듈/ 클래스 값 설정
+ PERFORM check_module.
+
+* 필드 정의 설정
+ PERFORM make_fld_data USING 'N'.
+
+ WHEN 'DEL'.
+ CLEAR gv_error.
+
+* 1. 필수 입력 항목 체크
+ PERFORM check_pk_data USING 'D'
+ CHANGING gv_error.
+
+* 2. Popup
+ CHECK gv_error <> 'X'.
+ PERFORM popup_to_confirm USING TEXT-t11
+ TEXT-q02
+ TEXT-t12
+ TEXT-t13
+ space
+ CHANGING lv_ans.
+
+ IF lv_ans = '1'.
+ PERFORM check_pk_duplicate CHANGING gv_error.
+ PERFORM delete_data USING gv_error.
+ ENDIF.
+
+ WHEN 'SAVE'.
+ CLEAR gv_error.
+
+* 1. 필수 입력 항목 체크
+ PERFORM check_pk_data USING 'S'
+ CHANGING gv_error.
+
+* 2. PK 중복값 체크
+ CHECK gv_error <> 'X'.
+ PERFORM check_pk_duplicate CHANGING gv_error.
+ PERFORM save_data USING gv_error.
+
+ WHEN OTHERS.
+ ENDCASE.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module GET_MODULE_TEXT INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE get_module_text INPUT.
+
+ DATA lt_return LIKE TABLE OF ddshretval WITH HEADER LINE.
+
+ CLEAR : lt_return, lt_return[].
+ CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
+ EXPORTING
+ retfield = 'DOMVALUE_L'
+ dynpprog = sy-repid
+ dynpnr = sy-dynnr
+ value_org = 'S' " 'C'
+ TABLES
+ value_tab = gt_module_t
+ return_tab = lt_return
+ EXCEPTIONS
+ parameter_error = 1
+ no_values_found = 2
+ OTHERS = 3.
+
+ IF NOT lt_return[] IS INITIAL.
+ CLEAR lt_return.
+ READ TABLE lt_return INDEX 1.
+ IF sy-subrc = 0.
+ gs_data-zmodule = lt_return-fieldval.
+ ENDIF.
+ ENDIF.
+
+ PERFORM get_module_text USING gs_data-zmodule
+ CHANGING gs_data-module_t.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module CHECK_ZMODULE INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE check_zmodule INPUT.
+
+ CLEAR gs_data-module_t.
+
+ IF gs_data-zmodule IS NOT INITIAL.
+
+ SELECT SINGLE zmd_desc
+ INTO gs_data-module_t
+ FROM zcmt0003
+ WHERE zmodule = gs_data-zmodule.
+
+ IF sy-subrc NE 0.
+ MESSAGE e000 WITH TEXT-m03. " '등록되지 않은 모듈입니다.'.
+ ENDIF.
+ ENDIF.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module CHECK_KEY INPUT
+*&---------------------------------------------------------------------*
+* text
+*----------------------------------------------------------------------*
+MODULE check_key INPUT.
+
+ CHECK gs_data-zmodule IS NOT INITIAL AND gs_data-zclass IS NOT INITIAL.
+
+ SELECT SINGLE mandt INTO @sy-mandt FROM zcmt0001
+ WHERE spras = @sy-langu
+ AND zmodule = @gs_data-zmodule
+ AND zclass = @gs_data-zclass.
+
+ IF sy-subrc = 0.
+ MESSAGE e000 WITH TEXT-m04. "'이미 등록된 클래스 입니다.'.
+ ENDIF.
+
+ENDMODULE.
diff --git a/src/zcmr0002pai.prog.xml b/src/zcmr0002pai.prog.xml
new file mode 100644
index 0000000..e2282df
--- /dev/null
+++ b/src/zcmr0002pai.prog.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ ZCMR0002PAI
+ I
+ E
+ X
+
+
+ -
+ E
+
+
-
+ R
+ Include ZCMR0002PAI
+ 19
+
+
+
+
+
+
+
diff --git a/src/zcmr0002pbo.prog.abap b/src/zcmr0002pbo.prog.abap
new file mode 100644
index 0000000..e2ec3ca
--- /dev/null
+++ b/src/zcmr0002pbo.prog.abap
@@ -0,0 +1,99 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0002PBO
+*&---------------------------------------------------------------------*
+*&---------------------------------------------------------------------*
+*& Module STATUS_0100 OUTPUT
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+MODULE STATUS_0100 OUTPUT.
+
+ SET PF-STATUS '100'.
+ SET TITLEBAR '100' WITH GV_MODULE_DESC.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module SET_SCREEN OUTPUT
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+MODULE SET_SCREEN OUTPUT.
+
+ IF NO_MEANS IS INITIAL.
+ NO_MEANS = 'X'.
+ ENDIF.
+
+ IF GS_DATA-ZMODULE IS INITIAL.
+ CLEAR GS_DATA-MODULE_T.
+ ELSE.
+ PERFORM GET_MODULE_TEXT USING GS_DATA-ZMODULE
+ CHANGING GS_DATA-MODULE_T.
+ ENDIF.
+
+ IF GS_DATA_OLD-ZMODULE IS INITIAL.
+ CLEAR GS_DATA_OLD-MODULE_T.
+ ELSE.
+ PERFORM GET_MODULE_TEXT USING GS_DATA_OLD-ZMODULE
+ CHANGING GS_DATA_OLD-MODULE_T.
+ ENDIF.
+
+ CHECK GS_DATA-MODE = 'X'.
+ LOOP AT SCREEN.
+ IF SCREEN-GROUP1 = 'GR1'.
+ SCREEN-INPUT = 0.
+ MODIFY SCREEN.
+ ENDIF.
+ ENDLOOP.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module CREATE_ALV_0100 OUTPUT
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+MODULE CREATE_ALV_0100 OUTPUT.
+
+ IF G_CUSTOM_CONTAINER IS INITIAL.
+ CREATE OBJECT G_CUSTOM_CONTAINER
+ EXPORTING
+ CONTAINER_NAME = 'CONT1'.
+
+ CREATE OBJECT G_GRID
+ EXPORTING
+ I_PARENT = G_CUSTOM_CONTAINER
+ I_APPL_EVENTS = 'X'. "space
+
+ PERFORM SET_FCAT.
+ PERFORM SET_LAYOUT.
+ PERFORM SET_EVENT_RECEIVER.
+ PERFORM DISPLAY_GRID.
+ ELSE.
+ PERFORM REFRESH_ALV .
+ ENDIF.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module GET_FLD_DATA OUTPUT
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+MODULE GET_FLD_DATA OUTPUT.
+
+ READ TABLE GT_FLD INDEX TC_FLD-CURRENT_LINE INTO GT_FLD.
+ TC_FLD-LINES = 17.
+
+ENDMODULE.
+
+*&---------------------------------------------------------------------*
+*& Module SET_CURSOR OUTPUT
+*&---------------------------------------------------------------------*
+*&
+*&---------------------------------------------------------------------*
+MODULE SET_CURSOR OUTPUT.
+
+ SET CURSOR FIELD GV_FIELD LINE GV_TCLINE.
+
+ENDMODULE.
diff --git a/src/zcmr0002pbo.prog.xml b/src/zcmr0002pbo.prog.xml
new file mode 100644
index 0000000..660b3ae
--- /dev/null
+++ b/src/zcmr0002pbo.prog.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ ZCMR0002PBO
+ I
+ E
+ X
+
+
+ -
+ E
+
+
-
+ R
+ Include ZCMR0002PBO
+ 19
+
+
+
+
+
+
+
diff --git a/src/zcmr0002s01.prog.abap b/src/zcmr0002s01.prog.abap
new file mode 100644
index 0000000..d0c34fb
--- /dev/null
+++ b/src/zcmr0002s01.prog.abap
@@ -0,0 +1,14 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0002S01
+*&---------------------------------------------------------------------*
+*----------------------------------------------------------------------*
+* SELECTION-SCREEN
+*----------------------------------------------------------------------*
+SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01.
+ SELECT-OPTIONS S_MODULE FOR ZCMT0002-ZMODULE NO-EXTENSION NO INTERVALS
+ "OBLIGATORY
+ MATCHCODE OBJECT zcmh_zmodule.
+SELECTION-SCREEN END OF BLOCK B1.
+
+
+SELECTION-SCREEN FUNCTION KEY 1.
diff --git a/src/zcmr0002s01.prog.xml b/src/zcmr0002s01.prog.xml
new file mode 100644
index 0000000..70d00c9
--- /dev/null
+++ b/src/zcmr0002s01.prog.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ ZCMR0002S01
+ I
+ E
+ X
+
+
+ -
+ E
+
+
-
+ R
+ Include ZCMR0002S01
+ 19
+
+
+
+
+
+
+
diff --git a/src/zcmr0002top.prog.abap b/src/zcmr0002top.prog.abap
new file mode 100644
index 0000000..5328105
--- /dev/null
+++ b/src/zcmr0002top.prog.abap
@@ -0,0 +1,97 @@
+*&---------------------------------------------------------------------*
+*& Include ZCMR0002TOP
+*&---------------------------------------------------------------------*
+
+*----------------------------------------------------------------------*
+* Tables
+*----------------------------------------------------------------------*
+TABLES: zcmt0002, sscrfields.
+
+DATA: module(2),
+ no_means(1).
+
+*----------------------------------------------------------------------*
+* Types
+*----------------------------------------------------------------------*
+TYPES : BEGIN OF ty_data.
+ INCLUDE STRUCTURE zcmt0001.
+TYPES : module_t LIKE dd07t-ddtext,
+ mode, " X:수정
+ END OF ty_data.
+
+*----------------------------------------------------------------------*
+* Internal Table, Structure
+*----------------------------------------------------------------------*
+
+DATA : gs_data TYPE ty_data,
+ gs_data_old TYPE ty_data,
+
+ gt_zcmt0001 TYPE TABLE OF zcmt0001 WITH HEADER LINE.
+
+* ALV용
+DATA : BEGIN OF gt_disp OCCURS 0,
+ zmodule LIKE zcmt0001-zmodule,
+ zclass LIKE zcmt0001-zclass,
+ zclss_desc LIKE zcmt0001-zclss_desc,
+ zprgname LIKE zcmt0001-zprgname,
+ aenam LIKE zcmt0001-aenam,
+ aedat LIKE zcmt0001-aedat,
+ aezet LIKE zcmt0001-aezet,
+ END OF gt_disp.
+
+* 필드명 TC용 itab
+DATA : BEGIN OF gt_fld OCCURS 0,
+ txt1(7),
+ txt2(15),
+ ox LIKE zcmt0001-zf01_ox,
+ desc LIKE zcmt0001-zf01_desc,
+ END OF gt_fld.
+
+* 모듈명
+DATA : gt_module_t LIKE zcmt0003 OCCURS 0 WITH HEADER LINE.
+
+DATA : gv_module_desc LIKE dd07t-ddtext,
+ gv_class LIKE zcmt0001-zclass,
+ gv_module LIKE zcmt0001-zmodule.
+
+CONTROLS tc_fld TYPE TABLEVIEW USING SCREEN 100.
+
+DATA: gs_funtxt TYPE smp_dyntxt.
+*----------------------------------------------------------------------*
+* Global Variable
+*----------------------------------------------------------------------*
+DATA : gv_total TYPE i,
+ gv_error,
+ gv_new,
+ gv_okcode TYPE sy-ucomm,
+ gv_saveok TYPE sy-ucomm,
+ gv_field(30),
+ gv_tcline TYPE i.
+
+*----------------------------------------------------------------------*
+* Constants
+*----------------------------------------------------------------------*
+CONSTANTS c_module(15) TYPE c VALUE 'ZDMODULE'.
+
+*----------------------------------------------------------------------*
+* Search Help
+*----------------------------------------------------------------------*
+DATA: gt_rtntab LIKE ddshretval OCCURS 0 WITH HEADER LINE,
+ gt_dynpread LIKE dynpread OCCURS 0 WITH HEADER LINE.
+
+
+*&---------------------------------------------------------------------*
+*& Include ZCMR1010ALV
+*&---------------------------------------------------------------------*
+DATA : g_custom_container TYPE REF TO cl_gui_custom_container,
+ g_grid TYPE REF TO cl_gui_alv_grid,
+ gs_variant TYPE disvariant,
+ gs_layout TYPE lvc_s_layo,
+ gv_col_pos TYPE i,
+ gt_fcat TYPE lvc_t_fcat,
+ gt_exclude TYPE ui_functions,
+ gt_sort TYPE lvc_t_sort,
+ gs_stbl TYPE lvc_s_stbl,
+ gv_valid TYPE c,
+ gt_rows TYPE lvc_t_row,
+ gt_fcode TYPE TABLE OF sy-ucomm.
diff --git a/src/zcmr0002top.prog.xml b/src/zcmr0002top.prog.xml
new file mode 100644
index 0000000..c27fe46
--- /dev/null
+++ b/src/zcmr0002top.prog.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ ZCMR0002TOP
+ I
+ E
+ X
+
+
+ -
+ E
+
+
-
+ R
+ Include ZCMR0002TOP
+ 19
+
+
+
+
+
+
+
diff --git a/src/zcmt0001.tabl.xml b/src/zcmt0001.tabl.xml
new file mode 100644
index 0000000..2907f27
--- /dev/null
+++ b/src/zcmt0001.tabl.xml
@@ -0,0 +1,536 @@
+
+
+
+
+
+ ZCMT0001
+ TRANSP
+ X
+ X
+ X
+ A
+ 1
+
+
+ ZCMT0001
+ A
+ 3
+ APPL0
+ X
+ N
+
+
+
+ MANDT
+ X
+ MANDT
+ 0
+ X
+ E
+
+
+ SPRAS
+ X
+ SPRAS
+ 0
+ X
+ D
+ E
+ X
+
+
+ ZMODULE
+ X
+ ZCME_MODULE
+ 0
+ X
+ E
+
+
+ ZCLASS
+ X
+ ZCME_CLASS
+ 0
+ X
+ E
+
+
+ ZCLSS_DESC
+ 0
+ C
+ 000100
+ CHAR
+ 000050
+ CHAR
+
+
+ ZPRGNAME
+ 0
+ C
+ 000100
+ CHAR
+ 000050
+ CHAR
+
+
+ ZCODE2_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZCODE3_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZCODE4_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZCODE5_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZCODE6_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZCODE7_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZCODE8_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZCD1_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZCD2_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZCD3_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZCD4_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZCD5_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZCD6_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZCD7_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZCD8_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF01_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF01_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF02_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF02_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF03_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF03_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF04_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF04_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF05_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF05_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF06_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF06_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF07_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF07_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF08_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF08_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF09_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF09_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF10_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF10_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF11_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF11_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF12_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF12_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF13_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF13_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF14_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF14_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF15_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF15_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF16_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF16_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ ZF17_OX
+ 0
+ C
+ 000002
+ CHAR
+ 000001
+ CHAR
+
+
+ ZF17_DESC
+ 0
+ C
+ 000060
+ CHAR
+ 000030
+ CHAR
+
+
+ .INCLUDE
+ 0
+ ZCMS0010
+ S
+ log
+ S
+
+
+
+ E
+
+
+ -
+ E
+ [CM] 공통코드 클래스 관리
+
+
+
+
+
diff --git a/src/zcmt0002.tabl.xml b/src/zcmt0002.tabl.xml
new file mode 100644
index 0000000..b91a148
--- /dev/null
+++ b/src/zcmt0002.tabl.xml
@@ -0,0 +1,272 @@
+
+
+
+
+
+ ZCMT0002
+ TRANSP
+ X
+ X
+ X
+ A
+ 1
+
+
+ ZCMT0002
+ A
+ 4
+ APPL1
+ X
+ N
+
+
+
+ MANDT
+ X
+ MANDT
+ 0
+ X
+ E
+
+
+ SPRAS
+ X
+ SPRAS
+ 0
+ X
+ D
+ E
+ X
+
+
+ ZMODULE
+ X
+ ZCME_MODULE
+ 0
+ X
+ E
+
+
+ ZCLASS
+ X
+ ZCME_CLASS
+ 0
+ X
+ E
+
+
+ ZCM_CODE1
+ X
+ ZCME_CODE
+ 0
+ X
+ E
+
+
+ ZCM_CODE2
+ X
+ ZCME_CODE
+ 0
+ X
+ E
+
+
+ ZCM_CODE3
+ X
+ ZCME_CODE
+ 0
+ X
+ E
+
+
+ ZCM_CODE4
+ X
+ ZCME_CODE
+ 0
+ X
+ E
+
+
+ ZCM_CODE5
+ X
+ ZCME_CODE
+ 0
+ X
+ E
+
+
+ ZCM_CODE6
+ X
+ ZCME_CODE
+ 0
+ X
+ E
+
+
+ ZCM_CODE7
+ X
+ ZCME_CODE
+ 0
+ X
+ E
+
+
+ ZCM_CODE8
+ X
+ ZCME_CODE
+ 0
+ X
+ E
+
+
+ ZCMF01_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF02_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF03_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF04_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF05_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF06_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF07_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF08_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF09_CH
+ ZCME_CODE
+ 0
+ E
+
+
+ ZCMF10_CH
+ CHAR200L
+ 0
+ E
+
+
+ ZCMF11_QU
+ 0
+ P
+ 000008
+ ZCMT0002
+ ZCMF12_UT
+ QUAN
+ 000015
+ QUAN
+
+
+ ZCMF12_UT
+ MEINS
+ 0
+ E
+
+
+ ZCMF13_CR
+ 0
+ P
+ 000008
+ ZCMT0002
+ ZCMF14_CK
+ CURR
+ 000015
+ 000002
+ CURR
+
+
+ ZCMF14_CK
+ WAERS
+ 0
+ E
+
+
+ ZCMF15_NM
+ 0
+ N
+ 000040
+ NUMC
+ 000020
+ NUMC
+
+
+ ZCMF16_NM
+ 0
+ N
+ 000040
+ NUMC
+ 000020
+ NUMC
+
+
+ ZCMF17_DC
+ 0
+ P
+ 000007
+ DEC
+ 000013
+ DEC
+
+
+ ZSORT_KEY
+ 0
+ C
+ 000006
+ CHAR
+ 000003
+ CHAR
+
+
+ .INCLUDE
+ 0
+ ZCMS0010
+ S
+ log
+ S
+
+
+
+ E
+
+
+ -
+ E
+ [CM] 공통코드 세부코드
+
+
+
+
+
diff --git a/src/zcmt0003.tabl.xml b/src/zcmt0003.tabl.xml
new file mode 100644
index 0000000..85f2d22
--- /dev/null
+++ b/src/zcmt0003.tabl.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+ ZCMT0003
+ TRANSP
+ X
+ X
+ A
+ 1
+
+
+ ZCMT0003
+ A
+ 0
+ APPL0
+ N
+
+
+
+ MANDT
+ X
+ MANDT
+ 0
+ X
+ E
+
+
+ ZMODULE
+ X
+ ZCME_MODULE
+ 0
+ X
+ E
+
+
+ ZMD_DESC
+ ZCME_MD_DESC
+ 0
+ X
+ E
+
+
+
+ E
+
+
+ -
+ E
+ [CM] 모듈 정의
+
+
+
+
+