SAP BOX

'26/10/26 UPDATE

ABAP / FIELD NOTES

S/4HANA에서 자재번호 칸이 40자로 늘어나면 Z 프로그램은 어디를 고쳐야 할까

SAP S/4HANA는 1511부터 자재번호 필드를 18자에서 40자로 늘렸지만, 40자 번호를 쓰는 확장 기능은 기본으로 꺼져 있습니다. 그래도 Z 코드는 손봐야 할 수 있습니다. 길이를 직접 적은 칸, 이어 붙여 만든 키, 시스템 안에서 부르는 공개 인터페이스의 세 자리를 Simplification List 2023과 ABAP 키워드 문서 기준으로 봅니다.

가상의 ECC Z 프로그램이 자재번호를 18자 변수에 옮기고, 플랜트와 이어 붙여 키를 만들고, 공개 인터페이스 구조에 채워 함수를 부른다고 해 봅시다. S/4HANA에서 자재번호 필드는 40자가 되었지만 40자 번호를 쓰는 기능은 처음에 꺼져 있습니다. 이 프로그램은 그대로 두어도 될까요? 이 글을 읽고 나면 무엇이 40자가 되었는지, 확장 기능을 켜기 전과 뒤에 무엇이 달라지는지 알고, Z 코드에서 먼저 고칠 세 자리를 고를 수 있습니다.

예시 프로그램 ZDEMO_MATNR_LEN과 구조·변수는 지어낸 것이고 코드는 실행하지 않았습니다. 근거는 Simplification List for SAP S/4HANA 2023(문서판 1.35, 2025-02-25)의 3.22절 'S4TWL - Material Number Field Length Extension', SAP S/4HANA 2023 전환 가이드(문서판 7.0), ABAP 키워드 문서 7.58입니다. 목록의 이 항목은 출시 시점의 SAP Note 2267140을 바탕으로 만든 것이라, 최신 내용은 그 Note에서 보라고 적혀 있습니다. 로그인이 필요한 Note 본문은 읽지 않았습니다.

무엇이 40자가 되었고, 무엇은 그대로인가

S/4HANA에서 자재번호 필드 길이는 18자에서 40자로 늘었습니다. SAP S/4HANA 온프레미스 1511에서 처음 들어갔고 그 뒤 릴리스에도 해당합니다.

SAP는 자재번호 필드를 정의하는 도메인을 모두 40자로 늘리고 데이터 요소, 구조, 테이블, 인터페이스, 화면을 그에 맞췄습니다. 같은 도메인의 데이터 요소로 타입을 잡은 코드는 도메인을 따라 저절로 바뀝니다. 특성값처럼 자재번호도 담는 다른 필드도 늘렸고, 로컬 함수 모듈·클래스 메서드·BAdI처럼 보통 시스템 안에서만 부르는 인터페이스는 매개변수의 자재번호를 그대로 40자로 늘렸습니다.

데이터베이스에서도 자재번호를 담는 모든 테이블의 MATNR 필드가 40자가 되었지만, 내용을 담는 방식은 SAP Business Suite 때와 같아 보통 데이터 변환이 필요 없습니다. 숫자로만 된 자재번호는 표준 설정(lexicographic 표시를 켜지 않아 앞의 0이 뜻을 갖지 않음)에서 여전히 18자로 제한되고, 앞을 0으로 채워 18자까지만 담습니다. 목록이 짚는 예외 하나는 자재번호를 다른 값과 이어 붙여 저장한 필드입니다. 목록은 코드에서 이어 붙일 때 필드의 기술 길이 전체(이제 40자)를 쓰고 그것이 저장된 내용에 남으므로, 이런 필드는 데이터 변환이 필요하다고 적습니다.

SAP 노트

칸은 40자로 늘고, 저장 방식은 그대로

SAP S/4HANA 1511부터의 자재번호 필드 길이 확장

  • 늘어난 것

    MATNR 18 -> 40

    • 자재번호를 정의하는 도메인을 모두 40자로
    • 그 도메인을 쓰는 데이터 요소·테이블 필드
    • 이 타입을 쓴 코드는 도메인을 따라간다
  • 그대로인 것

    12345 -> 000000000000012345

    • DB에 내용을 담는 방식은 바뀌지 않았다
    • 그래서 보통 데이터 변환이 필요 없다
    • 숫자만 자재번호는 표준 설정에서 18자
    • DB에는 앞을 0으로 채워 18자까지
  • 변환이 필요한 것

    • 자재번호를 이어 붙여 담은 내용
    • 연결은 필드의 기술 길이 전체를 쓴다
    • 그 결과가 저장된 내용에도 남는다

Simplification List for SAP S/4HANA 2023(문서판 1.35) 3.22절 기준입니다.

자재번호 도메인을 쓰는 칸은 40자가 되었지만 DB에 내용을 담는 방식은 바뀌지 않았습니다. 목록이 짚는 예외 하나는 자재번호를 다른 값과 이어 붙여 저장한 내용으로, 이런 내용은 변환이 필요합니다.

확장 기능은 꺼진 채로 시작한다

필드가 40자가 되었다고 바로 40자 번호를 쓸 수 있는 것은 아닙니다. BAPI, RFC, IDoc은 필드의 길이와 순서가 정해진 데이터를 주고받으므로, 자재번호 필드를 그냥 늘리면 옛 버전과의 호환이 깨집니다. 그래서 공개된 외부 인터페이스는 원래 필드의 길이를 지키고 40자용 새 필드를 구조 끝(또는 새 매개변수)에 더했습니다. 또 확장 자재번호 기능을 명시적으로 켜야만 18자를 넘는 번호를 쓸 수 있게 했습니다.

기본값은 전환한 시스템이든 새로 설치한 시스템이든 꺼짐입니다. 켜는 곳은 클라이언트별 Customizing 테이블로, IMG의 Cross-Application Components > General Application Functions > Field length Extension > Activate extended fields나 트랜잭션 FLETS입니다. 자재번호 형식도 트랜잭션 OMSL에서 18자보다 긴 길이를 허용하도록 바꿔야 합니다. 한 번 켜면 확장된 길이에서만 허용되는 값이 여러 필드에 생겼을 수 있어 쉽게 끌 수 없습니다.

꺼져 있는 동안에는 공개 인터페이스의 짧은 필드가 그대로 채워지고 읽히며, 시스템은 옛 인터페이스로 보낼 수 없는 데이터가 생기지 않도록 확장 필드를 옛 길이로 묶습니다. 끝에 더한 긴 필드도 함께 채워지므로 통신 상대는 미리 긴 필드로 옮겨 갈 수 있습니다. 켠 뒤에는 40자를 다 쓸 수 있지만, 값이 옛 길이보다 길면 짧은 필드는 비워 둡니다(1511 FPS2부터는 값이 짧은 필드에 들어가면 짧은 필드도 채워 보내고 받아들입니다). 목록은 모든 SAP Business Suite 시스템이 새 필드에 맞춰야 할 통신 상대라고 짚고, 스위치가 시스템 사이 통신의 호환에 영향을 주므로 여러 시스템을 쓰는 곳에서는 켤지, 언제 켤지를 정해야 한다고 적습니다.

SAP 노트

확장 기능은 꺼진 채로 시작한다

확장 자재번호 기능을 켜기 전과 켠 뒤

  1. 기본값: 꺼짐

    FLETS / OMSL

    • 전환한 시스템도, 새로 설치한 시스템도
    • 40자를 쓰려면 고객이 직접 켠다
    • 클라이언트별 Customizing 테이블
  2. 꺼져 있는 동안

    • 자재번호는 옛 길이 18자를 넘지 못한다
    • 공개 인터페이스의 짧은 칸을 채우고 읽는다
    • 끝에 더한 긴 칸도 함께 채운다
  3. 켠 뒤

    • 40자 전체를 쓸 수 있다
    • 값이 길면 짧은 칸은 비워 둔다
    • 통신 상대가 새 칸과 형식에 맞춰야 한다
    • 켠 뒤에는 쉽게 끌 수 없다

1511 FPS2부터는 켠 뒤에도 값이 짧은 칸에 들어가면 짧은 칸을 채우고 받아들입니다. 목록 3.22절 기준입니다.

확장 자재번호 기능은 전환한 시스템에서도 새로 설치한 시스템에서도 기본으로 꺼져 있습니다. 켠 뒤에는 18자보다 긴 번호가 공개 인터페이스의 짧은 칸에 실리지 않습니다.

켜지 않아도 Z 코드는 손봐야 할 수 있다

목록은 어떤 경우에는 이 확장 때문에 커스텀 코드를 고쳐야 할 수 있고, 그 조정은 확장 기능을 켜지 않고 18자로 남더라도 필요하다고 적습니다. SAP는 시스템의 데이터 흐름 전체를 분석해 자재번호가 40자를 담기에 짧은 필드로 옮겨지는 자리를 모두 찾아 처리했고, 같은 분석을 고객·파트너 코드에서도 해야 한다고 말합니다. 이 글은 목록과 ABAP 규칙에서 세 자리를 골랐습니다.

첫째는 길이를 직접 적은 칸입니다. 목록은 자재번호가 예전 길이 18자로 잘리면 데이터를 잃는다고 짚습니다. 데이터 요소 MATNR로 타입을 잡은 변수는 40자가 되지만, TYPE c LENGTH 18처럼 길이를 직접 적은 변수나 Z 구조에 CHAR 18로 따로 정의한 필드는 그대로입니다. ABAP에서 c 필드를 더 짧은 c 필드에 넣으면 오른쪽이 잘립니다. 확장 기능이 꺼져 있으면 번호가 18자를 넘지 않아 이 줄은 아무 일 없이 돌다가, 켠 뒤 더 긴 번호가 들어오는 날 글자를 잃습니다.

둘째는 이어 붙여 만든 키입니다. 목록이 말한 '기술 길이 전체를 쓰는 연결'의 한 예가 ABAP에서 RESPECTING BLANKS를 붙인 CONCATENATE입니다. 그냥 CONCATENATE는 고정 길이 필드의 뒤 공백을 보통 무시하지만(CONCATENATE 노트에서 다룬 규칙), RESPECTING BLANKS를 붙이면 뒤 공백까지 이어 붙이고, 결과가 대상 필드보다 길면 오른쪽을 자릅니다. ECC에서 18자 자재번호와 4자 플랜트로 22자 키를 만들던 줄은, S/4HANA에서는 자재번호 칸이 뒤 공백까지 40자를 차지하므로, 22자 대상 필드에는 자재번호 부분만 들어가고 플랜트가 잘립니다. 기술 길이는 확장 기능을 켜지 않아도 40자이므로 이 차이는 전환 직후부터 생깁니다. 이런 키를 테이블에 저장해 왔다면 앞에서 본 데이터 변환도 함께 따져야 합니다.

셋째는 시스템 안에서 부르는 공개 인터페이스입니다. 공개된 외부 API를 같은 시스템 안에서 부를 때는 호환이 필요 없으므로, 목록은 확장 기능을 켤 때에 대비해 이런 내부 호출에서는 새로 더한 긴 필드만 쓰라고 적습니다. 공개 인터페이스에도 쓰이는 구조를 내부 코드에서 쓸 때도 마찬가지입니다. BAPI를 로컬로 부르며 원래의 짧은 필드만 채우는 Z 코드가 여기에 해당합니다.

SAP 노트

Z 코드에서 먼저 볼 세 자리

가상 예시 ZDEMO_MATNR_LEN의 세 줄

  • 길이를 직접 적은 칸

    lv_mat18 = lv_matnr.

    • c LENGTH 18 변수, Z 구조의 18자 필드
    • 더 짧은 c 칸에 넣으면 오른쪽이 잘린다
    • 확장을 켠 뒤 18자를 넘는 번호가 잘린다
  • 이어 붙여 만든 키

    CONCATENATE ... RESPECTING BLANKS

    • RESPECTING BLANKS는 뒤 공백도 붙인다
    • MATNR 칸은 40자 전체가 이어 붙여진다
    • 대상 칸이 짧으면 오른쪽이 잘린다
    • 확장을 켜지 않아도 생기는 차이
  • 안에서 부르는 공개 인터페이스

    ls_if-material = lv_matnr.

    • 원래 칸은 길이를 지키고 끝에 긴 칸이 있다
    • 시스템 안에서 부를 때는 긴 칸만 써야 한다
    • 같은 구조를 내부 코드에 쓸 때도 같다

이름과 코드는 가상이며 실행하지 않았습니다. 목록 3.22절과 ABAP 키워드 문서 7.58을 적용해 따진 것입니다.

세 자리 모두 자재번호가 40자 도메인을 따르지 않는 칸, 곧 길이를 직접 적은 칸이나 원래 길이를 지킨 인터페이스 칸으로 들어가는 곳입니다.

아래 편집기 예시는 이 세 줄을 번호 ①~③으로 한 화면에 모은 것입니다.

SAP GUI ABAP 편집기 화면에 번호 세 개가 있다. 1은 lv_mat18 = lv_matnr 줄로 18자로 직접 적은 칸에 넣어 켠 뒤 긴 번호가 잘리는 자리다, 2는 CONCATENATE lv_matnr p_plant INTO lv_key RESPECTING BLANKS 줄로 자재번호가 40자 전체로 이어 붙여져 22자 키에서 p_plant가 잘리는 자리다, 3은 ls_if-material = lv_matnr 줄로 시스템 안에서 부르는 공개 인터페이스의 원래 칸을 채워, 긴 칸 material_ext로 바꿔야 할 자리다.
자재번호가 길이를 직접 적은 칸, 이어 붙여 만든 키, 공개 인터페이스 구조의 원래 칸으로 들어가는 세 줄의 예시. 이름은 가상이고 코드는 실행하지 않았으며, 각 줄의 결과는 Simplification List 2023과 ABAP 키워드 문서 7.58의 규칙에서 따진 것이다.

점검 도구가 찾아 주는 것과 남는 것

목록은 전환 사전 점검(SAP Note 2216958)을 돌리라고 권하고, 커스텀 코드 정보로 SAP Note 2215424와 2215852를 가리킵니다. 전환 가이드의 앱별 준비 작업 표에도 자재번호 확장 점검 프로그램 작업의 참조로 SAP Note 2216958이 올라 있습니다.

전환 가이드는 커스텀 코드 점검을 두 단계로 설명합니다. 전환 전에는 커스텀 코드 마이그레이션 도구가 S/4HANA 단순화 항목에 비춰 코드를 점검하고, SUM으로 전환한 뒤에는 ABAP Test Cockpit(ATC)에서 검사 변형 S4HANA_READINESS로 로컬 점검을 돌려 문제를 찾습니다. 다만 가이드는 커스텀 코드 점검이 맞지 않는 자리를 아직 모두 찾지는 못한다며, S/4HANA 안에서 커스텀 코드를 시험해야 한다고도 적습니다. 이 검사가 자재번호 길이 문제를 어디까지 찾는지는 근거 문서로 확인하지 못했으므로, 위의 세 자리는 점검 결과와 별도로 직접 찾아보는 편이 안전합니다.

오늘 할 일은 하나입니다. Z 코드에서 자재번호를 받는 변수와 구조 필드 가운데 데이터 요소 MATNR이 아니라 길이를 직접 적어 정의한 것을 찾아 목록으로 만들어 두세요. 그 목록이 전환 프로젝트에서 고칠 자리의 출발점이 됩니다.

끝 · END OF NOTE
RSS 구독목록으로
COMMENTS BOX

이 기록에 대화를 더해 주세요.

궁금한 점, 다른 접근, 직접 해 본 결과를 나눠 주세요.

최신순

로그인 상태 확인 중…

댓글을 불러오는 중…