Manual : User Exit
Download
Report
Transcript Manual : User Exit
Manual : User Exit
목차
1. Exit의 원리
2. Exit 이란
3. Customer Exit 찾기 1
4. Customer Exit 찾기 2
5. User Exit과 Customer Exit의 연결
6. Function Exit Parameter
7. CO-PA 주요 Exit
8. User Exit번호와 Function Exit 연결(특성유도)
9. CO-PA 특성유도 User Exit 설명
10. User Exit번호와 User Exit Logic
11. User Exit번호와 Function Exit 연결(평가)
12. FI전표 유효성점검과 대체
13. FI전표 유효성점검 IMG
14. FI전표 유효성점검 Logic 만들기
15. FI전표에서의 예산 Check
16. 매출채권, 받을어음의 손익센타 대체(FI)
부록 : Exit에서 사용하는 간단한 ABAP 구문
Exit의 원리
User 자신의 Program이 불리어 지는 SAP Program의 Point
SAP Standard Program Flow
SAP Standard Program Flow 중 User가
원하는 대로 Control(Data의 변화나 오류 점검)
을 할 수 있도록 SAP에서 구멍을 뚫어 놓은 것
활성화
User Exit
Include 문
평소는 Direct로 Process가 흐르지만 Enhancement
를 활성화 하면 그 곳을 거쳐가게 된다.
Add On Program으로는 Exit과 같은 효과를 낼 수
없다.
Exit이 없으면 Table을 직접 건드려야 하는 일이 발생
또는 Source를 고쳐야 한다.
Enhancement
Customer Exit
기능확장
Exit이란
Customer Exit
User Exit
Project(CMOD)
기능확장 지정
SAP가 준비한 Standard Enhancement Program
생성, 변경 : SMOD
Customer Exit을 사용하는 User Program
생성, 변경 : CMOD
일반 Developer가 Project 성격에 따라 수정
(통상 Customer Exit의 Include문 사용)
필요한 Customer Exit 만 선택하여 활성화
Customer Exit, Enhancement
Function Exit Module
평가전략 U10
특성유도(기능확장) U20
기타 특성으로 인한 평가(기능확장) U30
Include문
User Logic
IF Exit_No = ‘U10’.
…
ENDIF.
User Exit
Customer Exit 찾기
Exit을 걸기 전에 내가 걸고자 하는 기능의 Customer Exit이 있는 곳과 가능성을 파악해야 한다.
T-code : SMOD
Application 구성요소를 찾아 Customer Exit을 찾는다.
선택을 한 후 Double Click
SAP가 미리 준비한 기능확장(= Enhancement = Customer Exit)
각 모듈별로 가능한 기능이 정리되어 있다.
기능확장 Component 별로 어떤 기능을 갖고 있는지 확인 (다음 Page)
Customer Exit 찾기 2
찾은 Customer Exit을 조회한다.
Customer Exit에는 1개 이상의 Function Module Exit이 있으며
각 설명을 볼 수 있다.
Function Module Exit을 Double Click하면
Source Code가 보인다.
각 Function Module Exit에 대해 Document를
찾아보면 아래와 같은 설명과 User Exit 예제가
제공된다.
User Exit과 Customer Exit의 연결
T-Code : CMOD
Project를 생성하여 사용할 Customer Exit 을
지정한 후 거기에 소속된 Function Module
Exit의 Include문에 User의 Logic을 입력한다.
활성화를 시키면
파란불
처음에는 Include문이 비어있음
생성하고
Include 문에
User Logic을 입력
Function Exit Parameter
EXIT_SAPLKEDRCOPA_001
Import
구조 CE0XXXX(경영단위)
Export
Function Module Exit의 Source를 보고
당황하지 말자
Tab Page의 Import, Export를 보면 자세한
정보를 알 수 있다
즉 Import Data를 이용하여 Export Data를
변경하는 것이다.
결국 IMG Setting에 의해 유도된 특성을 Table에
Write하기 전에 User가 변경할 수 있는 여지를 제공한 것
CO-PA 주요 Exit
Customer
Enhancement
특성유도
COPA0001
Function Module Exit
EXIT_SAPLKEAA_001
4.X 이상에서 사용 안함
EXIT_SAPLKEAA_002
4.X 이상에서 사용 안함
EXIT_SAPLKEDRCOPA_001 4.X 이상버전 특성유도에 사용
구조 CE0XXXX
평가
COPA0002
EXIT_SAPLKEAB_001
EXIT_SAPLKEAB_002
EXIT_SAPLKEAB_003
EXIT_SAPLKEAB_004
Table CE1XXXX, CE2XXXX
Actual Data Valuation
Plan Data Valuation
Valuation Using Conditions
Flexible Assignment Costing Key
KOMK/KOMP(가격결정)
구조 COPA_EXIT_KEAB_004(원가계산키)
CO-PA 특성유도 User Exit 설명
예제
영업사원 특성 유도 기능확장
SAP R/3 표준으로 영업사원 특성유도 실패
영업사원정보를 HR Master 사용시 영업사원별 PA 배부 불가
사용자정의 특성 WW100 등록
특성추출정의에서 기능확장으로 정의(U20)
판매오더의 파트너 (VBPA) Table에서 영업사원을 읽어서 유도
유도된 영업사원번호별 성명을 인사 Master Table에서 찾아서 Update
1.
2.
3.
4.
5.
6.
7.
특성구조 CE0EH00와 동일 구조 Data 정의 (TABLE: CE0_EH00 LIKE CE0EH00)
영업사원번호 특성WW100의 점검 Table(T2500)과 Text Table(T25A0)과 동일 구조 Data 정의
BEGIN OF T_2500 OCCURS 0.
INCLUDE STRUCTURE T2500.
END OF T_2500.
경영단위와 User Exit 번호를 Check (Case ~ When ~ Endcase, 혹은 IF ~ ELSE ~ ENDIF사용
특성 정보를 사용자 정의 구조에 복사
CE0_EH00 = I_COPA_ITEM.
기 유도 특성인 판매오더로 VBPA TABLE(파트너)에서 영업사원을 검색)
SELECT SINGLE * FROM VBPA (영업문서 : 파트너 Table)
WHERE VBELN = CE1_EH00-KAUFN (판매오더 번호)
AND
PARVW = ‘AF’.
검색된 값으로 구조의 특성치를 변경 (CE0_EH00-WW100 = VBPA-PERNR)
변경이 완료되었으면 Exporting 구조에 사용자 정의 구조를 복사
E_COPA_ITEM = CE0_EH00.
User Exit 번호와 Function Exit연결(특성유도)
CO-PA 평가 User Exit Logic
예제
SD에서 VPRS를 못 받는 경우 Material Master에서 직접 표준원가 가져오는 Exit
(영업의 판매사원에게 제조원가 정보를 보이지 않게 하기 위하여 SD의 Pricing Procedure에서 VPRS를
제외하고 대신 판매오더 원가 Simulating용 조건유형 EK02를 사용한다.(CO IMG))
CO-PA는 SD의 조건유형 VPRS로 부터 제조원가를 받게 되는데 이 값이 0 이므로 CO-PA는 직접 Table
을 찾아서 값을 가져와야 한다.
1.
2.
3.
4.
5.
6.
7.
Import Parameter중 Data 구조를 확인 (예) EP_SOURCE. (CE1EH00)
해당 구조를 복사할 구조(DATA)을 정의
(예) DATA: CE1_EH00 LIKE CE1EH00.
Data구조를 사용자가 정의한 구조로 복사
(예) CE1_EH00 = EP_SOURCE) CE1EH00의 Data가 EP_SOURCE를 통하여 CE1_EH00으로
Import
경영단위와 User Exit 번호일 때를 조건으로 지정
(예) WHEN ERKRS.
CASE ‘EH00’
WHEN EXIT_NR
CASE ‘U10’
이미 유도된 특성치를 이용, Table에서 원하는 특성을 찾는다.
찾을 Table의 Key를 확인
(예) SELECT * FROM MBEW WHERE MATNR = CE1_EH00-ARTNR AND …
Table에서 찾은 값을 사용자 정의 구조에 입력
(예) CE1_EH00-VV006 = MBEW-STPRS.
Logic이 완료되면 Export 구조로 복사
(예) EP_TARGET = CE1_EH00.
User Exit 번호와 Function Exit연결(평가)
평가전략
COPA0001
경영단위
CE1EH00 : 경영단위통화
CE1EH00 : 회사코드통화
User Exit No
FI전표 유효성점검과 대체
1. 개요
FI전표를 생성할 때 오류를 방지하기 위한 유효성점검(Validation)과 특정필드를 다른 값으로
바꾸기 위한 대체(Substitution)이 있다.
2. 절차
FI IMG의 유효성점검 또는 대체 항목에서 선행조건과 점검, 메시지, 대체 등에 User가 간단한
Boolian Logic으로 오류 Check 또는 특정필드의 바꾸기를 지정한다.
이 때 각각 FI전표가 입력되는 시점의 정보를 이용하므로 BKPF(전표Header Table)과 BSEG(전표
Line Item Table)의 FLD를 전부 조건으로 사용할 수 있다.
3. User Exit
기본적으로 사용할 수 있는 BKPF나 BSEG FLD로 User의 Logic이 불충분 할 경우 User Exit을
사용한다.
FI전표의 Exit은 Validation을 위한 RGGBR000와 Substitution을 위한 RGGBS000로 구성된다.
각 Program에 FORM <User Exit No> ~ ENDFORM 문을 사용하여 Logic을 입력하며 User
Exit No를 유효성점검이나 대체의 단계에 지정한다.
특별목적원장 IMG
FI전표의 Exit을 사용하려면 RGGBR000, RGGBS000를 COPY 한 ZRGGBR000, ZRGGBS000를
특별목적원장 IMG에서 Setting해야 한다.
앞으로 위의 Program에 의해 Exit이 걸린다는 것을
IMG에서 Setting하는 것
FI전표 유효성점검 IMG
다음 IMG Path를 통하여 유효성점검과 그 하위에 단계를 생성
단계마다 선행조건, 점검, 메시지 지정
회사코드별 유효성확인을 생성
호출점 : Header, Item, 전표완료
활성화
선행조건 만들기 : BKPF, BSEG 등의 FLD
와 Boolean 연산자를 이용
점검란에 종료(Exit의 번역)란에
User Exit 번호를 입력
Double Click
Double Click
User Exit 번호
FI전표 유효성점검 Logic 만들기
T-Code : SE38 (ABAP Editor)
초기에 RGGBR000와 RGGBS000를 ZRGGBR000, ZRGGBS000
로 Program Copy
2. EXIT 선언
1. Table선언
Exit에서 사용할 Table들을 정의
3. Exit 본문
전표에 입력한 Cost Center를 CSKS(CCtr Master Table)에서
찾아 코스트센타 범주에 따라 제조경비, 판관비를 서로 기표하지
못하게 하는 내용
FI전표 Exit Source Program 재생성
Exit Program은 Client Independent이기 때문에 동일 Server를 사용할 경우 문제가 없지만
개발 Server에서 운영 Server로 옮긴 후 Substitution/Validation/Rule등이 제대로 넘어가지
않는 경우가 있어 그럴 때에는 다음 화면과 같이 Reporting Program을 돌려서 Program 을
재생성 한다.
RGUGBR00 Program을 실행시켜서
아래 Check Box에 Click 하고 Run하면
GBAAAAA
GBT XXXXX
GBS XXXXX
과 같은 Source Program이 생성된다.
이와 같이 생성되는 Program은 절대로
CTS시키면 안되고 반드시 이 Program
을 통해 생성해야 한다.
FI전표에서의 예산 Check
예제
예산통제를 받을 Object(예산번호)로 Internal Order를 사용
예산번호(I/O)에 Plan Version 20번으로 원가요소별로 계획한 후 예산으로 간주
예산 Check 해당계정으로 FI전표 Line Item 입력시 COSP Table에서 해당 오더별 원가요소별
예산(Version 20)과 과거실적(Actual)+현재 기표하고자 하는 금액(BSEG-HSL)을 비교하여
초과 여부를 판단, Error Message를 보여주는 User Exit
FI IMG 유효성점검의 선행조건에서 오더가 Null이 아니면서 예산Check 해당계정이면(SET으로
등록, IN구분 사용), 점검의 종료(Exit을 번역한 말)에 User Exit 번호를 입력
1.
2.
3.
4.
오더 범주가 ‘1’(내부오더)이 아니면 Return
COSP에서 값유형 = 01, Version 20인 WKG001~WKG12 총 Sum Budget
COSP에서 값유형 = 04, WKG001~WKG12 총 Sum Actual
BSEG-HSL + Actual > Budget 인 경우 Error Message
message E(001) “예산을 초과하였습니다.”
참고 : FI의 통화유형
GLT0
거래통화
TSL
회사코드통화 HSL
그룹통화
KSL
CO의 통화유형
COSP
거래통화
오브젝트통화
관리회계통화
WTG
WOG
WKG
FI전표 대체(Substitution)
대체의 단계를 생성하면 아래와 같이 대체할 필드를
선택하게 된다.
상수값 : 일정 조건일 때 상수값 대체
종료(Exit) : Exit 사용하는 번호
필드 – 필드 : BSEG의 FLD를 타 필드로 대체
Exit No
FI전표 대체(Substitution)
대체는 ZRGGBS000에서 정의한다.
CO 내부전기에 대한 유효성점검
유효성점검 생성
단계 생성
처음에는 Menu에서 찾아서 입력
점검 생성
Exit 번호 지정
완료 후 활성화
Double Click
CO 내부전기에 대한 유효성점검(Exit Logic)
Receiver의 코스트센터 범주에 따라 판관비, 제조경비 구분 Check
Program : ZRGGBR000
참조 구조
COBL_GENERAL
COBL_SENDER
COBL_RECEIVER
생산오더 저장시 원가추정 여부 Check
SAP 표준의 문제
SAP 표준에서 표준원가 Release가 안 되어 있어도 생산이 진행된다.
생산 확정에서 입고, SD의 출고까지 Error없이 진행되다가 SD 대금청구시 Error가 난다.
이 때 표준원가 Release를 하려면 이미 물류 전표가 생성되었으므로 Release가 되지 않는다.
Exit 개요
생산오더 생성시 표준원가 추정 Release여부를 Check하여 Release 안된 제품에 대해서는
생산오더가 생성되지 않게 하는 Exit
Customer Exit : PPC00006 (오더헤더필드에 대해 디폴트를 지정하기 위한 기능확장)
Function Exit : EXIT_SAPLCOZF_003
IF CAUFVD_IMP-MATNR NE ''.
SELECT SINGLE * FROM MBEW
WHERE BWKEY = CAUFVD_IMP-WERKS
AND MATNR = CAUFVD_IMP-MATNR
AND BWTAR = '
'.
IF MBEW-LPLPR = 0.
MESSAGE E000(ZCA001) WITH TEXT-101.
EXIT.
ENDIF.
ENDIF.
CAUFVD_IMP : 생산오더 헤더Data 구조
MATNR : 생산오더의 자재번호
MBEW : 자재 평가 Data
LPLPR : 표준원가 Release된 금액
판매오더 원가추정의 통제
현업요구 특징
제품의 표준제조원가를 영업사원에게 노출시키지 않으면서 총원가개념 (원가계산표 사용)의
원가를 볼 수 있게 하기를 원함
Process
판매오더 저장시 총원가(조건유형 : EK02)가 자동저장 되며 판매오더의 원가계산 화면에서
는 원가추정을 할 수 없게 함
Customer Exit : COPCP005 (자재평가에 대한 User Exit (전략 U))
Function Exit : EXIT_SAPLCK21_002
IF SY-TCODE = 'VA01' OR
SY-TCODE = 'VA02' OR
SY-TCODE = 'VA03'.
IF IMP_KLVAR = 'IPC4' AND
SY-DYNNR = '4611' AND
SY-UCOMM = 'PKAL'.
MESSAGE E000(ZCA001) WITH
TEXT-601.
EXIT.
ENDIF.
ENDIF.
IMP : 원가추정 Data 구조
KLVAR : 원가계산 변형
SYST : System Parameter 구조
SY-TCODE : 현행 Transaction Code
SY-DYNNR : 화면번호
SY-UCOMM : 실행 Icon의 Code
SD->FI 전표의 참조FLD에 영업사원 사번과 영업팀을 입력
현업요구 특징
SD로부터 발생된 FI 전표의 참조필드에 영업사원 사번과 영업팀(영업그룹)을 기록
Process
판매오더 저장시 총원가(조건유형 : EK02)가 자동저장 되며 판매오더의 원가계산 화면에서
는 원가추정을 할 수 없게 함
Customer Exit : SDVFX002 (User Exit for A/R Line (transfer to accounting))
Function Exit : EXIT_SAPLV60B_002
DATA: LV_PERNR(10) TYPE C.
SELECT SINGLE PERNR INTO LV_PERNR
FROM VBPA
WHERE VBELN = CVBRP-AUBEL
AND ( PARVW = 'AF' OR PARVW = 'VE' ).
XACCIT-XREF1 = LV_PERNR.
XACCIT-XREF2 = CVBRP-VKGRP.
VBPA : 영업문서 파트너
PARVW : Partner Function
CVBRP : 대금청구 Header
XACCIT : 회계 Interface 구조
Report Painter 실행시의 권한Check Exit
현업요구 특징
자기 부서(현장)의 Data만 조회
Process
Report Painter Report의 실행시 선택화면의 FIELD 정보를 참조하여 권한 Check
Customer Exit : GRWTAUTH (Report Painter Authorization)
Function Exit : EXIT_SAPFGRWX_001
선택화면 입력정보 : I_T_SELSCREEN_PARAMS
일반정보
: Report, Report Group, Library 등
Report Painter 실행시의 권한Check Exit (실행화면)
Field Exit
T-Code : RSMODPRF
• 특정 Field에 정해진 값만 제한하여 받게 하는
사용자 정의 Exit
• 모든 경우에 전부 적용하려면 Global로,
특정 프로그램에만 적용하려면 Program명과
화면번호를 지정한다.
• 그 Field의 값을 제한하는 Coding을 한다.
Exit에서 사용하는 간단한 ABAP 구문
SELECT
Table에서 하나 이상의 특정 Record를 찾는다.
DATA:
Program 에서 사용할 변수, 구조, Internal Table 등을 선언
TABLES:
Program에서 사용할 Table을 선언
IF ~ ELSEIF ~ ENDIF
CASE ~ WHEN ~ ENDCASE
특정조건에 따라 Statement 문이나 타 Program으로의 Branch
IF 조건문과 비슷하나 경우가 많을 경우
간단한 ABAP 구문
SELECT : Table에서 Record Read
SELECT SINGLE <col>/* [INTO <f1>] FROM <itab> WHERE …
SELECT * FROM <itab> WHERE …
정의 : TABLE, DATA
INSERT, UPDATE,
APPEND
CASE <f1>.
WHEN <f10> OR <f11>.
<statement1>
WHEN <f20> OR <f21>.
<statement2>
…
WHEN OTHERS.
ENDCASE.
SY-SUBRC
IF <f10> OR <f11>
<statement1>
ELSEIF <f20> OR <f21>
<statement2>
ELSEIF <f30> OR <f31>
<statement3>
ELSE
<statement4>
ENDIF