자재코드를 생성하는 MM01에 CBO 필드나 메세지를 본적이 있나?
해당 부분을 유지보수 하기 위해 관련 패키지의 Enhancement에 Screen Exit 을 찾아봤나?
그러나 아무리 찾아봐도 Screen Exit은 없을 것이다.
아래는 mm01에 연결된 Exit이다.
그럼 어떻게 MM01에 CBO 스크린을 그려넣고 데이터를 이동시킬 수 있는 것일까?
답은 Enhancement와 IMG세팅(SPRO)에 있다.
1. XMG0 패키지에 CBO스크린을 그려주고
2. Function Exit을 유지보수해주고
3. 티코드 OMT3에서 서브스크린을 할당해주면 된다.
* 만약 MM01에서 입력한 CBO 데이터가 MARA에 추가되어야 한다면 사전에 MARA에 APPEND STRUCTURE를 하여 Table Enhancement를 해줘야 한다.
아래는 MM01 화면이다.
각 자재유형 별 세팅에 따라 구체적으로 화면이 다를 수 있지만, 가장 기본적인 화면이다.
1. CBO 스크린 그리기
SE80에서 Function Group XMG0에서 스크린(9000)을 생성한다.
스크린을 생성할 때 반드시 스크린 타입은 'Subscreen'을 선택해야 한다.
MM01의 메인 스크린에 cbo 스크린을 넣기 위해서는 서브스크린을 넣어야 하기 때문이다.
생성한 스크린의 레이아웃을 그려주며 추가할 인풋필드를 Dictionary에서 가져온다.
필요한 경우 input check를 수행 로직을 넣어줘야한다.
2. Function Exit 구현하기
스크린을 다 그렸다면, Function Exit을 통해 Enhancement를 구현해야한다.
CMOD에서 프로젝트를 생성하고 mm01에서 입력한 데이터를 mara에 업데이트 할 때 Enhance할 수 있는 Exit을 할당한다.
MM01에서 데이터를 입력하면 Exit 펑션 임포트 파라미터에 스트럭쳐'wmara'에 넣고 'cmara'로 리턴한다.
따라서 cmara의 필드에 cbo 스크린 9000에 정의한 필드 값을 넘겨줘야 한다.
그런데 스크린 9000의 인풋필드명 mara-field1을 넘겨주려고 하면 신택스 오류가 발생한다.
왜냐하면 mara-field1은 스크린에만 있는 필드이고 abap에서 데이터를 받을 수 있는 물리적 메모리를 가진 필드 선언이 안되어 있기 때문이다.
XMG0 펑션그룹의 Z네이밍 TOP 인크루드문에 Tables 문으로 mara를 선언하여 스크린 필드의 데이터를 받아 줄 스트럭쳐를 선언해준다.
마지막으로 프로젝트를 활성화 함으로써 abap 단에서 작업을 마무리한다.
3. IMG 세팅
티코드 SPRO에서 다음 경로를 따라 들어가거나 티코드 OMT3를 들어간다.
자재유형에 따른 스크린시퀀스넘버(21)을 선택하고 테이블컨트롤에서 라인을 선택한 후 좌측 폴더를 더블클릭하는 식으로 하위계층을 파고 들어간다.
스크린이 0001인 라인 중 하나를 선택하여 프로그램을 SAPLXMG0(펑션그룹명) 입력하고 스크린에 9000을 입력하고 저장한다.
그러면 워닝이 하단에 출력되는데 엔터를 치고 CTS를 채번하여 저장한다.
이제 세팅이 완료되었다.
자재를 생성하여 MARA에 필드가 반영되는지 확인하면 된다.
99. 테스트


MM01에서 자재를 생성한다.
IMG세팅에서 Basic data1 뷰에 세팅했으므로 해당 스크린에 나와야 할 것이다.

CBO 스크린이 MM01에 구현되었다.
FIELD1에 AA, FIELD2에 BB를 넣고 자재코드 656을 저장해보자.

자재코드 656에 field1, field2 필드 각각 입력한 값이 저장되었다.
'SAP > Enhancement' 카테고리의 다른 글
[ABAP] 11. SAP Classic BADI -2 (0) | 2024.11.06 |
---|---|
[ABAP] 10. SAP Classic BADI -1 (0) | 2024.11.06 |
[ABAP] 08. SAP Customer Exit: 정리 (0) | 2024.11.05 |
[ABAP] 07. SAP Customer Exit: Screen Exit (0) | 2024.11.05 |
[ABAP] 06. SAP Customer Exit: Menu Exit (0) | 2024.11.04 |