반응형

ABAP에서 서브루틴 내부에서 자주 사용되는 로컬 변수 선언 방식에는 STATICSDATA가 있다. 비슷해 보이지만 값의 초기화 시점과 메모리 유지 방식에서 큰 차이가 있다.

이번 글에서는 STATICSDATA를 각각 선언한 예제 코드를 보며 차이점을 비교하고 어떤 선언 방식을 사용하는 것이 적절한지 알아보자.

🧩 변수 선언이 중요한 이유

ABAP에서 변수 선언은 단순히 데이터 저장 수단을 넘어서 프로그램의 동작 방식과 밀접한 연관이 있다. 특히 서브루틴 안에서 선언되는 변수는 호출 시마다 값이 초기화되는지, 유지되는지에 따라 프로그램의 흐름이 완전히 달라질 수 있다.

🔍 STATICS와 DATA 뭐가 다를까?

  • STATICS는 선언된 서브루틴 또는 메서드 내에서만 유효하지만, 프로그램 실행 중 값이 유지된다.
  • 반면 DATA는 서브루틴이 호출될 때마다 새로 생성되고 초기화된다.

🛠️ 예제1. STATICS 선언

DO 3 TIMES.
  PERFORM call_subr.
ENDDO.

FORM call_subr.
  STATICS lv_val TYPE i.
  lv_val = lv_val + 1.
  WRITE :/ 'STATIC Variable:', lv_val.
ENDFORM.

* 결과
* STATIC: 1  
* STATIC: 2  
* STATIC: 3

💡 상태 유지가 필요한 경우에는 STATICS를 선언하는 것이 유리하다.

🛠️ 예제2. DATA 선언

DO 3 TIMES.
  PERFORM call_data.
ENDDO.

FORM call_data.
  DATA lv_cnt TYPE i.
  lv_cnt = lv_cnt + 1.
  WRITE: / 'DATA:', lv_cnt.
ENDFORM.

* 결과
* DATA: 1  
* DATA: 1  
* DATA: 1

💡 매번 새로운 값으로 계산해야 하는 로직에는 DATA를 선언하는 것이 유리하다.

🔍 기본 개념 및 코드 분석

1. PERFORM call_subr. : 서브루틴 호출

  • STATICS : 루프가 도는 동안 한 번 설정한 값이 유지된다. (1 → 2 → 3)
  • DATA : DATA 구문으로 변수를 선언하게 되면 Local 변수는 서브루틴이 호출될 때마다 값이 초기화된다. (1 → 1 → 1)

2. 서브루틴: 함수와 유사하며 모듈형 프로그래밍을 위해 사용

  • 서브루틴은 ABAP에서 자주 반복되는 코드를 모듈화할 수 있도록 해주는 구조이다. FORM ... ENDFORM. 구문으로 감싸서 정의하며 호출 시 PERFORM을 사용한다.

3. STATICS lv_val TYPE i. : 정적변수 선언

  • STATICS는 서브루틴 내부에서만 유지되는 정적 변수이다. 한 번 선언되면 프로그램이 끝날 때까지 값이 유지되며, 서브루틴이 다시 호출되더라도 초기화되지 않는다.
  • 명시적인 초기화 없이 기본값으로 초기화된다.
반응형
반응형

SAP ABAP에서는 날짜와 시간 정보를 처리할 때 시스템 변수(System Field)를 자주 사용한다. 특히 실시간 프로세스나 로깅, 시간 기반 조건 분기 등에 있어 정확한 일시 처리 방식은 매우 중요하다.

이번 글에서는 sy-datum, sy-datlo, sy-datar, sy-uzeit, sy-timlo 각각의 활용 방법과 차이점을 정리했다. 글로벌 환경에서의 시간대 설정하는 방법도 함께 정리했다.

우선 시스템에서 시간을 설정하는 방법을 먼저 알아보자.

🤔 시스템에서 시간 설정하기

  1. T-CODE: SPRO
    SAP 시스템의 표준 시간대 시스템 세팅은 SPRO에서 TIMEZONE을 설정하게 된다.

2가지 Time Zone이 존재한다.

  • System TIme Zone: Application Server의 Time Zone 설정
  • User's Default Time Zone: 개별 사용자의 Time Zone 설정

한국은 그리니치 표준 시간보다 9시간 빠른 시간대를 이용하므로 'UTC+9'를 사용한다.

  1. T-CODE: SU3
    User's Default Time Zone은 사용자 프로파일의 Personal Time Zone과 연계되어 있다. 사용자 레벨에서 프로파일 Time Zone이 없으면, IMG 세팅 화면에서의 User's Default Time Zone을 기본으로 사용하게 된다.


🕑 시스템 변수로 날짜와 시간 출력하기

REPORT z02_07.

* 시스템 변수로 날짜, 시간 출력하기

WRITE: / 'SY-DATUM (시스템 표준 시간대 기준):', sy-datum,     "2025.05.30
       / 'SY-DATLO (사용자 로컬 시간대 기준):', sy-datlo,     "2025.05.30
       / 'SY-DATAR (Data Record의 날짜):', sy-datar,             "(빈 값)
       / 'SY-UZEIT (시스템 시간):', sy-uzeit,                   "13:40:20
       / 'SY-TIMLO (로컬 시간):', sy-timlo.                    "13:40:20
REPORT z02_07.

* 1. 날짜 계산 (sy-datum)

DATA : gv_date1 TYPE d.

gv_date1 = sy-datum.
WRITE : / 'gv_date1:', gv_date1. "20250530

gv_date1 = gv_date1 + 3.
WRITE : / 'gv_date1 + 3:', gv_date1. "20250602

* 1. 날짜 계산 (sy-datlo)

DATA : gv_date2 TYPE d.

gv_date2 = sy-datlo.
WRITE : / 'gv_date2:', gv_date2. "20250530

gv_date2 = gv_date2 + 3.
WRITE : / 'gv_date2 + 3:', gv_date2. "20250602

* 1. 날짜 계산 (sy-datar)

DATA : gv_date3 TYPE d.

gv_date3 = sy-datar.
WRITE : / 'gv_date3:', gv_date3." (빈 값)

gv_date3 = gv_date3 + 3.
WRITE : / 'gv_date3 + 3:', gv_date3. "00010104

* 2. 시간 계산 (sy-uzeit)

DATA : gv_time1 TYPE t.

gv_time1 = sy-uzeit.
WRITE : / 'gv_time1:', gv_time1. "130815

gv_time1 = gv_time1 - 60.
WRITE : / 'gv_time1 - 60:', gv_time1. "130715

* 2. 시간 계산 (sy-timlo)

DATA : gv_time2 TYPE t.

gv_time2 = sy-timlo.
WRITE : / 'gv_time2:', gv_time2. "130815

gv_time2 = gv_time2 - 60.
WRITE : / 'gv_time2 - 60:', gv_time2. "130715

 

🔍 시스템 변수의 종류와 활용 예시

  1. SY-DATUM: 시스템 기준 날짜
    • 설명: SAP 시스템 서버의 표준 시간대(System Time Zone) 기준으로 설정된 날짜
    • 설정 위치: T CODE: SPRO → General Settings → Time Zones → Maintain System Settings
    • 활용 예시:
      • 시스템 로그 시간 기록
      • 서버 기준 일자 처리
  2. SY-DATLO: 사용자 로컬 기준 날짜
    • 설명: SAP 사용자 프로파일에 설정된 개인 Time Zone 또는 기본 사용자 Time Zone 기준으로 설정된 날짜
    • 설정 위치: T-CODE: SU3 (User Parameters) → Personal Time Zone
    • 활용 예시:
      • 글로벌 사용자의 현지 시간 처리
      • 사용자의 로컬 보고서 출력 날짜
      • 🌍 예시: 한국 본사(SY-DATUM = 2025-05-30), 중국 공장 사용자(SY-DATLO = 2025-05-29)
  3. SY-DATAR: 데이터 기록 날짜
    • 설명: 일반적으로 테이블에서 읽어온 레코드의 날짜 필드를 참조하거나 배치 프로세스 중 지정된 날짜로 사용됩니다.
    • ⚠️ 주의: SY-DATAR는 대부분 내부 프로세스에서 사용되며, 명시적으로 지정하지 않으면 SY-DATUM과 동일한 값을 갖는 경우가 많습니다.
    • 활용 예시:
      • BDC (Batch Data Communication), IDOC 처리 등에서 입력 일자를 추적할 때 사용
  4. SY-UZEIT: 시스템 시간
    • 설명: Application Server 시간 (시, 분, 초)
    • 형식: hhmmss (예: 154305 → 오후 3시 43분 5초)
  5. SY-TIMLO: 로컬 시간
    • 설명: 사용자 Time Zone 기준 시간 (시, 분, 초)
    • 활용 예시:
      • 사용자 시간대 기반 업무 마감 시간 체크 등


📌 시스템 변수 직접 출력 vs 변수 저장 후 출력

SY-DATUM을 바로 WRITE 구문에 출력할 때와 SY-DATUM을 gv_date1이라는 변수에 담아 출력할 때 포맷이 다르게 출력된다. 앞서 사용한 예제 코드를 비교해 보자.

* 직접 출력
WRITE: / 'SY-DATUM 직접 출력:', sy-datum.     " → 2025.05.30 (형식화된 출력)

* 변수에 담아 출력
DATA(gv_date1) = sy-datum.
WRITE: / 'SY-DATUM 변수 출력:', gv_date1.     " → 20250530 (내부 형식 그대로 출력)

 

🔖 시스템 변수 및 출력 형식 차이 요약

🔖 시스템 변수 정리표 및 출력 형식 차이 요약

시스템 변수 정리

변수 설명 예시 값 특이사항
SY-DATUM 서버 기준 날짜 20250530 가장 일반적인 날짜 변수
SY-DATLO 사용자 기준 날짜 20250530 사용자 Time Zone 기준
SY-DATAR 데이터 레코드 날짜 없음 BDC/IDOC 등 특수한 경우만 값 존재
SY-UZEIT 서버 기준 시간 130815 hhmmss 형식
SY-TIMLO 사용자 기준 시간 130815 Time Zone 고려된 시간

 

출력 포맷 차이

  • WRITE 구문에서 시스템 변수는 SAP가 자동으로 보기 좋은 형식(YYYY.MM.DD)으로 포맷해서 출력한다.
  • DATA gv_date TYPE d. 형태의 일반 변수는 내부 형식(YYYYMMDD)을 포맷하지 않고 그대로 출력한다.
  • 시간 변수 (SY-UZEIT, SY-TIMLO)에도 동일하게 적용된다.
반응형
반응형

이번 글에서는 ABAP 숫자 타입별 연산 실습과 함수 호출 시 대소문자 구분으로 인해 발생하는 CX_SY_DYN_CALL_ILLEGAL_FUNC 오류의 원인과 해결 방법을 정리했다.

📐 숫자 타입별 계산 실습

1. 정수 타입 i 연산

REPORT z02_04.  

DATA gv_int1 TYPE i VALUE 2.  
DATA gv_int2 TYPE i VALUE 3.  
DATA gv_iresult TYPE i.  

gv_iresult = gv_int1 * gv_int2.  
WRITE :/ '1: ', gv_iresult. "6  

ADD 1 TO gv_iresult."6+1  
WRITE :/ '2: ', gv_iresult. "7 


2. 고정 소수점 타입 p 연산

고정 소수점(p)는 자릿수를 명시할 수 있어서 정확한 소수점 계산이 필요한 경우 유용하다. 고정 소수점 타입은 내부적으로 정수처럼 처리되지만 출력 시 소수점 자릿수가 보장된다.

DATA gv_packl TYPE p DECIMALS 2 VALUE '2.17'.  
DATA gv_pack2 TYPE p DECIMALS 2 VALUE '5.43'.  
DATA gv_presult TYPE p DECIMALS 2.  

gv_presult = gv_pack2 / gv_pack2.  
WRITE :/ '3: ', gv_presult. "1.00  

MULTIPLY gv_presult by gv_pack2.  
WRITE :/ '4: ', gv_presult. "5.43  

DIVIDE gv_presult BY gv_pack1.  
WRITE :/ '5: ', gv_presult. "2.50


3. 부동 소수점 타입 f 연산 및 변환

부동 소수점은 정밀도 손실이 발생할 수 있으므로 출력 시 가독성을 위해 FLTP_CHAR_CONVERSION 함수를 호출하여 문자열로 변환해주는 처리가 필요하다. (선택사항)

DATA gv_float1 TYPE f VALUE '1.337'.  
DATA gv_float2 TYPE f VALUE '2.7'.  
DATA gv_fresult TYPE f.  
DATA gv_cresult TYPE c LENGTH 16.  

gv_fresult = gv_float1 * gv_float2.  
WRITE :/ '6: ', gv_fresult. "3.6099000000000001E+00  

CALL FUNCTION 'FLTP_CHAR_CONVERSION' "case-sensitive  
  EXPORTING  
    decim = 2  
    input = gv_fresult  
  IMPORTING  
    flstr = gv_cresult.  

WRITE :/ '7: ', gv_cresult. "3.61


🚧 CX_SY_DYN_CALL_ILLEGAL_FUNC 에러 발생

처음에 함수명을 소문자로 작성했더니 다음과 같은 오류가 발생했다.

[확인할 메세지]
Funcion module "fltp\_char\_conversion" not found.
No function module can be found named "fltp\_char\_conversion" however. All function modules are listed in Function Library(SE37).

Possible Causes:
a) Wrong name specified. Pay particular attention to whether the name is case-sensitive and to underscores ("_").


🔍 CX_SY_DYN_CALL_ILLEGAL_FUNC 의미 해석

  1. CX → Class Exception : 예외 클래스(exception class)를 나타내는 표준 접두사
  2. SY → System : 시스템 수준에서 발생한 예외 클래스
  3. DYN → Dynamic : 동적 호출 관련
  4. CALL : 함수 호출
  5. ILLEGAL : 잘못된
  6. FUNC : Function module

즉, 시스템 수준에서 동적으로 호출된 함수(Function module)의 이름이 잘못되어 발생한 예외 클래스라는 뜻이다. Function Builder(SE37)에서 함수를 검색해보니 FLTP_CHAR_CONVERSION 함수가 존재하며 활성화되어 있는 상태이다. 함수는 생성되어 있고 다른 게 문제라는 말이다.


✅ CX_SY_DYN_CALL_ILLEGAL_FUNC 해결

SE37에서 소문자로 검색해도 자동으로 대문자로 변환되어 보여진다. 하지만 소스코드 내에서 함수를 동적으로 호출할 땐 대소문자 구분을 해줘야 한다.

명확한 이유를 알고 싶어서 구글링 끝에 공식문서에서 case에 대한 설명을 찾았다. 생각한대로 대소문자를 다르게 인식하는 문제였고, 동적 프로그래밍의 경우 대문자를 사용하는 것이 필수라고 나와 있다.

In contrast to many other modern programming languages, ABAP is not case-sensitive for ABAP words (tokens of an ABAP statement that express its semantics; either ABAP keywords or additions) nor for operators and names of operands. The only exception is dynamic programming, where the names of operands usually have to be specified in uppercase.

반응형
반응형

ABAP에서 숫자 연산을 처리할 때 TYPE P (Packed Number)는 매우 자주 사용된다. 이번 글에서는 Fixed Point Arithmetic 이 무엇인지, 해당 옵션의 체크 여부에 따라 어떻게 계산 결과가 달라지는지를 알아보자.

🔍 Fixed Point Arithmetic 정의

Fixed point arithmetic

If you mark this checkbox, all calculations in the program will use fixed point arithmetic.
If you do not, packed numbers (ABAP/4 type P, Dictionary types CURR, DEC or QUAN) will be treated as integers when they are used in assignments, comparisons, and calculations, irrespective of the number of decimal places defined. Intermediate results in arithmetic calculations will also be rounded to the next whole number. The number of decimal places defined is only taken into account when you output the answer using the WRITE statement.

✔️ Fixed point arithmetic 체크했을 때 (Default)

  • 모든 계산이 고정 소수점 방식으로 수행되며, DECIMALS 설정이 실제 연산에 반영

❌ Fixed point arithmetic 체크해제했을 때

  • TYPE P, CURR, DEC, QUAN과 같은 소수 타입들도 정수처럼 처리
  • 소수점 아래 자릿수(DECIMALS)는 무시되며, 연산 결과는 내부적으로 반올림된 정수로 처리

1️⃣ Fixed Point Arithmetic 옵션 활성화된 경우 (체크 O)

🔹 예제 코드 1

DATA gv_1 TYPE p VALUE '1.1'.  
DATA gv_2 TYPE p VALUE '2.1'.  
DATA gv_3 TYPE p.  

gv_3 = gv_1 * gv_2.  

WRITE gv_3.

*결과: 2

DECIMALS가 명시되지 않은 상태에서는 소수점 이하 숫자가 무시되어, 내부적으로 정수 1 * 2로 계산되어 2가 출력된다.

🔹 예제 코드 2

DATA gv_4 TYPE p DECIMALS 1 VALUE '1.1'.  
DATA gv_5 TYPE p DECIMALS 1 VALUE '2.1'.  
DATA gv_6 TYPE p.  

gv_6 = gv_4 * gv_5.  

WRITE gv_6.

*결과: 2

입력 변수에는 DECIMALS가 설정되어 있지만, 결과를 저장하는 gv_6에는 소수점 자릿수가 명시되지 않아 정수값 2만 출력된다.

🔹 예제 코드 3

DATA gv_4 TYPE p DECIMALS 1 VALUE '1.1'.  
DATA gv_5 TYPE p DECIMALS 1 VALUE '2.1'.  
*DATA gv_6 TYPE p DECIMALS 1.
DATA gv_6 TYPE p DECIMALS 2.

gv_6 = gv_4 * gv_5.  

WRITE gv_6.

*결과: 2.3 (DECIMALS 1일 때)
*결과: 2.31 (DECIMALS 2일 때)

모든 변수에 DECIMALS가 지정된 경우, 연산 과정과 출력 모두에서 소수점 자릿수가 정확하게 반영되어 2.31이 출력된다.

2️⃣ Fixed Point Arithmetic 옵션 비활성화된 경우 (체크 X)

결과 비교를 위해 Fixed Point Arithmetic 옵션에 체크했을 때 작성한 코드를 그대로 작성하여 결과를 비교해 보자.

🔹 예제 코드 1

DATA gv_1 TYPE p VALUE '1.1'.  
DATA gv_2 TYPE p VALUE '2.1'.  
DATA gv_3 TYPE p.  

gv_3 = gv_1 * gv_2.  

WRITE gv_3.

*결과: 231

Fixed Point Arithmetic 옵션이 꺼진 상태에서는 TYPE P 변수도 내부적으로 정수처럼 처리되며, '1.1'은 11, '2.1'은 21로 간주되어 곱셈 결과인 231이 출력된다.

🔹 예제 코드 2

DATA gv_4 TYPE p DECIMALS 1 VALUE '1.1'.  
DATA gv_5 TYPE p DECIMALS 1 VALUE '2.1'.  
DATA gv_6 TYPE p.  

gv_6 = gv_4 * gv_5.  

WRITE gv_6.

*결과: 231

입력 변수에 DECIMALS가 있어도, 옵션이 꺼진 상태에서는 무시되고 문자열 '1.1', '2.1'이 각각 11, 21로 처리되어 결과는 231이 된다.

🔹 예제 코드 3

DATA gv_4 TYPE p DECIMALS 1 VALUE '1.1'.  
DATA gv_5 TYPE p DECIMALS 1 VALUE '2.1'.  
*DATA gv_6 TYPE p DECIMALS 1.
DATA gv_6 TYPE p DECIMALS 2.

gv_6 = gv_4 * gv_5.  

WRITE gv_6.

*결과: 23.1 (DECIMALS 1일 때)
*결과: 2.31 (DECIMALS 2일 때)

결과 23.1
DECIMALS가 1로 선언된 gv_6 변수는 소수점 자리 수가 부족해 곱셈 결과가 부정확하게 표현되어 23.1이라는 값이 출력된다.

결과 2.31
Fixed Point Arithmetic 옵션이 꺼진 상태에서도 모든 변수에 DECIMALS가 명시되어 있을 경우, 소수점 정보를 활용한 계산이 가능하며 결과는 2.31로 정확하게 출력된다.

📌 기억할 것

3가지 예제를 통해 Fixed Point Arithmetic 옵션 활성화 여부와 각 변수에 지정된 DECIMALS 설정이 계산 방식과 결과 출력에 결정적인 영향을 준다는 것을 확인할 수 있었다. 특히, 옵션이 비활성화된 경우에도 출력 변수의 DECIMALS 설정에 따라 결과값이 소수점 위치를 달리해 출력되므로, 정확한 계산을 위해서는 옵션 설정과 함께 변수의 DECIMALS 지정 여부를 꼼꼼히 확인하는 것이 중요하다.

반응형
반응형

아래 코드를 활성화하고 실행해 보니 ABAP programming error가 떴다. 발생한 에러는 CX_SY_CONVERSION_OVERFLOW로, TYPE P을 사용할 때 자릿수를 지정하지 않으면 기본 설정으로 인해 오버플로우가 발생할 수 있음을 보여주는 예시이다.

REPORT Z02_03.  

DATA gv_1 TYPE p.  
DATA gv_2 TYPE p DECIMALS 14.  
DATA gv_3 TYPE p.  

gv_1 = '123456789012345'.  
gv_2 = '0.12345678901234'.  
gv_3 = '12345678912345678912345678901'.  

WRITE :/ gv_1.  
WRITE :/ gv_2.  
WRITE :/ gv_3.

 

🚧 CX_SY_CONVERSION_OVERFLOW 에러 발생

ABAP programming error : CX_SY_CONVERSION_OVERFLOW

[확인할 메세지]
CX_SY_CONVERSION_OVERFLOW
Overflow when converting 12345678912345678912345678901
An overflow occurred while attempting to convert value 12345678912345678912345678901

 

🔍 CX_SY_CONVERSION_OVERFLOW 의미 해석

이름에서 알 수 있듯이 해석해 보면 다음과 같다.

  1. CX → Class Exception : 예외 클래스(exception class)를 나타내는 표준 접두사
  2. SY → System : 시스템 수준에서 발생한 예외 클래스
  3. CONVERSION : TYPE P는 패킹된 이진 숫자 형식으로 값을 저장하므로, 시스템은 숫자를 패킹 포맷으로 변환
  4. OVERFLOW : 값이 해당 타입의 표현 범위를 초과하여 저장 불가능한 상황

 

💡 CX_SY_CONVERSION_OVERFLOW 해결: TYPE P의 자릿수 지정하기

  • TYPE P는 Packed Number로, 정수와 소수를 표현할 수 있는 타입이다.
  • 길이를 따로 선언하지 않으면 기본값은 8byte로 15자리(부호 한자리 포함) 수 표현이 가능하다.
  • 입력한 값은 총 29자리이므로 변수에 숫자를 다 담지 못해서 오버플로우 에러가 발생한 것이다.

문제를 해결하기 위해 gv_3 변수의 길이를 선언해 보자.

DATA gv_3 TYPE p.DATA gv_3(16) TYPE p.

  • gv_3(16)은 16 bytes * 2 = 최대 31자리까지 숫자 저장이 가능하다.
  • 입력값(29자리)을 충분히 수용하므로 에러 없이 실행된다.

변수 gv_3 길이 선언
로케일에 따라 세 자리마다 쉼표가 자동 생성됨

그런데 출력된 결과가 조금 이상하다.

값이 출력되었지만, 출력 결과에 , 쉼표가 자동으로 들어갔다. 그 이유는 ABAP의 WRITE 문이 **사용자의 로케일(숫자 포맷 설정)**에 따라 세 자리마다 쉼표 또는 점을 자동 삽입하기 때문이다. 숫자 포맷에 따라 쉼표가 들어가는 것을 고려하여 숫자 자릿수를 줄이거나 NO-GROUPING 구문을 추가하여 쉼표를 출력하지 않도록 한다.

WRITE: / gv_3.             " 쉼표 추가됨
WRITE: / gv_3 NO-GROUPING. " 쉼표 없이 출력

숫자 길이를 줄여 ,가 함께 출력되도록 처리
NO-GROUPING 구문을 추가하여 쉼표가 출력되지 않도록 처리

 

📌 기억할 것

ABAP은 고정 길이를 가지는 8가지 기본 Data Type을 제공하고 있다. 모든 필드 길이는 byte 단위로 구분된다. 데이터 타입 D, F, I는 이미 기술적 속성이 정의되어 있어서 프로그램에서 필드 길이를 정의하지 않고 바로 사용할 수 있다. 반면에 일반적인 데이터 타입인 C, N, X를 사용할 때는 필드 길이를 정의해야 한다. 그리고 TYPE P는 DECIMALS를 명시하지 않으면 소수 자리를 인식하지 못한다.

TYPE P 필드 길이를 선언하지 않으면 기본으로 8byte=15자리(부호 한자리 포함) 수를 표현할 수 있다.

길이를 선언할 때 부호나 ,(쉼표)를 고려하여 오버플로우 에러가 나지 않도록 주의하자.

반응형
반응형

SAP BP 마스터 데이터 구조를 나타낸 다이어그램

 

Prerequisites

  • 비즈니스 역할 지정 : SAP_BR_BUPA_MASTER_SPECIALIST
    (Master Data Specialist - Business Partner Specialist)

 

Required steps

  • 비즈니스 파트너 카테고리 선택하기
  • 하나 이상의 비즈니스 파트너 역할 지정
  • 비즈니스 파트너 그룹 결정

 

비즈니스 파트너 카테고리 (Business Partner Category)

파트너 카테고리를 선택하면 시스템에서 제공하는 일반 마스터 데이터 필드가 결정된다.

  • Person: A private individual, for example a landlord
  • Organization: A legal entity, for example a company
  • Group: A group of people, for example a community

 

비즈니스 파트너 역할 (Business Partner  Role)

비즈니스 상황에 따라 하나 이상의 역할을 하여 비즈니스 파트너와의 관계를 지정할 수 있다. 각 역할은 마스터 데이터 레코드에서 확인할 수 있다.

 

비즈니스 파트너 그룹 (Business Partner Grouping)

비즈니스 파트너를 구성하려면 각 그룹에 할당해야 한다. 비즈니스 파트너 마스터 레코드가 생성되면 SAP 시스템에서 식별할 수 있는 고유 번호가 부여된다. 이 번호는 비즈니스 파트너 그룹에 따라 달라진다.

 

각 그룹은 숫자 범위에 연결되며, 숫자 범위는 두 가지 범주에 따라 분류될 수 있다.

  • 내부 번호 할당 (Internal number assignment)
    시스템은 그룹화의 번호 범위에서 자동으로 번호를 할당한다.
    • 숫자만 포함할 수 있다. (numeric)
  • 외부 번호 할당 (External number assignment)
    숫자는 사용자가 수동으로 입력하거나 다른 시스템 도메인에서 전송된다.
    • 숫자를 포함할 수 있다. (numeric)
    • 문자(영숫자)를 포함할 수 있다. (alphanumeric)

 

비즈니스 파트너 데이터에는 2가지 영역이 존재한다.

  • 일반 데이터: 기본 정보를 포함한다.
  • 역할별 데이터: 비즈니스 컨텍스트별 정보를 포함한다.

 

일반 데이터 (General Data)

  • 필수 항목
    • 비즈니스 파트너 번호: 시스템의 고유한 비즈니스 파트너 식별자
    • 비즈니스 파트너 이름: 실제 이름 (법인명 등)
    • 비즈니스 파트너 역할: 할당된 역할 (무제한으로 할당 가능)
    • 비즈니스 파트너 그룹화: 비즈니스 파트너 번호 논리 및 결정
    • 주소
  • 선택 항목
    • 언어: 비즈니스 파트너와 귀하 간의 공식 커뮤니케이션 언어
    • 은행 데이터: 지불(실행)에 사용될 비즈니스 파트너의 은행 및 계좌 정보

 

역할별 데이터 (Role-specific Data)

역할 할당에 따라 특정 역할과 관련된 추가 필드가 있을 수도 있다.

 

회계 관련 추가 필드

  • 필수 항목
    • 회사 코드: 회계 데이터가 귀속되는 법인 단위
    • 조정 계정: B/S에서 파트너 잔액을 나타내는 A G/L 계정
  • 선택 항목
    • 지불 조건: 송장 기준으로 결제 기한 및 처리 조건 정의
    • 결제 방법: 실제 결제 시 사용할 방법 (은행 송금, 수표 등)

 

물류 관련 추가 필드

  • 필수 항목
    • 구매 조직(purchasing organization): 회사의 물류 부서와의 연결
  • 선택 항목
    • 구매 그룹(purchasing group): 특정 조달을 담당하는 구매자 또는 구매자 그룹
    • 지불 조건
    • 인코텀스: 국제 무역 규칙을 위한 국제 상업 용어
반응형

+ Recent posts