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

1783 lines
74 KiB
Markdown

---
type: abap-program
title: "ZFIR0100 — [FI] 전자세금계산서 매입전표 생성"
description: "전자세금계산서 수신 데이터(ZDTV3T_AP_EXT 헤더/ZDTV3T_AP_EXT_D 상세)를 읽어 매입 전표를 생성하는 화면이다. 편집 가능한 ALV 그리드에서 수신 세금계산서를 검토·수정하고, 전기 대상을 확정해 저장·전기한다. 실제 전표 입력 화면은 ZFIR0110_DOC 을 호출해 처리하며, 셀 단위 입력 제어(CELLTAB)와 변형(Variant) 관리를 갖춘다."
resource: "abap://ZFIR0100"
tags: ["전자세금계산서", "세금계산서", "매입", "부가세", "전표", "채무관리", "FI", "행선택", "선택검증", "저장전검증", "ALV선택", "전표번호", "저장", "사용여부", "발행일", "사업장", "계산서순번", "상태아이콘", "사용자 명령", "전기"]
generated: { by: "abap-indexing/z-ai/glm-5.2:free", at: "2026-09-20T15:36:21+00:00" }
status: stable
x-package:
x-changed-on:
x-tables-read: ["ZDTV3T_AP_EXT", "ZDTV3T_AP_EXT_D"]
x-tables-write: ["GT_MAIN", "ZDTV3T_AP_EXT", "ZDTV3T_AP_EXT_D"]
x-calls: ["FB03", "LAST_DAY_OF_MONTHS", "POPUP_TO_CONFIRM", "POPUP_TO_CONFIRM_STEP", "REUSE_ALV_VARIANT_DEFAULT_GET", "SAPGUI_PROGRESS_INDICATOR", "ZFIR0110_DOC"]
x-code-hash: "009c573d7068cede209822b699c51af6a3cf09665a4077f9c8cdf6ee202d53e5"
x-unit-count: 64
x-chunk-count: 25
x-declaration-count: 84
---
## 업무 목적
전자세금계산서 수신 데이터(ZDTV3T_AP_EXT 헤더/ZDTV3T_AP_EXT_D 상세)를 읽어 매입 전표를 생성하는 화면이다. 편집 가능한 ALV 그리드에서 수신 세금계산서를 검토·수정하고, 전기 대상을 확정해 저장·전기한다. 실제 전표 입력 화면은 ZFIR0110_DOC 을 호출해 처리하며, 셀 단위 입력 제어(CELLTAB)와 변형(Variant) 관리를 갖춘다.
## 주 흐름
1. 초기 변형(Variant)을 불러오고 선택화면을 준비한다 (SET_INIT → GET_INIT_VARIANT → GET_VARIANT)
2. 대상 기간의 전자세금계산서 수신 내역을 읽어 그리드 데이터를 만든다 (SET_DATA)
3. 셀 입력 가능 여부와 행 스타일을 설정한다 (SET_ITAB_STYLE → SET_CELLTAB)
4. 필드카탈로그·레이아웃·툴바를 구성해 편집 가능한 ALV 를 화면 0100 에 띄운다 (SET_FIELD01 → RUN_DISPLAY_ALV)
5. 사용자 변경을 반영하고 날짜·텍스트를 보정한다 (SET_CHANGE → DATE_PROCESS → TEXT_PROCESS)
6. 확인 팝업 후 저장·전기한다 (POPUP_TO_CONFIRM → SET_SAVE → SET_POST)
7. 전표 입력 상세는 ZFIR0110_DOC 을 호출해 처리한다
## 핵심 내부테이블
- `GT_MAIN` — 전자세금계산서 수신 내역 편집 그리드 (채움: SET_DATA / 소비: RUN_DISPLAY_ALV, SET_SAVE, SET_POST)
## 테이블 / 외부 호출
- read: ZDTV3T_AP_EXT, ZDTV3T_AP_EXT_D
- write: GT_MAIN, ZDTV3T_AP_EXT, ZDTV3T_AP_EXT_D
- 외부 호출: FB03, LAST_DAY_OF_MONTHS, POPUP_TO_CONFIRM, POPUP_TO_CONFIRM_STEP, REUSE_ALV_VARIANT_DEFAULT_GET, SAPGUI_PROGRESS_INDICATOR, ZFIR0110_DOC
## 로직 조각 (25건 / unit 18개)
LLM 이 코드에서 골라낸 업무 로직 단위다. **조각마다 소스 원문과 자연어 설명을 함께 싣는다** — 설명이 코드와 맞는지 바로 대조할 수 있어야 하기 때문이다.
테이블·호출은 LLM 이 쓴 값이 아니라 파서가 조각 범위에서 다시 뽑은 사실이다. 순서는 실행 순서다.
### FORM GET_INIT_VARIANT — `ZFIR0100F01` L55-L74 (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
61| GX_VARIANT = GS_VARIANT.
62|
63| CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
64| EXPORTING
65| I_SAVE = 'A'
66| CHANGING
67| CS_VARIANT = GX_VARIANT
68| EXCEPTIONS
69| NOT_FOUND = 2.
70| IF SY-SUBRC = 0.
71| **** PA_LAYOU = GX_VARIANT-VARIANT.
72| 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-zfir0100t01-32-gx_variant), [`GS_VARIANT`](#decl-zfir0100t01-31-gs_variant)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L61-L72` · confidence 0.8 · `ZFIR0100#ZFIR0100F01#FORM#GET_INIT_VARIANT#C1`
### FORM SET_DATA — `ZFIR0100F01` L92-L166 (75줄)
*조회 월의 기간을 만든 뒤 전자세금계산서 헤더(ZDTV3T_AP_HEAD)·확장(ZDTV3T_AP_EXT)·상세(ZDTV3T_AP_EXT_D)를 조인해 전표처리 상태 조건으로 수신 내역을 IT_ZDTV3T_AP_HEAD 에 읽는 FORM 이다.*
> 이 unit 의 조각 2개가 37/75줄(49%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [control_flow] 라디오버튼(P_R1 미처리/P_R2 처리완료/P_R3 전체)에 따라 전표처리 여부(USE_DOC) 필터값 L_DOC1/L_DOC2 를 결정한다.
```abap
125| IF P_R1 = 'X'.
126| L_DOC1 = SPACE.
127| L_DOC2 = SPACE.
128| ELSEIF P_R2 = 'X'.
129| L_DOC1 = 'X'.
130| L_DOC2 = 'X'.
131| ELSEIF P_R3 = 'X'.
132| L_DOC1 = 'X'.
133| L_DOC2 = SPACE.
134| ENDIF.
```
- **EN**: Derives the USE_DOC filter values from the selection radio buttons (unposted, posted, or all).
- 업무 키워드: 조회 조건, 전표처리 여부, 라디오버튼
- English: Selection Criteria, Document Status Filter
- 정의부(복사 시 함께 필요): [`P_R1`](#decl-zfir0100scr-22-p_r1), [`L_DOC1`](#decl-zfir0100f01-96-l_doc1), [`L_DOC2`](#decl-zfir0100f01-96-l_doc2), [`P_R2`](#decl-zfir0100scr-25-p_r2), [`P_R3`](#decl-zfir0100scr-28-p_r3)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L125-L134` · confidence 0.8 · `ZFIR0100#ZFIR0100F01#FORM#SET_DATA#C1`
#### [sql_select] ZDTV3T_AP_HEAD 를 ZDTV3T_AP_EXT·ZDTV3T_AP_EXT_D 와 회사코드·작성일자·사업장·일련번호로 INNER JOIN 하여 회사코드·작성일 기간·공급자 사업자번호·이메일·미취소(INV_SIGN 공백)·전표처리 여부 조건으로 수신 전자세금계산서를 IT_ZDTV3T_AP_HEAD 에 적재한다.
```abap
138| SELECT *
139| INTO CORRESPONDING FIELDS OF IT_ZDTV3T_AP_HEAD
140| FROM ( ( ZDTV3T_AP_HEAD AS A INNER JOIN ZDTV3T_AP_EXT AS B
141| ON A~BUKRS = B~BUKRS
142| AND A~ISSUE_DATE = B~ISSUE_DATE
143| AND A~BUPLA = B~BUPLA
144| AND A~INV_SEQ = B~INV_SEQ )
145|
146| INNER JOIN ZDTV3T_AP_EXT_D AS C
147|
148| ON B~BUKRS = C~BUKRS
149| AND B~ISSUE_DATE = C~ISSUE_DATE
150| AND B~BUPLA = C~BUPLA
151| AND B~INV_SEQ = C~INV_SEQ )
152|
153| WHERE A~BUKRS = P_BUKRS
154| AND A~ISSUE_DATE IN S_BUDAT
155| AND A~SU_ID IN S_SU_ID
156| AND A~IP_EMAIL1 IN S_EMAIL
157| AND A~INV_SIGN = ''
158| AND ( B~USE_DOC = L_DOC1 OR
159| B~USE_DOC = L_DOC2 ).
160|
161| APPEND IT_ZDTV3T_AP_HEAD.
162| CLEAR IT_ZDTV3T_AP_HEAD.
163|
164| ENDSELECT.
```
- **EN**: Selects received e-tax invoices by joining ZDTV3T_AP_HEAD with ZDTV3T_AP_EXT and ZDTV3T_AP_EXT_D on company code, issue date, business place and sequence, filtered by period, supplier ID, email, non-cancelled and USE_DOC status.
- 테이블(파서): read [ZDTV3T_AP_EXT](/tables/ZDTV3T_AP_EXT.md), [ZDTV3T_AP_EXT_D](/tables/ZDTV3T_AP_EXT_D.md) / write -
- SAP 객체: ZDTV3T_AP_HEAD, ZDTV3T_AP_EXT, ZDTV3T_AP_EXT_D
- 업무 키워드: 전자세금계산서 수신, 매입 세금계산서, 조회, 조인, 전표처리 여부
- English: E-Tax Invoice, AP Invoice, Business Place, Inner Join
- 정의부(복사 시 함께 필요): [`ZDTV3T_AP_HEAD`](#decl-zfir0100top-5-zdtv3t_ap_head), [`IT_ZDTV3T_AP_HEAD`](#decl-zfir0100top-11-it_zdtv3t_ap_head), [`ZDTV3T_AP_EXT`](#decl-zfir0100top-5-zdtv3t_ap_ext), [`ZDTV3T_AP_EXT_D`](#decl-zfir0100top-5-zdtv3t_ap_ext_d), [`P_BUKRS`](#decl-zfir0100scr-6-p_bukrs), [`S_BUDAT`](#decl-zfir0100top-48-s_budat), [`S_SU_ID`](#decl-zfir0100scr-12-s_su_id), [`S_EMAIL`](#decl-zfir0100scr-13-s_email), [`L_DOC1`](#decl-zfir0100f01-96-l_doc1), [`L_DOC2`](#decl-zfir0100f01-96-l_doc2)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L138-L164` · confidence 0.9 · `ZFIR0100#ZFIR0100F01#FORM#SET_DATA#C2`
### FORM DATE_PROCESS — `ZFIR0100F01` L311-L330 (20줄)
*조회 연월(P_SPMON)로 월초~월말 날짜 범위 S_BUDAT 를 LAST_DAY_OF_MONTHS 로 구성하는 FORM 이다.*
> 이 unit 의 조각 1개가 16/20줄(80%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [calculation] 연월 P_SPMON 의 1일을 시작일로 하고 LAST_DAY_OF_MONTHS 로 월말일을 구해 작성일자 조회 범위 S_BUDAT(BT) 를 만든다.
```abap
313| CLEAR: S_BUDAT[], S_BUDAT.
314| S_BUDAT-SIGN = 'I'.
315| S_BUDAT-OPTION = 'BT'.
316| S_BUDAT-LOW+0(6) = P_SPMON.
317| S_BUDAT-LOW+6(2) = '01'.
318|
319| CALL FUNCTION 'LAST_DAY_OF_MONTHS'
320| EXPORTING
321| DAY_IN = S_BUDAT-LOW
322| IMPORTING
323| LAST_DAY_OF_MONTH = S_BUDAT-HIGH
324| EXCEPTIONS
325| DAY_IN_NO_DATE = 1
326| OTHERS = 2.
327|
328| APPEND S_BUDAT.
```
- **EN**: Builds the issue-date range S_BUDAT from the first day of the selected month to its last day via LAST_DAY_OF_MONTHS.
- 호출(파서): LAST_DAY_OF_MONTHS
- SAP 객체: LAST_DAY_OF_MONTHS
- 업무 키워드: 조회 기간, 월초, 월말, 날짜 범위
- English: Period Range, Last Day Of Month, Select-Option
- 정의부(복사 시 함께 필요): [`S_BUDAT`](#decl-zfir0100top-48-s_budat), [`P_SPMON`](#decl-zfir0100scr-9-p_spmon)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L313-L328` · confidence 0.95 · `ZFIR0100#ZFIR0100F01#FORM#DATE_PROCESS#C1`
### FORM MODIFY_PROCESS — `ZFIR0100F01` L240-L261 (22줄)
*조회된 IT_ZDTV3T_AP_HEAD 를 GT_MAIN 그리드 테이블로 옮기며 전표번호 유무에 따라 처리 상태 아이콘(ZICON)을 설정하는 FORM 이다.*
> 이 unit 의 조각 1개가 15/22줄(68%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [other] 수신 전자세금계산서 각 건을 GT_MAIN 으로 복사하고 전표번호(BELNR)가 없으면 미처리 아이콘(@09@), 있으면 처리완료 아이콘(@08@)을 ZICON 에 넣어 그리드 상태 표시를 만든다.
```abap
244| LOOP AT IT_ZDTV3T_AP_HEAD.
245|
246| MOVE-CORRESPONDING IT_ZDTV3T_AP_HEAD TO GT_MAIN.
247|
248| IF GT_MAIN-BELNR IS INITIAL.
249| GT_MAIN-ZICON = '@09@'.
250| ELSE.
251| GT_MAIN-ZICON = '@08@'.
252| ENDIF.
253|
254|
255| APPEND GT_MAIN.
256| CLEAR GT_MAIN.
257|
258| ENDLOOP.
```
- **EN**: Copies each e-tax invoice row into GT_MAIN and sets the status icon based on whether an FI document number (BELNR) already exists.
- SAP 객체: GT_MAIN, IT_ZDTV3T_AP_HEAD
- 업무 키워드: 상태 아이콘, 전표처리 여부, 그리드 데이터 구성
- English: Status Icon, Document Number, Grid Data
- 정의부(복사 시 함께 필요): [`ZDTV3T_AP_HEAD`](#decl-zfir0100top-5-zdtv3t_ap_head), [`IT_ZDTV3T_AP_HEAD`](#decl-zfir0100top-11-it_zdtv3t_ap_head), [`GT_MAIN`](#decl-zfir0100top-21-gt_main)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L244-L258` · confidence 0.85 · `ZFIR0100#ZFIR0100F01#FORM#MODIFY_PROCESS#C1`
### FORM DATA_CHANGED — `ZFIR0100F02` L962-L1040 (79줄)
*편집 ALV 의 DATA_CHANGED 이벤트에서 변경된 셀 값을 GT_MAIN 에 반영하고 변경 플래그를 세우며 오류 시 프로토콜에 기록한 뒤 그리드를 새로고침하는 FORM 이다.*
> 이 unit 의 조각 2개가 58/79줄(73%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [validation] 행 삽입(MT_INSERTED_ROWS)이 있으면 셀 변경 처리를 하지 않고 종료한다.
```abap
977| DESCRIBE TABLE P_CHANGED->MT_INSERTED_ROWS LINES LV_LINE.
978| IF LV_LINE <> 0.
979| EXIT.
980| ENDIF.
```
- **EN**: Exits without processing when the change protocol contains inserted rows.
- 호출(파서): P_CHANGED->MT_INSERTED_ROWS
- SAP 객체: CL_ALV_CHANGED_DATA_PROTOCOL
- 업무 키워드: 행 삽입 제외, 변경 검사
- English: Inserted Rows, Data Changed
- 정의부(복사 시 함께 필요): [`LV_LINE`](#decl-zfir0100f02-968-lv_line)
- 위치: `abap://ZFIR0100/ZFIR0100F02#L977-L980` · confidence 0.8 · `ZFIR0100#ZFIR0100F02#FORM#DATA_CHANGED#C1`
#### [other] 변경된 셀(MT_GOOD_CELLS)마다 GET_CELL_VALUE 로 값을 읽어 GT_MAIN 의 해당 필드에 MODIFY 하고 회사코드를 채우며 변경 플래그(GV_CHK)를 세운 뒤, 오류면 ADD_PROTOCAL_ENTRY 로 기록하고 정상이면 MODIFY_CELL 로 셀 값을 확정한다(ZDTV3T_AP_EXT USE_DOC 갱신은 주석 처리).
```abap
982| LOOP AT P_CHANGED->MT_GOOD_CELLS INTO LS_MOD_CELLS.
983| CLEAR: GV_ERR, GS_MSG.
984|
985| ASSIGN COMPONENT LS_MOD_CELLS-FIELDNAME
986| OF STRUCTURE GT_MAIN TO <FS_FIELD>.
987|
988| * 입력된 셀의 값 얻기
989|
990| CALL METHOD P_CHANGED->GET_CELL_VALUE
991| EXPORTING
992| I_ROW_ID = LS_MOD_CELLS-ROW_ID
993| I_FIELDNAME = LS_MOD_CELLS-FIELDNAME
994| I_TABIX = LS_MOD_CELLS-TABIX
995| IMPORTING
996| E_VALUE = <FS_FIELD>.
997|
998| GV_CHK = 'X'. " 변경 CHECK
999|
1000| GT_MAIN-BUKRS = P_BUKRS.
1001|
1002| MODIFY GT_MAIN INDEX LS_MOD_CELLS-ROW_ID
1003| TRANSPORTING (LS_MOD_CELLS-FIELDNAME).
1004|
1005|
1006| IF GV_ERR IS NOT INITIAL.
1007| PERFORM ADD_PROTOCAL_ENTRY USING P_CHANGED
1008| LS_MOD_CELLS
1009| GS_MSG.
1010| ELSE.
1011|
1012| * UPDATE VALUE
1013|
1014| CALL METHOD P_CHANGED->MODIFY_CELL
1015| EXPORTING
1016| I_ROW_ID = LS_MOD_CELLS-ROW_ID
1017| I_FIELDNAME = LS_MOD_CELLS-FIELDNAME
1018| I_VALUE = LS_MOD_CELLS-VALUE.
1019|
1020|
1021| * IF LS_MOD_CELLS-FIELDNAME = 'BELNR'.
1022| * IF LS_MOD_CELLS-VALUE IS INITIAL.
1023| * L_USE_DOC = ''.
1024| * ELSE.
1025| * L_USE_DOC = 'X'.
1026| * ENDIF.
1027| * UPDATE ZDTV3T_AP_EXT SET: USE_DOC = L_USE_DOC
1028| * WHERE BUKRS = GT_MAIN-BUKRS
1029| * AND ISSUE_DATE = GT_MAIN-ISSUE_DATE
1030| * AND BUPLA = GT_MAIN-BUPLA
1031| * AND INV_SEQ = GT_MAIN-INV_SEQ.
1032| * ENDIF.
1033| ENDIF.
1034|
1035| ENDLOOP.
```
- **EN**: For each changed cell, reads the new value with GET_CELL_VALUE, updates the GT_MAIN field and change flag, and either logs an error via ADD_PROTOCAL_ENTRY or confirms the value with MODIFY_CELL.
- 테이블(파서): read - / write [GT_MAIN](/tables/GT_MAIN.md)
- 호출(파서): P_CHANGED->MT_GOOD_CELLS, P_CHANGED->GET_CELL_VALUE, ADD_PROTOCAL_ENTRY, P_CHANGED->MODIFY_CELL
- SAP 객체: CL_ALV_CHANGED_DATA_PROTOCOL, GET_CELL_VALUE, MODIFY_CELL, GT_MAIN
- 업무 키워드: 셀 변경 반영, 변경 플래그, 오류 프로토콜, 전표번호 입력
- English: Data Changed, Cell Value, Editable ALV
- 정의부(복사 시 함께 필요): [`LS_MOD_CELLS`](#decl-zfir0100f02-965-ls_mod_cells), [`GV_ERR`](#decl-zfir0100t01-59-gv_err), [`GS_MSG`](#decl-zfir0100t01-58-gs_msg), [`ZDTV3T_AP_HEAD`](#decl-zfir0100top-5-zdtv3t_ap_head), [`GT_MAIN`](#decl-zfir0100top-21-gt_main), [`<FS_FIELD>`](#decl-zfir0100f02-970--fs_field-), [`GV_CHK`](#decl-zfir0100t01-61-gv_chk), [`P_BUKRS`](#decl-zfir0100scr-6-p_bukrs)
- 위치: `abap://ZFIR0100/ZFIR0100F02#L982-L1035` · confidence 0.85 · `ZFIR0100#ZFIR0100F02#FORM#DATA_CHANGED#C2`
### FORM ADD_PROTOCAL_ENTRY — `ZFIR0100F02` L1064-L1084 (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
1072| CALL METHOD RR_DATA_CHANGED->ADD_PROTOCOL_ENTRY
1073| EXPORTING
1074| I_MSGID = '00'
1075| I_MSGTY = 'E'
1076| I_MSGNO = PS_MESSAGE-MSGNO
1077| I_MSGV1 = PS_MESSAGE-MSGV1
1078| I_MSGV2 = PS_MESSAGE-MSGV2
1079| I_MSGV3 = PS_MESSAGE-MSGV3
1080| I_MSGV4 = PS_MESSAGE-MSGV4
1081| I_FIELDNAME = RS_MOD_CELLS-FIELDNAME
1082| 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://ZFIR0100/ZFIR0100F02#L1072-L1082` · confidence 0.85 · `ZFIR0100#ZFIR0100F02#FORM#ADD_PROTOCAL_ENTRY#C1`
### FORM USER_COMMAND — `ZFIR0100F02` L874-L901 (28줄)
*ALV 툴바 사용자 명령(REFRESH/SAVE/POST)을 받아 재조회·확인 후 저장·전표기표 FORM 으로 분기하는 디스패치 FORM 이다.*
> 이 unit 의 조각 1개가 21/28줄(75%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [control_flow] REFRESH 는 SET_DATA·MODIFY_PROCESS·SET_REFRESH 로 재조회, SAVE 는 POPUP_TO_CONFIRM 후 SET_SAVE, POST 는 SET_POST 로 매입전표 기표를 실행한다.
```abap
879| CASE P_UCOMM.
880|
881| WHEN 'REFRESH'.
882| PERFORM SET_DATA.
883| PERFORM MODIFY_PROCESS.
884| PERFORM SET_REFRESH.
885|
886| WHEN 'SAVE'.
887| PERFORM POPUP_TO_CONFIRM USING P_ANSWER P_UCOMM.
888| CHECK P_ANSWER = 'J'.
889| PERFORM SET_SAVE.
890| PERFORM SET_REFRESH.
891|
892| WHEN 'POST'.
893| * PERFORM POPUP_TO_CONFIRM USING P_ANSWER P_UCOMM.
894| * CHECK P_ANSWER = 'J'.
895| PERFORM SET_POST.
896| PERFORM SET_REFRESH.
897|
898|
899| ENDCASE.
```
- **EN**: Dispatches ALV user commands to refresh, confirm-and-save, or post routines for the e-tax invoice grid.
- 호출(파서): SET_DATA, MODIFY_PROCESS, SET_REFRESH, POPUP_TO_CONFIRM, SET_SAVE, SET_REFRESH, SET_POST, SET_REFRESH
- SAP 객체: POPUP_TO_CONFIRM
- 업무 키워드: 사용자 명령, 재조회, 저장, 전표기표
- English: User Command, Refresh, Save, Post
- 정의부(복사 시 함께 필요): [`P_ANSWER`](#decl-zfir0100top-37-p_answer)
- 위치: `abap://ZFIR0100/ZFIR0100F02#L879-L899` · confidence 0.85 · `ZFIR0100#ZFIR0100F02#FORM#USER_COMMAND#C1`
### FORM POPUP_TO_CONFIRM — `ZFIR0100F01` L265-L296 (32줄)
*저장/전표기표 명령에 맞는 문구로 POPUP_TO_CONFIRM_STEP 확인 팝업을 띄워 사용자 응답을 받는 FORM 이다.*
> 이 unit 의 조각 1개가 22/32줄(69%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [fm_call] SAVE 는 '저장 하시겠습니까', POST 는 '전표기표 하시겠습니까' 문구를 준비해 POPUP_TO_CONFIRM_STEP 으로 확인 팝업을 띄우고 응답을 FP_ANSWER 에 받는다.
```abap
272| CASE SAVE_OK.
273|
274| WHEN 'SAVE'.
275| L_DEFAULTOPTION = 'Y'.
276| L_TEXTLINE2 = '저장 하시겠습니까 ?'.
277|
278|
279| WHEN 'POST'.
280| L_DEFAULTOPTION = 'Y'.
281| L_TEXTLINE2 = '전표기표 하시겠습니까 ?'.
282|
283| ENDCASE.
284|
285| CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
286| EXPORTING
287| DEFAULTOPTION = L_DEFAULTOPTION
288| TEXTLINE1 = L_TEXTLINE1
289| TEXTLINE2 = L_TEXTLINE2
290| TITEL = TEXT-101
291| CANCEL_DISPLAY = ''
292| IMPORTING
293| ANSWER = FP_ANSWER.
```
- **EN**: Prepares the question text by command (SAVE/POST) and calls POPUP_TO_CONFIRM_STEP to obtain the user's confirmation answer.
- 호출(파서): POPUP_TO_CONFIRM_STEP
- SAP 객체: POPUP_TO_CONFIRM_STEP
- 업무 키워드: 확인 팝업, 저장 확인, 전표기표 확인
- English: Confirmation Popup, Posting Confirmation
- 정의부(복사 시 함께 필요): [`SAVE_OK`](#decl-zfir0100t01-55-save_ok), [`L_DEFAULTOPTION`](#decl-zfir0100f01-267-l_defaultoption), [`L_TEXTLINE2`](#decl-zfir0100f01-267-l_textline2), [`L_TEXTLINE1`](#decl-zfir0100f01-267-l_textline1)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L272-L293` · confidence 0.95 · `ZFIR0100#ZFIR0100F01#FORM#POPUP_TO_CONFIRM#C1`
### FORM SET_SAVE — `ZFIR0100F01` L404-L492 (89줄)
*ALV 에서 선택한 전자세금계산서 행의 전표번호를 수신 테이블에 저장하고 사용여부·상태 아이콘을 갱신한다.*
> 이 unit 의 조각 2개가 57/89줄(64%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [validation] ALV 그리드에서 현재 선택된 행을 가져오고, 선택이 없으면 '저장 할 행을 선택하세요' 메시지를 내고 중단한다.
```abap
426| CLEAR LT_ROWS[].
427| CALL METHOD GO_GRID->GET_SELECTED_ROWS
428| IMPORTING
429| ET_INDEX_ROWS = LT_ROWS.
430|
431| IF LT_ROWS[] IS INITIAL.
432| MESSAGE S001 WITH '저장 할 행을 선택하세요.'.
433| EXIT.
434| ENDIF.
```
- **EN**: Fetches the selected ALV rows and aborts with a message when nothing is selected.
- 호출(파서): GO_GRID->GET_SELECTED_ROWS
- SAP 객체: CL_GUI_ALV_GRID, GET_SELECTED_ROWS
- 업무 키워드: 행선택, 선택검증, 저장전검증, ALV선택
- English: row selection, selection check, pre-save validation, ALV
- 정의부(복사 시 함께 필요): [`LT_ROWS`](#decl-zfir0100f01-421-lt_rows), [`GO_GRID`](#decl-zfir0100c01-124-go_grid)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L426-L434` · confidence 0.88 · `ZFIR0100#ZFIR0100F01#FORM#SET_SAVE#C1`
#### [db_write] 선택한 행마다 전자세금계산서 상세 테이블 ZDTV3T_AP_EXT_D 에 생성된 전표번호·회계연도·처리자를 회사코드·발행일·사업장·계산서순번 키로 UPDATE 하고, 전표번호 유무에 따라 헤더 테이블 ZDTV3T_AP_EXT 의 사용여부(USE_DOC)와 화면 상태 아이콘을 갱신한다.
```abap
437| LOOP AT LT_ROWS INTO LS_ROWS WHERE ROWTYPE = SPACE.
438| CLEAR GT_MAIN.
439|
440|
441| READ TABLE GT_MAIN INDEX LS_ROWS-INDEX.
442| IF SY-SUBRC = 0.
443|
444| CLEAR: GT_MAIN-SCOL, LT_SCOL, LT_SCOL[].
445|
446| UPDATE ZDTV3T_AP_EXT_D SET: BELNR = GT_MAIN-BELNR
447| * BUDAT = LT_BKPF-BUDAT
448| * BLDAT = LT_BKPF-BLDAT
449| * BLART = LT_BKPF-BLART
450| * MWSKZ = ZDTV3S_DOC_LIFNR-MWSKZ
451| * DMBTR = IS_INVOICE-GRANDTOTAL
452| UNAME = SY-UNAME
453| ZGJAH = GT_MAIN-ZGJAH
454| WHERE BUKRS = GT_MAIN-BUKRS
455| AND ISSUE_DATE = GT_MAIN-ISSUE_DATE
456| AND BUPLA = GT_MAIN-BUPLA
457| AND INV_SEQ = GT_MAIN-INV_SEQ.
458|
459| IF GT_MAIN-BELNR IS INITIAL.
460| L_USE_DOC = ''.
461| GT_MAIN-ZICON = '@09@'.
462|
463| ELSE.
464| L_USE_DOC = 'X'.
465| GT_MAIN-ZICON = '@08@'.
466|
467| ENDIF.
468|
469|
470| UPDATE ZDTV3T_AP_EXT SET: USE_DOC = L_USE_DOC
471| WHERE BUKRS = GT_MAIN-BUKRS
472| AND ISSUE_DATE = GT_MAIN-ISSUE_DATE
473| AND BUPLA = GT_MAIN-BUPLA
474| AND INV_SEQ = GT_MAIN-INV_SEQ.
475|
476| IF SY-SUBRC = 0.
477| G_OK = 'X'.
478|
479| MODIFY GT_MAIN INDEX LS_ROWS-INDEX TRANSPORTING ZICON.
480|
481| ENDIF.
482|
483| ENDIF.
484| ENDLOOP.
```
- **EN**: For each selected row, updates the e-tax-invoice detail table with the posted document number and the header table's USE_DOC flag, refreshing the status icon.
- 테이블(파서): read - / write [ZDTV3T_AP_EXT_D](/tables/ZDTV3T_AP_EXT_D.md), [ZDTV3T_AP_EXT](/tables/ZDTV3T_AP_EXT.md), [GT_MAIN](/tables/GT_MAIN.md)
- SAP 객체: ZDTV3T_AP_EXT_D, ZDTV3T_AP_EXT, BELNR, USE_DOC, ISSUE_DATE, INV_SEQ
- 업무 키워드: 전자세금계산서, 전표번호, 저장, 사용여부, 발행일, 사업장, 계산서순번, 상태아이콘
- English: electronic tax invoice, document number, save, use flag, issue date, business place, invoice sequence
- 정의부(복사 시 함께 필요): [`LT_ROWS`](#decl-zfir0100f01-421-lt_rows), [`LS_ROWS`](#decl-zfir0100f01-422-ls_rows), [`ZDTV3T_AP_HEAD`](#decl-zfir0100top-5-zdtv3t_ap_head), [`GT_MAIN`](#decl-zfir0100top-21-gt_main), [`LT_SCOL`](#decl-zfir0100f01-407-lt_scol), [`ZDTV3T_AP_EXT_D`](#decl-zfir0100top-5-zdtv3t_ap_ext_d), [`L_USE_DOC`](#decl-zfir0100f01-414-l_use_doc), [`ZDTV3T_AP_EXT`](#decl-zfir0100top-5-zdtv3t_ap_ext), [`G_OK`](#decl-zfir0100top-38-g_ok)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L437-L484` · confidence 0.85 · `ZFIR0100#ZFIR0100F01#FORM#SET_SAVE#C2`
### FORM SET_POST — `ZFIR0100F01` L335-L397 (63줄)
*ALV 에서 선택된 미처리 전자세금계산서 행을 GT_TABLE 로 메모리에 EXPORT 한 뒤 전표 입력 화면 ZFIR0110_DOC 을 호출해 매입전표를 기표하는 FORM 이다.*
> 이 unit 의 조각 2개가 36/63줄(57%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [validation] GO_GRID->GET_SELECTED_ROWS 로 선택 행을 읽고 선택 행이 없으면 '전표기표 할 행을 선택하세요' 메시지 후 종료한다.
```abap
355| CALL METHOD GO_GRID->GET_SELECTED_ROWS
356| IMPORTING
357| ET_INDEX_ROWS = LT_ROWS.
358|
359| IF LT_ROWS[] IS INITIAL.
360| MESSAGE S001 WITH '전표기표 할 행을 선택하세요.'.
361| EXIT.
362| ENDIF.
```
- **EN**: Gets the selected ALV rows and exits with a message if none are selected for document posting.
- 호출(파서): GO_GRID->GET_SELECTED_ROWS
- SAP 객체: CL_GUI_ALV_GRID, GET_SELECTED_ROWS
- 업무 키워드: 행 선택 검증, 전표기표
- English: Selected Rows, Validation
- 정의부(복사 시 함께 필요): [`GO_GRID`](#decl-zfir0100c01-124-go_grid), [`LT_ROWS`](#decl-zfir0100f01-348-lt_rows)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L355-L362` · confidence 0.9 · `ZFIR0100#ZFIR0100F01#FORM#SET_POST#C1`
#### [interface] 선택된 각 행에 대해 이미 전표번호(BELNR)가 있으면 '이미 처리된 전표' 메시지로 건너뛰고, 아니면 해당 전자세금계산서 행을 GT_TABLE 에 담아 EXPORT TO MEMORY ID 'GT_TABLE' 후 CALL TRANSACTION 'ZFIR0110_DOC' 으로 매입전표 입력 화면을 호출한다.
```abap
365| LOOP AT LT_ROWS INTO LS_ROWS WHERE ROWTYPE = SPACE.
366| CLEAR GT_MAIN.
367|
368|
369| READ TABLE GT_MAIN INDEX LS_ROWS-INDEX.
370| IF SY-SUBRC = 0.
371|
372| IF NOT GT_MAIN-BELNR IS INITIAL.
373| MESSAGE S001 WITH '이미 처리된 전표가 있습니다'.
374| CONTINUE.
375| ENDIF.
376|
377| CLEAR: GT_MAIN-SCOL, LT_SCOL, LT_SCOL[].
378| CLEAR: GT_TABLE[], GT_TABLE.
379|
380| MOVE-CORRESPONDING GT_MAIN TO GT_TABLE.
381| APPEND GT_TABLE.
382| CLEAR GT_TABLE.
383|
384| **
385| G_OK = 'X'.
386| EXPORT GT_TABLE TO MEMORY ID 'GT_TABLE'.
387| CALL TRANSACTION 'ZFIR0110_DOC'.
388| FREE GT_TABLE.
389| **
390|
391| ENDIF.
392| ENDLOOP.
```
- **EN**: For each selected unposted e-tax invoice row, exports it to ABAP memory (ID GT_TABLE) and calls transaction ZFIR0110_DOC to create the AP document; rows already having BELNR are skipped.
- 호출(파서): ZFIR0110_DOC
- SAP 객체: ZFIR0110_DOC, GT_TABLE, GT_MAIN
- 업무 키워드: 매입전표 기표, 전자세금계산서, 메모리 전달, 중복 처리 방지
- English: AP Document Posting, E-Tax Invoice, Call Transaction, ABAP Memory
- 정의부(복사 시 함께 필요): [`LT_ROWS`](#decl-zfir0100f01-348-lt_rows), [`LS_ROWS`](#decl-zfir0100f01-349-ls_rows), [`ZDTV3T_AP_HEAD`](#decl-zfir0100top-5-zdtv3t_ap_head), [`GT_MAIN`](#decl-zfir0100top-21-gt_main), [`LT_SCOL`](#decl-zfir0100f01-338-lt_scol), [`GT_TABLE`](#decl-zfir0100top-43-gt_table), [`G_OK`](#decl-zfir0100top-38-g_ok)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L365-L392` · confidence 0.9 · `ZFIR0100#ZFIR0100F01#FORM#SET_POST#C2`
### FORM HANDLE_DOUBLE_CLICK — `ZFIR0100F02` L1096-L1113 (18줄)
*ALV 전표번호(BELNR) 셀 더블클릭 시 회사코드·회계연도·전표번호를 파라미터로 세팅해 FB03 전표 조회 트랜잭션을 호출하는 FORM 이다.*
> 이 unit 의 조각 1개가 12/18줄(67%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [interface] 더블클릭한 행이 BELNR 컬럼이고 전표번호가 있으면 SET PARAMETER ID BUK/GJR/BLN 으로 회사코드·회계연도·전표번호를 넘겨 FB03(전표 조회)을 SKIP FIRST SCREEN 으로 호출한다.
```abap
1100| READ TABLE GT_MAIN INDEX P_ROW-INDEX.
1101| IF SY-SUBRC EQ 0.
1102| IF P_COLUMN-FIELDNAME = 'BELNR'.
1103| IF NOT GT_MAIN-BELNR IS INITIAL.
1104| SET PARAMETER ID 'BUK' FIELD P_BUKRS. "회사코드
1105| SET PARAMETER ID 'GJR' FIELD GT_MAIN-ZGJAH. "회계연도
1106| SET PARAMETER ID 'BLN' FIELD GT_MAIN-BELNR. "전표
1107| CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
1108| ENDIF.
1109| ENDIF.
1110|
1111| ENDIF.
```
- **EN**: On double-click of a filled BELNR cell, sets BUK/GJR/BLN parameters and calls transaction FB03 to display the FI document.
- 호출(파서): FB03
- SAP 객체: FB03, GT_MAIN
- 업무 키워드: 전표 조회, 더블클릭, 전표번호, 회계연도
- English: Display Document, FI Document, Hotspot Navigation
- 정의부(복사 시 함께 필요): [`ZDTV3T_AP_HEAD`](#decl-zfir0100top-5-zdtv3t_ap_head), [`GT_MAIN`](#decl-zfir0100top-21-gt_main), [`P_BUKRS`](#decl-zfir0100scr-6-p_bukrs)
- 위치: `abap://ZFIR0100/ZFIR0100F02#L1100-L1111` · confidence 0.95 · `ZFIR0100#ZFIR0100F02#FORM#HANDLE_DOUBLE_CLICK#C1`
### FORM SET_POP_MESSAGE — `ZFIR0100F01` L194-L216 (23줄)
*POPUP_TO_CONFIRM 으로 예/아니오 확인 팝업을 띄워 사용자 응답(P_ANSWER)을 돌려주는 FORM 이다.*
> 이 unit 의 조각 1개가 18/23줄(78%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [fm_call] POPUP_TO_CONFIRM 을 호출해 전달받은 질문 텍스트로 예/아니오 팝업을 띄우고 응답을 P_ANSWER 로 반환하며 오류 시 시스템 메시지를 출력한다.
```abap
197| CALL FUNCTION 'POPUP_TO_CONFIRM'
198| EXPORTING
199| TEXT_QUESTION = P_TEXT
200| TEXT_BUTTON_1 = '예(Yes)'
201| TEXT_BUTTON_2 = '아니오(No)'
202| DEFAULT_BUTTON = '1'
203| DISPLAY_CANCEL_BUTTON = ''
204| START_COLUMN = 25
205| START_ROW = 6
206| IMPORTING
207| ANSWER = P_ANSWER
208| EXCEPTIONS
209| TEXT_NOT_FOUND = 1
210| OTHERS = 2.
211| IF SY-SUBRC <> 0.
212| MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
213| WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
214| 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-zfir0100top-37-p_answer)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L197-L214` · confidence 0.95 · `ZFIR0100#ZFIR0100F01#FORM#SET_POP_MESSAGE#C1`
### FORM CHANG_LINE — `ZFIR0100F01` L496-L573 (78줄)
*ALV 에서 선택된 행만 변경 가능하도록 전체 행의 CELLTAB 을 초기화한 뒤 선택 행에 전표번호(BELNR)·회계연도(ZGJAH) 셀만 편집 가능한 스타일을 적용하는 FORM 이다.*
> 이 unit 의 조각 2개가 43/78줄(55%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [validation] GO_GRID->GET_SELECTED_ROWS 로 선택 행을 가져오고 선택 행이 없으면 G_LINE 플래그를 세우고 '변경 할 행을 선택하세요' 메시지 후 종료한다.
```abap
526| CALL METHOD GO_GRID->GET_SELECTED_ROWS
527| IMPORTING
528| ET_INDEX_ROWS = LT_ROWS.
529|
530| IF LT_ROWS[] IS INITIAL.
531| G_LINE = 'X'.
532| MESSAGE S001 WITH '변경 할 행을 선택하세요.'.
533| EXIT.
534| ENDIF.
```
- **EN**: Reads the selected ALV rows via GET_SELECTED_ROWS and exits with a message if no row is selected.
- 호출(파서): GO_GRID->GET_SELECTED_ROWS
- SAP 객체: CL_GUI_ALV_GRID, GET_SELECTED_ROWS
- 업무 키워드: 행 선택 검증, 선택 행, 메시지
- English: Selected Rows, ALV Grid, Validation
- 정의부(복사 시 함께 필요): [`GO_GRID`](#decl-zfir0100c01-124-go_grid), [`LT_ROWS`](#decl-zfir0100f01-518-lt_rows), [`G_LINE`](#decl-zfir0100top-39-g_line)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L526-L534` · confidence 0.9 · `ZFIR0100#ZFIR0100F01#FORM#CHANG_LINE#C1`
#### [other] GT_MAIN 전체 행의 CELLTAB 을 지운 뒤 선택된 행에 대해서만 SET_CELLTAB('CHAN') 으로 전표번호·회계연도 셀을 편집 가능하게 하는 셀 스타일을 삽입해 행 단위 편집 권한을 부여한다.
```abap
537| LOOP AT GT_MAIN.
538| LV_TABIX = SY-TABIX.
539| CLEAR: GT_MAIN-CELLTAB.
540| MODIFY GT_MAIN INDEX LV_TABIX TRANSPORTING CELLTAB.
541| CLEAR GT_MAIN.
542| ENDLOOP.
543|
544|
545|
546| LOOP AT LT_ROWS INTO LS_ROWS WHERE ROWTYPE = SPACE.
547| CLEAR GT_MAIN.
548|
549| READ TABLE GT_MAIN INDEX LS_ROWS-INDEX.
550| IF SY-SUBRC = 0.
551|
552| CLEAR: GT_MAIN-CELLTAB,
553| LS_MAIN, LT_CELLTAB, LT_CELLTAB[], LV_UCOMM.
554|
555| MOVE-CORRESPONDING GT_MAIN TO LS_MAIN.
556|
557| IF LV_UCOMM IS INITIAL.
558| LV_UCOMM = 'CHAN'. " GV_UCOMM.
559| ENDIF.
560|
561| * SETTING COLOR
562| PERFORM SET_CELLTAB USING LS_MAIN
563| LV_UCOMM
564| CHANGING LT_CELLTAB.
565|
566| INSERT LINES OF LT_CELLTAB INTO TABLE GT_MAIN-CELLTAB.
567| MODIFY GT_MAIN INDEX LS_ROWS-INDEX.
568| ENDIF.
569|
570| ENDLOOP.
```
- **EN**: Clears CELLTAB for all rows and, for each selected row, builds the CHAN cell style via SET_CELLTAB so only BELNR/ZGJAH cells become editable.
- 테이블(파서): read - / write [GT_MAIN](/tables/GT_MAIN.md)
- 호출(파서): SET_CELLTAB
- SAP 객체: LVC_T_STYL
- 업무 키워드: 셀 편집 스타일, 선택 행 편집, 전표번호, 회계연도
- English: CELLTAB, Editable Cell, Document Number
- 정의부(복사 시 함께 필요): [`ZDTV3T_AP_HEAD`](#decl-zfir0100top-5-zdtv3t_ap_head), [`GT_MAIN`](#decl-zfir0100top-21-gt_main), [`LV_TABIX`](#decl-zfir0100f01-503-lv_tabix), [`LT_ROWS`](#decl-zfir0100f01-518-lt_rows), [`LS_ROWS`](#decl-zfir0100f01-519-ls_rows), [`LS_MAIN`](#decl-zfir0100f01-498-ls_main), [`LT_CELLTAB`](#decl-zfir0100f01-499-lt_celltab), [`LV_UCOMM`](#decl-zfir0100f01-500-lv_ucomm)
- 위치: `abap://ZFIR0100/ZFIR0100F01#L537-L570` · confidence 0.8 · `ZFIR0100#ZFIR0100F01#FORM#CHANG_LINE#C2`
### FORM SET_CELLTAB — `ZFIR0100F02` L88-L124 (37줄)
*변경(CHAN) 모드에서 필드카탈로그 전 컬럼을 입력 불가로 두되 전표번호(BELNR)·회계연도(ZGJAH) 셀만 입력 가능하게 CELLTAB 스타일을 만드는 FORM 이다.*
> 이 unit 의 조각 1개가 24/37줄(65%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [other] CHAN 명령일 때 필드카탈로그의 각 컬럼을 MC_STYLE_DISABLED 로 잠그고 BELNR·ZGJAH 컬럼만 MC_STYLE_ENABLED 로 열어 사용자가 수동 전표번호·회계연도만 입력할 수 있도록 CELLTAB 을 구성한다.
```abap
99| LOOP AT GT_FCAT1 INTO GS_FCAT.
100| CLEAR LS_CELLTAB.
101| CASE P_UCOMM.
102|
103| WHEN 'CHAN'.
104|
105| LV_MODE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
106| LS_CELLTAB-FIELDNAME = GS_FCAT-FIELDNAME.
107| LS_CELLTAB-STYLE = LV_MODE.
108|
109| IF GS_FCAT-FIELDNAME = 'BELNR' OR
110| GS_FCAT-FIELDNAME = 'ZGJAH'.
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| ENDIF.
116|
117| ENDCASE.
118|
119|
120| INSERT LS_CELLTAB INTO TABLE P_CELLTAB.
121|
122| ENDLOOP.
```
- **EN**: Builds the CELLTAB style table so that in CHAN mode only the BELNR and ZGJAH cells are enabled for input while all other columns are disabled.
- 호출(파서): CL_GUI_ALV_GRID=>MC_STYLE_DISABLED, CL_GUI_ALV_GRID=>MC_STYLE_ENABLED
- SAP 객체: CL_GUI_ALV_GRID, LVC_T_STYL
- 업무 키워드: 셀 입력 제어, 전표번호, 회계연도, 편집 가능 컬럼
- English: CELLTAB, Cell Style, Editable Column
- 정의부(복사 시 함께 필요): [`GT_FCAT1`](#decl-zfir0100t01-35-gt_fcat1), [`GS_FCAT`](#decl-zfir0100t01-34-gs_fcat), [`LS_CELLTAB`](#decl-zfir0100f02-92-ls_celltab), [`LV_MODE`](#decl-zfir0100f02-93-lv_mode)
- 위치: `abap://ZFIR0100/ZFIR0100F02#L99-L122` · confidence 0.85 · `ZFIR0100#ZFIR0100F02#FORM#SET_CELLTAB#C1`
### FORM RUN_DISPLAY_ALV — `ZFIR0100F02` L703-L725 (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
705| CASE P_VALUE.
706| WHEN '0100'.
707| ASSIGN: GO_GRID TO <FS_GRID>,
708| GT_MAIN[] TO <FS_TABLE>.
709| ENDCASE.
710|
711| PERFORM SET_EVENT_UCOMM.
712|
713| CALL METHOD <FS_GRID>->SET_TABLE_FOR_FIRST_DISPLAY
714| EXPORTING
715| I_DEFAULT = 'X'
716| IS_LAYOUT = GS_LAYOUT
717| IS_VARIANT = GS_VARIANT
718| IT_TOOLBAR_EXCLUDING = GT_EXCLUDE
719| I_SAVE = 'A'
720| CHANGING
721| IT_OUTTAB = <FS_TABLE>
722| IT_FIELDCATALOG = <GT_FIELD>
723| 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-zfir0100c01-124-go_grid), [`<FS_GRID>`](#decl-zfir0100t01-86--fs_grid-), [`ZDTV3T_AP_HEAD`](#decl-zfir0100top-5-zdtv3t_ap_head), [`GT_MAIN`](#decl-zfir0100top-21-gt_main), [`<FS_TABLE>`](#decl-zfir0100t01-87--fs_table-), [`GS_LAYOUT`](#decl-zfir0100t01-30-gs_layout), [`GS_VARIANT`](#decl-zfir0100t01-31-gs_variant), [`GT_EXCLUDE`](#decl-zfir0100t01-33-gt_exclude), [`<GT_FIELD>`](#decl-zfir0100t01-84--gt_field-), [`GT_SORT`](#decl-zfir0100t01-37-gt_sort)
- 위치: `abap://ZFIR0100/ZFIR0100F02#L705-L723` · confidence 0.85 · `ZFIR0100#ZFIR0100F02#FORM#RUN_DISPLAY_ALV#C1`
### FORM SET_CHANGE — `ZFIR0100F02` L912-L953 (42줄)
*변경(CHAN) 명령 시 선택 행 상태에 따라 그리드 편집 가능 여부를 토글하고 잠금(SET_LOCK)을 설정하는 FORM 이다.*
> 이 unit 의 조각 2개가 12/42줄(29%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [control_flow] CHANG_LINE 으로 선택 행의 변경 가능 여부(G_LINE)를 판정한 뒤 변경 가능하면 GO_GRID->SET_READY_FOR_INPUT 으로 편집 모드를 켜고 아니면 끈다.
```abap
914| PERFORM CHANG_LINE.
915|
916| IF G_LINE = ''.
917| CALL METHOD GO_GRID->SET_READY_FOR_INPUT
918| EXPORTING
919| I_READY_FOR_INPUT = 1.
920| ELSE.
921| CALL METHOD GO_GRID->SET_READY_FOR_INPUT
922| EXPORTING
923| I_READY_FOR_INPUT = 0.
924| ENDIF.
```
- **EN**: Determines via CHANG_LINE whether the selected rows are changeable and toggles ALV edit mode with SET_READY_FOR_INPUT accordingly.
- 호출(파서): CHANG_LINE, GO_GRID->SET_READY_FOR_INPUT, GO_GRID->SET_READY_FOR_INPUT
- SAP 객체: CL_GUI_ALV_GRID, SET_READY_FOR_INPUT
- 업무 키워드: 편집 모드, 변경 가능 여부, 행 선택
- English: Edit Mode, ALV Grid, Ready For Input
- 정의부(복사 시 함께 필요): [`G_LINE`](#decl-zfir0100top-39-g_line), [`GO_GRID`](#decl-zfir0100c01-124-go_grid)
- 위치: `abap://ZFIR0100/ZFIR0100F02#L914-L924` · confidence 0.8 · `ZFIR0100#ZFIR0100F02#FORM#SET_CHANGE#C1`
#### [control_flow] 편집 진입 시 SET_LOCK 으로 데이터 잠금(Enqueue)을 걸어 동시 수정을 방지한다.
```abap
951| PERFORM SET_LOCK USING GV_UCOMM.
```
- **EN**: Calls SET_LOCK to enqueue the data when entering change mode to prevent concurrent edits.
- 호출(파서): SET_LOCK
- 업무 키워드: 잠금, 동시 수정 방지
- English: Enqueue, Lock
- 정의부(복사 시 함께 필요): [`GV_UCOMM`](#decl-zfir0100t01-57-gv_ucomm)
- 위치: `abap://ZFIR0100/ZFIR0100F02#L951-L951` · confidence 0.7 · `ZFIR0100#ZFIR0100F02#FORM#SET_CHANGE#C2`
### MODULE USER_COMMAND_0100_EXIT INPUT — `ZFIR0100I01` L7-L37 (31줄)
*화면 0100 종료 명령 처리 시 미저장 변경분 확인 팝업을 띄우고 잠금을 해제한 뒤 화면을 빠져나가는 EXIT 모듈이다.*
> 이 unit 의 조각 2개가 19/31줄(61%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [validation] 변경 플래그(GV_CHK)가 있으면 SET_POP_MESSAGE 확인 팝업을 띄워 사용자가 확인하면 CHK_DATA 로 데이터 검증을 수행하고 오류가 있으면 종료를 막는다.
```abap
11| IF GV_CHK IS NOT INITIAL.
12| PERFORM SET_POP_MESSAGE USING TEXT-100
13| CHANGING GV_ANSWER.
14| IF GV_ANSWER = '1'.
15| PERFORM CHK_DATA.
16| ELSE.
17| MESSAGE S001 WITH TEXT-101.
18| ENDIF.
19|
20| CHECK GV_ERR IS INITIAL.
21| ENDIF.
```
- **EN**: If unsaved changes exist, shows a confirmation popup and runs CHK_DATA validation, blocking exit on error.
- 호출(파서): SET_POP_MESSAGE, CHK_DATA
- 업무 키워드: 종료 확인, 변경 확인, 데이터 검증
- English: Exit Confirmation, Validation
- 정의부(복사 시 함께 필요): [`GV_CHK`](#decl-zfir0100t01-61-gv_chk), [`GV_ANSWER`](#decl-zfir0100t01-60-gv_answer), [`GV_ERR`](#decl-zfir0100t01-59-gv_err)
- 위치: `abap://ZFIR0100/ZFIR0100I01#L11-L21` · confidence 0.8 · `ZFIR0100#ZFIR0100I01#MODULE#USER_COMMAND_0100_EXIT_INPUT#C1`
#### [control_flow] SET_LOCK 으로 잠금(Enqueue)을 해제한 뒤 BACK/EXIT 은 화면 0, CANCEL 은 프로그램 종료로 분기한다.
```abap
28| PERFORM SET_LOCK USING 'UNLOCK'.
29|
30| CASE SAVE_OK.
31| WHEN '&F03' OR '&F15'.
32| LEAVE TO SCREEN 0.
33| WHEN '&F12'.
34| LEAVE PROGRAM.
35| ENDCASE.
```
- **EN**: Releases the lock via SET_LOCK and leaves the screen or program according to the exit function code.
- 호출(파서): SET_LOCK
- 업무 키워드: 잠금 해제, 화면 종료
- English: Dequeue, Leave Screen
- 정의부(복사 시 함께 필요): [`SAVE_OK`](#decl-zfir0100t01-55-save_ok)
- 위치: `abap://ZFIR0100/ZFIR0100I01#L28-L35` · confidence 0.85 · `ZFIR0100#ZFIR0100I01#MODULE#USER_COMMAND_0100_EXIT_INPUT#C2`
### MODULE USER_COMMAND_0100 INPUT — `ZFIR0100I01` L45-L89 (45줄)
*화면 0100 의 사용자 명령(변경·재조회·저장·전기)을 받아 해당 처리 FORM 으로 분기하는 PAI 모듈이다.*
> 이 unit 의 조각 1개가 28/45줄(62%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
#### [control_flow] OK_CODE(CHAN/REFRESH/SAVE/POST)에 따라 전자세금계산서 그리드 변경 반영(SET_CHANGE), 재조회(SET_DATA·MODIFY_PROCESS), 확인 팝업 후 저장(SET_SAVE), 매입전표 전기(SET_POST) 를 분기 호출한다.
```abap
60| CASE SAVE_OK.
61| WHEN 'CHAN'.
62| PERFORM SET_CHANGE. " CHANGE
63|
64|
65| WHEN 'REFRESH'.
66| PERFORM SET_DATA.
67| PERFORM MODIFY_PROCESS.
68| PERFORM SET_REFRESH.
69|
70| WHEN 'SAVE'.
71| PERFORM POPUP_TO_CONFIRM USING P_ANSWER SAVE_OK.
72| CHECK P_ANSWER = 'J'.
73| PERFORM SET_SAVE.
74| PERFORM SET_REFRESH.
75|
76| WHEN 'POST'.
77| * PERFORM POPUP_TO_CONFIRM USING P_ANSWER P_UCOMM.
78| * CHECK P_ANSWER = 'J'.
79| PERFORM SET_POST.
80|
81| IF G_OK = 'X'.
82| PERFORM SET_DATA.
83| PERFORM MODIFY_PROCESS.
84| PERFORM SET_REFRESH.
85| ENDIF.
86|
87| ENDCASE.
```
- **EN**: Dispatches screen 0100 user commands to change, refresh, save (after POPUP_TO_CONFIRM) and post routines for the e-tax invoice AP document grid.
- 호출(파서): SET_CHANGE, SET_DATA, MODIFY_PROCESS, SET_REFRESH, POPUP_TO_CONFIRM, SET_SAVE, SET_REFRESH, SET_POST, SET_DATA, MODIFY_PROCESS, SET_REFRESH
- SAP 객체: POPUP_TO_CONFIRM
- 업무 키워드: 사용자 명령, 저장, 전기, 재조회, 확인 팝업
- English: User Command, PAI, Posting, Save
- 정의부(복사 시 함께 필요): [`SAVE_OK`](#decl-zfir0100t01-55-save_ok), [`P_ANSWER`](#decl-zfir0100top-37-p_answer), [`G_OK`](#decl-zfir0100top-38-g_ok)
- 위치: `abap://ZFIR0100/ZFIR0100I01#L60-L87` · confidence 0.9 · `ZFIR0100#ZFIR0100I01#MODULE#USER_COMMAND_0100_INPUT#C1`
## 정의부 (107건)
로직 조각을 다른 프로그램으로 옮겨 붙일 때 **함께 가야 하는 선언**이다. 조각별로 무엇이 필요한지는 위 조각 항목의 `정의부` 줄에 있고(이름을 누르면 여기로 온다), 붙여넣기용으로 의존까지 묶은 코드는 `GET /chunks/<chunk_id>``declaration_code` 로 받는다.
### `ZFIR0100C01` (18건)
#### LCL_EVENT_RECEIVER — class · L7-L52 {#decl-zfir0100c01-7-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 · L110-L110 {#decl-zfir0100c01-110-go_custom}
```abap
DATA: GO_CUSTOM TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
```
#### GO_CUSTOM2 — data · L111-L111 {#decl-zfir0100c01-111-go_custom2}
```abap
DATA:
GO_CUSTOM2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
```
#### GO_DOCKING — data · L113-L113 {#decl-zfir0100c01-113-go_docking}
```abap
DATA: GO_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER.
```
#### GO_DOCKING2 — data · L114-L114 {#decl-zfir0100c01-114-go_docking2}
```abap
DATA:
GO_DOCKING2 TYPE REF TO CL_GUI_DOCKING_CONTAINER.
```
#### GO_SPLITTER — data · L116-L116 {#decl-zfir0100c01-116-go_splitter}
```abap
DATA: GO_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER.
```
#### GO_SPLITTER2 — data · L117-L117 {#decl-zfir0100c01-117-go_splitter2}
```abap
DATA:
GO_SPLITTER2 TYPE REF TO CL_GUI_SPLITTER_CONTAINER.
```
#### GO_GRID — data · L124-L124 {#decl-zfir0100c01-124-go_grid}
```abap
DATA: GO_GRID TYPE REF TO CL_GUI_ALV_GRID.
```
#### GO_GRID2 — data · L125-L125 {#decl-zfir0100c01-125-go_grid2}
```abap
DATA:
GO_GRID2 TYPE REF TO CL_GUI_ALV_GRID.
```
#### GO_GRID3 — data · L126-L126 {#decl-zfir0100c01-126-go_grid3}
```abap
DATA:
GO_GRID3 TYPE REF TO CL_GUI_ALV_GRID.
```
#### GO_GRID4 — data · L127-L127 {#decl-zfir0100c01-127-go_grid4}
```abap
DATA:
GO_GRID4 TYPE REF TO CL_GUI_ALV_GRID.
```
#### GO_GRID5 — data · L128-L128 {#decl-zfir0100c01-128-go_grid5}
```abap
DATA:
GO_GRID5 TYPE REF TO CL_GUI_ALV_GRID.
```
#### GO_CON — data · L130-L130 {#decl-zfir0100c01-130-go_con}
```abap
DATA: GO_CON TYPE REF TO CL_GUI_CONTAINER.
```
#### GO_CON2 — data · L131-L131 {#decl-zfir0100c01-131-go_con2}
```abap
DATA:
GO_CON2 TYPE REF TO CL_GUI_CONTAINER.
```
#### GO_CON3 — data · L132-L132 {#decl-zfir0100c01-132-go_con3}
```abap
DATA:
GO_CON3 TYPE REF TO CL_GUI_CONTAINER.
```
#### GO_CON4 — data · L133-L133 {#decl-zfir0100c01-133-go_con4}
```abap
DATA:
GO_CON4 TYPE REF TO CL_GUI_CONTAINER.
```
#### GO_CON5 — data · L134-L134 {#decl-zfir0100c01-134-go_con5}
```abap
DATA:
GO_CON5 TYPE REF TO CL_GUI_CONTAINER.
```
#### GO_EVENT — data · L136-L136 {#decl-zfir0100c01-136-go_event}
```abap
DATA: GO_EVENT TYPE REF TO LCL_EVENT_RECEIVER.
```
### `ZFIR0100SCR` (7건)
#### P_BUKRS — parameter · L6-L8 {#decl-zfir0100scr-6-p_bukrs}
```abap
PARAMETERS : P_BUKRS TYPE T001-BUKRS DEFAULT 'KR01'
MEMORY ID BUK
OBLIGATORY.
```
#### P_SPMON — parameter · L9-L10 {#decl-zfir0100scr-9-p_spmon}
```abap
PARAMETERS:
P_SPMON TYPE SPMON DEFAULT SY-DATUM+0(6)
OBLIGATORY.
```
#### S_SU_ID — select-option · L12-L12 {#decl-zfir0100scr-12-s_su_id}
```abap
SELECT-OPTIONS: S_SU_ID FOR LFA1-LIFNR.
```
#### S_EMAIL — select-option · L13-L13 {#decl-zfir0100scr-13-s_email}
```abap
SELECT-OPTIONS:
S_EMAIL FOR ZDTV3T_AP_HEAD-IP_EMAIL1.
```
#### P_R1 — parameter · L22-L22 {#decl-zfir0100scr-22-p_r1}
```abap
PARAMETERS: P_R1 RADIOBUTTON GROUP G1 .
```
#### P_R2 — parameter · L25-L25 {#decl-zfir0100scr-25-p_r2}
```abap
PARAMETERS: P_R2 RADIOBUTTON GROUP G1.
```
#### P_R3 — parameter · L28-L28 {#decl-zfir0100scr-28-p_r3}
```abap
PARAMETERS: P_R3 RADIOBUTTON GROUP G1.
```
### `ZFIR0100T01` (39건)
#### IT_EXCEL — data · L9-L9 {#decl-zfir0100t01-9-it_excel}
```abap
DATA: IT_EXCEL LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
```
#### GT_EXCEL — data · L13-L22 {#decl-zfir0100t01-13-gt_excel}
```abap
DATA: BEGIN OF GT_EXCEL OCCURS 0,
TRDAT(10),
BANK_COD3(10),
BANKN(20),
OUTAMT(20),
INAMT(20),
ZBALAMT(20),
NAME(20),
SGTXT(20),
END OF GT_EXCEL.
```
#### IT_ZTRT0002 — data · L25-L27 {#decl-zfir0100t01-25-it_ztrt0002}
```abap
DATA: BEGIN OF IT_ZTRT0002 OCCURS 0.
INCLUDE STRUCTURE ZTRT0002.
DATA END OF IT_ZTRT0002.
```
#### GS_LAYOUT — data · L30-L30 {#decl-zfir0100t01-30-gs_layout}
```abap
DATA: GS_LAYOUT TYPE LVC_S_LAYO.
```
#### GS_VARIANT — data · L31-L31 {#decl-zfir0100t01-31-gs_variant}
```abap
DATA:
GS_VARIANT TYPE DISVARIANT.
```
#### GX_VARIANT — data · L32-L32 {#decl-zfir0100t01-32-gx_variant}
```abap
DATA:
GX_VARIANT TYPE DISVARIANT.
```
#### GT_EXCLUDE — data · L33-L33 {#decl-zfir0100t01-33-gt_exclude}
```abap
DATA:
GT_EXCLUDE TYPE UI_FUNCTIONS.
```
#### GS_FCAT — data · L34-L34 {#decl-zfir0100t01-34-gs_fcat}
```abap
DATA:
GS_FCAT TYPE LVC_S_FCAT.
```
#### GT_FCAT1 — data · L35-L35 {#decl-zfir0100t01-35-gt_fcat1}
```abap
DATA:
GT_FCAT1 TYPE LVC_T_FCAT.
```
#### GS_SORT — data · L36-L36 {#decl-zfir0100t01-36-gs_sort}
```abap
DATA:
GS_SORT TYPE LVC_S_SORT.
```
#### GT_SORT — data · L37-L37 {#decl-zfir0100t01-37-gt_sort}
```abap
DATA:
GT_SORT TYPE LVC_T_SORT.
```
#### GS_GLAY — data · L38-L38 {#decl-zfir0100t01-38-gs_glay}
```abap
DATA:
GS_GLAY TYPE LVC_S_GLAY.
```
#### GT_HEAD — data · L39-L39 {#decl-zfir0100t01-39-gt_head}
```abap
DATA:
GT_HEAD TYPE LVC_T_HEAD.
```
#### GS_HEAD — data · L40-L40 {#decl-zfir0100t01-40-gs_head}
```abap
DATA:
GS_HEAD TYPE LVC_S_HEAD.
```
#### GS_EVENT — data · L41-L41 {#decl-zfir0100t01-41-gs_event}
```abap
DATA:
GS_EVENT TYPE LVC_S_EVTS.
```
#### GT_EVENT — data · L42-L42 {#decl-zfir0100t01-42-gt_event}
```abap
DATA:
GT_EVENT TYPE LVC_T_EVTS.
```
#### GS_STBL — data · L43-L43 {#decl-zfir0100t01-43-gs_stbl}
```abap
DATA:
GS_STBL TYPE LVC_S_STBL. " Refresh stability.
```
#### G_REPID — data · L45-L45 {#decl-zfir0100t01-45-g_repid}
```abap
DATA: G_REPID TYPE SY-REPID.
```
#### G_TABNAME — data · L46-L46 {#decl-zfir0100t01-46-g_tabname}
```abap
DATA:
G_TABNAME TYPE SLIS_TABNAME.
```
#### GV_EXIT — data · L47-L47 {#decl-zfir0100t01-47-gv_exit}
```abap
DATA:
GV_EXIT TYPE C.
```
#### OK_CODE — data · L54-L54 {#decl-zfir0100t01-54-ok_code}
```abap
DATA: OK_CODE TYPE SY-UCOMM.
```
#### SAVE_OK — data · L55-L55 {#decl-zfir0100t01-55-save_ok}
```abap
DATA:
SAVE_OK TYPE SY-UCOMM.
```
#### GV_UCOMM — data · L57-L57 {#decl-zfir0100t01-57-gv_ucomm}
```abap
DATA: GV_UCOMM TYPE SY-UCOMM. " COMMAND
```
#### GS_MSG — data · L58-L58 {#decl-zfir0100t01-58-gs_msg}
```abap
DATA:
GS_MSG LIKE FIMSG. " MESSSAGE
```
#### GV_ERR — data · L59-L59 {#decl-zfir0100t01-59-gv_err}
```abap
DATA:
GV_ERR TYPE C. " ERROR
```
#### GV_ANSWER — data · L60-L60 {#decl-zfir0100t01-60-gv_answer}
```abap
DATA:
GV_ANSWER TYPE C. " MESSAGE
```
#### GV_CHK — data · L61-L61 {#decl-zfir0100t01-61-gv_chk}
```abap
DATA:
GV_CHK TYPE C. " CHANGE
```
#### GV_LOCK — data · L62-L62 {#decl-zfir0100t01-62-gv_lock}
```abap
DATA:
GV_LOCK TYPE C.
```
#### GV_MNAME — data · L63-L63 {#decl-zfir0100t01-63-gv_mname}
```abap
DATA:
GV_MNAME TYPE STRING.
```
#### GS_F4 — data · L65-L65 {#decl-zfir0100t01-65-gs_f4}
```abap
DATA: GS_F4 TYPE LVC_S_F4. " F4 ## ##
```
#### GT_F4 — data · L66-L66 {#decl-zfir0100t01-66-gt_f4}
```abap
DATA:
GT_F4 TYPE LVC_T_F4.
```
#### GC_YEL — constants · L73-L73 {#decl-zfir0100t01-73-gc_yel}
```abap
CONSTANTS: GC_YEL(4) VALUE '@09@'. " ICON_LED_YELLOW
```
#### GC_GRE — constants · L74-L74 {#decl-zfir0100t01-74-gc_gre}
```abap
CONSTANTS:
GC_GRE(4) VALUE '@08@'. " ICON_LED_GREEN
```
#### GC_OUT — constants · L75-L75 {#decl-zfir0100t01-75-gc_out}
```abap
CONSTANTS:
GC_OUT(4) VALUE '@EB@'. " ICON_LED_LIGHT_OUT
```
#### GC_RED — constants · L76-L76 {#decl-zfir0100t01-76-gc_red}
```abap
CONSTANTS:
GC_RED(4) VALUE '@0A@'. " ICON_LED_RED
```
#### <GS_FIELD> — field-symbol · L83-L83 {#decl-zfir0100t01-83--gs_field-}
```abap
FIELD-SYMBOLS: <GS_FIELD> TYPE LVC_S_FCAT.
```
#### <GT_FIELD> — field-symbol · L84-L84 {#decl-zfir0100t01-84--gt_field-}
```abap
FIELD-SYMBOLS:
<GT_FIELD> TYPE LVC_T_FCAT.
```
#### <FS_GRID> — field-symbol · L86-L86 {#decl-zfir0100t01-86--fs_grid-}
```abap
FIELD-SYMBOLS: <FS_GRID> TYPE REF TO CL_GUI_ALV_GRID.
```
#### <FS_TABLE> — field-symbol · L87-L87 {#decl-zfir0100t01-87--fs_table-}
```abap
FIELD-SYMBOLS:
<FS_TABLE> TYPE TABLE.
```
### `ZFIR0100TOP` (20건)
#### ZDTV3T_AP_EXT — tables · L5-L5 {#decl-zfir0100top-5-zdtv3t_ap_ext}
```abap
TABLES: ZDTV3T_AP_HEAD, ZDTV3T_AP_EXT, ZDTV3T_AP_EXT_D.
```
#### ZDTV3T_AP_EXT_D — tables · L5-L5 {#decl-zfir0100top-5-zdtv3t_ap_ext_d}
```abap
TABLES: ZDTV3T_AP_HEAD, ZDTV3T_AP_EXT, ZDTV3T_AP_EXT_D.
```
#### ZDTV3T_AP_HEAD — tables · L5-L5 {#decl-zfir0100top-5-zdtv3t_ap_head}
```abap
TABLES: ZDTV3T_AP_HEAD, ZDTV3T_AP_EXT, ZDTV3T_AP_EXT_D.
```
#### BKPF — tables · L6-L6 {#decl-zfir0100top-6-bkpf}
```abap
TABLES:
BKPF, LFA1.
```
#### LFA1 — tables · L6-L6 {#decl-zfir0100top-6-lfa1}
```abap
TABLES:
BKPF, LFA1.
```
#### ICON — type-pool · L8-L8 {#decl-zfir0100top-8-icon}
```abap
TYPE-POOLS: SLIS, ICON.
```
#### SLIS — type-pool · L8-L8 {#decl-zfir0100top-8-slis}
```abap
TYPE-POOLS: SLIS, ICON.
```
#### IT_ZDTV3T_AP_HEAD — data · L11-L18 {#decl-zfir0100top-11-it_zdtv3t_ap_head}
```abap
DATA: BEGIN OF IT_ZDTV3T_AP_HEAD OCCURS 0.
INCLUDE STRUCTURE ZDTV3T_AP_HEAD.
DATA: BELNR LIKE ZDTV3T_AP_EXT_D-BELNR.
DATA: ZGJAH LIKE ZDTV3T_AP_EXT_D-ZGJAH.
DATA: USE_DOC LIKE ZDTV3T_AP_EXT-USE_DOC.
DATA END OF IT_ZDTV3T_AP_HEAD.
```
#### GT_MAIN — data · L21-L31 {#decl-zfir0100top-21-gt_main}
```abap
DATA: BEGIN OF GT_MAIN OCCURS 0,
MARK LIKE ICON-STATUS,
ZICON(4).
INCLUDE STRUCTURE ZDTV3T_AP_HEAD.
DATA: BELNR LIKE BKPF-BELNR,
ZGJAH LIKE BKPF-GJAHR.
DATA: CELLTAB TYPE LVC_T_STYL,
SCOL TYPE LVC_T_SCOL,
END OF GT_MAIN.
```
#### GT_IMSI — data · L35-L35 {#decl-zfir0100top-35-gt_imsi}
```abap
DATA: GT_IMSI LIKE TABLE OF GT_MAIN WITH HEADER LINE.
```
#### P_ANSWER — data · L37-L37 {#decl-zfir0100top-37-p_answer}
```abap
DATA: P_ANSWER.
```
#### G_OK — data · L38-L38 {#decl-zfir0100top-38-g_ok}
```abap
DATA: G_OK.
```
#### G_LINE — data · L39-L39 {#decl-zfir0100top-39-g_line}
```abap
DATA: G_LINE.
```
#### TMP_MAIN — data · L41-L41 {#decl-zfir0100top-41-tmp_main}
```abap
DATA: TMP_MAIN LIKE TABLE OF GT_MAIN WITH HEADER LINE.
```
#### GT_TABLE — data · L43-L43 {#decl-zfir0100top-43-gt_table}
```abap
DATA: GT_TABLE LIKE TABLE OF GT_MAIN WITH HEADER LINE.
```
#### GT_ANY — data · L45-L45 {#decl-zfir0100top-45-gt_any}
```abap
DATA GT_ANY TYPE REF TO DATA.
```
#### I_TABNAM — data · L46-L46 {#decl-zfir0100top-46-i_tabnam}
```abap
DATA I_TABNAM TYPE TABNAME16.
```
#### S_BUDAT — ranges · L48-L48 {#decl-zfir0100top-48-s_budat}
```abap
RANGES: S_BUDAT FOR BKPF-BUDAT.
```
#### <FS_S> — field-symbol · L51-L51 {#decl-zfir0100top-51--fs_s-}
```abap
FIELD-SYMBOLS: <FS_S> TYPE ANY.
```
#### <FS_T> — field-symbol · L52-L52 {#decl-zfir0100top-52--fs_t-}
```abap
FIELD-SYMBOLS:
<FS_T> TYPE ANY TABLE.
```
### `ZFIR0100F01` (18건)
#### L_DOC1 — data · unit 로컬 · L96-L96 {#decl-zfir0100f01-96-l_doc1}
```abap
DATA: L_DOC1, L_DOC2.
```
#### L_DOC2 — data · unit 로컬 · L96-L96 {#decl-zfir0100f01-96-l_doc2}
```abap
DATA: L_DOC1, L_DOC2.
```
#### L_DEFAULTOPTION — data · unit 로컬 · L267-L267 {#decl-zfir0100f01-267-l_defaultoption}
```abap
DATA: L_DEFAULTOPTION, L_TEXTLINE1(70), L_TEXTLINE2(70).
```
#### L_TEXTLINE2 — data · unit 로컬 · L267-L267 {#decl-zfir0100f01-267-l_textline2}
```abap
DATA: L_DEFAULTOPTION, L_TEXTLINE1(70), L_TEXTLINE2(70).
```
#### L_TEXTLINE1 — data · unit 로컬 · L267-L267 {#decl-zfir0100f01-267-l_textline1}
```abap
DATA: L_DEFAULTOPTION, L_TEXTLINE1(70), L_TEXTLINE2(70).
```
#### LT_SCOL — data · unit 로컬 · L338-L338 {#decl-zfir0100f01-338-lt_scol}
```abap
DATA:
LT_SCOL TYPE LVC_T_SCOL.
```
#### LT_ROWS — data · unit 로컬 · L348-L348 {#decl-zfir0100f01-348-lt_rows}
```abap
DATA: LT_ROWS TYPE LVC_T_ROW. " ALV 제어: 테이블행
```
#### LS_ROWS — data · unit 로컬 · L349-L349 {#decl-zfir0100f01-349-ls_rows}
```abap
DATA:
LS_ROWS TYPE LVC_S_ROW.
```
#### LT_SCOL — data · unit 로컬 · L407-L407 {#decl-zfir0100f01-407-lt_scol}
```abap
DATA:
LT_SCOL TYPE LVC_T_SCOL.
```
#### L_USE_DOC — data · unit 로컬 · L414-L414 {#decl-zfir0100f01-414-l_use_doc}
```abap
DATA: L_USE_DOC.
```
#### LT_ROWS — data · unit 로컬 · L421-L421 {#decl-zfir0100f01-421-lt_rows}
```abap
DATA: LT_ROWS TYPE LVC_T_ROW. " ALV 제어: 테이블행
```
#### LS_ROWS — data · unit 로컬 · L422-L422 {#decl-zfir0100f01-422-ls_rows}
```abap
DATA:
LS_ROWS TYPE LVC_S_ROW.
```
#### LS_MAIN — data · unit 로컬 · L498-L498 {#decl-zfir0100f01-498-ls_main}
```abap
DATA: LS_MAIN LIKE GT_MAIN.
```
#### LT_CELLTAB — data · unit 로컬 · L499-L499 {#decl-zfir0100f01-499-lt_celltab}
```abap
DATA: LT_CELLTAB TYPE LVC_T_STYL.
```
#### LV_UCOMM — data · unit 로컬 · L500-L500 {#decl-zfir0100f01-500-lv_ucomm}
```abap
DATA: LV_UCOMM TYPE SY-UCOMM.
```
#### LV_TABIX — data · unit 로컬 · L503-L503 {#decl-zfir0100f01-503-lv_tabix}
```abap
DATA: LV_TABIX TYPE SY-TABIX.
```
#### LT_ROWS — data · unit 로컬 · L518-L518 {#decl-zfir0100f01-518-lt_rows}
```abap
DATA: LT_ROWS TYPE LVC_T_ROW. " ALV 제어: 테이블행
```
#### LS_ROWS — data · unit 로컬 · L519-L519 {#decl-zfir0100f01-519-ls_rows}
```abap
DATA:
LS_ROWS TYPE LVC_S_ROW.
```
### `ZFIR0100F02` (5건)
#### LS_CELLTAB — data · unit 로컬 · L92-L92 {#decl-zfir0100f02-92-ls_celltab}
```abap
DATA: LS_CELLTAB TYPE LVC_S_STYL.
```
#### LV_MODE — data · unit 로컬 · L93-L93 {#decl-zfir0100f02-93-lv_mode}
```abap
DATA:
LV_MODE TYPE RAW4.
```
#### LS_MOD_CELLS — data · unit 로컬 · L965-L965 {#decl-zfir0100f02-965-ls_mod_cells}
```abap
DATA: LS_MOD_CELLS TYPE LVC_S_MODI.
```
#### LV_LINE — data · unit 로컬 · L968-L968 {#decl-zfir0100f02-968-lv_line}
```abap
DATA: LV_LINE TYPE I.
```
#### <FS_FIELD> — field-symbol · unit 로컬 · L970-L970 {#decl-zfir0100f02-970--fs_field-}
```abap
FIELD-SYMBOLS: <FS_FIELD> TYPE ANY.
```
## Unit 목록 (컨테이너)
| unit | 유형 | 위치 | 조각 | 한 줄 요약 |
|---|---|---|---|---|
| INITIALIZATION | EVENT | ZFIR0100 L37-43 | 0 | INITIALIZATION 에서 SET_INIT 를 호출하는 이벤트 블록이다. |
| AT SELECTION-SCREEN | EVENT | ZFIR0100 L44-49 | 0 | 선택화면 이벤트에서 GET_VARIANT(빈 FORM)를 호출하는 이벤트 블록이다. |
| AT SELECTION-SCREEN ON VALUE-REQUEST | EVENT | ZFIR0100 L50-58 | 0 | 조회 연월 P_SPMON 의 F4 검색도움을 공용 풀 ZTR_POOL 의 GET_PERIOD_SPMON 으로 제공하는 이벤트 블록이다. |
| START-OF-SELECTION | EVENT | ZFIR0100 L59-69 | 0 | SET_DATA 로 전자세금계산서를 조회하고 MODIFY_PROCESS 로 그리드 데이터를 구성하는 메인 이벤트 블록이다. |
| END-OF-SELECTION | EVENT | ZFIR0100 L70-73 | 0 | 선택 종료 후 편집 ALV 화면 0100 을 호출하는 이벤트 블록이다. |
| LCL_EVENT_RECEIVER~HANDLE_DATA_CHANGED | METHOD | ZFIR0100C01 L64-66 | 0 | |
| LCL_EVENT_RECEIVER~HANDLE_ON_F4 | METHOD | ZFIR0100C01 L70-80 | 0 | |
| LCL_EVENT_RECEIVER~HANDLE_ON_TOOLBAR | METHOD | ZFIR0100C01 L84-88 | 0 | |
| LCL_EVENT_RECEIVER~HANDLE_USER_COMMAND | METHOD | ZFIR0100C01 L92-94 | 0 | |
| LCL_EVENT_RECEIVER~HANDLE_DOUBLE_CLICK | METHOD | ZFIR0100C01 L98-102 | 0 | |
| SET_INIT | FORM | ZFIR0100F01 L13-24 | 0 | 리포트 ID 와 초기 모드(DISP)를 설정하고 GET_INIT_VARIANT 로 기본 변형을 불러오는 초기화 FORM 이다. |
| SET_INIT_VARIANT | FORM | ZFIR0100F01 L35-44 | 0 | ALV 변형 구조 GS_VARIANT 에 리포트명·사용자·핸들 '0010' 을 설정하는 플러밍 FORM 이다. |
| GET_INIT_VARIANT | FORM | ZFIR0100F01 L55-74 | 1 | 변형 키를 초기화하고 REUSE_ALV_VARIANT_DEFAULT_GET 으로 사용자 기본 ALV 변형(Variant)을 조회하는 FORM 이다. |
| GET_VARIANT | FORM | ZFIR0100F01 L79-81 | 0 | 선언만 되어 있고 본문이 비어 있는 FORM 이다. |
| SET_DATA | FORM | ZFIR0100F01 L92-166 | 2 | 조회 월의 기간을 만든 뒤 전자세금계산서 헤더(ZDTV3T_AP_HEAD)·확장(ZDTV3T_AP_EXT)·상세(ZDTV3T_AP_EXT_D)를 조인해 전표처리 상태 조건으로 수신 내역을 IT_ZDTV3T_AP_HEAD 에 읽는 FORM 이다. |
| RUN_MSG_PROC | FORM | ZFIR0100F01 L176-183 | 0 | SAPGUI_PROGRESS_INDICATOR 로 처리 중 메시지를 표시하는 진행 표시 유틸 FORM 이다. |
| SET_POP_MESSAGE | FORM | ZFIR0100F01 L194-216 | 1 | POPUP_TO_CONFIRM 으로 예/아니오 확인 팝업을 띄워 사용자 응답(P_ANSWER)을 돌려주는 FORM 이다. |
| SET_LOCK | FORM | ZFIR0100F01 L226-228 | 0 | 잠금/해제 처리를 위한 자리만 있고 본문이 비어 있는 FORM 이다. |
| SELECT_PROCESS | FORM | ZFIR0100F01 L232-236 | 0 | 선언만 되어 있고 본문이 비어 있는 FORM 이다. |
| MODIFY_PROCESS | FORM | ZFIR0100F01 L240-261 | 1 | 조회된 IT_ZDTV3T_AP_HEAD 를 GT_MAIN 그리드 테이블로 옮기며 전표번호 유무에 따라 처리 상태 아이콘(ZICON)을 설정하는 FORM 이다. |
| POPUP_TO_CONFIRM | FORM | ZFIR0100F01 L265-296 | 1 | 저장/전표기표 명령에 맞는 문구로 POPUP_TO_CONFIRM_STEP 확인 팝업을 띄워 사용자 응답을 받는 FORM 이다. |
| TEXT_PROCESS | FORM | ZFIR0100F01 L300-307 | 0 | 거래처 텍스트 보정용으로 예정되었으나 주석 처리되어 본문이 비어 있는 FORM 이다. |
| DATE_PROCESS | FORM | ZFIR0100F01 L311-330 | 1 | 조회 연월(P_SPMON)로 월초~월말 날짜 범위 S_BUDAT 를 LAST_DAY_OF_MONTHS 로 구성하는 FORM 이다. |
| SET_POST | FORM | ZFIR0100F01 L335-397 | 2 | ALV 에서 선택된 미처리 전자세금계산서 행을 GT_TABLE 로 메모리에 EXPORT 한 뒤 전표 입력 화면 ZFIR0110_DOC 을 호출해 매입전표를 기표하는 FORM 이다. |
| SET_SAVE | FORM | ZFIR0100F01 L404-492 | 2 | ALV 에서 선택한 전자세금계산서 행의 전표번호를 수신 테이블에 저장하고 사용여부·상태 아이콘을 갱신한다. |
| CHANG_LINE | FORM | ZFIR0100F01 L496-573 | 2 | ALV 에서 선택된 행만 변경 가능하도록 전체 행의 CELLTAB 을 초기화한 뒤 선택 행에 전표번호(BELNR)·회계연도(ZGJAH) 셀만 편집 가능한 스타일을 적용하는 FORM 이다. |
| SET_ITAB_STYLE | FORM | ZFIR0100F02 L13-45 | 0 | GT_MAIN 전체 행을 돌며 SET_CELLTAB 으로 셀 편집 스타일(CELLTAB)을 만들어 각 행에 반영하는 ALV 셀 속성 설정 FORM 이다. |
| SET_LINE_ITAB_STYLE | FORM | ZFIR0100F02 L51-74 | 0 | 단일 행의 CELLTAB 스타일 설정을 위해 작업변수만 준비하고 실제 로직은 없는 미완성 FORM 이다. |
| SET_CELLTAB | FORM | ZFIR0100F02 L88-124 | 1 | 변경(CHAN) 모드에서 필드카탈로그 전 컬럼을 입력 불가로 두되 전표번호(BELNR)·회계연도(ZGJAH) 셀만 입력 가능하게 CELLTAB 스타일을 만드는 FORM 이다. |
| SET_CELLTAB_INSERT | FORM | ZFIR0100F02 L131-153 | 0 | 필드카탈로그의 모든 컬럼을 입력 불가(MC_STYLE_DISABLED) 스타일로 CELLTAB 에 넣어 해당 행의 셀 편집을 막는 ALV 셀 속성 FORM 이다. |
| SET_CONTAINER | FORM | ZFIR0100F02 L163-175 | 0 | 프레임·툴바제외·레이아웃·필드카탈로그·이벤트·ALV 표시 FORM 을 순서대로 호출해 화면 컨테이너를 구성하는 디스패치 FORM 이다. |
| SET_FRAME | FORM | ZFIR0100F02 L186-196 | 0 | 커스텀 컨테이너 CON_0100 과 ALV 그리드 객체(GO_GRID)를 생성하는 플러밍 FORM 이다. |
| SET_VARIANT | FORM | ZFIR0100F02 L206-215 | 0 | ALV 변형(Variant) 구조 GS_VARIANT 에 리포트명·사용자·핸들을 초기 설정하는 플러밍 FORM 이다. |
| SET_TOOLBAR_EXCLUDE | FORM | ZFIR0100F02 L226-389 | 0 | 편집 ALV 툴바에서 행 삽입·삭제·복사·붙여넣기·UNDO·REFRESH 버튼을 제외 목록(GT_EXCLUDE)에 넣는 ALV 설정 FORM 이다. |
| SET_LAYOUT | FORM | ZFIR0100F02 L399-416 | 0 | ALV 레이아웃(열너비 최적화, 선택모드, CELLTAB 스타일 필드, SCOL 색상 필드)을 설정하는 플러밍 FORM 이다. |
| SET_FIELDCATALOG | FORM | ZFIR0100F02 L426-439 | 0 | 화면번호에 따라 필드카탈로그 작업영역(GS_FCAT/GT_FCAT1)을 필드심볼에 할당하고 SET_FIELD01 을 호출하는 플러밍 FORM 이다. |
| SET_FIELD01 | FORM | ZFIR0100F02 L450-656 | 0 | 화면 0100 편집 그리드의 필드카탈로그(작성일자·사업장·공급가액·세액·공급자 정보·전표번호 등)를 SET_FIELD 로 정의하는 ALV 설정 FORM 이다. |
| SET_FIELD | FORM | ZFIR0100F02 L668-693 | 0 | 필드카탈로그 속성을 동적 ASSIGN 으로 채워 S/E 타입에 따라 초기화·APPEND 하는 필드카탈로그 빌더 유틸 FORM 이다. |
| RUN_DISPLAY_ALV | FORM | ZFIR0100F02 L703-725 | 1 | 화면 0100 용 그리드(GO_GRID)와 GT_MAIN 을 할당하고 이벤트 등록 후 SET_TABLE_FOR_FIRST_DISPLAY 로 편집 가능한 ALV 를 최초 표시한다. |
| SET_EVENT_UCOMM | FORM | ZFIR0100F02 L736-768 | 0 | 그리드를 초기 비편집 상태로 두고 MODIFIED/ENTER 편집 이벤트를 등록한 뒤 CHECK_CHANGED_DATA 와 포커스 설정을 하는 ALV 편집 이벤트 준비 FORM 이다. |
| SET_EVENT | FORM | ZFIR0100F02 L778-790 | 0 | ALV 그리드 이벤트 핸들러 객체(GO_EVENT)를 생성하고 F4·데이터변경·사용자명령·툴바·더블클릭 핸들러를 등록하는 플러밍 FORM 이다. |
| SET_REFRESH | FORM | ZFIR0100F02 L801-824 | 0 | 레이아웃을 재적용하고 REFRESH_TABLE_DISPLAY(행·열 안정)와 CL_GUI_CFW=>FLUSH 로 ALV 그리드를 새로고침하는 플러밍 FORM 이다. |
| TOOLBAR | FORM | ZFIR0100F02 L836-864 | 0 | ALV 툴바 버튼 추가용 핸들러이나 모든 내용이 주석 처리되어 실제 로직이 없는 FORM 이다. |
| USER_COMMAND | FORM | ZFIR0100F02 L874-901 | 1 | ALV 툴바 사용자 명령(REFRESH/SAVE/POST)을 받아 재조회·확인 후 저장·전표기표 FORM 으로 분기하는 디스패치 FORM 이다. |
| SET_CHANGE | FORM | ZFIR0100F02 L912-953 | 2 | 변경(CHAN) 명령 시 선택 행 상태에 따라 그리드 편집 가능 여부를 토글하고 잠금(SET_LOCK)을 설정하는 FORM 이다. |
| DATA_CHANGED | FORM | ZFIR0100F02 L962-1040 | 2 | 편집 ALV 의 DATA_CHANGED 이벤트에서 변경된 셀 값을 GT_MAIN 에 반영하고 변경 플래그를 세우며 오류 시 프로토콜에 기록한 뒤 그리드를 새로고침하는 FORM 이다. |
| CHK_DATS | FORM | ZFIR0100F02 L1046-1052 | 0 | 날짜 필드 검증용으로 선언만 되어 있고 본문이 비어 있는 FORM 이다. |
| ADD_PROTOCAL_ENTRY | FORM | ZFIR0100F02 L1064-1084 | 1 | 편집 ALV 의 셀 검증 오류를 CL_ALV_CHANGED_DATA_PROTOCOL->ADD_PROTOCOL_ENTRY 로 오류 로그(메시지 00/E)에 추가하는 FORM 이다. |
| HANDLE_DOUBLE_CLICK | FORM | ZFIR0100F02 L1096-1113 | 1 | ALV 전표번호(BELNR) 셀 더블클릭 시 회사코드·회계연도·전표번호를 파라미터로 세팅해 FB03 전표 조회 트랜잭션을 호출하는 FORM 이다. |
| CHK_DATA | FORM | ZFIR0100F02 L1124-1125 | 0 | 데이터 검증용으로 선언만 되어 있고 본문이 비어 있는 FORM 이다. |
| GET_COLOR | FORM | ZFIR0100F02 L1137-1152 | 0 | ALV 행의 DEVNUM 컬럼에 셀 색상(LVC_S_SCOL)을 지정하는 표시용 FORM 이다. |
| ON_F4 | FORM | ZFIR0100F02 L1157-1168 | 0 | ALV F4 이벤트 핸들러로 선언만 되어 있고 본문이 비어 있는 FORM 이다. |
| F4_FIELD_ENTRY_PART | FORM | ZFIR0100F02 L1177-1188 | 0 | ALV 그리드 필드에 F4 검색도움을 등록하는(REGISTER_F4_FOR_FIELDS) 플러밍 FORM 이다. |
| USER_COMMAND_0100_EXIT INPUT | MODULE | ZFIR0100I01 L7-37 | 2 | 화면 0100 종료 명령 처리 시 미저장 변경분 확인 팝업을 띄우고 잠금을 해제한 뒤 화면을 빠져나가는 EXIT 모듈이다. |
| USER_COMMAND_0100 INPUT | MODULE | ZFIR0100I01 L45-89 | 1 | 화면 0100 의 사용자 명령(변경·재조회·저장·전기)을 받아 해당 처리 FORM 으로 분기하는 PAI 모듈이다. |
| STATUS_0100 OUTPUT | MODULE | ZFIR0100O01 L10-29 | 0 | |
| SET_SCREEN_0100 OUTPUT | MODULE | ZFIR0100O01 L37-41 | 0 | |
| SET_GRID_0100 OUTPUT | MODULE | ZFIR0100O01 L49-69 | 0 | |