본문 바로가기

SAP CO/깊숙한 개념

자재원장의 프로세스 카테고리 변경 BADI

 

많은 분들이 아실 만한 BADI인데 간단하게 정리하고 가려고 한다.

 

자재원장은 기본적으로 "카테고리"라는 대분류와 "프로세스 카테고리"라는 중분류가 있다. 그 아래에는 "조달대체"라는 소분류가 있고 그 아래에 다시 개별 항목이 있는 식으로 구성되어 있다.

 

무슨 말이냐면

 

 

대분류 "카테고리"

 

위 그림처럼 기초재고, 입고, 누적재고, 소비, 기말재고 같은 항목들이 바로 대분류인 "카테고리"다. 위 화면에서는 안 보이지만 "기타입고/소비"나 "재평가"도 대분류에 포함된다.

 

카테고리는 도메인 'CKML_CATEG'에서 값들을 확인할 수 있다.

 

 

T-CODE: SE11, 도메인 CKML_CATEG

카테고리 하위는 "프로세스 카테고리"라는 게 있다.

 

 

중분류 "프로세스 카테고리"

 

프로세스 카테고리는 입고와 소비 부분의 항목 범주를 보다 상세하기 구분하기 위해서 만든 것이다. 같은 입고라고 해도 이게 구매입고인지 생산입고인지는 이 프로세스 카테고리를 통해 구분한다.

 

 

카테고리와 프로세스 카테고리의 관계

 

즉 이런 관계가 있는 것이고 이걸 시스템 세팅에서 보자면 뷰 'V_CKMLMV01'를 통해서 보면 된다.

 

 

T-CODE: SM30, 뷰 V_CKMLMV01 조회

 

위 뷰에서 보면 B로 시작하는 항목과 V로 시작하는 항목이 있는데 각각 입고와 출고라고 보면 된다. 기술적으로는 "R"이라는 체크박스가 찍혀 있는 게 입고이고 안 찍혀 있는 것은 출고라고 봐주면 되겠다.

 

그 옆에 "M"은 멀티 레벨이라는 뜻이고 이게 바로 자재원장 멀티 레벨 차이 롤업의 대상이 된다. 멀티 레벨을 찍었으면 항상 파트너 프로세스 카테고리도 입력해야 한다. 위 그림에서 생산입고인 BF에는 "M"이 찍혀 있고 파트너로 VF가 입력되어 있다. 이렇게 되어 있어야 생산출고로 투입된 원자재의 차이 금액이 생산입고로 들어온 상위 제품/반제품으로 롤업 전달된다.

 

"D"는 디폴트란 뜻이다. 특정한 세팅이 없는 경우 입고일 때는 이게 찍혀 있는 프로세스 카테고리인 B+, 출고일 때는 V+로 값이 들어온다.

 

디폴트인 B+와 V+는 IMG 세팅에서 카테고리 지정을 해줘야 한다.

 

 

IMG: 관리회계 > 제품 원가 관리회계 > 실제 원가계산/자재 원장 > 자재 업데이트 > 자재갱신구조 정의

 

이 IMG에서는 이외에도 프로세스 카테고리와 이동유형 그룹이란 걸로 카테고리 지정을 변경할 때도 사용하지만, 그에 대한 설명은 넘어가자.

 

 

 

 

그렇다면 이 프로세스 카테고리를 사용자가 추가하고,
자재원장이 업데이트될 때마다 값을 지정해주려면 어떻게 해야할까?

 

 

 

 

 

 

이게 이번 글의 주제다. 우선 프로세스 카테고리 추가는 아까 봤던 뷰 'V_CKMLMV01'에서 추가할 수 있다.

 

 

T-CODE: SM30, 뷰 V_CKMLMV01 조회

 

위 뷰에서 BZ01과 VZ01을 추가했다. 그리고 BADI를 사용하면 되는데

 

 

T-CODE: SE19(BADI 빌더)

 

CKML_UPDATE라는 BADI를 구현하면 된다. BADI 구현에 대한 글을 지난 글인 『T-CODE: KSPP 결과 리스트 저장하기(BADI 활용)』을 참고해주시길.

 

 

T-CODE: SE19(BADI 빌더)

 

그리고 이 BADI의 메소드를 보면 'MODIFY_CATEGORY'라는 게 있다. 

 

 

메소드 IF_EX_CKML_UPDATE~MODIFY_CATEGORY

 

바로 여기에 소스 코드를 개발하면 된다. 우리는 디버깅을 통해 그냥 살펴보자.

 

 

T-CODE: MIGO(자재 이동)

 

무상납품 처리를 해보고, 이런 경우 프로세스 카테고리를 변경해보자. 이대로 저장하면 우리가 설정한 BREAK-POINT에 디버깅이 걸릴 것이다.

 

 

프로세스 카테고리 변경

 

여기서 프로세스 카테고리를 B+에서 ZB01로 변경한다. 원래대로라면 ABAP 로직에 의해 바뀌어야 한다. 파라메터 중에 CS_ACCIT라는 게 있는데 여기에 관련 정보들이 들어온다. 그 중에는 이동유형도 있고, 보통 그 이동유형에 따라 프로세스 카테고리를 변경하는 방식으로 로직을 짜는 편이다. 위 그림처럼 C_PTYP_ORG를 변경해주면 된다.

 

 

그리고 처리를 해보면...

 

 

에러 CKMLMV009

 

위 그림처럼 에러가 난다. 이 부분에서 한참 헤맸었는데 MODIFY_CATEGORY를 통한 변경에서는 뷰 'V_CKMLMV01'에서 "R" 체크가 되지 않은 것들만 가능하다.

 

 

T-CODE: SM30, 뷰 V_CKMLMV01 조회

 

그러니 입고임에도 불구하고 우리가 만든 프로세스 카테고리에 'R'을 해제하자. 그러고 나면 정상적으로 처리가 되고 CKM3에서 확인해보면 아래와 같이 나온다.

 

 

T-CODE: CKM3(자재원장)

 

"CBO구매(BZ)"라는 프로세스 카테고리 내에 값이 들어온 모습이다.

 

 

 

 


 

[결론]

 

그런데 이상하다. 분명 입고임에도 "R" 체크가 되지 않은 것에만 처리가 가능하다니? 테스트를 해보니 스탠다드 프로세스 카테고리인 BBV, BF 등에도 BADI를 통한 지정이 안 먹혔다. 오로지 "R" 체크가 되지 않은 출고쪽 프로세스 카테고리만 이 BADI가 먹혔다.

 

이것때문에 주변 지인들에게도 물어보고 타사 사례도 확인해봤는데 정확한 사유를 알 수 없었다. 어쨌든 알아낸 내용을 공유해본다.

 

 

1. S/4HANA 1610 버전인 어떤 회사는 "R" 체크를 해둔 채로도 처리가 된다고 한다.

2. 2020년쯤 구축했던 모 회사는 "R" 체크 시 에러가 나길래 파라메터와 인핸스먼트를 이용해서 에러를 회피하는 방법을 사용했다고 한다. 그런데 이것때문인지 해당 항목의 원가구성요소 분할이 틀어지는 문제가 생겼고 그것도 따로 보정을 해줘야 했다고 한다.

3. 2022년에 오픈한 모 회사는 입고임에도 그냥 "R" 체크를 해제하고 처리했다고 한다. 별 문제는 없었다고 한다.

 

 

이번에 내가 구축하는 프로젝트에서는 3번 방법으로 해보려고 한다. 진행 중에 이슈 사항이 있다면 추가 공유하도록 하겠습니다. 방문자분들께서도 이 설정과 관련된 경험이 있으면 공유해주시면 감사하겠습니다.