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:
@@ -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). |
|
||||
Reference in New Issue
Block a user