Files

237 lines
12 KiB
Markdown

---
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) 값을 연결이전 이동유형으로 변환하고 유효성을 검증한다. |