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