Files
ABAP-Indexing/wiki/programs/ZFIR0160.md
T

1938 lines
78 KiB
Markdown

---
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 <FS_FIELD>.
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 = <FS_FIELD>.
976|
977| GV_CHK = 'X'. " 변경 CHECK
978|
979| * GT_MAIN-ZINOUT = <FS_FIELD>.
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), [`<FS_FIELD>`](#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 <FS_GRID>,
554| GT_MAIN[] TO <FS_TABLE>.
555| ENDCASE.
556|
557| PERFORM SET_EVENT_UCOMM.
558|
559| CALL METHOD <FS_GRID>->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 = <FS_TABLE>
568| IT_FIELDCATALOG = <GT_FIELD>
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, <FS_GRID>->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), [`<FS_GRID>`](#decl-zfir0160t01-64--fs_grid-), [`GT_MAIN`](#decl-zfir0160top-19-gt_main), [`<FS_TABLE>`](#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), [`<GT_FIELD>`](#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/<chunk_id>``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
```
#### <GS_FIELD> — field-symbol · L61-L61 {#decl-zfir0160t01-61--gs_field-}
```abap
FIELD-SYMBOLS: <GS_FIELD> TYPE LVC_S_FCAT.
```
#### <GT_FIELD> — field-symbol · L62-L62 {#decl-zfir0160t01-62--gt_field-}
```abap
FIELD-SYMBOLS:
<GT_FIELD> TYPE LVC_T_FCAT.
```
#### <FS_GRID> — field-symbol · L64-L64 {#decl-zfir0160t01-64--fs_grid-}
```abap
FIELD-SYMBOLS: <FS_GRID> TYPE REF TO CL_GUI_ALV_GRID.
```
#### <FS_TABLE> — field-symbol · L65-L65 {#decl-zfir0160t01-65--fs_table-}
```abap
FIELD-SYMBOLS:
<FS_TABLE> 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.
```
#### <FS_S> — field-symbol · L44-L44 {#decl-zfir0160top-44--fs_s-}
```abap
FIELD-SYMBOLS: <FS_S> TYPE ANY.
```
#### <FS_T> — field-symbol · L45-L45 {#decl-zfir0160top-45--fs_t-}
```abap
FIELD-SYMBOLS:
<FS_T> 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.
```
#### <FS_FIELD> — field-symbol · unit 로컬 · L946-L946 {#decl-zfir0160f02-946--fs_field-}
```abap
FIELD-SYMBOLS: <FS_FIELD> 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 | |