SAP 11

SAP 화폐 출력

SAP는 화폐단위에 따라 값이 다르게 출력된다.DB에 300이라는 값이 저장되어있어도 매핑된 화폐단위에 따라 다르게 출력된다는 것이다. 시스템(ABAP 프로그램)에서 매핑된 화폐단위가 KRW라면 30,000으로 보이고 USD라면 300.00으로 보인다. 왜 그럴까?가장 먼저 화폐금액 필드인 CURR을 볼 필요가 있다.* CURR은 SAP에서 지정한 화폐를 다루는 컬럼 타입이다. 이 타입을 쓰면 SAP 내부적으로 로직이 트리거된다. 어떤 말인지는 아래에서 설명할 것이다.  CURR타입을 보면 소수점 2자리까지 갖는다.즉, CURR타입의 컬럼에 100이라는 값을 집어넣으면 100.00으로 다뤄지게 되는 것이다.  한편, SAP의 화폐단위테이블 TCURX를 살펴보면 KRW는 소수점을 다루지 않는다.(USD, ..

SAP/기타 2025.01.02

[ABAP] 번외. SAP MM01 EXIT

자재코드를 생성하는 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 Enhanceme..

SAP/Enhancement 2024.11.16

[ABAP] 11. SAP Classic BADI -2

MM01에서 생성된 자재코드를 MM02에서 변경하고자 할 때, Exit을 구현시켜 변경이 불가능하도록 강제로 구현해보자.​우선 MM01에서 자재코드를 생성한 뒤 MM02에서 자재의 단위를 변경시킬 때(재고만없다면) 워닝과 함께 변경이 가능하다. 그렇다면, 자재단위를 변경하고 저장 할 때 어떤 Exit이 수행될 지 확인하여 Exit이 구현될 수 있도록 Badi Implementation를 찾아야 한다.* Badi Implementation = Exit name​​다시 MM02에서 자재 단위를 변경 후 디버깅을 걸고 저장해보자.디버깅 화면으로 전환되면 브레이크포인트에 다음 옵션을 줘서 해당 로직에 걸리게 세팅한다.​그리고 디버깅을 쭉 돌리면(F8) 위 브레이킹포인트 조건에 따라 BADI exit이 수행되는 ..

SAP/Enhancement 2024.11.06

[ABAP] 10. SAP Classic BADI -1

BADI(Business ADD In)란 OOP 기반의 Enhancement다. Customer Exit이 Function module 기반의 Enhancement라면 BADI는 class를 이용한 Enhancement인 셈이다.​OOP와 Function 모두 모듈화를 위한 프로그래밍 방법이지만 Function은 재사용이 불가능(상황에 따라) 한 반면 OOP는 상속, 인터페이스 등 여러가지 방법을 통해 재사용이 가능하다는 점이다.​즉, 이번에 해볼 BADI 는 재사용이 가능하다는 것이다.Enhancement에서 재사용이 가능하다는 의미는 다음과 같다.​Customer Exit은 Function으로 구동된다. 즉 재사용이 불가능하다.따라서 Function Exit이 A프로젝트에 할당되어 있다면 A프로젝트가..

SAP/Enhancement 2024.11.06

[ABAP] 08. SAP Customer Exit: 정리

Customer Exit은 스크린, 메뉴, 로직에 대해 Function을 통해 스탠다드 티코드를 Enhancement 할 수 있는 방법이다.​티코드 'CMOD' 에서 프로젝트 라고 하는 Exit을 관리하는 묶음 단위를 먼저 정의(생성)해야한다.​정의했다면 프로젝트 안에 들어갈 Exit 명을 입력해야 한다.​Exit을 찾기 위해서는 가장 먼저,소스 혹은 오브젝트 내에 단서를 기준으로 Enhance 가능한 티코드인지 확인이 필요하다. Exit단서Function ExitCall customer-function 'xxx'Menu Exit+'xxx'Screen ExitCall customer-subscreen 단서를 찾았다면해당 부분의 티코드를 포함하는 개발클래스, 프로그램 정보, 스크린정보 등을 종합하여 SMO..

SAP/Enhancement 2024.11.05

[ABAP] 07. SAP Customer Exit: Screen Exit

Screen Exit이란 스탠다드 티코드의 화면에 cbo 필드를 추가하는 것이다.​SAP는 스크린의 서브스크린에 필드를 추가할 수 있도록 열어놓았는데, 바로 그 부분에 개입하여 exit을 수행하는 것이다.​앞서 봤던 Function Exit, Menu Exit과 동일하게 Screen Exit도 어떻게 수정포인트(Exit)를 찾을 수 있을까?​Function Exit이 'Call Customer-function'으로 시작하는 것 처럼Screen Exit도 'Call Customer-Subscreen'으로 시작한다.즉, 스크린 PBO 내에 'Call Customer-Subscreen' 이 있어야 하는데, 찾는 방법은 다음과 같다.    찾고자 하는 티코드 스테이터스를 띄우고 스크린 넘버를 더블클릭하여 로직을..

SAP/Enhancement 2024.11.05

[ABAP] 06. SAP Customer Exit: Menu Exit

SAP는 상단 메뉴바에도 유저 메뉴를 심을 수 있도록 열어놓았는데 해당 Exit 포인트를 Menu Exit이라고 한다.​먼저 티코드에 메뉴 Exit이 가능하도록 열려있는 티코드인지 확인이 되어야한다. 확인 방법은 다음과 같다. 스탠다드의 gui status 를 연다 MENU EXIT은 + 라는 문자와 3가지 문자로 구성되어 있다.설명에는 Customer Exit이라고 적혀있으므로 쉽게 식별 가능하다.​프로그램명(SAPLS38E)과 Exit 펑션코드(+PGE)를 찾았다면 Exit 명을 찾을 수 있다. 내가 수정하려는 Exit의 명칭은 SEUED001 이다.Exit 명을 찾았다면 이후 절차는 Function exit과 같다.티코드 CMOD -> 프로젝트 생성 -> Enhancement Assignment에 ..

SAP/Enhancement 2024.11.04

[ABAP] 05. SAP Customer Exit: Function Exit

수정해야 할 부분에 걸려있는 Function 모듈을 찾았다면, 어떻게 수정해야 할까?​​먼저 티코드 CMOD에서 *프로젝트를 정의한다.*프로젝트: Exit(customer function)을 묶어 관리하는 하나의 묶음단위프로젝트를 만들었다면 프로젝트 안에 Exit(Function)명을 입력해야 하므로 스탠다드 티코드 로직 안에 있는 Exit 포인트(Call Customer~)를 찾아야 한다.단, 해당 Exit 포인트가 내가 수정할 부분이 맞는지 점검이 필요하다. 위 단계에 따라 Exit 명을 확인했다면 프로젝트에 Exit을 입력한다. 프로젝트에 Exit 할당이 끝났다면, 해당 Exit(Function)에 CBO 로직을 삽입해야 한다. Z INCLUDE문은 로직을 입력할 수 있다.​본 포스팅에서 예제로 해..

SAP/Enhancement 2024.11.04

[ABAP] 04. SAP Customer Exit

Customer Exit은 Function 기반의 Exit이다.SAP는 스탠다드 티코드 곳곳에 customer function을 심어놓았다.해당 customer function에는 Z네이밍의 INCLUDE 프로그램이 선입력되어있다.​알다시피 우리는 Z프로그램을 수정할 수 있다.즉, SAP는 유저에게 스탠다드 티코드의 수정 포인트로써 Z프로그램을 customer function이라는 이름의 특수 function에 심어놓은 것이다.​customer function도 결국 function이므로 sap의 가이드에 따라 파라미터를 넣고 받아야 한다는 점은 있지만,기존 스탠다드 티코드의 정합성을 깨트리지 않기 위함이 아닐까?​먼저 Customer Exit은 3가지 종류가 있다.프로그램 로직을 수정할 수 있는 Fun..

SAP/Enhancement 2024.11.04

[ABAP] 01. SAP Implicit Enhancement

Implict Enhancement란 스탠다드 오브젝트(펑션, 서브루틴 등)의 처음이나 끝에 소스를 추가하여 우회할 수 있는 방법을 의미한다.오브젝트의 시작과 끝에 CBO로직을 추가함으로써 기존 로직은 유지하되 요구사항은 충족시킬 수 있는 것이다.​​가령 사용자가 이런 요구를 했다고 가정해보자.화면에 그리드가 출력될 때 어떤 프로그램에서 호출된 것인지 알 수 있도록 팝업을 띄워주세요! 물론 정석은.. alv를 띄워주는 펑션 앞에 type i 메세지를 뿌려주는 것이다.alv 펑션이 쓰인 곳이 100곳이라고 해도 일일이 다 쫒아가서 수정하는 것도 고되지만 좋은 방법이다.​하지만 좀 더 쉬운 방법이 없을까?​펑션을 호출하는 프로그램을 알려주는 시스템 값인 SY-CPROG 값을 이용한다면,SY-CPROG를 al..

SAP/Enhancement 2024.11.04