Initial commit: ABAP indexing pipeline (ingest, parser, summarize, index, query, wiki)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,271 @@
|
||||
---
|
||||
type: abap-program
|
||||
title: "ZFIRCLV0010"
|
||||
description: "SM34 뷰 클러스터 ZFIV0070 의 저장 전 처리를 담당하는 Exit 프로그램이다. 뷰 클러스터 유지보수(테이블 설정값 관리) 화면에서 저장 시점에 호출되어 권한을 확인하고 클러스터 데이터를 저장한다. 업무 로직이 아니라 SAP 뷰 유지보수 프레임워크의 확장 지점이다."
|
||||
resource: "abap://ZFIRCLV0010"
|
||||
tags: ["설정", "권한관리", "마스터관리", "FI", "뷰클러스터", "변경이력", "생성자", "변경자", "감사필드", "뷰유지보수", "필드심볼", "뷰저장", "기능제외", "저장위임", "조회모드", "변경모드", "회사코드 권한체크", "뷰 클러스터 저장 검증", "저장 취소", "권한 오류"]
|
||||
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: []
|
||||
x-tables-write: []
|
||||
x-calls: ["VIEW_MAINTENANCE_LOW_LEVEL"]
|
||||
x-code-hash: "ece135d2e0a134034e8d09d78ea4e7840a150c7109b4af653cf92c54aa7c7383"
|
||||
x-unit-count: 4
|
||||
x-chunk-count: 3
|
||||
x-declaration-count: 0
|
||||
---
|
||||
|
||||
## 업무 목적
|
||||
|
||||
SM34 뷰 클러스터 ZFIV0070 의 저장 전 처리를 담당하는 Exit 프로그램이다. 뷰 클러스터 유지보수(테이블 설정값 관리) 화면에서 저장 시점에 호출되어 권한을 확인하고 클러스터 데이터를 저장한다. 업무 로직이 아니라 SAP 뷰 유지보수 프레임워크의 확장 지점이다.
|
||||
|
||||
## 주 흐름
|
||||
|
||||
1. 뷰 클러스터 저장 직전에 호출된다 (REASSIGN_CLUSTER_SAVE / BEFORE_VIEW_SAVE_DATA)
|
||||
2. 저장 권한을 확인한다 (CHECK_AUTH)
|
||||
3. 클러스터 데이터를 저장한다 (SAVE_CLUSTER_ZFIV0070)
|
||||
|
||||
## 테이블 / 외부 호출
|
||||
|
||||
- read: -
|
||||
- write: -
|
||||
- 외부 호출: VIEW_MAINTENANCE_LOW_LEVEL
|
||||
|
||||
## 로직 조각 (3건 / unit 2개)
|
||||
|
||||
LLM 이 코드에서 골라낸 업무 로직 단위다. **조각마다 소스 원문과 자연어 설명을 함께 싣는다** — 설명이 코드와 맞는지 바로 대조할 수 있어야 하기 때문이다.
|
||||
테이블·호출은 LLM 이 쓴 값이 아니라 파서가 조각 범위에서 다시 뽑은 사실이다. 순서는 실행 순서다.
|
||||
|
||||
### FORM SAVE_CLUSTER_ZFIV0070 — `ZFIRCLV0010` L28-L152 (125줄)
|
||||
|
||||
*뷰 클러스터 ZFIV0070 저장 직전에 생성/변경 이력 필드를 채우고 저장 함수를 호출한다.*
|
||||
|
||||
> 이 unit 의 조각 2개가 68/125줄(54%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [aggregation] 뷰 유지보수 화면에서 변경된 행(ACTION 이 N 신규 또는 U 변경)만 골라, 신규 행에는 생성일시·생성자를, 모든 변경 행에는 변경일시·변경자를 채워 뷰 클러스터의 TOTAL·EXTRACT 버퍼에 되돌려 넣는다. 필드심볼 캐스팅으로 뷰 구조에 동적으로 접근한다.
|
||||
|
||||
```abap
|
||||
78| LOOP AT <VCL_TOTAL> INTO LS_TOTAL.
|
||||
79| LV_INDEX = SY-TABIX.
|
||||
80| CHECK LS_TOTAL-ACTION IS NOT INITIAL. " U, N 등의 데이터만.
|
||||
81|
|
||||
82| MOVE LS_TOTAL TO LV_TOTAL. " View 구조만 복사 " VIEWKEY 접근용
|
||||
83| READ TABLE <VCL_EXTRACT> INTO LV_EXTRACT
|
||||
84| WITH KEY <VIEWKEY> BINARY SEARCH.
|
||||
85|
|
||||
86| IF SY-SUBRC = 0.
|
||||
87|
|
||||
88| ASSIGN : LV_EXTRACT TO <FS_RECORD> CASTING.
|
||||
89|
|
||||
90| " 신규 입력
|
||||
91| IF LS_TOTAL-ACTION EQ 'N'.
|
||||
92| <FS_RECORD>-CDATE = SY-DATUM.
|
||||
93| <FS_RECORD>-CTIME = SY-UZEIT.
|
||||
94| <FS_RECORD>-CNAME = SY-UNAME.
|
||||
95| ENDIF.
|
||||
96|
|
||||
97| <FS_RECORD>-UDATE = SY-DATUM.
|
||||
98| <FS_RECORD>-UTIME = SY-UZEIT.
|
||||
99| <FS_RECORD>-UNAME = SY-UNAME.
|
||||
100|
|
||||
101| MODIFY <VCL_TOTAL> FROM <FS_RECORD> INDEX LV_INDEX.
|
||||
102| MODIFY <VCL_EXTRACT> FROM <FS_RECORD> INDEX LV_INDEX.
|
||||
103| CLEAR : LV_EXTRACT.
|
||||
104| ENDIF.
|
||||
105| ENDLOOP.
|
||||
```
|
||||
|
||||
- **EN**: Stamps created-by/changed-by audit fields onto rows flagged as new or updated in the view-cluster buffers, using field-symbol casting for dynamic view access.
|
||||
- SAP 객체: ZFIV0070, VIMFLAGTAB, VCL_STRUC_TAB, VIMDESC
|
||||
- 업무 키워드: 뷰클러스터, 변경이력, 생성자, 변경자, 감사필드, 뷰유지보수, 필드심볼
|
||||
- English: view cluster, audit fields, created by, changed by, view maintenance, field symbol
|
||||
- 정의부(복사 시 함께 필요): [`T_RECORD`](#decl-zfirclv0010-30-t_record), [`LS_TOTAL`](#decl-zfirclv0010-43-ls_total), [`LV_INDEX`](#decl-zfirclv0010-36-lv_index), [`LV_TOTAL`](#decl-zfirclv0010-40-lv_total), [`LV_EXTRACT`](#decl-zfirclv0010-41-lv_extract), [`<VIEWKEY>`](#decl-zfirclv0010-48--viewkey-), [`<FS_RECORD>`](#decl-zfirclv0010-50--fs_record-)
|
||||
- 선언을 못 찾은 이름: <VCL_TOTAL>, <VCL_EXTRACT> (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZFIRCLV0010/ZFIRCLV0010#L78-L105` · confidence 0.82 · `ZFIRCLV0010#ZFIRCLV0010#FORM#SAVE_CLUSTER_ZFIV0070#C1`
|
||||
|
||||
#### [fm_call] 뷰 동작(S 조회 / U 변경)에 따라 화면에서 제외할 기능코드(조회·변경·신규·저장·종료)를 정하고, 표준 FM VIEW_MAINTENANCE_LOW_LEVEL 에 SAVE 를 지시해 실제 저장을 맡긴다.
|
||||
|
||||
```abap
|
||||
107| IF VCL_ACTION = 'S'.
|
||||
108| FU_TO_EXCL-FUNCTION = 'ANZG'.
|
||||
109| APPEND FU_TO_EXCL.
|
||||
110| FU_TO_EXCL-FUNCTION = 'AEND'.
|
||||
111| APPEND FU_TO_EXCL.
|
||||
112| FU_TO_EXCL-FUNCTION = 'NEWL'.
|
||||
113| APPEND FU_TO_EXCL.
|
||||
114| FU_TO_EXCL-FUNCTION = 'SAVE'.
|
||||
115| APPEND FU_TO_EXCL.
|
||||
116| FU_TO_EXCL-FUNCTION = 'ENDE'.
|
||||
117| APPEND FU_TO_EXCL.
|
||||
118| ELSEIF VCL_ACTION = 'U'.
|
||||
119| FU_TO_EXCL-FUNCTION = 'SAVE'.
|
||||
120| APPEND FU_TO_EXCL.
|
||||
121| FU_TO_EXCL-FUNCTION = 'ENDE'.
|
||||
122| APPEND FU_TO_EXCL.
|
||||
123| ELSE.
|
||||
124| EXIT.
|
||||
125| ENDIF.
|
||||
126|
|
||||
127| CALL FUNCTION 'VIEW_MAINTENANCE_LOW_LEVEL'
|
||||
128| EXPORTING
|
||||
129| FCODE = 'SAVE'
|
||||
130| VIEW_ACTION = VCL_ACTION
|
||||
131| VIEW_NAME = LV_VIEWNAME
|
||||
132| TABLES
|
||||
133| CORR_KEYTAB = L_T_E071K
|
||||
134| DBA_SELLIST = <VCL_DBA_SELLIST>
|
||||
135| DPL_SELLIST = <VCL_DPL_SELLIST>
|
||||
136| EXCL_CUA_FUNCT = FU_TO_EXCL
|
||||
137| EXTRACT = <VCL_EXTRACT>
|
||||
138| TOTAL = <VCL_TOTAL>
|
||||
139| X_HEADER = <VCL_HEADER>
|
||||
140| X_NAMTAB = <VCL_NAMTAB>
|
||||
141| EXCEPTIONS
|
||||
142| FUNCTION_NOT_FOUND = 1
|
||||
143| MISSING_CORR_NUMBER = 2
|
||||
144| NO_VALUE_FOR_SUBSET_IDENT = 3
|
||||
145| SAVING_CORRECTION_FAILED = 4
|
||||
146| OTHERS = 5.
|
||||
```
|
||||
|
||||
- **EN**: Builds the excluded-function list per view action and delegates the actual save to the standard FM VIEW_MAINTENANCE_LOW_LEVEL.
|
||||
- 호출(파서): VIEW_MAINTENANCE_LOW_LEVEL
|
||||
- SAP 객체: VIEW_MAINTENANCE_LOW_LEVEL, ZFIV0070, VIMEXCLFUN, E071K
|
||||
- 업무 키워드: 뷰저장, 기능제외, 뷰유지보수, 저장위임, 조회모드, 변경모드
|
||||
- English: view save, excluded functions, view maintenance, SAVE fcode, display mode, change mode
|
||||
- 정의부(복사 시 함께 필요): [`FU_TO_EXCL`](#decl-zfirclv0010-53-fu_to_excl), [`LV_VIEWNAME`](#decl-zfirclv0010-37-lv_viewname), [`L_T_E071K`](#decl-zfirclv0010-52-l_t_e071k)
|
||||
- 선언을 못 찾은 이름: <VCL_DBA_SELLIST>, <VCL_DPL_SELLIST>, <VCL_EXTRACT>, <VCL_TOTAL>, <VCL_HEADER>, <VCL_NAMTAB> (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZFIRCLV0010/ZFIRCLV0010#L107-L146` · confidence 0.84 · `ZFIRCLV0010#ZFIRCLV0010#FORM#SAVE_CLUSTER_ZFIV0070#C2`
|
||||
|
||||
### FORM CHECK_AUTH — `ZFIRCLV0010` L159-L185 (27줄)
|
||||
|
||||
*뷰 클러스터 ZFIV0070/ZFIV0080 저장 시 편집 중인 각 행의 회사코드에 대해 F_BKPF_BUK 권한을 검사하고 권한이 없으면 저장 기능을 취소하고 현재 뷰에 머무르게 하는 FORM이다.*
|
||||
|
||||
> 이 unit 의 조각 1개가 19/27줄(70%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [validation] 대상 뷰 클러스터가 ZFIV0070/ZFIV0080이면 VCL_SET_TABLE_ACCESS_FOR_OBJ로 상위 객체 테이블 접근을 설정한 뒤 <VCL_TOTAL>의 각 행(ZFIT0081 구조)의 회사코드에 AUTHORITY-CHECK F_BKPF_BUK를 수행하고, 실패 시 FZ 240 메시지를 내고 VCL_NEXT_VIEW/VCL_AKT_VIEW를 이전 뷰로 되돌리며 VCL_FUNCTION을 지워 저장을 막는다.
|
||||
|
||||
```abap
|
||||
165| IF VCL_STRUC_TAB-OBJECT EQ 'ZFIV0070' OR
|
||||
166| VCL_STRUC_TAB-OBJECT EQ 'ZFIV0080'.
|
||||
167|
|
||||
168| PERFORM VCL_SET_TABLE_ACCESS_FOR_OBJ USING VCL_STRUC_TAB-PREDOBJECT
|
||||
169| CHANGING LV_ERROR_FLAG.
|
||||
170|
|
||||
171| CHECK LV_ERROR_FLAG EQ SPACE.
|
||||
172| LOOP AT <VCL_TOTAL> INTO LS_ZFIV0081.
|
||||
173| * 회사코드 권한체크
|
||||
174| AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
|
||||
175| ID 'BUKRS' FIELD LS_ZFIV0081-BUKRS.
|
||||
176| IF SY-SUBRC NE 0.
|
||||
177| MESSAGE S240(FZ) WITH LS_ZFIV0081-BUKRS.
|
||||
178| VCL_NEXT_VIEW = VCL_LAST_VIEW.
|
||||
179| VCL_AKT_VIEW = VCL_LAST_VIEW.
|
||||
180| CLEAR VCL_FUNCTION.
|
||||
181| ENDIF.
|
||||
182| ENDLOOP.
|
||||
183| ENDIF.
|
||||
```
|
||||
|
||||
- **EN**: For view clusters ZFIV0070/ZFIV0080, checks authorization object F_BKPF_BUK for the company code of every edited row in the view-cluster total table and cancels the save (resets current view and clears VCL_FUNCTION) when the check fails.
|
||||
- 호출(파서): VCL_SET_TABLE_ACCESS_FOR_OBJ
|
||||
- SAP 객체: F_BKPF_BUK, ZFIV0070, ZFIV0080, ZFIT0081, VCL_SET_TABLE_ACCESS_FOR_OBJ
|
||||
- 업무 키워드: 회사코드 권한체크, 뷰 클러스터 저장 검증, 저장 취소, 권한 오류
|
||||
- English: Authorization Check, F_BKPF_BUK, View Cluster, SM34, Company Code
|
||||
- 정의부(복사 시 함께 필요): [`LV_ERROR_FLAG`](#decl-zfirclv0010-163-lv_error_flag), [`LS_ZFIV0081`](#decl-zfirclv0010-161-ls_zfiv0081)
|
||||
- 선언을 못 찾은 이름: <VCL_TOTAL> (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZFIRCLV0010/ZFIRCLV0010#L165-L183` · confidence 0.9 · `ZFIRCLV0010#ZFIRCLV0010#FORM#CHECK_AUTH#C1`
|
||||
|
||||
## 정의부 (12건)
|
||||
|
||||
로직 조각을 다른 프로그램으로 옮겨 붙일 때 **함께 가야 하는 선언**이다. 조각별로 무엇이 필요한지는 위 조각 항목의 `정의부` 줄에 있고(이름을 누르면 여기로 온다), 붙여넣기용으로 의존까지 묶은 코드는 `GET /chunks/<chunk_id>` 의 `declaration_code` 로 받는다.
|
||||
|
||||
### `ZFIRCLV0010` (12건)
|
||||
|
||||
#### T_RECORD — types · unit 로컬 · L30-L34 {#decl-zfirclv0010-30-t_record}
|
||||
|
||||
```abap
|
||||
TYPES : BEGIN OF T_RECORD.
|
||||
INCLUDE STRUCTURE ZFIV0070.
|
||||
TYPES : ACTION LIKE VIMFLAGTAB-ACTION.
|
||||
TYPES : MARK LIKE VIMFLAGTAB-ACTION,
|
||||
END OF T_RECORD.
|
||||
```
|
||||
|
||||
#### LV_INDEX — data · unit 로컬 · L36-L36 {#decl-zfirclv0010-36-lv_index}
|
||||
|
||||
```abap
|
||||
DATA : LV_INDEX LIKE SY-TABIX.
|
||||
```
|
||||
|
||||
#### LV_VIEWNAME — data · unit 로컬 · L37-L37 {#decl-zfirclv0010-37-lv_viewname}
|
||||
|
||||
```abap
|
||||
DATA: LV_VIEWNAME TYPE VCLSTRUC-OBJECT.
|
||||
```
|
||||
|
||||
#### LV_TOTAL — data · unit 로컬 · L40-L40 {#decl-zfirclv0010-40-lv_total}
|
||||
|
||||
```abap
|
||||
DATA : LV_TOTAL(1000) TYPE C.
|
||||
```
|
||||
|
||||
#### LV_EXTRACT — data · unit 로컬 · L41-L41 {#decl-zfirclv0010-41-lv_extract}
|
||||
|
||||
```abap
|
||||
DATA : LV_EXTRACT(1000) TYPE C.
|
||||
```
|
||||
|
||||
#### LS_TOTAL — data · unit 로컬 · L43-L43 {#decl-zfirclv0010-43-ls_total}
|
||||
|
||||
```abap
|
||||
DATA : LS_TOTAL TYPE T_RECORD.
|
||||
```
|
||||
|
||||
#### <VIEWKEY> — field-symbol · unit 로컬 · L48-L48 {#decl-zfirclv0010-48--viewkey-}
|
||||
|
||||
```abap
|
||||
FIELD-SYMBOLS : <VIEWKEY> TYPE X.
|
||||
```
|
||||
|
||||
#### <FS_RECORD> — field-symbol · unit 로컬 · L50-L50 {#decl-zfirclv0010-50--fs_record-}
|
||||
|
||||
```abap
|
||||
FIELD-SYMBOLS : <FS_RECORD> TYPE T_RECORD.
|
||||
```
|
||||
|
||||
#### L_T_E071K — data · unit 로컬 · L52-L52 {#decl-zfirclv0010-52-l_t_e071k}
|
||||
|
||||
```abap
|
||||
DATA: L_T_E071K LIKE E071K OCCURS 0.
|
||||
```
|
||||
|
||||
#### FU_TO_EXCL — data · unit 로컬 · L53-L55 {#decl-zfirclv0010-53-fu_to_excl}
|
||||
|
||||
```abap
|
||||
DATA: BEGIN OF FU_TO_EXCL OCCURS 10.
|
||||
INCLUDE STRUCTURE VIMEXCLFUN.
|
||||
DATA: END OF FU_TO_EXCL.
|
||||
```
|
||||
|
||||
#### LS_ZFIV0081 — data · unit 로컬 · L161-L161 {#decl-zfirclv0010-161-ls_zfiv0081}
|
||||
|
||||
```abap
|
||||
DATA: LS_ZFIV0081 LIKE ZFIT0081.
|
||||
```
|
||||
|
||||
#### LV_ERROR_FLAG — data · unit 로컬 · L163-L163 {#decl-zfirclv0010-163-lv_error_flag}
|
||||
|
||||
```abap
|
||||
DATA: LV_ERROR_FLAG TYPE VCL_FLAG_TYPE.
|
||||
```
|
||||
|
||||
## Unit 목록 (컨테이너)
|
||||
|
||||
| unit | 유형 | 위치 | 조각 | 한 줄 요약 |
|
||||
|---|---|---|---|---|
|
||||
| REASSIGN_CLUSTER_SAVE | FORM | ZFIRCLV0010 L18-20 | 0 | 뷰 클러스터 저장 직전(BEFORE_VIEW_SAVE_DATA) 이벤트에서 SAVE_CLUSTER_ZFIV0070을 호출해 클러스터 데이터를 저장하는 위임 FORM이다. |
|
||||
| SAVE_CLUSTER_ZFIV0070 | FORM | ZFIRCLV0010 L28-152 | 2 | 뷰 클러스터 ZFIV0070 저장 직전에 생성/변경 이력 필드를 채우고 저장 함수를 호출한다. |
|
||||
| CHECK_AUTH | FORM | ZFIRCLV0010 L159-185 | 1 | 뷰 클러스터 ZFIV0070/ZFIV0080 저장 시 편집 중인 각 행의 회사코드에 대해 F_BKPF_BUK 권한을 검사하고 권한이 없으면 저장 기능을 취소하고 현재 뷰에 머무르게 하는 FORM이다. |
|
||||
@@ -0,0 +1,284 @@
|
||||
---
|
||||
type: abap-program
|
||||
title: "ZRGGBR000"
|
||||
description: "SAP 표준 검증 Exit 폼풀 RGGBR000 을 회사용으로 복사한 프로그램이다. GGB0(검증) 에서 정의한 검증 규칙이 호출하는 사용자 Exit(U100, US001, UM001, U200)을 담으며, 전표 전기 시 예산 체크(Z_CO_CHECK_BUDGET) 같은 회사 고유 검증 로직을 수행한다. GET_EXIT_TITLES 에 Exit 목록을 등록해야 GGB0 에서 선택할 수 있다."
|
||||
resource: "abap://ZRGGBR000"
|
||||
tags: ["검증", "예산관리", "전표", "설정", "FI", "예산통제", "코스트센터", "원가요소", "오더", "금액합산", "차대구분", "순증감", "전표아이템", "예산체크", "예산초과", "전기차단", "검증실패", "오류메시지", "검증 Exit 등록", "예산 통제"]
|
||||
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: ["T001"]
|
||||
x-tables-write: []
|
||||
x-calls: ["Z_CO_CHECK_BUDGET"]
|
||||
x-code-hash: "4e5035dfc2db296a35ee8167070a42538171448b19d9660acc745b40eb5bdd3d"
|
||||
x-unit-count: 7
|
||||
x-chunk-count: 4
|
||||
x-declaration-count: 0
|
||||
---
|
||||
|
||||
## 업무 목적
|
||||
|
||||
SAP 표준 검증 Exit 폼풀 RGGBR000 을 회사용으로 복사한 프로그램이다. GGB0(검증) 에서 정의한 검증 규칙이 호출하는 사용자 Exit(U100, US001, UM001, U200)을 담으며, 전표 전기 시 예산 체크(Z_CO_CHECK_BUDGET) 같은 회사 고유 검증 로직을 수행한다. GET_EXIT_TITLES 에 Exit 목록을 등록해야 GGB0 에서 선택할 수 있다.
|
||||
|
||||
## 주 흐름
|
||||
|
||||
1. GGB0 에서 검증 규칙이 Exit 를 선택할 수 있도록 Exit 목록을 등록한다 (GET_EXIT_TITLES)
|
||||
2. 전표 전기 시 해당 검증 규칙이 등록된 Exit 를 호출한다
|
||||
3. U200 에서 예산 체크 등 회사 고유 검증을 수행한다 (Z_CO_CHECK_BUDGET)
|
||||
|
||||
## 테이블 / 외부 호출
|
||||
|
||||
- read: T001
|
||||
- write: -
|
||||
- 외부 호출: Z_CO_CHECK_BUDGET
|
||||
|
||||
## 로직 조각 (4건 / unit 2개)
|
||||
|
||||
LLM 이 코드에서 골라낸 업무 로직 단위다. **조각마다 소스 원문과 자연어 설명을 함께 싣는다** — 설명이 코드와 맞는지 바로 대조할 수 있어야 하기 때문이다.
|
||||
테이블·호출은 LLM 이 쓴 값이 아니라 파서가 조각 범위에서 다시 뽑은 사실이다. 순서는 실행 순서다.
|
||||
|
||||
### FORM GET_EXIT_TITLES — `ZRGGBR000` L47-L103 (57줄)
|
||||
|
||||
*GGB0 검증 규칙에서 선택할 수 있는 사용자 Exit 목록(U100, US001, UM001, U200 예산통제)을 ETAB 에 등록하는 FORM 이다.*
|
||||
|
||||
> 이 unit 의 조각 2개가 26/57줄(46%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [other] 검증 Exit U100(전기일자 체크), US001·UM001(EIS 예제), U200(코스트센터/오더 예산 통제 유효성 체크)을 이름·파라미터 유형·제목과 함께 EXITS 목록에 등록해 GGB0 검증 규칙에서 선택 가능하게 한다.
|
||||
|
||||
```abap
|
||||
62| EXITS-NAME = 'U100'.
|
||||
63| EXITS-PARAM = C_EXIT_PARAM_NONE. "Complete data used in exit.
|
||||
64| EXITS-TITLE = TEXT-101. "Posting date check
|
||||
65| APPEND EXITS.
|
||||
66|
|
||||
67| * forms for SAP_EIS
|
||||
68| EXITS-NAME = 'US001'. "single validation: only one
|
||||
69| EXITS-PARAM = C_EXIT_PARAM_NONE. "data record used
|
||||
70| EXITS-TITLE = TEXT-102. "Example EIS
|
||||
71| APPEND EXITS.
|
||||
72|
|
||||
73| EXITS-NAME = 'UM001'. "matrix validation:
|
||||
74| EXITS-PARAM = C_EXIT_PARAM_CLASS. "complete data used in exit.
|
||||
75| EXITS-TITLE = TEXT-103. "Example EIS
|
||||
76| APPEND EXITS.
|
||||
77|
|
||||
78| " 예산 통제(코스트센터 / 오더 )
|
||||
79| EXITS-NAME = 'U200'. "유효성 체크
|
||||
80| EXITS-PARAM = C_EXIT_PARAM_CLASS.
|
||||
81| EXITS-TITLE = TEXT-200.
|
||||
82| APPEND EXITS.
|
||||
```
|
||||
|
||||
- **EN**: Registers the validation user exits U100, US001, UM001 and U200 (budget control for cost center/order) with their parameter type and title so they can be chosen in GGB0 validation rules.
|
||||
- SAP 객체: GGB0, RGGBR000, U200
|
||||
- 업무 키워드: 검증 Exit 등록, 예산 통제, GGB0 검증, 유효성 체크
|
||||
- English: Validation Exit, Budget Check, GGB0
|
||||
- 정의부(복사 시 함께 필요): [`EXITS`](#decl-zrggbr000-49-exits)
|
||||
- 선언을 못 찾은 이름: C_EXIT_PARAM_NONE, C_EXIT_PARAM_CLASS (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZRGGBR000/ZRGGBR000#L62-L82` · confidence 0.9 · `ZRGGBR000#ZRGGBR000#FORM#GET_EXIT_TITLES#C1`
|
||||
|
||||
#### [other] 등록한 EXITS 목록을 출력 파라미터 ETAB 로 복사해 검증 프레임워크에 돌려준다.
|
||||
|
||||
```abap
|
||||
97| REFRESH ETAB.
|
||||
98| LOOP AT EXITS.
|
||||
99| ETAB = EXITS.
|
||||
100| APPEND ETAB.
|
||||
101| ENDLOOP.
|
||||
```
|
||||
|
||||
- **EN**: Copies the registered exit list into the ETAB table parameter returned to the validation framework.
|
||||
- SAP 객체: RGGBR000
|
||||
- 업무 키워드: Exit 목록 반환
|
||||
- English: Exit Titles
|
||||
- 정의부(복사 시 함께 필요): [`EXITS`](#decl-zrggbr000-49-exits)
|
||||
- 위치: `abap://ZRGGBR000/ZRGGBR000#L97-L101` · confidence 0.85 · `ZRGGBR000#ZRGGBR000#FORM#GET_EXIT_TITLES#C2`
|
||||
|
||||
### FORM U200 — `ZRGGBR000` L256-L358 (103줄)
|
||||
|
||||
*전표 전기 시 코스트센터·오더별 예산을 초과하는지 검증해 초과하면 전기를 막는다 (GGB0 검증 Exit).*
|
||||
|
||||
> 이 unit 의 조각 2개가 74/103줄(72%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [aggregation] 전표 헤더에서 회사코드·전기일을 꺼내고 회사코드 통화를 조회한 뒤, 전표 아이템을 두 번 돌며 코스트센터-원가요소별과 오더별로 금액을 COLLECT 로 합산한다. 대변(SHKZG='H') 금액은 부호를 반전해 순증감으로 만든다.
|
||||
|
||||
```abap
|
||||
284| LV_BUKRS = BOOL_DATA-BKPF-BUKRS.
|
||||
285| LV_BUDAT = BOOL_DATA-BKPF-BUDAT.
|
||||
286| SELECT SINGLE WAERS " 회사코드 통화 조회
|
||||
287| INTO LV_WAERS
|
||||
288| FROM T001
|
||||
289| WHERE BUKRS = LV_BUKRS.
|
||||
290|
|
||||
291| " 코스트센터-원가요소별 기표 내역 Collect.
|
||||
292| LOOP AT BOOL_DATA-BSEG INTO LS_BSEG
|
||||
293| WHERE KOSTL IS NOT INITIAL.
|
||||
294| LT_KOSTL_CHECK-KOSTL = LS_BSEG-KOSTL.
|
||||
295| LT_KOSTL_CHECK-KSTAR = LS_BSEG-HKONT.
|
||||
296| IF LS_BSEG-SHKZG = 'H'.
|
||||
297| LT_KOSTL_CHECK-DMBTR = LS_BSEG-DMBTR * -1.
|
||||
298| ELSE.
|
||||
299| LT_KOSTL_CHECK-DMBTR = LS_BSEG-DMBTR.
|
||||
300| ENDIF.
|
||||
301| COLLECT LT_KOSTL_CHECK.
|
||||
302| CLEAR : LS_BSEG, LT_KOSTL_CHECK.
|
||||
303| ENDLOOP.
|
||||
304|
|
||||
305| " 오더별 기표 내역 Collect
|
||||
306| LOOP AT BOOL_DATA-BSEG INTO LS_BSEG
|
||||
307| WHERE AUFNR IS NOT INITIAL.
|
||||
308| LT_AUNFR_CHECK-AUFNR = LS_BSEG-AUFNR.
|
||||
309| IF LS_BSEG-SHKZG = 'H'.
|
||||
310| LT_AUNFR_CHECK-DMBTR = LS_BSEG-DMBTR * -1.
|
||||
311| ELSE.
|
||||
312| LT_AUNFR_CHECK-DMBTR = LS_BSEG-DMBTR.
|
||||
313| ENDIF.
|
||||
314| COLLECT LT_AUNFR_CHECK.
|
||||
315| CLEAR : LS_BSEG, LT_AUNFR_CHECK.
|
||||
316| ENDLOOP.
|
||||
317|
|
||||
```
|
||||
|
||||
- **EN**: Extracts header company code/posting date and currency, then aggregates posted amounts per cost center + cost element and per order, negating credit lines to get net movement.
|
||||
- 테이블(파서): read [T001](/tables/T001.md) / write -
|
||||
- SAP 객체: BKPF, BSEG, T001, CSKS, CSKA, AUFK, KOSTL, KSTAR, AUFNR, SHKZG
|
||||
- 업무 키워드: 예산통제, 코스트센터, 원가요소, 오더, 금액합산, 차대구분, 순증감, 전표아이템
|
||||
- English: budget control, cost center, cost element, internal order, amount aggregation, debit credit, net amount
|
||||
- 정의부(복사 시 함께 필요): [`LV_BUKRS`](#decl-zrggbr000-259-lv_bukrs), [`LV_BUDAT`](#decl-zrggbr000-260-lv_budat), [`LV_WAERS`](#decl-zrggbr000-261-lv_waers), [`LS_BSEG`](#decl-zrggbr000-262-ls_bseg), [`LT_KOSTL_CHECK`](#decl-zrggbr000-266-lt_kostl_check), [`LT_AUNFR_CHECK`](#decl-zrggbr000-272-lt_aunfr_check)
|
||||
- 위치: `abap://ZRGGBR000/ZRGGBR000#L284-L317` · confidence 0.88 · `ZRGGBR000#ZRGGBR000#FORM#U200#C1`
|
||||
|
||||
#### [validation] 합산한 코스트센터-원가요소 건과 오더 건마다 커스텀 FM Z_CO_CHECK_BUDGET 으로 예산 잔액을 확인하고, 결과코드가 E(초과)면 검증 결과를 거짓으로 돌려 오류 메시지를 띄우고 전표 전기를 차단한다.
|
||||
|
||||
```abap
|
||||
319| LOOP AT LT_KOSTL_CHECK.
|
||||
320| CALL FUNCTION 'Z_CO_CHECK_BUDGET'
|
||||
321| EXPORTING
|
||||
322| I_BUKRS = LV_BUKRS
|
||||
323| I_BUDAT = LV_BUDAT
|
||||
324| I_KSTAR = LT_KOSTL_CHECK-KSTAR
|
||||
325| I_KOSTL = LT_KOSTL_CHECK-KOSTL
|
||||
326| I_DMBTR = LT_KOSTL_CHECK-DMBTR
|
||||
327| I_WAERS = LV_WAERS
|
||||
328| IMPORTING
|
||||
329| E_RESULTCODE = LV_CODE
|
||||
330| E_RESULTMSG = LV_MSG.
|
||||
331|
|
||||
332| IF LV_CODE = 'E'.
|
||||
333| B_RESULT = B_FALSE.
|
||||
334| MESSAGE E000(ZFIM2) WITH LV_MSG.
|
||||
335| EXIT.
|
||||
336| ENDIF.
|
||||
337| ENDLOOP.
|
||||
338|
|
||||
339| " 오더 체크
|
||||
340| LOOP AT LT_AUNFR_CHECK.
|
||||
341| CALL FUNCTION 'Z_CO_CHECK_BUDGET'
|
||||
342| EXPORTING
|
||||
343| I_BUKRS = LV_BUKRS
|
||||
344| I_BUDAT = LV_BUDAT
|
||||
345| I_AUFNR = LT_AUNFR_CHECK-AUFNR
|
||||
346| I_DMBTR = LT_AUNFR_CHECK-DMBTR
|
||||
347| I_WAERS = LV_WAERS
|
||||
348| IMPORTING
|
||||
349| E_RESULTCODE = LV_CODE
|
||||
350| E_RESULTMSG = LV_MSG.
|
||||
351|
|
||||
352| IF LV_CODE = 'E'.
|
||||
353| B_RESULT = B_FALSE.
|
||||
354| MESSAGE E000(ZFIM2) WITH LV_MSG.
|
||||
355| EXIT.
|
||||
356| ENDIF.
|
||||
357| ENDLOOP.
|
||||
358| ENDFORM. "U200
|
||||
```
|
||||
|
||||
- **EN**: Calls Z_CO_CHECK_BUDGET per aggregated cost center/order and fails the validation (blocking the posting) when the budget is exceeded.
|
||||
- 호출(파서): Z_CO_CHECK_BUDGET, Z_CO_CHECK_BUDGET
|
||||
- SAP 객체: Z_CO_CHECK_BUDGET, GB002_015, ZFIM2
|
||||
- 업무 키워드: 예산체크, 예산초과, 전기차단, 검증실패, 예산관리, 오류메시지
|
||||
- English: budget check, budget exceeded, posting block, validation failure, budget control
|
||||
- 정의부(복사 시 함께 필요): [`LT_KOSTL_CHECK`](#decl-zrggbr000-266-lt_kostl_check), [`LV_BUKRS`](#decl-zrggbr000-259-lv_bukrs), [`LV_BUDAT`](#decl-zrggbr000-260-lv_budat), [`LV_WAERS`](#decl-zrggbr000-261-lv_waers), [`LV_CODE`](#decl-zrggbr000-263-lv_code), [`LV_MSG`](#decl-zrggbr000-264-lv_msg), [`LT_AUNFR_CHECK`](#decl-zrggbr000-272-lt_aunfr_check)
|
||||
- 선언을 못 찾은 이름: B_FALSE (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZRGGBR000/ZRGGBR000#L319-L358` · confidence 0.9 · `ZRGGBR000#ZRGGBR000#FORM#U200#C2`
|
||||
|
||||
## 정의부 (9건)
|
||||
|
||||
로직 조각을 다른 프로그램으로 옮겨 붙일 때 **함께 가야 하는 선언**이다. 조각별로 무엇이 필요한지는 위 조각 항목의 `정의부` 줄에 있고(이름을 누르면 여기로 온다), 붙여넣기용으로 의존까지 묶은 코드는 `GET /chunks/<chunk_id>` 의 `declaration_code` 로 받는다.
|
||||
|
||||
### `ZRGGBR000` (9건)
|
||||
|
||||
#### EXITS — data · unit 로컬 · L49-L53 {#decl-zrggbr000-49-exits}
|
||||
|
||||
```abap
|
||||
DATA: BEGIN OF EXITS OCCURS 50,
|
||||
NAME(5) TYPE C,
|
||||
PARAM LIKE C_EXIT_PARAM_NONE,
|
||||
TITLE(60) TYPE C,
|
||||
END OF EXITS.
|
||||
```
|
||||
|
||||
#### LV_BUKRS — data · unit 로컬 · L259-L259 {#decl-zrggbr000-259-lv_bukrs}
|
||||
|
||||
```abap
|
||||
DATA : LV_BUKRS LIKE BKPF-BUKRS.
|
||||
```
|
||||
|
||||
#### LV_BUDAT — data · unit 로컬 · L260-L260 {#decl-zrggbr000-260-lv_budat}
|
||||
|
||||
```abap
|
||||
DATA : LV_BUDAT LIKE BKPF-BUDAT.
|
||||
```
|
||||
|
||||
#### LV_WAERS — data · unit 로컬 · L261-L261 {#decl-zrggbr000-261-lv_waers}
|
||||
|
||||
```abap
|
||||
DATA : LV_WAERS LIKE BKPF-WAERS.
|
||||
```
|
||||
|
||||
#### LS_BSEG — data · unit 로컬 · L262-L262 {#decl-zrggbr000-262-ls_bseg}
|
||||
|
||||
```abap
|
||||
DATA : LS_BSEG LIKE BSEG.
|
||||
```
|
||||
|
||||
#### LV_CODE — data · unit 로컬 · L263-L263 {#decl-zrggbr000-263-lv_code}
|
||||
|
||||
```abap
|
||||
DATA : LV_CODE TYPE ZEIFFG.
|
||||
```
|
||||
|
||||
#### LV_MSG — data · unit 로컬 · L264-L264 {#decl-zrggbr000-264-lv_msg}
|
||||
|
||||
```abap
|
||||
DATA : LV_MSG TYPE ZEERRDESC.
|
||||
```
|
||||
|
||||
#### LT_KOSTL_CHECK — data · unit 로컬 · L266-L270 {#decl-zrggbr000-266-lt_kostl_check}
|
||||
|
||||
```abap
|
||||
DATA : BEGIN OF LT_KOSTL_CHECK OCCURS 0,
|
||||
KOSTL LIKE CSKS-KOSTL,
|
||||
KSTAR LIKE CSKA-KSTAR,
|
||||
DMBTR LIKE BSEG-DMBTR,
|
||||
END OF LT_KOSTL_CHECK.
|
||||
```
|
||||
|
||||
#### LT_AUNFR_CHECK — data · unit 로컬 · L272-L275 {#decl-zrggbr000-272-lt_aunfr_check}
|
||||
|
||||
```abap
|
||||
DATA : BEGIN OF LT_AUNFR_CHECK OCCURS 0,
|
||||
AUFNR LIKE AUFK-AUFNR,
|
||||
DMBTR LIKE BSEG-DMBTR,
|
||||
END OF LT_AUNFR_CHECK.
|
||||
```
|
||||
|
||||
## Unit 목록 (컨테이너)
|
||||
|
||||
| unit | 유형 | 위치 | 조각 | 한 줄 요약 |
|
||||
|---|---|---|---|---|
|
||||
| GET_EXIT_TITLES | FORM | ZRGGBR000 L47-103 | 2 | GGB0 검증 규칙에서 선택할 수 있는 사용자 Exit 목록(U100, US001, UM001, U200 예산통제)을 ETAB 에 등록하는 FORM 이다. |
|
||||
| U100 | FORM | ZRGGBR000 L114-131 | 0 | 전기일자 검증 예제 Exit(U100)로 본문이 주석 처리되어 실제 로직이 없는 FORM 이다. |
|
||||
| US001 | FORM | ZRGGBR000 L188-206 | 0 | SAP-EIS 단일 레코드 검증용 예제 Exit 로 본문이 모두 주석 처리된 빈 FORM 이다. |
|
||||
| UM001 | FORM | ZRGGBR000 L222-245 | 0 | SAP-EIS 매트릭스 검증용 예제 Exit 로 본문이 모두 주석 처리된 빈 FORM 이다. |
|
||||
| U200 | FORM | ZRGGBR000 L256-358 | 2 | 전표 전기 시 코스트센터·오더별 예산을 초과하는지 검증해 초과하면 전기를 막는다 (GGB0 검증 Exit). |
|
||||
@@ -0,0 +1,236 @@
|
||||
---
|
||||
type: abap-program
|
||||
title: "ZRGGBS000"
|
||||
description: "SAP 표준 대체 Exit 폼풀 RGGBS000 을 회사용으로 복사한 프로그램이다. GGB1(대체) 에서 정의한 대체 규칙이 호출하는 사용자 Exit(U100, U101, U200)을 담으며, 전표 전기 시 코스트센터를 CSKS 에서 읽어 채우거나 이동유형을 참조에서 유도(XREF_TO_RMVCT)하는 등 필드 자동 대체를 수행한다."
|
||||
resource: "abap://ZRGGBS000"
|
||||
tags: ["대체", "전표", "코스트센터", "설정", "FI", "이동유형", "참조필드", "연결이전", "검증", "캐시", "마스터조회", "필수입력", "유효성검증", "오류메시지", "전기차단", "대체 Exit", "이동유형 유도", "연결 거래유형", "참조 필드", "대체 Exit 등록"]
|
||||
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: ["T856"]
|
||||
x-tables-write: []
|
||||
x-calls: []
|
||||
x-code-hash: "407839a9bd026bbd7a8b6b1524cb9abe9db9b39c367359ef71078c184903d33c"
|
||||
x-unit-count: 6
|
||||
x-chunk-count: 4
|
||||
x-declaration-count: 7
|
||||
---
|
||||
|
||||
## 업무 목적
|
||||
|
||||
SAP 표준 대체 Exit 폼풀 RGGBS000 을 회사용으로 복사한 프로그램이다. GGB1(대체) 에서 정의한 대체 규칙이 호출하는 사용자 Exit(U100, U101, U200)을 담으며, 전표 전기 시 코스트센터를 CSKS 에서 읽어 채우거나 이동유형을 참조에서 유도(XREF_TO_RMVCT)하는 등 필드 자동 대체를 수행한다.
|
||||
|
||||
## 주 흐름
|
||||
|
||||
1. GGB1 에서 대체 규칙이 Exit 를 선택할 수 있도록 Exit 목록을 등록한다 (GET_EXIT_TITLES)
|
||||
2. 전표 전기 시 대체 규칙이 등록된 Exit 를 호출한다
|
||||
3. U100/U101 에서 CSKS 를 읽어 코스트센터를 채운다
|
||||
4. XREF_TO_RMVCT 에서 참조번호로부터 이동유형(RMVCT)을 유도한다
|
||||
|
||||
## 테이블 / 외부 호출
|
||||
|
||||
- read: T856
|
||||
- write: -
|
||||
- 외부 호출: -
|
||||
|
||||
## 로직 조각 (4건 / unit 3개)
|
||||
|
||||
LLM 이 코드에서 골라낸 업무 로직 단위다. **조각마다 소스 원문과 자연어 설명을 함께 싣는다** — 설명이 코드와 맞는지 바로 대조할 수 있어야 하기 때문이다.
|
||||
테이블·호출은 LLM 이 쓴 값이 아니라 파서가 조각 범위에서 다시 뽑은 사실이다. 순서는 실행 순서다.
|
||||
|
||||
### FORM GET_EXIT_TITLES — `ZRGGBS000` L54-L102 (49줄)
|
||||
|
||||
*GGB1 대체 규칙에서 선택 가능한 사용자 Exit 목록(U100·U101 코스트센터, U200 연결 이동유형)과 파라미터 유형·제목을 ETAB 에 등록한다.*
|
||||
|
||||
> 이 unit 의 조각 1개가 15/49줄(31%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [other] 대체 Exit U100(파라미터 없음, CSKS 코스트센터)·U101(필드 파라미터, CSKS 코스트센터)·U200(필드 파라미터, XREF 기반 연결 이동유형)의 이름·파라미터 유형·제목을 EXITS 에 등록해 GGB1 에서 선택할 수 있게 한다.
|
||||
|
||||
```abap
|
||||
62| exits-name = 'U100'.
|
||||
63| exits-param = c_exit_param_none.
|
||||
64| exits-title = text-100. "Cost center from CSKS
|
||||
65| APPEND exits.
|
||||
66|
|
||||
67| exits-name = 'U101'.
|
||||
68| exits-param = c_exit_param_field.
|
||||
69| exits-title = text-101. "Cost center from CSKS
|
||||
70| APPEND exits.
|
||||
71|
|
||||
72| * begin of insertion "wms092357
|
||||
73| exits-name = 'U200'.
|
||||
74| exits-param = c_exit_param_field.
|
||||
75| exits-title = text-200. "Cons. transaction type
|
||||
76| APPEND exits. "from xref1/2
|
||||
```
|
||||
|
||||
- **EN**: Register the substitution exits U100 (no parameter, cost center from CSKS), U101 (field parameter) and U200 (field parameter, consolidation transaction type from XREF1/2) with their parameter type and title so GGB1 can offer them.
|
||||
- SAP 객체: GGB1, RGGBS000, CSKS
|
||||
- 업무 키워드: 대체 Exit 등록, Exit 목록, 코스트센터 대체, 이동유형 대체
|
||||
- English: Substitution Exit, GGB1, Exit Registration, RGGBS000
|
||||
- 정의부(복사 시 함께 필요): [`EXITS`](#decl-zrggbs000-56-exits)
|
||||
- 선언을 못 찾은 이름: C_EXIT_PARAM_NONE, C_EXIT_PARAM_FIELD (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZRGGBS000/ZRGGBS000#L62-L76` · confidence 0.85 · `ZRGGBS000#ZRGGBS000#FORM#GET_EXIT_TITLES#C1`
|
||||
|
||||
### FORM U200 — `ZRGGBS000` L201-L203 (3줄)
|
||||
|
||||
*대체(Substitution) Exit U200 으로, XREF_TO_RMVCT 를 호출해 전표 참조키(XREF1/2)로부터 연결 이동유형(RMVCT/BEWAR)을 유도해 반환한다.*
|
||||
|
||||
> 이 unit 의 조각 1개가 1/3줄(33%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [control_flow] GGB1 대체 규칙에서 호출되는 Exit U200 이 BKPF/BSEG 를 넘겨 XREF_TO_RMVCT 로 참조 필드에서 연결 이동유형(BEWAR)을 유도해 E_RMVCT 에 채운다.
|
||||
|
||||
```abap
|
||||
202| PERFORM xref_to_rmvct USING bkpf bseg 1 CHANGING e_rmvct.
|
||||
```
|
||||
|
||||
- **EN**: Substitution exit U200 derives the consolidation transaction type (BSEG-BEWAR) from the document reference fields via XREF_TO_RMVCT and returns it in E_RMVCT.
|
||||
- 호출(파서): XREF_TO_RMVCT
|
||||
- SAP 객체: GGB1, BSEG, BKPF
|
||||
- 업무 키워드: 대체 Exit, 이동유형 유도, 연결 거래유형, 참조 필드
|
||||
- English: Substitution Exit, Transaction Type, RMVCT, GGB1
|
||||
- 정의부(복사 시 함께 필요): [`BKPF`](#decl-zrggbs000-23-bkpf), [`BSEG`](#decl-zrggbs000-24-bseg)
|
||||
- 위치: `abap://ZRGGBS000/ZRGGBS000#L202-L202` · confidence 0.8 · `ZRGGBS000#ZRGGBS000#FORM#U200#C1`
|
||||
|
||||
### FORM XREF_TO_RMVCT — `ZRGGBS000` L210-L247 (38줄)
|
||||
|
||||
*전표의 참조필드(XREF1/XREF2) 값을 연결이전 이동유형으로 변환하고 유효성을 검증한다.*
|
||||
|
||||
> 이 unit 의 조각 2개가 26/38줄(68%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [validation] 참조필드 지정값이 1 또는 2 인지 확인해 아니면 치명적 오류를 내고, 이동유형 마스터 T856 을 해시테이블에 한 번만 캐시한 뒤 지정된 참조필드(XREF1 또는 XREF2)에서 이동유형 값을 꺼낸다.
|
||||
|
||||
```abap
|
||||
220| if i_xref_field <> 1 and i_xref_field <> 2.
|
||||
221| message x000(gk) with 'UNEXPECTED VALUE I_XREF_FIELD ='
|
||||
222| i_xref_field '(MUST BE = 1 OR = 2)' ''.
|
||||
223| endif.
|
||||
224| if st_rmvct is initial.
|
||||
225| select trtyp from t856 into table st_rmvct.
|
||||
226| endif.
|
||||
227| if i_xref_field = 1.
|
||||
228| c_rmvct = is_bseg-xref1.
|
||||
229| else.
|
||||
230| c_rmvct = is_bseg-xref2.
|
||||
231| endif.
|
||||
```
|
||||
|
||||
- **EN**: Validates the xref field selector (must be 1 or 2), caches the consolidation transaction-type master T856 once, and picks the value from BSEG-XREF1/XREF2.
|
||||
- 테이블(파서): read [T856](/tables/T856.md) / write -
|
||||
- SAP 객체: T856, BSEG, XREF1, XREF2, RMVCT
|
||||
- 업무 키워드: 이동유형, 참조필드, 연결이전, 검증, 캐시, 마스터조회
|
||||
- English: movement type, reference field, consolidation transaction type, validation, static cache, T856
|
||||
- 정의부(복사 시 함께 필요): [`ST_RMVCT`](#decl-zrggbs000-217-st_rmvct)
|
||||
- 위치: `abap://ZRGGBS000/ZRGGBS000#L220-L231` · confidence 0.85 · `ZRGGBS000#ZRGGBS000#FORM#XREF_TO_RMVCT#C1`
|
||||
|
||||
#### [validation] 참조필드가 비어 있으면 '연결이전 이동유형을 입력하라'는 오류를, 값이 T856 에 없으면 '이동유형이 유효하지 않다'는 오류를 각각 필드명을 넣어 발생시켜 전표 전기를 막는다.
|
||||
|
||||
```abap
|
||||
232| if c_rmvct is initial.
|
||||
233| write i_xref_field to l_msgv left-justified.
|
||||
234| concatenate text-m00 l_msgv into l_msgv separated by space.
|
||||
235| * cons. transaction type is not specified => send an error message...
|
||||
236| message e123(g3) with l_msgv.
|
||||
237| * Bitte geben Sie im Feld &1 eine Konsolidierungsbewegungsart an
|
||||
238| endif.
|
||||
239| * c_rmvct <> initial...
|
||||
240| read table st_rmvct transporting no fields from c_rmvct.
|
||||
241| check not sy-subrc is initial.
|
||||
242| * cons. transaction type does not exist => send error message...
|
||||
243| write i_xref_field to l_msgv left-justified.
|
||||
244| concatenate text-m00 l_msgv into l_msgv separated by space.
|
||||
245| message e124(g3) with c_rmvct l_msgv.
|
||||
```
|
||||
|
||||
- **EN**: Raises an error if the reference field is empty or holds a transaction type absent from T856, blocking the posting.
|
||||
- SAP 객체: T856, RMVCT
|
||||
- 업무 키워드: 필수입력, 유효성검증, 오류메시지, 전기차단, 이동유형
|
||||
- English: mandatory field, validity check, error message, posting block, movement type
|
||||
- 정의부(복사 시 함께 필요): [`L_MSGV`](#decl-zrggbs000-216-l_msgv), [`ST_RMVCT`](#decl-zrggbs000-217-st_rmvct)
|
||||
- 위치: `abap://ZRGGBS000/ZRGGBS000#L232-L245` · confidence 0.87 · `ZRGGBS000#ZRGGBS000#FORM#XREF_TO_RMVCT#C2`
|
||||
|
||||
## 정의부 (10건)
|
||||
|
||||
로직 조각을 다른 프로그램으로 옮겨 붙일 때 **함께 가야 하는 선언**이다. 조각별로 무엇이 필요한지는 위 조각 항목의 `정의부` 줄에 있고(이름을 누르면 여기로 온다), 붙여넣기용으로 의존까지 묶은 코드는 `GET /chunks/<chunk_id>` 의 `declaration_code` 로 받는다.
|
||||
|
||||
### `ZRGGBS000` (10건)
|
||||
|
||||
#### GB002 — type-pool · L22-L22 {#decl-zrggbs000-22-gb002}
|
||||
|
||||
```abap
|
||||
TYPE-POOLS: GB002. " TO BE INCLUDED IN "wms092357
|
||||
```
|
||||
|
||||
#### BKPF — tables · L23-L23 {#decl-zrggbs000-23-bkpf}
|
||||
|
||||
```abap
|
||||
TABLES: BKPF. " ANY SYSTEM THAT "wms092357
|
||||
```
|
||||
|
||||
#### BSEG — tables · L24-L24 {#decl-zrggbs000-24-bseg}
|
||||
|
||||
```abap
|
||||
TABLES:
|
||||
BSEG. " HAS 'FI' INSTALLED "wms092357
|
||||
```
|
||||
|
||||
#### COBL — tables · L25-L25 {#decl-zrggbs000-25-cobl}
|
||||
|
||||
```abap
|
||||
TABLES:
|
||||
COBL. " wms092357
|
||||
```
|
||||
|
||||
#### CSKS — tables · L26-L26 {#decl-zrggbs000-26-csks}
|
||||
|
||||
```abap
|
||||
TABLES:
|
||||
CSKS. " wms092357
|
||||
```
|
||||
|
||||
#### ANLZ — tables · L27-L27 {#decl-zrggbs000-27-anlz}
|
||||
|
||||
```abap
|
||||
TABLES:
|
||||
ANLZ. " wms092357
|
||||
```
|
||||
|
||||
#### GLU1 — tables · L28-L28 {#decl-zrggbs000-28-glu1}
|
||||
|
||||
```abap
|
||||
TABLES:
|
||||
GLU1. " wms092357
|
||||
```
|
||||
|
||||
#### EXITS — data · unit 로컬 · L56-L60 {#decl-zrggbs000-56-exits}
|
||||
|
||||
```abap
|
||||
DATA: BEGIN OF exits OCCURS 50,
|
||||
name(5) TYPE c,
|
||||
param LIKE c_exit_param_none,
|
||||
title(60) TYPE c,
|
||||
END OF exits.
|
||||
```
|
||||
|
||||
#### L_MSGV — data · unit 로컬 · L216-L216 {#decl-zrggbs000-216-l_msgv}
|
||||
|
||||
```abap
|
||||
data l_msgv type symsgv.
|
||||
```
|
||||
|
||||
#### ST_RMVCT — data · unit 로컬 · L217-L217 {#decl-zrggbs000-217-st_rmvct}
|
||||
|
||||
```abap
|
||||
statics st_rmvct type hashed table of rmvct with unique default key.
|
||||
```
|
||||
|
||||
## Unit 목록 (컨테이너)
|
||||
|
||||
| unit | 유형 | 위치 | 조각 | 한 줄 요약 |
|
||||
|---|---|---|---|---|
|
||||
| GET_EXIT_TITLES | FORM | ZRGGBS000 L54-102 | 1 | GGB1 대체 규칙에서 선택 가능한 사용자 Exit 목록(U100·U101 코스트센터, U200 연결 이동유형)과 파라미터 유형·제목을 ETAB 에 등록한다. |
|
||||
| U100 | FORM | ZRGGBS000 L111-127 | 0 | SAP 예제 대체 Exit — 코스트센터를 CSKS 에서 읽어 부서로 바꾸는 샘플이지만 본문이 전부 주석 처리되어 동작하지 않는다. |
|
||||
| U101 | FORM | ZRGGBS000 L138-154 | 0 | 대체 Exit U101 로 CSKS 에서 코스트센터의 부서(ABTEI)를 읽어 대체하도록 예시된 FORM 이나 실제 로직은 모두 주석 처리되어 비어 있다. |
|
||||
| U200 | FORM | ZRGGBS000 L201-203 | 1 | 대체(Substitution) Exit U200 으로, XREF_TO_RMVCT 를 호출해 전표 참조키(XREF1/2)로부터 연결 이동유형(RMVCT/BEWAR)을 유도해 반환한다. |
|
||||
| XREF_TO_RMVCT | FORM | ZRGGBS000 L210-247 | 2 | 전표의 참조필드(XREF1/XREF2) 값을 연결이전 이동유형으로 변환하고 유효성을 검증한다. |
|
||||
Reference in New Issue
Block a user