본문 바로가기
BAPI · BADI · RFC · Interface

[SAP ABAP] 자재 마스터 확장 필드와 BAPI_EXTENSION 연관관계 — Z 필드 BAPI 처리 4단계

by Song.sh 2026. 5. 12.

자재 마스터에 사용자 정의 필드(Z 필드)를 확장하고 나서 BAPI_MATERIAL_SAVEDATA 로 값을 넣으려고 했는데 아무리 넣어도 Z 필드만 빠져있다 는 경험, 한 번씩 다 해보셨을 거예요.

이유는 단순합니다.

 

자재 마스터 확장 필드는 테이블에 컬럼만 뚫는다고 BAPI가 알아서 인식하지 않습니다. BAPI 전용 확장 구조체에 같이 등록하고 IMG에서 필드 그룹도 따로 설정해줘야 비로소 BAPI가 그 필드를 처리합니다.

이번 글에서는 자재 마스터 Z 필드 확장 → BAPI 전송까지의 연관 관계와 작업 순서를 정리합니다.


핵심 원리

자재 마스터에서 Z 필드를 BAPI로 처리하려면 세 가지 작업이 모두 필요합니다.

단계 작업 하지 않으면?
1 MARA / MARC 등 테이블에 Append 구조체로 Z 필드 추가 필드 자체가 DB에 존재하지 않음
2 BAPI_TE_MARA / BAPI_TE_MARC 구조체에도 동일 Append BAPI가 Z 필드 구조를 못 인식
3 IMG에서 필드 선택 그룹(Field Selection Group) 설정 BAPI는 받아도 SAP가 그 필드를 "수정 가능"으로 인식 안 함 → 값 안 들어감

3단계 중 하나만 빠져도 BAPI 호출은 성공인데 Z 필드만 빈 채로 저장되는 미스터리한 현상이 발생합니다.


1단계 — 테이블 Append 구조체 추가

먼저 자재 마스터 헤더 테이블(MARA) 또는 플랜트 테이블(MARC) 등에 Append 구조체로 Z 필드를 추가합니다.

  • SE11 → 테이블 (예: MARA) → 변경 모드 → Append Structure 메뉴
  • 새 Append 구조체(예: ZAMARA) 생성 후 Z 필드 정의
  • 활성화

자재 마스터 외에도 자재 그룹·자재 유형 등 확장 위치에 따라 MARC(플랜트), MARD(저장위치), MBEW(평가) 등 다른 테이블에 Append할 수 있습니다.


2단계 — BAPI 전용 확장 구조체에 Append

이 단계가 핵심입니다. BAPI는 자재 마스터 테이블을 직접 다루지 않고 전용 인터페이스 구조체(BAPI_TE_MARA 등)를 통해 값을 받습니다. 1단계에서 만든 Append 구조체를 이 BAPI 구조체에도 그대로 추가해야 합니다.

대상 영역 BAPI 데이터 구조 BAPI 변경 플래그 구조
기본 자재 (MARA) BAPI_TE_MARA BAPI_TE_MARAX
플랜트 (MARC) BAPI_TE_MARC BAPI_TE_MARCX
저장위치 (MARD) BAPI_TE_MARD BAPI_TE_MARDX
평가 (MBEW) BAPI_TE_MBEW BAPI_TE_MBEWX

데이터 구조와 변경 플래그 구조 두 개 모두 Append 해야 합니다. 변경 플래그(X 붙은 구조)에는 같은 필드를 CHAR(1) 타입으로 정의 (X 표시용).

⚠️ 주의: BAPI_TE_* 구조에는 Character 타입 필드만 가능합니다. NUMC, QUAN, DEC 같은 타입을 직접 넣으면 UC_OBJECTS_NOT_CONVERTIBLE 덤프가 발생합니다. 숫자도 CHAR로 정의 후 BAPI 호출 시 변환해서 넣으세요.


3단계 — IMG에서 필드 선택 그룹 등록

테이블·BAPI 구조체에 필드를 추가해도 자재 마스터 입장에서 "이 필드는 입력 가능" 으로 등록하지 않으면 BAPI가 받은 값을 그대로 버립니다.

경로

SPRO로지스틱스 일반(Logistics-General) → 자재 마스터(Material Master) → 필드 선택(Field Selection) → 필드를 필드 선택 그룹에 할당(Assign Fields to Field Selection Groups)

작업

  • 추가한 Z 필드(예: MARA-ZZ_FIELD1)를 목록에 등록
  • Maint.status(유지 상태) 필드에 보통 ABCDEFGKLPQSVXZ 입력 — 모든 화면에서 입력 가능하게 만드는 표준 코드
  • 저장 → 트랜스포트 요청 할당

이 작업이 끝나야 비로소 BAPI 호출 시 Z 필드 값이 정상 반영됩니다.


4단계 — BAPI 호출 코드

세 단계 모두 완료되면 BAPI 호출 시 EXTENSIONIN 파라미터를 통해 Z 필드 값을 전달합니다.

예시 코드

DATA: lt_extensionin  TYPE TABLE OF bapiparex,
      ls_extensionin  TYPE bapiparex,
      ls_te_mara      TYPE bapi_te_mara,
      ls_te_marax     TYPE bapi_te_marax.

" 1) Z 필드 값 채우기
ls_te_mara-material  = 'TEST_MAT_001'.
ls_te_mara-zz_field1 = 'CUSTOM_VALUE'.

" 2) BAPIPAREX 구조에 BAPI_TE_MARA 라인 추가
ls_extensionin-structure = 'BAPI_TE_MARA'.
ls_extensionin-valuepart1 = ls_te_mara.
APPEND ls_extensionin TO lt_extensionin.

" 3) 변경 플래그 (X 구조체)
ls_te_marax-material  = 'TEST_MAT_001'.
ls_te_marax-zz_field1 = 'X'.

ls_extensionin-structure = 'BAPI_TE_MARAX'.
ls_extensionin-valuepart1 = ls_te_marax.
APPEND ls_extensionin TO lt_extensionin.

" 4) BAPI 호출
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
  EXPORTING
    headdata     = ls_headdata
    clientdata   = ls_clientdata
    clientdatax  = ls_clientdatax
  TABLES
    extensionin  = lt_extensionin
    returnmessages = lt_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING wait = abap_true.

 


흔히 빠뜨리는 함정

EXTENSIONIN X 구조도 같이 넣어야 함

데이터 구조(BAPI_TE_MARA)만 넣고 변경 플래그 구조(BAPI_TE_MARAX)를 빠뜨리면 BAPI가 "이 필드 안 바꿔도 된다" 로 인식해서 무시합니다. 두 개 모두 채워야 함.

Material 필드도 EXTENSIONIN 구조 안에 들어가야

BAPI_TE_MARA 의 첫 번째 필드는 항상 MATERIAL(자재 번호) 입니다. 누락하면 BAPI가 어느 자재에 매핑할지 몰라서 빈 채로 저장됨.

Character 타입만 허용

BAPI_TE_* 구조체에는 NUMC/QUAN/DEC/CURR 같은 비-Character 타입을 직접 넣을 수 없습니다. 숫자 필드도 CHAR로 정의 후 BAPI 호출 시 문자열 변환(CONDENSE, WRITE TO 등) 사용.

트랜스포트 4개 객체 모두 이송

확장 작업은 보통 다음 4개 객체가 동시에 변경됩니다. 운영 이송 시 누락 없이 모두 포함되어야 합니다.

  • MARA Append 구조체
  • BAPI_TE_MARA Append 구조체
  • BAPI_TE_MARAX Append 구조체
  • IMG Field Selection 설정 (Customizing 요청)

요약

단계 대상 작업
1 MARA / MARC / MARD / MBEW Append 구조체로 Z 필드 추가
2 BAPI_TE_* + BAPI_TE_*X 같은 Z 필드 추가 (Character 타입)
3 IMG → Field Selection Group 필드 등록 + Maint.status 입력
4 ABAP 호출 코드 EXTENSIONIN 으로 BAPI_TE_*BAPI_TE_*X 둘 다 전달

자재 마스터 Z 필드 확장은 DB·BAPI·IMG·코드 네 영역이 모두 맞물려야 동작하는 작업입니다. "값이 안 들어간다" 증상이 나오면 위 4단계 중 어느 하나가 빠진 경우가 대부분이니, 단계별로 체크하시면 빠르게 해결할 수 있습니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. SAP 버전과 자재 영역별 BAPI 구조가 다를 수 있으므로 운영 환경 적용 전 테스트 시스템에서 검증하시기 바랍니다.