--- type: abap-program title: "ZFIR0160 — [FI] 권한관리" description: "FI 커스텀 프로그램들이 공통으로 참조하는 권한 테이블 ZFIT0160 을 유지보수하는 관리 화면이다. 사용자별로 접근 가능한 회사코드·사업장 등을 편집 가능한 ALV 그리드에서 등록·수정·복사·삭제하고 저장한다. ZFIT0160 은 이 27본 중 18본이 읽는 테이블로, AUTHORITY_BUKRS(공용 인클루드)가 회사코드 권한을 판정할 때 참조한다." resource: "abap://ZFIR0160" tags: ["권한관리", "마스터관리", "설정", "FI", "권한저장", "권한테이블", "사용자ID", "일괄저장", "롤백", "저장건수", "저장 확인", "변경 여부", "권한 테이블 저장", "화면 종료", "오류 체크", "프로그램 종료", "기능코드", "변경 모드", "조회 모드", "입력 가능 전환"] generated: { by: "abap-indexing/z-ai/glm-5.2:free", at: "2026-09-20T15:36:23+00:00" } status: stable x-package: x-changed-on: x-tables-read: ["USER_ADDRP", "ZFIT0160"] x-tables-write: ["GT_MAIN", "ZFIT0160"] x-calls: ["HELP_VALUES_GET_NO_DD_NAME", "POPUP_TO_CONFIRM", "POPUP_TO_CONFIRM_STEP", "REUSE_ALV_VARIANT_DEFAULT_GET", "REUSE_ALV_VARIANT_F4", "SAPGUI_PROGRESS_INDICATOR"] x-code-hash: "dcd5669a8a7534a78705c2d3ceaaff129923cbd2cd1a348ab5c57d65b27ca11c" x-unit-count: 62 x-chunk-count: 26 x-declaration-count: 75 --- ## 업무 목적 FI 커스텀 프로그램들이 공통으로 참조하는 권한 테이블 ZFIT0160 을 유지보수하는 관리 화면이다. 사용자별로 접근 가능한 회사코드·사업장 등을 편집 가능한 ALV 그리드에서 등록·수정·복사·삭제하고 저장한다. ZFIT0160 은 이 27본 중 18본이 읽는 테이블로, AUTHORITY_BUKRS(공용 인클루드)가 회사코드 권한을 판정할 때 참조한다. ## 주 흐름 1. 초기 변형을 불러오고 선택화면을 준비한다 (SET_INIT → GET_INIT_VARIANT → GET_VARIANT) 2. ZFIT0160 권한 내역과 사용자 정보(USER_ADDRP)를 읽어 그리드 데이터를 만든다 (SET_DATA) 3. 셀 입력 가능 여부와 행 스타일을 설정한다 (SET_ITAB_STYLE → SET_LINE_CELLTAB) 4. 편집 가능한 ALV 를 화면 0100 에 띄운다 (SET_FIELD01 → RUN_DISPLAY_ALV) 5. 행 추가·복사·삭제와 셀 변경을 처리하고 사용자 ID 에 F4 를 제공한다 (SET_COPY_ROWS / SET_DELETE_ROWS / DATA_CHANGED / F4_UNAME_PROCESS) 6. 유효성(기간 중복 등)을 검증한다 (CHK_ZINOUT → CHK_DATA) 7. 확인 팝업 후 ZFIT0160 에 저장한다 (POPUP_TO_CONFIRM → SET_SAVE → ZFIT0160_PROCESS) ## 핵심 내부테이블 - `GT_MAIN` — 권한 내역 편집 그리드 (채움: SET_DATA / 소비: RUN_DISPLAY_ALV, SET_SAVE) ## 테이블 / 외부 호출 - read: USER_ADDRP, ZFIT0160 - write: GT_MAIN, ZFIT0160 - 외부 호출: HELP_VALUES_GET_NO_DD_NAME, POPUP_TO_CONFIRM, POPUP_TO_CONFIRM_STEP, REUSE_ALV_VARIANT_DEFAULT_GET, REUSE_ALV_VARIANT_F4, SAPGUI_PROGRESS_INDICATOR ## 로직 조각 (26건 / unit 22개) LLM 이 코드에서 골라낸 업무 로직 단위다. **조각마다 소스 원문과 자연어 설명을 함께 싣는다** — 설명이 코드와 맞는지 바로 대조할 수 있어야 하기 때문이다. 테이블·호출은 LLM 이 쓴 값이 아니라 파서가 조각 범위에서 다시 뽑은 사실이다. 순서는 실행 순서다. ### FORM GET_INIT_VARIANT — `ZFIR0160F01` L34-L53 (20줄) *변형 키를 초기화하고 REUSE_ALV_VARIANT_DEFAULT_GET 으로 사용자 기본 ALV 변형(Variant)을 조회하는 FORM 이다.* > 이 unit 의 조각 1개가 12/20줄(60%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [fm_call] REUSE_ALV_VARIANT_DEFAULT_GET(I_SAVE='A') 으로 리포트·사용자·핸들에 해당하는 기본 ALV 변형을 GX_VARIANT 에 읽는다(결과 반영은 주석 처리). ```abap 40| GX_VARIANT = GS_VARIANT. 41| 42| CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET' 43| EXPORTING 44| I_SAVE = 'A' 45| CHANGING 46| CS_VARIANT = GX_VARIANT 47| EXCEPTIONS 48| NOT_FOUND = 2. 49| IF SY-SUBRC = 0. 50| **** PA_LAYOU = GX_VARIANT-VARIANT. 51| ENDIF. ``` - **EN**: Retrieves the user's default ALV layout variant via REUSE_ALV_VARIANT_DEFAULT_GET. - 호출(파서): REUSE_ALV_VARIANT_DEFAULT_GET - SAP 객체: REUSE_ALV_VARIANT_DEFAULT_GET - 업무 키워드: 기본 변형, ALV 레이아웃, 변형 조회 - English: Default Variant, ALV Layout - 정의부(복사 시 함께 필요): [`GX_VARIANT`](#decl-zfir0160t01-9-gx_variant), [`GS_VARIANT`](#decl-zfir0160t01-8-gs_variant) - 위치: `abap://ZFIR0160/ZFIR0160F01#L40-L51` · confidence 0.8 · `ZFIR0160#ZFIR0160F01#FORM#GET_INIT_VARIANT#C1` ### FORM SET_DATA — `ZFIR0160F01` L91-L109 (19줄) *오류가 없을 때 진행 메시지를 띄우고 SELECT_PROCESS(ZFIT0160 조회)와 MODIFY_PROCESS(성명 보완)를 순서대로 수행해 그리드 데이터를 준비하는 FORM이다.* > 이 unit 의 조각 1개가 11/19줄(58%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] GV_ERR 이 없을 때 GT_MAIN 을 비우고 진행 인디케이터(RUN_MSG_PROC)를 표시한 뒤 SELECT_PROCESS 로 ZFIT0160 을 읽고 MODIFY_PROCESS 로 사용자 성명을 채운다. ```abap 96| CHECK GV_ERR IS INITIAL. 97| 98| CLEAR: GT_MAIN, GT_MAIN[], GV_ERR. 99| 100| * INDICATOR 101| PERFORM RUN_MSG_PROC USING '집계 데이터 조회 중...'. 102| 103| PERFORM SELECT_PROCESS. 104| 105| 106| PERFORM MODIFY_PROCESS. ``` - **EN**: When no error is flagged, clear GT_MAIN, show a progress indicator, load ZFIT0160 via SELECT_PROCESS and enrich user names via MODIFY_PROCESS. - 호출(파서): RUN_MSG_PROC, SELECT_PROCESS, MODIFY_PROCESS - SAP 객체: ZFIT0160 - 업무 키워드: 데이터 조회, 진행 표시, 권한 목록 준비 - English: data load, progress indicator - 정의부(복사 시 함께 필요): [`GV_ERR`](#decl-zfir0160t01-40-gv_err), [`GT_MAIN`](#decl-zfir0160top-19-gt_main) - 위치: `abap://ZFIR0160/ZFIR0160F01#L96-L106` · confidence 0.8 · `ZFIR0160#ZFIR0160F01#FORM#SET_DATA#C1` ### FORM ZFIT0160_PROCESS — `ZFIR0160F01` L243-L256 (14줄) *권한 테이블 ZFIT0160 전체를 읽어 그리드 내부테이블 GT_MAIN 에 적재하는 FORM이다.* > 이 unit 의 조각 1개가 3/14줄(21%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [sql_select] 권한 관리 테이블 ZFIT0160 의 전 레코드를 SELECT 하여 편집 그리드용 GT_MAIN 에 적재한다. ```abap 250| SELECT * 251| INTO CORRESPONDING FIELDS OF TABLE GT_MAIN 252| FROM ZFIT0160. ``` - **EN**: Select all records from authorization table ZFIT0160 into GT_MAIN for the editable grid. - 테이블(파서): read [ZFIT0160](/tables/ZFIT0160.md) / write - - SAP 객체: ZFIT0160 - 업무 키워드: 권한 테이블, 사용자 권한 조회, 전체 조회 - English: authorization table, SELECT - 정의부(복사 시 함께 필요): [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`ZFIT0160`](#decl-zfir0160top-5-zfit0160) - 위치: `abap://ZFIR0160/ZFIR0160F01#L250-L252` · confidence 0.95 · `ZFIR0160#ZFIR0160F01#FORM#ZFIT0160_PROCESS#C1` ### FORM MODIFY_PROCESS — `ZFIR0160F01` L174-L195 (22줄) *GT_MAIN 의 각 사용자 ID 에 대해 공용 풀(ZTR_POOL)의 USER_ADDRP_PROCESS 로 성명을 조회해 NAME 컬럼을 채우는 FORM이다.* > 이 unit 의 조각 1개가 15/22줄(68%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] GT_MAIN 을 USERID 로 정렬한 뒤 각 행마다 ZTR_POOL 의 USER_ADDRP_PROCESS 를 호출해 사용자 성명(USER_ADDRP)을 구해 NAME 필드를 MODIFY 한다. ```abap 179| SORT GT_MAIN BY USERID. 180| 181| 182| LOOP AT GT_MAIN. 183| 184| L_TABIX = SY-TABIX. 185| 186| PERFORM USER_ADDRP_PROCESS(ZTR_POOL) USING GT_MAIN-USERID 187| CHANGING GT_MAIN-NAME. 188| 189| 190| MODIFY GT_MAIN INDEX L_TABIX TRANSPORTING NAME. 191| CLEAR GT_MAIN. 192| 193| ENDLOOP. ``` - **EN**: Sort GT_MAIN by USERID and for each row derive the user's name from USER_ADDRP via USER_ADDRP_PROCESS (ZTR_POOL), updating the NAME field. - 테이블(파서): read - / write [GT_MAIN](/tables/GT_MAIN.md) - 호출(파서): USER_ADDRP_PROCESS - SAP 객체: USER_ADDRP, ZTR_POOL - 업무 키워드: 사용자 성명, 사용자 마스터, 이름 보완, 권한 목록 - English: user name, USER_ADDRP, enrichment - 정의부(복사 시 함께 필요): [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`L_TABIX`](#decl-zfir0160f01-177-l_tabix) - 위치: `abap://ZFIR0160/ZFIR0160F01#L179-L193` · confidence 0.85 · `ZFIR0160#ZFIR0160F01#FORM#MODIFY_PROCESS#C1` ### FORM DATA_CHANGED — `ZFIR0160F02` L939-L1028 (90줄) *편집 그리드 셀 변경(DATA_CHANGED) 시 변경값을 GT_MAIN 에 반영하고 ZINOUT 값을 검증해 오류면 프로토콜에 기록, 정상이면 셀을 갱신하는 FORM이다.* > 이 unit 의 조각 1개가 65/90줄(72%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [validation] 변경된 각 셀(MT_GOOD_CELLS)에 대해 GET_CELL_VALUE 로 값을 읽어 GT_MAIN 해당 필드에 MODIFY 하고 변경 플래그(GV_CHK)를 세우며, ZINOUT 필드는 CHK_ZINOUT 으로 검증해 오류면 ADD_PROTOCAL_ENTRY 로 오류 프로토콜에 기록, 정상이면 MODIFY_CELL 로 셀 값을 확정한다. ```abap 958| LOOP AT P_CHANGED->MT_GOOD_CELLS INTO LS_MOD_CELLS. 959| CLEAR: GV_ERR, GS_MSG. 960| 961| ASSIGN COMPONENT LS_MOD_CELLS-FIELDNAME 962| OF STRUCTURE GT_MAIN TO . 963| 964| * 입력된 셀의 값 얻기 965| 966| READ TABLE GT_MAIN INDEX LS_MOD_CELLS-ROW_ID. 967| 968| 969| CALL METHOD P_CHANGED->GET_CELL_VALUE 970| EXPORTING 971| I_ROW_ID = LS_MOD_CELLS-ROW_ID 972| I_FIELDNAME = LS_MOD_CELLS-FIELDNAME 973| I_TABIX = LS_MOD_CELLS-TABIX 974| IMPORTING 975| E_VALUE = . 976| 977| GV_CHK = 'X'. " 변경 CHECK 978| 979| * GT_MAIN-ZINOUT = . 980| 981| MODIFY GT_MAIN INDEX LS_MOD_CELLS-ROW_ID 982| TRANSPORTING (LS_MOD_CELLS-FIELDNAME). 983| 984| ** 입력된 값 CHECK 985| IF LS_MOD_CELLS-FIELDNAME = 'ZINOUT'. 986| PERFORM CHK_ZINOUT USING LS_MOD_CELLS-FIELDNAME 987| LS_MOD_CELLS-ROW_ID 988| LS_MOD_CELLS-VALUE 989| CHANGING GV_ERR 990| GS_MSG. 991| ENDIF. 992| 993| 994| IF GV_ERR IS NOT INITIAL. 995| PERFORM ADD_PROTOCAL_ENTRY USING P_CHANGED 996| LS_MOD_CELLS 997| GS_MSG. 998| ELSE. 999| 1000| * UPDATE VALUE 1001| 1002| CALL METHOD P_CHANGED->MODIFY_CELL 1003| EXPORTING 1004| I_ROW_ID = LS_MOD_CELLS-ROW_ID 1005| I_FIELDNAME = LS_MOD_CELLS-FIELDNAME 1006| I_VALUE = LS_MOD_CELLS-VALUE. 1007| 1008| 1009| 1010| * IF LS_MOD_CELLS-FIELDNAME = 'BANKL'. 1011| * 1012| * PERFORM BNKA_PROCESS(ZTR_POOL) USING GT_MAIN-BANKL 1013| * CHANGING GT_MAIN-BANKA. 1014| * 1015| * MODIFY GT_MAIN INDEX LS_MOD_CELLS-ROW_ID TRANSPORTING 1016| * BANKA. 1017| * ENDIF. 1018| 1019| 1020| 1021| ENDIF. 1022| ENDLOOP. ``` - **EN**: For each changed cell read the new value via CL_ALV_CHANGED_DATA_PROTOCOL->GET_CELL_VALUE, update GT_MAIN, validate ZINOUT with CHK_ZINOUT, log errors to the protocol or confirm the cell with MODIFY_CELL. - 테이블(파서): read - / write [GT_MAIN](/tables/GT_MAIN.md) - 호출(파서): P_CHANGED->MT_GOOD_CELLS, P_CHANGED->GET_CELL_VALUE, CHK_ZINOUT, ADD_PROTOCAL_ENTRY, P_CHANGED->MODIFY_CELL - SAP 객체: CL_ALV_CHANGED_DATA_PROTOCOL, CL_GUI_ALV_GRID - 업무 키워드: 셀 변경, 변경 플래그, 입출구분자 검증, 오류 프로토콜, 그리드 반영 - English: data changed, cell validation, change protocol - 정의부(복사 시 함께 필요): [`LS_MOD_CELLS`](#decl-zfir0160f02-942-ls_mod_cells), [`GV_ERR`](#decl-zfir0160t01-40-gv_err), [`GS_MSG`](#decl-zfir0160t01-39-gs_msg), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [``](#decl-zfir0160f02-946--fs_field-), [`GV_CHK`](#decl-zfir0160t01-42-gv_chk) - 위치: `abap://ZFIR0160/ZFIR0160F02#L958-L1022` · confidence 0.9 · `ZFIR0160#ZFIR0160F02#FORM#DATA_CHANGED#C1` ### FORM CHK_ZINOUT — `ZFIR0160F02` L1042-L1064 (23줄) *입출구분자(ZINOUT) 값이 허용 코드(11,12,13,14,51~55,57) 중 하나인지 검증하고 아니면 오류 플래그와 메시지를 돌려주는 FORM이다.* > 이 unit 의 조각 1개가 15/23줄(65%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [validation] 입력된 입출구분자 값이 허용 목록(11,13,51,12,52,14,57,53,54,55)에 없으면 P_ERR='X' 와 '입출구분자 오류입니다' 메시지를 설정한다. ```abap 1048| IF P_VALUE = '11' OR 1049| P_VALUE = '13' OR 1050| P_VALUE = '51' OR 1051| P_VALUE = '12' OR 1052| P_VALUE = '52' OR 1053| P_VALUE = '14' OR 1054| P_VALUE = '57' OR 1055| P_VALUE = '53' OR 1056| P_VALUE = '54' OR 1057| P_VALUE = '55'. 1058| 1059| ELSE. 1060| P_ERR = 'X'. 1061| P_MSG-MSGV1 = '입출구분자 오류입니다'. 1062| ENDIF. ``` - **EN**: Validate that the in/out indicator value is one of the allowed codes; otherwise set the error flag and message. - 업무 키워드: 입출구분자, 유효성 검증, 허용 코드, 오류 메시지 - English: validation, indicator check - 위치: `abap://ZFIR0160/ZFIR0160F02#L1048-L1062` · confidence 0.85 · `ZFIR0160#ZFIR0160F02#FORM#CHK_ZINOUT#C1` ### FORM ADD_PROTOCAL_ENTRY — `ZFIR0160F02` L1076-L1096 (21줄) *편집 ALV 의 셀 검증 오류를 CL_ALV_CHANGED_DATA_PROTOCOL->ADD_PROTOCOL_ENTRY 로 오류 로그(메시지 00/E)에 추가하는 FORM 이다.* > 이 unit 의 조각 1개가 11/21줄(52%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [output] 검증 실패 셀(필드명·행)에 대해 FIMSG 메시지 내용을 ADD_PROTOCOL_ENTRY 로 등록해 ALV 오류 프로토콜에 표시한다. ```abap 1084| CALL METHOD RR_DATA_CHANGED->ADD_PROTOCOL_ENTRY 1085| EXPORTING 1086| I_MSGID = '00' 1087| I_MSGTY = 'E' 1088| I_MSGNO = PS_MESSAGE-MSGNO 1089| I_MSGV1 = PS_MESSAGE-MSGV1 1090| I_MSGV2 = PS_MESSAGE-MSGV2 1091| I_MSGV3 = PS_MESSAGE-MSGV3 1092| I_MSGV4 = PS_MESSAGE-MSGV4 1093| I_FIELDNAME = RS_MOD_CELLS-FIELDNAME 1094| I_ROW_ID = RS_MOD_CELLS-ROW_ID. ``` - **EN**: Adds an error message for the failed cell to the ALV changed-data protocol via ADD_PROTOCOL_ENTRY. - 호출(파서): RR_DATA_CHANGED->ADD_PROTOCOL_ENTRY - SAP 객체: CL_ALV_CHANGED_DATA_PROTOCOL, ADD_PROTOCOL_ENTRY - 업무 키워드: 오류 프로토콜, 셀 검증 오류, 메시지 - English: Error Protocol, Data Changed, ALV Grid - 위치: `abap://ZFIR0160/ZFIR0160F02#L1084-L1094` · confidence 0.85 · `ZFIR0160#ZFIR0160F02#FORM#ADD_PROTOCAL_ENTRY#C1` ### FORM F4_UNAME_PROCESS — `ZFIR0160F02` L1314-L1417 (104줄) *USERID 셀의 F4 도움말로 USER_ADDRP 사용자 목록을 HELP_VALUES_GET_NO_DD_NAME 팝업으로 보여주고 선택값과 성명을 GT_MAIN 행에 반영하는 FORM이다.* > 이 unit 의 조각 3개가 56/104줄(54%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [sql_select] USER_ADDRP 뷰에서 사용자 ID(BNAME)와 이름(NAME_TEXT)을 전부 읽어 F4 목록용 IT_VALUE 로 옮기고, 없으면 '해당 자료가 없습니다' 메시지로 종료한다. ```abap 1355| SELECT BNAME NAME_TEXT INTO TABLE IT_USER 1356| FROM USER_ADDRP. 1357| 1358| LOOP AT IT_USER. 1359| IT_VALUE-TEXT1 = IT_USER-BNAME. 1360| IT_VALUE-TEXT2 = IT_USER-NAME_TEXT. 1361| APPEND IT_VALUE. 1362| CLEAR IT_VALUE. 1363| ENDLOOP. 1364| 1365| * 검색된 자료의 존재 여부. 1366| IF SY-SUBRC <> 0. 1367| MESSAGE S000 WITH '해당 자료가 없습니다.'. 1368| EXIT. 1369| ENDIF. ``` - **EN**: Read user IDs and names from USER_ADDRP into the F4 hit list table and exit with a message if nothing is found. - 테이블(파서): read [USER_ADDRP](/tables/USER_ADDRP.md) / write - - SAP 객체: USER_ADDRP - 업무 키워드: 사용자 목록, F4 도움말, 사용자 마스터 조회 - English: value help, USER_ADDRP, user master - 정의부(복사 시 함께 필요): [`IT_USER`](#decl-zfir0160f02-1336-it_user), [`IT_VALUE`](#decl-zfir0160f02-1341-it_value) - 위치: `abap://ZFIR0160/ZFIR0160F02#L1355-L1369` · confidence 0.9 · `ZFIR0160#ZFIR0160F02#FORM#F4_UNAME_PROCESS#C1` #### [fm_call] 히트리스트 컬럼(USR21-BNAME 선택필드, ADRP-NAME_TEXT)을 정의하고 HELP_VALUES_GET_NO_DD_NAME 을 호출해 사용자 선택 팝업을 띄워 선택 인덱스와 값을 받는다. ```abap 1373| IT_FIELDS-TABNAME = 'USR21'. 1374| IT_FIELDS-FIELDNAME = 'BNAME'. 1375| IT_FIELDS-SELECTFLAG = 'X'. "실제 선택되는 값에 'X' 표시 1376| APPEND IT_FIELDS. 1377| 1378| 1379| 1380| IT_FIELDS-TABNAME = 'ADRP'. 1381| IT_FIELDS-FIELDNAME = 'NAME_TEXT'. 1382| IT_FIELDS-SELECTFLAG = ' '. 1383| APPEND IT_FIELDS. 1384| 1385| 1386| * F4기능 부분 1387| CALL FUNCTION 'HELP_VALUES_GET_NO_DD_NAME' 1388| EXPORTING 1389| SELECTFIELD = SELECTFIELD 1390| IMPORTING 1391| IND = LD_TABIX 1392| SELECT_VALUE = SELECT_VALUE 1393| TABLES 1394| FIELDS = IT_FIELDS 1395| FULL_TABLE = IT_VALUE 1396| EXCEPTIONS 1397| FULL_TABLE_EMPTY = 1 1398| NO_TABLESTRUCTURE_GIVEN = 2 1399| NO_TABLEFIELDS_IN_DICTIONARY = 3 1400| MORE_THEN_ONE_SELECTFIELD = 4 1401| NO_SELECTFIELD = 5 1402| OTHERS = 6. ``` - **EN**: Define hit-list columns (USR21-BNAME, ADRP-NAME_TEXT) and call HELP_VALUES_GET_NO_DD_NAME to show the user selection popup and return the chosen value. - 호출(파서): HELP_VALUES_GET_NO_DD_NAME - SAP 객체: HELP_VALUES_GET_NO_DD_NAME, USR21, ADRP - 업무 키워드: F4 팝업, 히트리스트, 사용자 선택 - English: value help popup, hit list - 정의부(복사 시 함께 필요): [`IT_FIELDS`](#decl-zfir0160f02-1328-it_fields), [`SELECTFIELD`](#decl-zfir0160f02-1327-selectfield), [`LD_TABIX`](#decl-zfir0160f02-1330-ld_tabix), [`SELECT_VALUE`](#decl-zfir0160f02-1329-select_value), [`IT_VALUE`](#decl-zfir0160f02-1341-it_value) - 위치: `abap://ZFIR0160/ZFIR0160F02#L1373-L1402` · confidence 0.9 · `ZFIR0160#ZFIR0160F02#FORM#F4_UNAME_PROCESS#C2` #### [control_flow] 선택된 사용자 ID 를 GT_MAIN-USERID 에 넣고 USER_ADDRP_PROCESS(ZTR_POOL)로 성명을 구해 해당 행의 USERID·NAME 을 MODIFY 한 뒤 그리드를 갱신한다. ```abap 1405| CHECK NOT LD_TABIX IS INITIAL. 1406| READ TABLE IT_VALUE INDEX LD_TABIX. 1407| GT_MAIN-USERID = SELECT_VALUE. 1408| 1409| 1410| PERFORM USER_ADDRP_PROCESS(ZTR_POOL) USING GT_MAIN-USERID 1411| CHANGING GT_MAIN-NAME. 1412| 1413| 1414| MODIFY GT_MAIN INDEX ES_ROW_NO-ROW_ID TRANSPORTING USERID NAME. 1415| PERFORM SET_REFRESH. ``` - **EN**: Apply the selected user ID to the grid row, derive the name via USER_ADDRP_PROCESS (ZTR_POOL), modify USERID/NAME and refresh the grid. - 테이블(파서): read - / write [GT_MAIN](/tables/GT_MAIN.md) - 호출(파서): USER_ADDRP_PROCESS, SET_REFRESH - SAP 객체: ZTR_POOL, USER_ADDRP - 업무 키워드: 선택값 반영, 사용자 성명, 그리드 갱신 - English: selected value, user name, ALV refresh - 정의부(복사 시 함께 필요): [`LD_TABIX`](#decl-zfir0160f02-1330-ld_tabix), [`IT_VALUE`](#decl-zfir0160f02-1341-it_value), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`SELECT_VALUE`](#decl-zfir0160f02-1329-select_value) - 위치: `abap://ZFIR0160/ZFIR0160F02#L1405-L1415` · confidence 0.85 · `ZFIR0160#ZFIR0160F02#FORM#F4_UNAME_PROCESS#C3` ### FORM USER_COMMAND — `ZFIR0160F02` L746-L788 (43줄) *ALV 툴바 기능코드(INSE/DELE/COPY/SAVE)별로 행 삽입·삭제·복사·저장 처리를 분기하는 USER_COMMAND 핸들러이다.* > 이 unit 의 조각 1개가 39/43줄(91%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] INSE 는 빈 행 추가 후 편집 스타일 설정, DELE 는 확인 팝업 후 SET_DELETE_ROWS, COPY 는 SET_COPY_ROWS, SAVE 는 확인 팝업 후 CHK_DATA 검증→SET_SAVE(ZFIT0160 저장)→재조회(SET_DATA)→그리드 갱신 순으로 분기한다. ```abap 748| CASE P_UCOMM. 749| 750| * WHEN 'CHAN'. 751| * PERFORM SET_CHANGE. 752| 753| WHEN 'INSE'. 754| CLEAR GT_MAIN. 755| APPEND GT_MAIN. 756| PERFORM SET_LINE_ITAB_STYLE USING P_UCOMM. 757| 758| 759| PERFORM SET_REFRESH. 760| 761| 762| WHEN 'DELE'. 763| PERFORM POPUP_TO_CONFIRM USING P_ANSWER P_UCOMM. 764| CHECK P_ANSWER = 'J'. 765| 766| PERFORM SET_DELETE_ROWS. 767| PERFORM SET_REFRESH. 768| 769| 770| WHEN 'COPY'. 771| PERFORM SET_COPY_ROWS. 772| PERFORM SET_REFRESH. 773| 774| 775| WHEN 'SAVE'. 776| PERFORM POPUP_TO_CONFIRM USING P_ANSWER P_UCOMM. 777| CHECK P_ANSWER = 'J'. 778| 779| PERFORM CHK_DATA. 780| PERFORM SET_SAVE. 781| 782| PERFORM SET_DATA. 783| PERFORM SET_ITAB_STYLE. " CHANGE 784| PERFORM SET_REFRESH. 785| 786| ENDCASE. ``` - **EN**: Dispatch toolbar function codes: insert a blank row, delete/copy selected rows, or after confirmation validate and save to ZFIT0160 then reload and refresh the grid. - 호출(파서): SET_LINE_ITAB_STYLE, SET_REFRESH, POPUP_TO_CONFIRM, SET_DELETE_ROWS, SET_REFRESH, SET_COPY_ROWS, SET_REFRESH, POPUP_TO_CONFIRM, CHK_DATA, SET_SAVE, SET_DATA, SET_ITAB_STYLE, SET_REFRESH - SAP 객체: ZFIT0160 - 업무 키워드: 행 삽입, 행 삭제, 행 복사, 저장, 확인 팝업, 권한 관리 - English: user command, toolbar, save, ALV refresh - 정의부(복사 시 함께 필요): [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`P_ANSWER`](#decl-zfir0160top-35-p_answer) - 위치: `abap://ZFIR0160/ZFIR0160F02#L748-L786` · confidence 0.9 · `ZFIR0160#ZFIR0160F02#FORM#USER_COMMAND#C1` ### FORM SET_LINE_ITAB_STYLE — `ZFIR0160F02` L54-L88 (35줄) *현재 GT_MAIN 행 하나에 SET_LINE_CELLTAB 으로 신규 행 셀 스타일을 계산해 CELLTAB 에 반영하는 FORM이다.* > 이 unit 의 조각 1개가 22/35줄(63%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] 현재 행 인덱스를 저장하고 P_UCOMM(INSE/COPY) 기준으로 SET_LINE_CELLTAB 을 호출해 셀 스타일을 만든 뒤 GT_MAIN-CELLTAB 에 삽입하고 MODIFY 한다. ```abap 63| LV_TABIX = SY-TABIX. 64| 65| CLEAR: GT_MAIN-CELLTAB, 66| LS_MAIN, LT_CELLTAB, LT_CELLTAB[], LV_UCOMM. 67| 68| MOVE-CORRESPONDING GT_MAIN TO LS_MAIN. 69| 70| * 개발번호 71| 72| 73| IF LV_UCOMM IS INITIAL. 74| LV_UCOMM = P_UCOMM. 75| ENDIF. 76| 77| * SETTING COLOR 78| 79| PERFORM SET_LINE_CELLTAB USING LS_MAIN 80| LV_UCOMM 81| CHANGING LT_CELLTAB. 82| 83| INSERT LINES OF LT_CELLTAB INTO TABLE GT_MAIN-CELLTAB. 84| MODIFY GT_MAIN INDEX LV_TABIX. ``` - **EN**: Build per-cell edit styles for the current GT_MAIN row via SET_LINE_CELLTAB and store them in the row's CELLTAB. - 테이블(파서): read - / write [GT_MAIN](/tables/GT_MAIN.md) - 호출(파서): SET_LINE_CELLTAB - 업무 키워드: 행 스타일, 신규 행, 셀 편집 상태 - English: cell style, editable ALV - 정의부(복사 시 함께 필요): [`LV_TABIX`](#decl-zfir0160f02-59-lv_tabix), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`LS_MAIN`](#decl-zfir0160f02-56-ls_main), [`LT_CELLTAB`](#decl-zfir0160f02-58-lt_celltab), [`LV_UCOMM`](#decl-zfir0160f02-61-lv_ucomm) - 위치: `abap://ZFIR0160/ZFIR0160F02#L63-L84` · confidence 0.8 · `ZFIR0160#ZFIR0160F02#FORM#SET_LINE_ITAB_STYLE#C1` ### FORM SET_LINE_CELLTAB — `ZFIR0160F02` L136-L172 (37줄) *행 삽입/복사(INSE/COPY)된 신규 행에 대해 USERID·ZFIR0090 컬럼만 편집 가능하도록 셀 스타일(LVC_T_STYL)을 만드는 FORM이다.* > 이 unit 의 조각 1개가 25/37줄(68%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] 신규 행(INSE/COPY)에 대해 필드카탈로그를 순회하며 USERID 와 ZFIR0090 만 MC_STYLE_ENABLED, 나머지는 MC_STYLE_DISABLED 로 셀 스타일을 설정한다. ```abap 146| LOOP AT GT_FCAT1 INTO GS_FCAT. 147| CLEAR LS_CELLTAB. 148| 149| CASE P_UCOMM. 150| 151| WHEN 'INSE' OR 'COPY'. 152| IF GS_FCAT-FIELDNAME = 'USERID' OR 153| GS_FCAT-FIELDNAME = 'ZFIR0090'. 154| 155| LV_MODE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. 156| LS_CELLTAB-FIELDNAME = GS_FCAT-FIELDNAME. 157| LS_CELLTAB-STYLE = LV_MODE. 158| 159| ELSE. 160| 161| LV_MODE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. 162| LS_CELLTAB-FIELDNAME = GS_FCAT-FIELDNAME. 163| LS_CELLTAB-STYLE = LV_MODE. 164| 165| ENDIF. 166| 167| ENDCASE. 168| 169| INSERT LS_CELLTAB INTO TABLE P_CELLTAB. 170| ENDLOOP. ``` - **EN**: For inserted/copied rows, enable editing only for USERID and ZFIR0090 columns and disable the rest via LVC_S_STYL entries. - 호출(파서): CL_GUI_ALV_GRID=>MC_STYLE_ENABLED, CL_GUI_ALV_GRID=>MC_STYLE_DISABLED - SAP 객체: CL_GUI_ALV_GRID - 업무 키워드: 신규 행, 셀 편집 가능, 사용자 ID, 권한 항목 - English: cell style, editable cell, new row - 정의부(복사 시 함께 필요): [`GT_FCAT1`](#decl-zfir0160t01-12-gt_fcat1), [`GS_FCAT`](#decl-zfir0160t01-11-gs_fcat), [`LS_CELLTAB`](#decl-zfir0160f02-140-ls_celltab), [`LV_MODE`](#decl-zfir0160f02-141-lv_mode) - 위치: `abap://ZFIR0160/ZFIR0160F02#L146-L170` · confidence 0.85 · `ZFIR0160#ZFIR0160F02#FORM#SET_LINE_CELLTAB#C1` ### FORM POPUP_TO_CONFIRM — `ZFIR0160F01` L203-L239 (37줄) *저장/삭제/역분개 기능코드에 맞는 문구로 POPUP_TO_CONFIRM_STEP 확인 팝업을 띄우고 응답을 돌려주는 FORM이다.* > 이 unit 의 조각 1개가 27/37줄(73%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [fm_call] 기능코드(SAVE/DELE/REVERSE)별 확인 문구를 정하고 POPUP_TO_CONFIRM_STEP 을 호출해 사용자의 예/아니오 응답을 FP_ANSWER 로 받는다. ```abap 210| CASE SAVE_OK. 211| 212| WHEN 'SAVE'. 213| L_DEFAULTOPTION = 'Y'. 214| L_TEXTLINE1 = ''. 215| L_TEXTLINE2 = '저장 하시겠습니까 ?'. 216| 217| WHEN 'DELE'. 218| L_DEFAULTOPTION = 'Y'. 219| L_TEXTLINE1 = ''. 220| L_TEXTLINE2 = '삭제 하시겠습니까 ?'. 221| 222| WHEN 'REVERSE'. 223| L_DEFAULTOPTION = 'Y'. 224| L_TEXTLINE2 = '역분개 하시겠습니까 ?'. 225| 226| ENDCASE. 227| 228| CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' 229| EXPORTING 230| DEFAULTOPTION = L_DEFAULTOPTION 231| TEXTLINE1 = L_TEXTLINE1 232| TEXTLINE2 = L_TEXTLINE2 233| TITEL = TEXT-101 234| CANCEL_DISPLAY = '' 235| IMPORTING 236| ANSWER = FP_ANSWER. ``` - **EN**: Set confirmation text per function code (save/delete/reverse) and call POPUP_TO_CONFIRM_STEP to obtain the user's answer. - 호출(파서): POPUP_TO_CONFIRM_STEP - SAP 객체: POPUP_TO_CONFIRM_STEP - 업무 키워드: 확인 팝업, 저장 확인, 삭제 확인, 역분개 확인 - English: confirmation popup, reversal - 정의부(복사 시 함께 필요): [`SAVE_OK`](#decl-zfir0160t01-36-save_ok), [`L_DEFAULTOPTION`](#decl-zfir0160f01-205-l_defaultoption), [`L_TEXTLINE1`](#decl-zfir0160f01-205-l_textline1), [`L_TEXTLINE2`](#decl-zfir0160f01-205-l_textline2) - 위치: `abap://ZFIR0160/ZFIR0160F01#L210-L236` · confidence 0.9 · `ZFIR0160#ZFIR0160F01#FORM#POPUP_TO_CONFIRM#C1` ### FORM SET_DELETE_ROWS — `ZFIR0160F02` L834-L883 (50줄) *그리드에서 선택한 사용자 행을 GT_MAIN 과 권한 테이블 ZFIT0160 에서 즉시 삭제하고 건수를 메시지로 알리는 FORM이다.* > 이 unit 의 조각 2개가 35/50줄(70%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] GET_SELECTED_ROWS 로 선택 행을 읽어 GT_TABLE 에 모으고, 선택이 없으면 '삭제할 행을 선택하세요' 메시지로 종료한다. ```abap 845| CALL METHOD GO_GRID->GET_SELECTED_ROWS 846| IMPORTING 847| ET_INDEX_ROWS = LT_ROWS. 848| 849| LOOP AT LT_ROWS INTO LS_ROWS. 850| READ TABLE GT_MAIN INDEX LS_ROWS-INDEX. 851| IF SY-SUBRC = 0. 852| CLEAR GT_TABLE. 853| MOVE-CORRESPONDING GT_MAIN TO GT_TABLE. 854| APPEND GT_TABLE. 855| 856| ENDIF. 857| ENDLOOP. 858| 859| 860| IF GT_TABLE[] IS INITIAL. 861| MESSAGE S001 WITH '삭제할 행을 선택하세요.'. 862| EXIT. 863| ENDIF. ``` - **EN**: Collect selected ALV rows into GT_TABLE and exit with a message if nothing is selected. - 호출(파서): GO_GRID->GET_SELECTED_ROWS - SAP 객체: CL_GUI_ALV_GRID - 업무 키워드: 선택 행, 삭제 대상, 행 선택 검사 - English: selected rows, validation - 정의부(복사 시 함께 필요): [`GO_GRID`](#decl-zfir0160c01-128-go_grid), [`LT_ROWS`](#decl-zfir0160f02-836-lt_rows), [`LS_ROWS`](#decl-zfir0160f02-837-ls_rows), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`ZFIT0160`](#decl-zfir0160top-5-zfit0160), [`GT_TABLE`](#decl-zfir0160top-39-gt_table) - 위치: `abap://ZFIR0160/ZFIR0160F02#L845-L863` · confidence 0.9 · `ZFIR0160#ZFIR0160F02#FORM#SET_DELETE_ROWS#C1` #### [db_write] 선택된 각 USERID 에 대해 GT_MAIN 에서 행을 지우고 DELETE FROM ZFIT0160 으로 권한 레코드를 DB 에서 삭제한 뒤 삭제 건수를 메시지로 표시한다. ```abap 866| LOOP AT GT_TABLE. 867| 868| DELETE GT_MAIN WHERE USERID = GT_TABLE-USERID. 869| 870| DELETE FROM ZFIT0160 WHERE USERID = GT_TABLE-USERID. 871| 872| LV_CNT = LV_CNT + 1. 873| ENDLOOP. 874| 875| IF LV_CNT IS INITIAL. 876| CONCATENATE '삭제건이 없습니다.' ' ' INTO LV_CNT. 877| ELSE. 878| CONCATENATE LV_CNT '건 삭제하였습니다.' INTO LV_CNT. 879| ENDIF. 880| 881| MESSAGE S001 WITH LV_CNT. ``` - **EN**: For each selected USERID delete the row from GT_MAIN and from authorization table ZFIT0160, then report the deleted count. - 테이블(파서): read - / write [GT_MAIN](/tables/GT_MAIN.md), [ZFIT0160](/tables/ZFIT0160.md) - SAP 객체: ZFIT0160 - 업무 키워드: 권한 삭제, 사용자 권한, DB 삭제, 삭제 건수 - English: authorization delete, DELETE FROM, user authorization - 정의부(복사 시 함께 필요): [`ZFIT0160`](#decl-zfir0160top-5-zfit0160), [`GT_TABLE`](#decl-zfir0160top-39-gt_table), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`LV_CNT`](#decl-zfir0160f02-839-lv_cnt) - 위치: `abap://ZFIR0160/ZFIR0160F02#L866-L881` · confidence 0.95 · `ZFIR0160#ZFIR0160F02#FORM#SET_DELETE_ROWS#C2` ### FORM SET_COPY_ROWS — `ZFIR0160F02` L894-L929 (36줄) *그리드에서 선택한 행들을 복사해 GT_MAIN 에 새 행으로 추가하고 편집 스타일을 부여하는 FORM이다.* > 이 unit 의 조각 1개가 27/36줄(75%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] GET_SELECTED_ROWS 로 선택 행을 얻어 없으면 안내 메시지 후 종료하고, 선택 행을 GT_IMSI1 에 복사(CELLTAB 제거)한 뒤 GT_MAIN 에 APPEND 하며 SET_LINE_ITAB_STYLE 로 COPY 행 스타일을 준다. ```abap 901| CALL METHOD GO_GRID->GET_SELECTED_ROWS 902| IMPORTING 903| ET_INDEX_ROWS = LT_ROWS. 904| 905| 906| IF LT_ROWS[] IS INITIAL. 907| MESSAGE S001 WITH '복사할 행을 선택하세요.'. 908| EXIT. 909| ENDIF. 910| 911| CLEAR: GT_IMSI1[], GT_IMSI1. 912| 913| LOOP AT LT_ROWS INTO LS_ROWS. 914| READ TABLE GT_MAIN INDEX LS_ROWS-INDEX. 915| IF SY-SUBRC = 0. 916| GT_IMSI1 = GT_MAIN. 917| CLEAR: GT_IMSI1-CELLTAB. 918| APPEND GT_IMSI1. 919| ENDIF. 920| ENDLOOP. 921| 922| 923| LOOP AT GT_IMSI1. 924| GT_MAIN = GT_IMSI1. 925| APPEND GT_MAIN. 926| PERFORM SET_LINE_ITAB_STYLE USING 'COPY'. 927| ENDLOOP. ``` - **EN**: Read selected ALV rows, copy them (without CELLTAB) into GT_IMSI1 and append them to GT_MAIN as new editable rows via SET_LINE_ITAB_STYLE. - 호출(파서): GO_GRID->GET_SELECTED_ROWS, SET_LINE_ITAB_STYLE - SAP 객체: CL_GUI_ALV_GRID - 업무 키워드: 행 복사, 선택 행, 권한 등록, 행 추가 - English: row copy, selected rows, editable ALV - 정의부(복사 시 함께 필요): [`GO_GRID`](#decl-zfir0160c01-128-go_grid), [`LT_ROWS`](#decl-zfir0160f02-896-lt_rows), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`GT_IMSI1`](#decl-zfir0160top-32-gt_imsi1), [`LS_ROWS`](#decl-zfir0160f02-897-ls_rows) - 위치: `abap://ZFIR0160/ZFIR0160F02#L901-L927` · confidence 0.9 · `ZFIR0160#ZFIR0160F02#FORM#SET_COPY_ROWS#C1` ### FORM SET_SAVE — `ZFIR0160F02` L1155-L1234 (80줄) *편집한 권한 내역을 검증 통과 시에만 권한 테이블 ZFIT0160 에 일괄 저장하고 결과를 건수로 알린다.* > 이 unit 의 조각 1개가 68/80줄(85%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [db_write] 앞선 검증에서 오류가 없을 때만 진행한다. 사용자ID 로 정렬해 ID 가 채워진 행만 저장 대상으로 모으고, 저장건이 없으면 메시지로 알린다. 모은 행을 커스텀 권한 테이블 ZFIT0160 에 MODIFY 로 일괄 반영하고, 성공하면 '전체 n건 중 m건 성공' 메시지를, 실패하면 오류 메시지와 함께 ROLLBACK WORK 로 되돌린다. ```abap 1165| CHECK GV_ERR IS INITIAL. 1166| 1167| CLEAR: GT_TABLE, GT_TABLE[], GV_CHK, 1168| LV_TEXT, LV_CNT1, LV_CNT2. 1169| 1170| 1171| SORT GT_MAIN BY USERID. 1172| 1173| 1174| LOOP AT GT_MAIN. 1175| 1176| LV_TABIX = SY-TABIX. 1177| 1178| CLEAR: GT_MAIN-SCOL, LT_SCOL, LT_SCOL[]. 1179| 1180| 1181| IF GT_MAIN-USERID IS NOT INITIAL. 1182| 1183| CLEAR GT_TABLE. 1184| 1185| MOVE-CORRESPONDING GT_MAIN TO GT_TABLE. 1186| 1187| * IF GT_TABLE-ERNAM IS INITIAL. 1188| * GT_TABLE-ERNAM = SY-UNAME. 1189| * GT_TABLE-ERDAT = SY-DATLO. 1190| * GT_TABLE-ERZET = SY-TIMLO. 1191| * ELSE. 1192| * GT_TABLE-AENAM = SY-UNAME. 1193| * GT_TABLE-AEDAT = SY-DATLO. 1194| * GT_TABLE-AEZET = SY-TIMLO. 1195| * ENDIF. 1196| * 1197| 1198| APPEND GT_TABLE. 1199| 1200| LV_CNT1 = LV_CNT1 + 1. 1201| 1202| ENDIF. 1203| 1204| ENDLOOP. 1205| 1206| IF LV_CNT1 IS INITIAL. 1207| LV_TEXT = '저장건이 없습니다'. 1208| MESSAGE S001 WITH LV_TEXT. 1209| ENDIF. 1210| 1211| 1212| CHECK GT_TABLE[] IS NOT INITIAL. 1213| 1214| 1215| MODIFY ZFIT0160 FROM TABLE GT_TABLE. 1216| 1217| IF SY-SUBRC = 0. 1218| 1219| DESCRIBE TABLE GT_MAIN LINES LV_CNT2. 1220| 1221| CONCATENATE `전체 ` LV_CNT2 `건 중 ` LV_CNT1 '건 성공하였습니다.' 1222| INTO LV_TEXT. 1223| CONDENSE LV_TEXT. 1224| 1225| MESSAGE S001 WITH LV_TEXT. 1226| 1227| ELSE. 1228| 1229| MESSAGE S001 WITH '저장에 실패하였습니다.' DISPLAY LIKE 'E'. 1230| ROLLBACK WORK. 1231| 1232| ENDIF. ``` - **EN**: Only proceeds when validation passed; collects rows with a user ID, bulk-MODIFYs them into the custom authorization table ZFIT0160, and reports counts or rolls back on failure. - 테이블(파서): read - / write [ZFIT0160](/tables/ZFIT0160.md) - SAP 객체: ZFIT0160, USERID - 업무 키워드: 권한저장, 권한테이블, 사용자ID, 일괄저장, 롤백, 저장건수, 권한관리 - English: authorization save, authority table, user ID, bulk update, rollback, ZFIT0160 - 정의부(복사 시 함께 필요): [`GV_ERR`](#decl-zfir0160t01-40-gv_err), [`ZFIT0160`](#decl-zfir0160top-5-zfit0160), [`GT_TABLE`](#decl-zfir0160top-39-gt_table), [`GV_CHK`](#decl-zfir0160t01-42-gv_chk), [`LV_TEXT`](#decl-zfir0160f02-1160-lv_text), [`LV_CNT1`](#decl-zfir0160f02-1161-lv_cnt1), [`LV_CNT2`](#decl-zfir0160f02-1162-lv_cnt2), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`LV_TABIX`](#decl-zfir0160f02-1157-lv_tabix), [`LT_SCOL`](#decl-zfir0160f02-1158-lt_scol) - 위치: `abap://ZFIR0160/ZFIR0160F02#L1165-L1232` · confidence 0.88 · `ZFIR0160#ZFIR0160F02#FORM#SET_SAVE#C1` ### FORM SET_ITAB_STYLE — `ZFIR0160F02` L13-L49 (37줄) *GT_MAIN 각 행에 대해 SET_CELLTAB 으로 셀 편집 스타일을 계산해 CELLTAB 에 반영하는 FORM이다.* > 이 unit 의 조각 1개가 26/37줄(70%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] GT_MAIN 의 모든 행을 순회하며 현재 모드(GV_UCOMM)로 SET_CELLTAB 을 호출해 셀 스타일을 만들고 각 행의 CELLTAB 에 삽입 후 MODIFY 한다. ```abap 22| LOOP AT GT_MAIN. 23| LV_TABIX = SY-TABIX. 24| 25| CLEAR: GT_MAIN-CELLTAB, 26| LS_MAIN, LT_CELLTAB, LT_CELLTAB[], LV_UCOMM. 27| 28| MOVE-CORRESPONDING GT_MAIN TO LS_MAIN. 29| 30| * 개발번호 31| 32| 33| IF LV_UCOMM IS INITIAL. 34| LV_UCOMM = GV_UCOMM. 35| ENDIF. 36| 37| * SETTING COLOR 38| 39| PERFORM SET_CELLTAB USING LS_MAIN 40| LV_UCOMM 41| CHANGING LT_CELLTAB. 42| 43| INSERT LINES OF LT_CELLTAB INTO TABLE GT_MAIN-CELLTAB. 44| MODIFY GT_MAIN INDEX LV_TABIX. 45| 46| 47| ENDLOOP. ``` - **EN**: Loop over GT_MAIN, derive per-cell edit styles via SET_CELLTAB for the current mode and store them in each row's CELLTAB. - 테이블(파서): read - / write [GT_MAIN](/tables/GT_MAIN.md) - 호출(파서): SET_CELLTAB - 업무 키워드: 행 스타일, 셀 편집 상태, 그리드 갱신 - English: cell style, ALV editable grid - 정의부(복사 시 함께 필요): [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`LV_TABIX`](#decl-zfir0160f02-18-lv_tabix), [`LS_MAIN`](#decl-zfir0160f02-15-ls_main), [`LT_CELLTAB`](#decl-zfir0160f02-17-lt_celltab), [`LV_UCOMM`](#decl-zfir0160f02-20-lv_ucomm), [`GV_UCOMM`](#decl-zfir0160t01-38-gv_ucomm) - 위치: `abap://ZFIR0160/ZFIR0160F02#L22-L47` · confidence 0.85 · `ZFIR0160#ZFIR0160F02#FORM#SET_ITAB_STYLE#C1` ### FORM SET_CELLTAB — `ZFIR0160F02` L94-L131 (38줄) *변경 모드(CHAN)에서 필드카탈로그를 순회하며 ZFIR0090 컬럼만 편집 가능하고 나머지는 편집 불가로 셀 스타일(LVC_T_STYL)을 만드는 FORM이다.* > 이 unit 의 조각 1개가 26/38줄(68%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] GT_FCAT1 의 각 컬럼에 대해 변경 모드(CHAN)일 때 ZFIR0090 필드만 MC_STYLE_ENABLED, 나머지 컬럼은 MC_STYLE_DISABLED 로 셀 스타일을 설정해 P_CELLTAB 에 넣는다. ```abap 104| LOOP AT GT_FCAT1 INTO GS_FCAT. 105| CLEAR LS_CELLTAB. 106| 107| CASE P_UCOMM. 108| 109| WHEN 'CHAN'. 110| IF GS_FCAT-FIELDNAME = 'ZFIR0090'. 111| 112| LV_MODE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. 113| LS_CELLTAB-FIELDNAME = GS_FCAT-FIELDNAME. 114| LS_CELLTAB-STYLE = LV_MODE. 115| 116| 117| ELSE. 118| 119| LV_MODE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. 120| LS_CELLTAB-FIELDNAME = GS_FCAT-FIELDNAME. 121| LS_CELLTAB-STYLE = LV_MODE. 122| 123| ENDIF. 124| 125| ENDCASE. 126| 127| INSERT LS_CELLTAB INTO TABLE P_CELLTAB. 128| 129| ENDLOOP. ``` - **EN**: For each field catalog column in change mode, enable editing only for ZFIR0090 and disable the others by building LVC_S_STYL entries. - 호출(파서): CL_GUI_ALV_GRID=>MC_STYLE_ENABLED, CL_GUI_ALV_GRID=>MC_STYLE_DISABLED - SAP 객체: CL_GUI_ALV_GRID - 업무 키워드: 셀 편집 가능, 셀 스타일, 변경 모드, 권한 항목 - English: cell style, editable cell, LVC_T_STYL - 정의부(복사 시 함께 필요): [`GT_FCAT1`](#decl-zfir0160t01-12-gt_fcat1), [`GS_FCAT`](#decl-zfir0160t01-11-gs_fcat), [`LS_CELLTAB`](#decl-zfir0160f02-98-ls_celltab), [`LV_MODE`](#decl-zfir0160f02-99-lv_mode) - 위치: `abap://ZFIR0160/ZFIR0160F02#L104-L129` · confidence 0.85 · `ZFIR0160#ZFIR0160F02#FORM#SET_CELLTAB#C1` ### FORM SET_F4_VARIANT — `ZFIR0160F01` L58-L80 (23줄) *REUSE_ALV_VARIANT_F4 로 ALV 레이아웃 변형 F4 도움말을 제공하는 FORM이다.* > 이 unit 의 조각 1개가 17/23줄(74%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [fm_call] REUSE_ALV_VARIANT_F4 를 호출해 저장된 ALV 레이아웃 변형 목록을 팝업으로 보여주고 선택값을 GX_VARIANT 로 받는다(선택화면 반영 코드는 주석 처리됨). ```abap 62| CALL FUNCTION 'REUSE_ALV_VARIANT_F4' 63| EXPORTING 64| IS_VARIANT = GS_VARIANT 65| I_SAVE = 'A' 66| IMPORTING 67| E_EXIT = GV_EXIT 68| ES_VARIANT = GX_VARIANT 69| EXCEPTIONS 70| NOT_FOUND = 1. 71| IF SY-SUBRC <> 0. 72| MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 73| WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 74| ELSE. 75| IF GV_EXIT IS INITIAL. 76| **** PA_LAYOU = GX_VARIANT-VARIANT. 77| ENDIF. 78| ENDIF. ``` - **EN**: Call REUSE_ALV_VARIANT_F4 to offer a value help for saved ALV layout variants and return the chosen variant. - 호출(파서): REUSE_ALV_VARIANT_F4 - SAP 객체: REUSE_ALV_VARIANT_F4 - 업무 키워드: 레이아웃 변형, F4 도움말, ALV 변형 - English: ALV layout variant, value help - 정의부(복사 시 함께 필요): [`GS_VARIANT`](#decl-zfir0160t01-8-gs_variant), [`GV_EXIT`](#decl-zfir0160t01-24-gv_exit), [`GX_VARIANT`](#decl-zfir0160t01-9-gx_variant) - 위치: `abap://ZFIR0160/ZFIR0160F01#L62-L78` · confidence 0.85 · `ZFIR0160#ZFIR0160F01#FORM#SET_F4_VARIANT#C1` ### FORM SET_POP_MESSAGE — `ZFIR0160F01` L137-L159 (23줄) *POPUP_TO_CONFIRM 으로 예/아니오 확인 팝업을 띄워 사용자 응답(P_ANSWER)을 돌려주는 FORM 이다.* > 이 unit 의 조각 1개가 18/23줄(78%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [fm_call] POPUP_TO_CONFIRM 을 호출해 전달받은 질문 텍스트로 예/아니오 팝업을 띄우고 응답을 P_ANSWER 로 반환하며 오류 시 시스템 메시지를 출력한다. ```abap 140| CALL FUNCTION 'POPUP_TO_CONFIRM' 141| EXPORTING 142| TEXT_QUESTION = P_TEXT 143| TEXT_BUTTON_1 = '예(Yes)' 144| TEXT_BUTTON_2 = '아니오(No)' 145| DEFAULT_BUTTON = '1' 146| DISPLAY_CANCEL_BUTTON = '' 147| START_COLUMN = 25 148| START_ROW = 6 149| IMPORTING 150| ANSWER = P_ANSWER 151| EXCEPTIONS 152| TEXT_NOT_FOUND = 1 153| OTHERS = 2. 154| IF SY-SUBRC <> 0. 155| MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 156| WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 157| ENDIF. ``` - **EN**: Calls POPUP_TO_CONFIRM with the given question text to get a Yes/No answer and raises the system message on failure. - 호출(파서): POPUP_TO_CONFIRM - SAP 객체: POPUP_TO_CONFIRM - 업무 키워드: 확인 팝업, 예/아니오, 사용자 응답 - English: Confirmation Popup, Dialog - 정의부(복사 시 함께 필요): [`P_ANSWER`](#decl-zfir0160top-35-p_answer) - 위치: `abap://ZFIR0160/ZFIR0160F01#L140-L157` · confidence 0.95 · `ZFIR0160#ZFIR0160F01#FORM#SET_POP_MESSAGE#C1` ### FORM RUN_DISPLAY_ALV — `ZFIR0160F02` L549-L571 (23줄) *화면 0100 용 그리드(GO_GRID)와 GT_MAIN 을 할당하고 이벤트 등록 후 SET_TABLE_FOR_FIRST_DISPLAY 로 편집 가능한 ALV 를 최초 표시한다.* > 이 unit 의 조각 1개가 19/23줄(83%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [output] 화면번호에 따라 그리드 객체와 GT_MAIN 을 필드심볼에 할당하고 SET_EVENT_UCOMM 이벤트 등록 후 CL_GUI_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY 로 레이아웃·변형·툴바제외·정렬을 적용해 ALV 를 표시한다. ```abap 551| CASE P_VALUE. 552| WHEN '0100'. 553| ASSIGN: GO_GRID TO , 554| GT_MAIN[] TO . 555| ENDCASE. 556| 557| PERFORM SET_EVENT_UCOMM. 558| 559| CALL METHOD ->SET_TABLE_FOR_FIRST_DISPLAY 560| EXPORTING 561| I_DEFAULT = 'X' 562| IS_LAYOUT = GS_LAYOUT 563| IS_VARIANT = GS_VARIANT 564| IT_TOOLBAR_EXCLUDING = GT_EXCLUDE 565| I_SAVE = 'A' 566| CHANGING 567| IT_OUTTAB = 568| IT_FIELDCATALOG = 569| IT_SORT = GT_SORT. ``` - **EN**: Assigns the grid and GT_MAIN by screen number, registers events and calls SET_TABLE_FOR_FIRST_DISPLAY with layout, variant, toolbar exclusions and sort to display the ALV grid. - 호출(파서): SET_EVENT_UCOMM, ->SET_TABLE_FOR_FIRST_DISPLAY - SAP 객체: CL_GUI_ALV_GRID, SET_TABLE_FOR_FIRST_DISPLAY - 업무 키워드: ALV 표시, 그리드, 레이아웃, 변형 - English: ALV Grid, Layout Variant, First Display - 정의부(복사 시 함께 필요): [`GO_GRID`](#decl-zfir0160c01-128-go_grid), [``](#decl-zfir0160t01-64--fs_grid-), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [``](#decl-zfir0160t01-65--fs_table-), [`GS_LAYOUT`](#decl-zfir0160t01-7-gs_layout), [`GS_VARIANT`](#decl-zfir0160t01-8-gs_variant), [`GT_EXCLUDE`](#decl-zfir0160t01-10-gt_exclude), [``](#decl-zfir0160t01-62--gt_field-), [`GT_SORT`](#decl-zfir0160t01-14-gt_sort) - 위치: `abap://ZFIR0160/ZFIR0160F02#L551-L569` · confidence 0.85 · `ZFIR0160#ZFIR0160F02#FORM#RUN_DISPLAY_ALV#C1` ### FORM SET_CHANGE — `ZFIR0160F02` L799-L823 (25줄) *변경/조회 토글(CHAN↔DISP)에 따라 ALV 그리드의 입력 가능 상태를 SET_READY_FOR_INPUT 으로 전환하는 FORM이다.* > 이 unit 의 조각 1개가 17/25줄(68%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] 현재 모드가 CHAN 이면 그리드를 읽기전용(0)으로 바꾸고 DISP 로, DISP 이고 잠금(GV_LOCK)이 없으면 입력가능(1)으로 바꾸고 CHAN 으로 토글한다. ```abap 801| CASE GV_UCOMM. 802| WHEN 'CHAN'. 803| CALL METHOD GO_GRID->SET_READY_FOR_INPUT 804| EXPORTING 805| I_READY_FOR_INPUT = 0. 806| 807| GV_UCOMM = 'DISP'. 808| WHEN 'DISP'. 809| 810| IF GV_LOCK IS INITIAL. 811| CALL METHOD GO_GRID->SET_READY_FOR_INPUT 812| EXPORTING 813| I_READY_FOR_INPUT = 1. 814| 815| GV_UCOMM = 'CHAN'. 816| ENDIF. 817| ENDCASE. ``` - **EN**: Toggle ALV grid edit mode via CL_GUI_ALV_GRID->SET_READY_FOR_INPUT between change (CHAN) and display (DISP), only allowing edit when no lock is set. - 호출(파서): GO_GRID->SET_READY_FOR_INPUT, GO_GRID->SET_READY_FOR_INPUT - SAP 객체: CL_GUI_ALV_GRID - 업무 키워드: 변경 모드, 조회 모드, 입력 가능 전환, 잠금 - English: edit mode, display mode, ready for input - 정의부(복사 시 함께 필요): [`GV_UCOMM`](#decl-zfir0160t01-38-gv_ucomm), [`GO_GRID`](#decl-zfir0160c01-128-go_grid), [`GV_LOCK`](#decl-zfir0160t01-43-gv_lock) - 위치: `abap://ZFIR0160/ZFIR0160F02#L801-L817` · confidence 0.9 · `ZFIR0160#ZFIR0160F02#FORM#SET_CHANGE#C1` ### MODULE USER_COMMAND_0100_EXIT INPUT — `ZFIR0160I01` L10-L45 (36줄) *화면 0100 종료 시 변경 여부(GV_CHK)를 확인해 저장 팝업을 띄우고 확인 시 검증·저장 후 화면을 빠져나가는 EXIT 모듈이다.* > 이 unit 의 조각 2개가 23/36줄(64%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다. #### [control_flow] 그리드 변경 플래그(GV_CHK)가 있으면 저장 확인 팝업(SET_POP_MESSAGE)을 띄우고 '예'이면 CHK_DATA 검증 후 SET_SAVE 로 ZFIT0160 에 저장하며, 오류(GV_ERR)가 있으면 화면 종료를 중단한다. ```abap 14| IF GV_CHK IS NOT INITIAL. 15| PERFORM SET_POP_MESSAGE USING TEXT-100 16| CHANGING GV_ANSWER. 17| IF GV_ANSWER = '1'. 18| PERFORM CHK_DATA. 19| PERFORM SET_SAVE. 20| 21| * PERFORM SET_DATA. 22| * PERFORM SET_ITAB_STYLE. " CHANGE 23| * PERFORM SET_REFRESH. 24| 25| ELSE. 26| MESSAGE S001 WITH TEXT-101. 27| ENDIF. 28| 29| CHECK GV_ERR IS INITIAL. 30| ENDIF. ``` - **EN**: If unsaved changes exist, show a save confirmation popup and on confirmation validate (CHK_DATA) and save to ZFIT0160 (SET_SAVE); abort exit when an error is flagged. - 호출(파서): SET_POP_MESSAGE, CHK_DATA, SET_SAVE - SAP 객체: ZFIT0160 - 업무 키워드: 저장 확인, 변경 여부, 권한 테이블 저장, 화면 종료, 오류 체크 - English: save confirmation, authorization maintenance, screen exit - 정의부(복사 시 함께 필요): [`GV_CHK`](#decl-zfir0160t01-42-gv_chk), [`GV_ANSWER`](#decl-zfir0160t01-41-gv_answer), [`GV_ERR`](#decl-zfir0160t01-40-gv_err) - 위치: `abap://ZFIR0160/ZFIR0160I01#L14-L30` · confidence 0.85 · `ZFIR0160#ZFIR0160I01#MODULE#USER_COMMAND_0100_EXIT_INPUT#C1` #### [control_flow] 기능코드 BACK/CANCEL(&F03,&F15)이면 화면 0으로 돌아가고 EXIT(&F12)이면 프로그램을 종료한다. ```abap 37| CASE SAVE_OK. 38| WHEN '&F03' OR '&F15'. 39| LEAVE TO SCREEN 0. 40| WHEN '&F12'. 41| LEAVE PROGRAM. 42| ENDCASE. ``` - **EN**: Leave to screen 0 on BACK/CANCEL and leave the program on EXIT function codes. - 업무 키워드: 화면 종료, 프로그램 종료, 기능코드 - English: function code, leave screen - 정의부(복사 시 함께 필요): [`SAVE_OK`](#decl-zfir0160t01-36-save_ok) - 위치: `abap://ZFIR0160/ZFIR0160I01#L37-L42` · confidence 0.9 · `ZFIR0160#ZFIR0160I01#MODULE#USER_COMMAND_0100_EXIT_INPUT#C2` ## 정의부 (109건) 로직 조각을 다른 프로그램으로 옮겨 붙일 때 **함께 가야 하는 선언**이다. 조각별로 무엇이 필요한지는 위 조각 항목의 `정의부` 줄에 있고(이름을 누르면 여기로 온다), 붙여넣기용으로 의존까지 묶은 코드는 `GET /chunks/` 의 `declaration_code` 로 받는다. ### `ZFIR0160C01` (18건) #### LCL_EVENT_RECEIVER — class · L10-L55 {#decl-zfir0160c01-10-lcl_event_receiver} ```abap CLASS LCL_EVENT_RECEIVER DEFINITION . PUBLIC SECTION . * 변경 필드 값처리 METHODS : HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID IMPORTING ER_DATA_CHANGED. * ON F4처리 METHODS : HANDLE_ON_F4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID IMPORTING SENDER E_FIELDNAME E_FIELDVALUE ES_ROW_NO ER_EVENT_DATA ET_BAD_CELLS E_DISPLAY. * TOOLBAR METHODS: HANDLE_ON_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT E_INTERACTIVE SENDER. * USER_COMMAND METHODS: HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM. * DOUBLE_CLICK METHODS: HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING SENDER E_ROW E_COLUMN ES_ROW_NO. ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION ``` #### GO_CUSTOM — data · L114-L114 {#decl-zfir0160c01-114-go_custom} ```abap DATA: GO_CUSTOM TYPE REF TO CL_GUI_CUSTOM_CONTAINER. ``` #### GO_CUSTOM2 — data · L115-L115 {#decl-zfir0160c01-115-go_custom2} ```abap DATA: GO_CUSTOM2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER. ``` #### GO_DOCKING — data · L117-L117 {#decl-zfir0160c01-117-go_docking} ```abap DATA: GO_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER. ``` #### GO_DOCKING2 — data · L118-L118 {#decl-zfir0160c01-118-go_docking2} ```abap DATA: GO_DOCKING2 TYPE REF TO CL_GUI_DOCKING_CONTAINER. ``` #### GO_SPLITTER — data · L120-L120 {#decl-zfir0160c01-120-go_splitter} ```abap DATA: GO_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER. ``` #### GO_SPLITTER2 — data · L121-L121 {#decl-zfir0160c01-121-go_splitter2} ```abap DATA: GO_SPLITTER2 TYPE REF TO CL_GUI_SPLITTER_CONTAINER. ``` #### GO_GRID — data · L128-L128 {#decl-zfir0160c01-128-go_grid} ```abap DATA: GO_GRID TYPE REF TO CL_GUI_ALV_GRID. ``` #### GO_GRID2 — data · L129-L129 {#decl-zfir0160c01-129-go_grid2} ```abap DATA: GO_GRID2 TYPE REF TO CL_GUI_ALV_GRID. ``` #### GO_GRID3 — data · L130-L130 {#decl-zfir0160c01-130-go_grid3} ```abap DATA: GO_GRID3 TYPE REF TO CL_GUI_ALV_GRID. ``` #### GO_GRID4 — data · L131-L131 {#decl-zfir0160c01-131-go_grid4} ```abap DATA: GO_GRID4 TYPE REF TO CL_GUI_ALV_GRID. ``` #### GO_GRID5 — data · L132-L132 {#decl-zfir0160c01-132-go_grid5} ```abap DATA: GO_GRID5 TYPE REF TO CL_GUI_ALV_GRID. ``` #### GO_CON — data · L134-L134 {#decl-zfir0160c01-134-go_con} ```abap DATA: GO_CON TYPE REF TO CL_GUI_CONTAINER. ``` #### GO_CON2 — data · L135-L135 {#decl-zfir0160c01-135-go_con2} ```abap DATA: GO_CON2 TYPE REF TO CL_GUI_CONTAINER. ``` #### GO_CON3 — data · L136-L136 {#decl-zfir0160c01-136-go_con3} ```abap DATA: GO_CON3 TYPE REF TO CL_GUI_CONTAINER. ``` #### GO_CON4 — data · L137-L137 {#decl-zfir0160c01-137-go_con4} ```abap DATA: GO_CON4 TYPE REF TO CL_GUI_CONTAINER. ``` #### GO_CON5 — data · L138-L138 {#decl-zfir0160c01-138-go_con5} ```abap DATA: GO_CON5 TYPE REF TO CL_GUI_CONTAINER. ``` #### GO_EVENT — data · L140-L140 {#decl-zfir0160c01-140-go_event} ```abap DATA: GO_EVENT TYPE REF TO LCL_EVENT_RECEIVER. ``` ### `ZFIR0160T01` (36건) #### GS_LAYOUT — data · L7-L7 {#decl-zfir0160t01-7-gs_layout} ```abap DATA: GS_LAYOUT TYPE LVC_S_LAYO. ``` #### GS_VARIANT — data · L8-L8 {#decl-zfir0160t01-8-gs_variant} ```abap DATA: GS_VARIANT TYPE DISVARIANT. ``` #### GX_VARIANT — data · L9-L9 {#decl-zfir0160t01-9-gx_variant} ```abap DATA: GX_VARIANT TYPE DISVARIANT. ``` #### GT_EXCLUDE — data · L10-L10 {#decl-zfir0160t01-10-gt_exclude} ```abap DATA: GT_EXCLUDE TYPE UI_FUNCTIONS. ``` #### GS_FCAT — data · L11-L11 {#decl-zfir0160t01-11-gs_fcat} ```abap DATA: GS_FCAT TYPE LVC_S_FCAT. ``` #### GT_FCAT1 — data · L12-L12 {#decl-zfir0160t01-12-gt_fcat1} ```abap DATA: GT_FCAT1 TYPE LVC_T_FCAT. ``` #### GS_SORT — data · L13-L13 {#decl-zfir0160t01-13-gs_sort} ```abap DATA: GS_SORT TYPE LVC_S_SORT. ``` #### GT_SORT — data · L14-L14 {#decl-zfir0160t01-14-gt_sort} ```abap DATA: GT_SORT TYPE LVC_T_SORT. ``` #### GS_GLAY — data · L15-L15 {#decl-zfir0160t01-15-gs_glay} ```abap DATA: GS_GLAY TYPE LVC_S_GLAY. ``` #### GT_HEAD — data · L16-L16 {#decl-zfir0160t01-16-gt_head} ```abap DATA: GT_HEAD TYPE LVC_T_HEAD. ``` #### GS_HEAD — data · L17-L17 {#decl-zfir0160t01-17-gs_head} ```abap DATA: GS_HEAD TYPE LVC_S_HEAD. ``` #### GS_EVENT — data · L18-L18 {#decl-zfir0160t01-18-gs_event} ```abap DATA: GS_EVENT TYPE LVC_S_EVTS. ``` #### GT_EVENT — data · L19-L19 {#decl-zfir0160t01-19-gt_event} ```abap DATA: GT_EVENT TYPE LVC_T_EVTS. ``` #### GS_STBL — data · L20-L20 {#decl-zfir0160t01-20-gs_stbl} ```abap DATA: GS_STBL TYPE LVC_S_STBL. " Refresh stability. ``` #### G_REPID — data · L22-L22 {#decl-zfir0160t01-22-g_repid} ```abap DATA: G_REPID TYPE SY-REPID. ``` #### G_TABNAME — data · L23-L23 {#decl-zfir0160t01-23-g_tabname} ```abap DATA: G_TABNAME TYPE SLIS_TABNAME. ``` #### GV_EXIT — data · L24-L24 {#decl-zfir0160t01-24-gv_exit} ```abap DATA: GV_EXIT TYPE C. ``` #### GS_F4 — data · L26-L26 {#decl-zfir0160t01-26-gs_f4} ```abap DATA: GS_F4 TYPE LVC_S_F4. " F4 ## ## ``` #### GT_F4 — data · L27-L27 {#decl-zfir0160t01-27-gt_f4} ```abap DATA: GT_F4 TYPE LVC_T_F4. ``` #### OK_CODE — data · L35-L35 {#decl-zfir0160t01-35-ok_code} ```abap DATA: OK_CODE TYPE SY-UCOMM. ``` #### SAVE_OK — data · L36-L36 {#decl-zfir0160t01-36-save_ok} ```abap DATA: SAVE_OK TYPE SY-UCOMM. ``` #### GV_UCOMM — data · L38-L38 {#decl-zfir0160t01-38-gv_ucomm} ```abap DATA: GV_UCOMM TYPE SY-UCOMM. " COMMAND ``` #### GS_MSG — data · L39-L39 {#decl-zfir0160t01-39-gs_msg} ```abap DATA: GS_MSG LIKE FIMSG. " MESSSAGE ``` #### GV_ERR — data · L40-L40 {#decl-zfir0160t01-40-gv_err} ```abap DATA: GV_ERR TYPE C. " ERROR ``` #### GV_ANSWER — data · L41-L41 {#decl-zfir0160t01-41-gv_answer} ```abap DATA: GV_ANSWER TYPE C. " MESSAGE ``` #### GV_CHK — data · L42-L42 {#decl-zfir0160t01-42-gv_chk} ```abap DATA: GV_CHK TYPE C. " CHANGE ``` #### GV_LOCK — data · L43-L43 {#decl-zfir0160t01-43-gv_lock} ```abap DATA: GV_LOCK TYPE C. ``` #### GV_MNAME — data · L44-L44 {#decl-zfir0160t01-44-gv_mname} ```abap DATA: GV_MNAME TYPE STRING. ``` #### GC_YEL — constants · L51-L51 {#decl-zfir0160t01-51-gc_yel} ```abap CONSTANTS: GC_YEL(4) VALUE '@09@'. " ICON_LED_YELLOW ``` #### GC_GRE — constants · L52-L52 {#decl-zfir0160t01-52-gc_gre} ```abap CONSTANTS: GC_GRE(4) VALUE '@08@'. " ICON_LED_GREEN ``` #### GC_OUT — constants · L53-L53 {#decl-zfir0160t01-53-gc_out} ```abap CONSTANTS: GC_OUT(4) VALUE '@EB@'. " ICON_LED_LIGHT_OUT ``` #### GC_RED — constants · L54-L54 {#decl-zfir0160t01-54-gc_red} ```abap CONSTANTS: GC_RED(4) VALUE '@0A@'. " ICON_LED_RED ``` #### — field-symbol · L61-L61 {#decl-zfir0160t01-61--gs_field-} ```abap FIELD-SYMBOLS: TYPE LVC_S_FCAT. ``` #### — field-symbol · L62-L62 {#decl-zfir0160t01-62--gt_field-} ```abap FIELD-SYMBOLS: TYPE LVC_T_FCAT. ``` #### — field-symbol · L64-L64 {#decl-zfir0160t01-64--fs_grid-} ```abap FIELD-SYMBOLS: TYPE REF TO CL_GUI_ALV_GRID. ``` #### — field-symbol · L65-L65 {#decl-zfir0160t01-65--fs_table-} ```abap FIELD-SYMBOLS: TYPE TABLE. ``` ### `ZFIR0160TOP` (21건) #### BKPF — tables · L5-L5 {#decl-zfir0160top-5-bkpf} ```abap TABLES: ZFIT0160, T012K, BKPF, BSIS, BSIK, BSAK, BSEG. ``` #### BSAK — tables · L5-L5 {#decl-zfir0160top-5-bsak} ```abap TABLES: ZFIT0160, T012K, BKPF, BSIS, BSIK, BSAK, BSEG. ``` #### BSEG — tables · L5-L5 {#decl-zfir0160top-5-bseg} ```abap TABLES: ZFIT0160, T012K, BKPF, BSIS, BSIK, BSAK, BSEG. ``` #### BSIK — tables · L5-L5 {#decl-zfir0160top-5-bsik} ```abap TABLES: ZFIT0160, T012K, BKPF, BSIS, BSIK, BSAK, BSEG. ``` #### BSIS — tables · L5-L5 {#decl-zfir0160top-5-bsis} ```abap TABLES: ZFIT0160, T012K, BKPF, BSIS, BSIK, BSAK, BSEG. ``` #### T012K — tables · L5-L5 {#decl-zfir0160top-5-t012k} ```abap TABLES: ZFIT0160, T012K, BKPF, BSIS, BSIK, BSAK, BSEG. ``` #### ZFIT0160 — tables · L5-L5 {#decl-zfir0160top-5-zfit0160} ```abap TABLES: ZFIT0160, T012K, BKPF, BSIS, BSIK, BSAK, BSEG. ``` #### ICON — type-pool · L7-L7 {#decl-zfir0160top-7-icon} ```abap TYPE-POOLS: SLIS, ICON. ``` #### SLIS — type-pool · L7-L7 {#decl-zfir0160top-7-slis} ```abap TYPE-POOLS: SLIS, ICON. ``` #### IT_T012K — data · L10-L12 {#decl-zfir0160top-10-it_t012k} ```abap DATA: BEGIN OF IT_T012K OCCURS 0. INCLUDE STRUCTURE T012K. DATA END OF IT_T012K. ``` #### IT_ZFIT0160 — data · L14-L16 {#decl-zfir0160top-14-it_zfit0160} ```abap DATA: BEGIN OF IT_ZFIT0160 OCCURS 0. INCLUDE STRUCTURE ZFIT0160. DATA END OF IT_ZFIT0160. ``` #### GT_MAIN — data · L19-L28 {#decl-zfir0160top-19-gt_main} ```abap DATA: BEGIN OF GT_MAIN OCCURS 0, MARK LIKE ICON-STATUS, USERID LIKE ZFIT0160-USERID, NAME(20), ZFIR0090 LIKE ZFIT0160-ZFIR0090. DATA: CELLTAB TYPE LVC_T_STYL, SCOL TYPE LVC_T_SCOL, END OF GT_MAIN. ``` #### GT_IMSI — data · L31-L31 {#decl-zfir0160top-31-gt_imsi} ```abap DATA: GT_IMSI LIKE TABLE OF GT_MAIN WITH HEADER LINE. ``` #### GT_IMSI1 — data · L32-L32 {#decl-zfir0160top-32-gt_imsi1} ```abap DATA: GT_IMSI1 LIKE TABLE OF GT_MAIN WITH HEADER LINE. ``` #### P_ANSWER — data · L35-L35 {#decl-zfir0160top-35-p_answer} ```abap DATA: P_ANSWER. ``` #### TMP_MAIN — data · L37-L37 {#decl-zfir0160top-37-tmp_main} ```abap DATA: TMP_MAIN LIKE TABLE OF GT_MAIN WITH HEADER LINE. ``` #### GT_TABLE — data · L39-L39 {#decl-zfir0160top-39-gt_table} ```abap DATA: GT_TABLE LIKE TABLE OF ZFIT0160 WITH HEADER LINE. ``` #### GT_ANY — data · L41-L41 {#decl-zfir0160top-41-gt_any} ```abap DATA GT_ANY TYPE REF TO DATA. ``` #### I_TABNAM — data · L42-L42 {#decl-zfir0160top-42-i_tabnam} ```abap DATA I_TABNAM TYPE TABNAME16. ``` #### — field-symbol · L44-L44 {#decl-zfir0160top-44--fs_s-} ```abap FIELD-SYMBOLS: TYPE ANY. ``` #### — field-symbol · L45-L45 {#decl-zfir0160top-45--fs_t-} ```abap FIELD-SYMBOLS: TYPE ANY TABLE. ``` ### `ZFIR0160F01` (4건) #### L_TABIX — data · unit 로컬 · L177-L177 {#decl-zfir0160f01-177-l_tabix} ```abap DATA: L_TABIX LIKE SY-TABIX. ``` #### L_DEFAULTOPTION — data · unit 로컬 · L205-L205 {#decl-zfir0160f01-205-l_defaultoption} ```abap DATA: L_DEFAULTOPTION, L_TEXTLINE1(70), L_TEXTLINE2(70). ``` #### L_TEXTLINE1 — data · unit 로컬 · L205-L205 {#decl-zfir0160f01-205-l_textline1} ```abap DATA: L_DEFAULTOPTION, L_TEXTLINE1(70), L_TEXTLINE2(70). ``` #### L_TEXTLINE2 — data · unit 로컬 · L205-L205 {#decl-zfir0160f01-205-l_textline2} ```abap DATA: L_DEFAULTOPTION, L_TEXTLINE1(70), L_TEXTLINE2(70). ``` ### `ZFIR0160F02` (30건) #### LS_MAIN — data · unit 로컬 · L15-L15 {#decl-zfir0160f02-15-ls_main} ```abap DATA: LS_MAIN LIKE GT_MAIN. ``` #### LT_CELLTAB — data · unit 로컬 · L17-L17 {#decl-zfir0160f02-17-lt_celltab} ```abap DATA: LT_CELLTAB TYPE LVC_T_STYL. ``` #### LV_TABIX — data · unit 로컬 · L18-L18 {#decl-zfir0160f02-18-lv_tabix} ```abap DATA: LV_TABIX TYPE SY-TABIX. ``` #### LV_UCOMM — data · unit 로컬 · L20-L20 {#decl-zfir0160f02-20-lv_ucomm} ```abap DATA: LV_UCOMM TYPE SY-UCOMM. ``` #### LS_MAIN — data · unit 로컬 · L56-L56 {#decl-zfir0160f02-56-ls_main} ```abap DATA: LS_MAIN LIKE GT_MAIN. ``` #### LT_CELLTAB — data · unit 로컬 · L58-L58 {#decl-zfir0160f02-58-lt_celltab} ```abap DATA: LT_CELLTAB TYPE LVC_T_STYL. ``` #### LV_TABIX — data · unit 로컬 · L59-L59 {#decl-zfir0160f02-59-lv_tabix} ```abap DATA: LV_TABIX TYPE SY-TABIX. ``` #### LV_UCOMM — data · unit 로컬 · L61-L61 {#decl-zfir0160f02-61-lv_ucomm} ```abap DATA: LV_UCOMM TYPE SY-UCOMM. ``` #### LS_CELLTAB — data · unit 로컬 · L98-L98 {#decl-zfir0160f02-98-ls_celltab} ```abap DATA: LS_CELLTAB TYPE LVC_S_STYL. ``` #### LV_MODE — data · unit 로컬 · L99-L99 {#decl-zfir0160f02-99-lv_mode} ```abap DATA: LV_MODE TYPE RAW4. ``` #### LS_CELLTAB — data · unit 로컬 · L140-L140 {#decl-zfir0160f02-140-ls_celltab} ```abap DATA: LS_CELLTAB TYPE LVC_S_STYL. ``` #### LV_MODE — data · unit 로컬 · L141-L141 {#decl-zfir0160f02-141-lv_mode} ```abap DATA: LV_MODE TYPE RAW4. ``` #### LT_ROWS — data · unit 로컬 · L836-L836 {#decl-zfir0160f02-836-lt_rows} ```abap DATA: LT_ROWS TYPE LVC_T_ROW. " ALV 제어: 테이블행 ``` #### LS_ROWS — data · unit 로컬 · L837-L837 {#decl-zfir0160f02-837-ls_rows} ```abap DATA: LS_ROWS TYPE LVC_S_ROW. ``` #### LV_CNT — data · unit 로컬 · L839-L839 {#decl-zfir0160f02-839-lv_cnt} ```abap DATA: LV_CNT TYPE STRING. ``` #### LT_ROWS — data · unit 로컬 · L896-L896 {#decl-zfir0160f02-896-lt_rows} ```abap DATA: LT_ROWS TYPE LVC_T_ROW. " ALV 제어: 테이블행 ``` #### LS_ROWS — data · unit 로컬 · L897-L897 {#decl-zfir0160f02-897-ls_rows} ```abap DATA: LS_ROWS TYPE LVC_S_ROW. ``` #### LS_MOD_CELLS — data · unit 로컬 · L942-L942 {#decl-zfir0160f02-942-ls_mod_cells} ```abap DATA: LS_MOD_CELLS TYPE LVC_S_MODI. ``` #### — field-symbol · unit 로컬 · L946-L946 {#decl-zfir0160f02-946--fs_field-} ```abap FIELD-SYMBOLS: TYPE ANY. ``` #### LV_TABIX — data · unit 로컬 · L1157-L1157 {#decl-zfir0160f02-1157-lv_tabix} ```abap DATA: LV_TABIX TYPE SY-TABIX. ``` #### LT_SCOL — data · unit 로컬 · L1158-L1158 {#decl-zfir0160f02-1158-lt_scol} ```abap DATA: LT_SCOL TYPE LVC_T_SCOL. ``` #### LV_TEXT — data · unit 로컬 · L1160-L1160 {#decl-zfir0160f02-1160-lv_text} ```abap DATA: LV_TEXT TYPE STRING. ``` #### LV_CNT1 — data · unit 로컬 · L1161-L1161 {#decl-zfir0160f02-1161-lv_cnt1} ```abap DATA: LV_CNT1 TYPE STRING. " 성공 ``` #### LV_CNT2 — data · unit 로컬 · L1162-L1162 {#decl-zfir0160f02-1162-lv_cnt2} ```abap DATA: LV_CNT2 TYPE STRING. " 실패 ``` #### SELECTFIELD — data · unit 로컬 · L1327-L1327 {#decl-zfir0160f02-1327-selectfield} ```abap DATA : SELECTFIELD LIKE HELP_INFO-FIELDNAME. ``` #### IT_FIELDS — data · unit 로컬 · L1328-L1328 {#decl-zfir0160f02-1328-it_fields} ```abap DATA: IT_FIELDS LIKE HELP_VALUE OCCURS 1 WITH HEADER LINE. ``` #### SELECT_VALUE — data · unit 로컬 · L1329-L1329 {#decl-zfir0160f02-1329-select_value} ```abap DATA: SELECT_VALUE LIKE HELP_INFO-FLDVALUE. ``` #### LD_TABIX — data · unit 로컬 · L1330-L1330 {#decl-zfir0160f02-1330-ld_tabix} ```abap DATA: LD_TABIX LIKE SY-TABIX. ``` #### IT_USER — data · unit 로컬 · L1336-L1339 {#decl-zfir0160f02-1336-it_user} ```abap DATA : BEGIN OF IT_USER OCCURS 0, BNAME LIKE USER_ADDRP-BNAME, NAME_TEXT LIKE USER_ADDRP-NAME_LAST, END OF IT_USER. ``` #### IT_VALUE — data · unit 로컬 · L1341-L1344 {#decl-zfir0160f02-1341-it_value} ```abap DATA : BEGIN OF IT_VALUE OCCURS 0, TEXT1(12), TEXT2(80), END OF IT_VALUE. ``` ## Unit 목록 (컨테이너) | unit | 유형 | 위치 | 조각 | 한 줄 요약 | |---|---|---|---|---| | INITIALIZATION | EVENT | ZFIR0160 L36-42 | 0 | INITIALIZATION 에서 SET_INIT 을 호출해 초기값을 설정하는 플러밍 블록이다. | | AT SELECTION-SCREEN | EVENT | ZFIR0160 L43-50 | 0 | AT SELECTION-SCREEN 이벤트에서 GET_VARIANT(빈 FORM)를 호출하는 플러밍 블록이다. | | START-OF-SELECTION | EVENT | ZFIR0160 L51-61 | 0 | START-OF-SELECTION 에서 SET_DATA(ZFIT0160 조회)와 MODIFY_PROCESS(성명 보완)를 호출하는 디스패치 블록이다. | | END-OF-SELECTION | EVENT | ZFIR0160 L62-65 | 0 | END-OF-SELECTION 에서 권한 관리 화면 0100 을 호출하는 플러밍 블록이다. | | LCL_EVENT_RECEIVER~HANDLE_DATA_CHANGED | METHOD | ZFIR0160C01 L67-69 | 0 | | | LCL_EVENT_RECEIVER~HANDLE_ON_F4 | METHOD | ZFIR0160C01 L73-84 | 0 | | | LCL_EVENT_RECEIVER~HANDLE_ON_TOOLBAR | METHOD | ZFIR0160C01 L88-92 | 0 | | | LCL_EVENT_RECEIVER~HANDLE_USER_COMMAND | METHOD | ZFIR0160C01 L96-98 | 0 | | | LCL_EVENT_RECEIVER~HANDLE_DOUBLE_CLICK | METHOD | ZFIR0160C01 L102-106 | 0 | | | SET_INIT | FORM | ZFIR0160F01 L7-15 | 0 | 프로그램 ID 와 초기 모드(DISP 조회)를 설정하고 초기 레이아웃 변형을 불러오는 초기화 FORM이다. | | SET_INIT_VARIANT | FORM | ZFIR0160F01 L20-29 | 0 | ALV 변형 구조 GS_VARIANT 에 리포트 ID·사용자·핸들 0010 을 세팅하는 ALV 설정 FORM이다. | | GET_INIT_VARIANT | FORM | ZFIR0160F01 L34-53 | 1 | 변형 키를 초기화하고 REUSE_ALV_VARIANT_DEFAULT_GET 으로 사용자 기본 ALV 변형(Variant)을 조회하는 FORM 이다. | | SET_F4_VARIANT | FORM | ZFIR0160F01 L58-80 | 1 | REUSE_ALV_VARIANT_F4 로 ALV 레이아웃 변형 F4 도움말을 제공하는 FORM이다. | | GET_VARIANT | FORM | ZFIR0160F01 L85-86 | 0 | 본문이 비어 있는 GET_VARIANT FORM으로 아무 동작도 하지 않는다. | | SET_DATA | FORM | ZFIR0160F01 L91-109 | 1 | 오류가 없을 때 진행 메시지를 띄우고 SELECT_PROCESS(ZFIT0160 조회)와 MODIFY_PROCESS(성명 보완)를 순서대로 수행해 그리드 데이터를 준비하는 FORM이다. | | RUN_MSG_PROC | FORM | ZFIR0160F01 L119-126 | 0 | SAPGUI_PROGRESS_INDICATOR 로 진행 메시지를 표시하는 유틸리티 FORM이다. | | SET_POP_MESSAGE | FORM | ZFIR0160F01 L137-159 | 1 | POPUP_TO_CONFIRM 으로 예/아니오 확인 팝업을 띄워 사용자 응답(P_ANSWER)을 돌려주는 FORM 이다. | | SELECT_PROCESS | FORM | ZFIR0160F01 L164-170 | 0 | ZFIT0160_PROCESS 를 호출해 권한 데이터를 조회하는 단순 위임 FORM이다. | | MODIFY_PROCESS | FORM | ZFIR0160F01 L174-195 | 1 | GT_MAIN 의 각 사용자 ID 에 대해 공용 풀(ZTR_POOL)의 USER_ADDRP_PROCESS 로 성명을 조회해 NAME 컬럼을 채우는 FORM이다. | | POPUP_TO_CONFIRM | FORM | ZFIR0160F01 L203-239 | 1 | 저장/삭제/역분개 기능코드에 맞는 문구로 POPUP_TO_CONFIRM_STEP 확인 팝업을 띄우고 응답을 돌려주는 FORM이다. | | ZFIT0160_PROCESS | FORM | ZFIR0160F01 L243-256 | 1 | 권한 테이블 ZFIT0160 전체를 읽어 그리드 내부테이블 GT_MAIN 에 적재하는 FORM이다. | | SET_ITAB_STYLE | FORM | ZFIR0160F02 L13-49 | 1 | GT_MAIN 각 행에 대해 SET_CELLTAB 으로 셀 편집 스타일을 계산해 CELLTAB 에 반영하는 FORM이다. | | SET_LINE_ITAB_STYLE | FORM | ZFIR0160F02 L54-88 | 1 | 현재 GT_MAIN 행 하나에 SET_LINE_CELLTAB 으로 신규 행 셀 스타일을 계산해 CELLTAB 에 반영하는 FORM이다. | | SET_CELLTAB | FORM | ZFIR0160F02 L94-131 | 1 | 변경 모드(CHAN)에서 필드카탈로그를 순회하며 ZFIR0090 컬럼만 편집 가능하고 나머지는 편집 불가로 셀 스타일(LVC_T_STYL)을 만드는 FORM이다. | | SET_LINE_CELLTAB | FORM | ZFIR0160F02 L136-172 | 1 | 행 삽입/복사(INSE/COPY)된 신규 행에 대해 USERID·ZFIR0090 컬럼만 편집 가능하도록 셀 스타일(LVC_T_STYL)을 만드는 FORM이다. | | SET_CONTAINER | FORM | ZFIR0160F02 L184-196 | 0 | 컨테이너 생성→툴바 제외→레이아웃→필드카탈로그→이벤트→ALV 표시 순으로 화면 0100 ALV 구성을 호출하는 디스패치 FORM이다. | | SET_FRAME | FORM | ZFIR0160F02 L207-217 | 0 | 커스텀 컨테이너 CON_0100 과 ALV 그리드 객체를 생성하는 플러밍 FORM이다. | | SET_VARIANT | FORM | ZFIR0160F02 L227-236 | 0 | ALV 변형 구조 GS_VARIANT 에 리포트 ID·사용자·핸들을 세팅하는 ALV 설정 FORM이다. | | SET_TOOLBAR_EXCLUDE | FORM | ZFIR0160F02 L247-410 | 0 | ALV 표준 툴바에서 로컬 편집 기능(UNDO·복사·잘라내기·행 삽입/삭제/추가·붙여넣기·REFRESH)을 제외 목록 GT_EXCLUDE 에 담는 FORM이다. | | SET_LAYOUT | FORM | ZFIR0160F02 L420-437 | 0 | ALV 레이아웃(열너비 최적화, 선택모드 D, 셀 스타일 CELLTAB, 색상 SCOL)을 설정하는 FORM이다. | | SET_FIELDCATALOG | FORM | ZFIR0160F02 L447-460 | 0 | 화면 0100 용 필드카탈로그 GT_FCAT1 을 필드심볼에 할당하고 SET_FIELD01 로 정의하는 ALV 설정 FORM이다. | | SET_FIELD01 | FORM | ZFIR0160F02 L471-502 | 0 | 권한 그리드의 필드카탈로그(USERID·NAME·ZFIR0090 체크박스)를 SET_FIELD 로 정의하는 ALV 설정 FORM이다. | | SET_FIELD | FORM | ZFIR0160F02 L514-539 | 0 | 필드카탈로그 구조의 특정 필드를 동적 ASSIGN 으로 채우고 S/E 타입에 따라 초기화·APPEND 하는 필드카탈로그 빌더 유틸리티 FORM이다. | | RUN_DISPLAY_ALV | FORM | ZFIR0160F02 L549-571 | 1 | 화면 0100 용 그리드(GO_GRID)와 GT_MAIN 을 할당하고 이벤트 등록 후 SET_TABLE_FOR_FIRST_DISPLAY 로 편집 가능한 ALV 를 최초 표시한다. | | SET_EVENT_UCOMM | FORM | ZFIR0160F02 L582-614 | 0 | 그리드를 읽기전용으로 초기화하고 MODIFIED/ENTER 편집 이벤트를 등록하며 변경 감지·포커스를 설정하는 ALV 이벤트 등록 FORM이다. | | SET_EVENT | FORM | ZFIR0160F02 L624-636 | 0 | 이벤트 핸들러 객체를 생성하고 F4·DATA_CHANGED·USER_COMMAND·TOOLBAR·DOUBLE_CLICK 핸들러를 그리드에 등록하는 플러밍 FORM이다. | | SET_REFRESH | FORM | ZFIR0160F02 L647-670 | 0 | 프론트엔드 레이아웃을 재설정하고 REFRESH_TABLE_DISPLAY(행·열 안정)와 CL_GUI_CFW=>FLUSH 로 ALV 그리드를 갱신하는 플러밍 FORM이다. | | TOOLBAR | FORM | ZFIR0160F02 L682-736 | 0 | ALV 툴바에 행 삽입·삭제·복사·저장 버튼을 추가하고 조회 모드(DISP)에서는 비활성화하는 툴바 설정 FORM이다. | | USER_COMMAND | FORM | ZFIR0160F02 L746-788 | 1 | ALV 툴바 기능코드(INSE/DELE/COPY/SAVE)별로 행 삽입·삭제·복사·저장 처리를 분기하는 USER_COMMAND 핸들러이다. | | SET_CHANGE | FORM | ZFIR0160F02 L799-823 | 1 | 변경/조회 토글(CHAN↔DISP)에 따라 ALV 그리드의 입력 가능 상태를 SET_READY_FOR_INPUT 으로 전환하는 FORM이다. | | SET_DELETE_ROWS | FORM | ZFIR0160F02 L834-883 | 2 | 그리드에서 선택한 사용자 행을 GT_MAIN 과 권한 테이블 ZFIT0160 에서 즉시 삭제하고 건수를 메시지로 알리는 FORM이다. | | SET_COPY_ROWS | FORM | ZFIR0160F02 L894-929 | 1 | 그리드에서 선택한 행들을 복사해 GT_MAIN 에 새 행으로 추가하고 편집 스타일을 부여하는 FORM이다. | | DATA_CHANGED | FORM | ZFIR0160F02 L939-1028 | 1 | 편집 그리드 셀 변경(DATA_CHANGED) 시 변경값을 GT_MAIN 에 반영하고 ZINOUT 값을 검증해 오류면 프로토콜에 기록, 정상이면 셀을 갱신하는 FORM이다. | | CHK_ZINOUT | FORM | ZFIR0160F02 L1042-1064 | 1 | 입출구분자(ZINOUT) 값이 허용 코드(11,12,13,14,51~55,57) 중 하나인지 검증하고 아니면 오류 플래그와 메시지를 돌려주는 FORM이다. | | ADD_PROTOCAL_ENTRY | FORM | ZFIR0160F02 L1076-1096 | 1 | 편집 ALV 의 셀 검증 오류를 CL_ALV_CHANGED_DATA_PROTOCOL->ADD_PROTOCOL_ENTRY 로 오류 로그(메시지 00/E)에 추가하는 FORM 이다. | | HANDLE_DOUBLE_CLICK | FORM | ZFIR0160F02 L1108-1122 | 0 | ALV 더블클릭 이벤트 핸들러로, 선택 행을 읽지만 실제 후속 처리(FB03 호출)는 주석 처리되어 동작이 없다. | | CHK_DATA | FORM | ZFIR0160F02 L1133-1144 | 0 | 저장 전 데이터 검증용 FORM이나 검증 로직(개발항목 필수 체크)이 전부 주석 처리되어 현재는 아무 동작도 하지 않는다. | | SET_SAVE | FORM | ZFIR0160F02 L1155-1234 | 1 | 편집한 권한 내역을 검증 통과 시에만 권한 테이블 ZFIT0160 에 일괄 저장하고 결과를 건수로 알린다. | | GET_COLOR | FORM | ZFIR0160F02 L1245-1260 | 0 | DEVNUM 컬럼에 색상(COL 6)을 지정하는 ALV 셀 색상 설정 FORM이다. | | ON_F4 | FORM | ZFIR0160F02 L1264-1288 | 0 | ALV ONF4 이벤트 핸들러로 USERID 필드일 때 F4_UNAME_PROCESS 를 호출하는 단순 분기 FORM이다. | | F4_FIELD_ENTRY_PART | FORM | ZFIR0160F02 L1297-1309 | 0 | 편집 ALV 그리드의 USERID 컬럼에 F4 도움말을 등록하는 플러밍 FORM이다. | | F4_UNAME_PROCESS | FORM | ZFIR0160F02 L1314-1417 | 3 | USERID 셀의 F4 도움말로 USER_ADDRP 사용자 목록을 HELP_VALUES_GET_NO_DD_NAME 팝업으로 보여주고 선택값과 성명을 GT_MAIN 행에 반영하는 FORM이다. | | USER_COMMAND_0100_EXIT INPUT | MODULE | ZFIR0160I01 L10-45 | 2 | 화면 0100 종료 시 변경 여부(GV_CHK)를 확인해 저장 팝업을 띄우고 확인 시 검증·저장 후 화면을 빠져나가는 EXIT 모듈이다. | | USER_COMMAND_0100 INPUT | MODULE | ZFIR0160I01 L53-63 | 0 | 화면 0100 PAI에서 CHAN(변경) 기능코드를 받아 SET_CHANGE 를 호출하는 단순 디스패치 모듈이다. | | STATUS_0100 OUTPUT | MODULE | ZFIR0160O01 L10-29 | 0 | | | SET_SCREEN_0100 OUTPUT | MODULE | ZFIR0160O01 L37-48 | 0 | | | SET_GRID_0100 OUTPUT | MODULE | ZFIR0160O01 L56-75 | 0 | |