Manual : User Exit
목차 Exit의 원리 Exit 이란 Customer Exit 찾기 1 Customer Exit 찾기 2 User Exit과 Customer Exit의 연결 Function Exit Parameter CO-PA 주요 Exit User Exit번호와 Function Exit 연결(특성유도) CO-PA 특성유도 User Exit 설명 User Exit번호와 User Exit Logic User Exit번호와 Function Exit 연결(평가) FI전표 유효성점검과 대체 FI전표 유효성점검 IMG FI전표 유효성점검 Logic 만들기 FI전표에서의 예산 Check 매출채권, 받을어음의 손익센타 대체(FI) 부록 : Exit에서 사용하는 간단한 ABAP 구문
Exit의 원리 User 자신의 Program이 불리어 지는 SAP Program의 Point SAP Standard Program Flow 중 User가 원하는 대로 Control(Data의 변화나 오류 점검) 을 할 수 있도록 SAP에서 구멍을 뚫어 놓은 것 SAP Standard Program Flow 평소는 Direct로 Process가 흐르지만 Enhancement 를 활성화 하면 그 곳을 거쳐가게 된다. 활성화 User Exit Include 문 Add On Program으로는 Exit과 같은 효과를 낼 수 없다. Exit이 없으면 Table을 직접 건드려야 하는 일이 발생 또는 Source를 고쳐야 한다. Enhancement Customer Exit 기능확장
Exit이란 Customer Exit User Exit SAP가 준비한 Standard Enhancement Program 생성, 변경 : SMOD Customer Exit Customer Exit을 사용하는 User Program 생성, 변경 : CMOD 일반 Developer가 Project 성격에 따라 수정 (통상 Customer Exit의 Include문 사용) User Exit Project(CMOD) 필요한 Customer Exit 만 선택하여 활성화 기능확장 지정 Customer Exit, Enhancement 평가전략 U10 특성유도(기능확장) U20 기타 특성으로 인한 평가(기능확장) U30 Function Exit Module Include문 User Logic IF Exit_No = ‘U10’. … ENDIF. User Exit
Customer Exit 찾기 T-code : SMOD 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에 대해 Document를 찾아보면 아래와 같은 설명과 User Exit 예제가 제공된다. Function Module Exit을 Double Click하면 Source Code가 보인다.
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 Function Module Exit 특성유도 COPA0001 EXIT_SAPLKEAA_001 4.X 이상에서 사용 안함 EXIT_SAPLKEAA_002 4.X 이상에서 사용 안함 EXIT_SAPLKEDRCOPA_001 4.X 이상버전 특성유도에 사용 구조 CE0XXXX 평가 COPA0002 EXIT_SAPLKEAB_001 Actual Data Valuation EXIT_SAPLKEAB_002 Plan Data Valuation EXIT_SAPLKEAB_003 Valuation Using Conditions EXIT_SAPLKEAB_004 Flexible Assignment Costing Key Table CE1XXXX, CE2XXXX KOMK/KOMP(가격결정) 구조 COPA_EXIT_KEAB_004(원가계산키)
CO-PA 특성유도 User Exit 설명 예제 영업사원 특성 유도 기능확장 SAP R/3 표준으로 영업사원 특성유도 실패 영업사원정보를 HR Master 사용시 영업사원별 PA 배부 불가 사용자정의 특성 WW100 등록 특성추출정의에서 기능확장으로 정의(U20) 판매오더의 파트너 (VBPA) Table에서 영업사원을 읽어서 유도 유도된 영업사원번호별 성명을 인사 Master Table에서 찾아서 Update 특성구조 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. 3. 경영단위와 User Exit 번호를 Check (Case ~ When ~ Endcase, 혹은 IF ~ ELSE ~ ENDIF사용 4. 특성 정보를 사용자 정의 구조에 복사 CE0_EH00 = I_COPA_ITEM. 5. 기 유도 특성인 판매오더로 VBPA TABLE(파트너)에서 영업사원을 검색) SELECT SINGLE * FROM VBPA (영업문서 : 파트너 Table) WHERE VBELN = CE1_EH00-KAUFN (판매오더 번호) AND PARVW = ‘AF’. 6. 검색된 값으로 구조의 특성치를 변경 (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 을 찾아서 값을 가져와야 한다. Import Parameter중 Data 구조를 확인 (예) EP_SOURCE. (CE1EH00) 해당 구조를 복사할 구조(DATA)을 정의 (예) DATA: CE1_EH00 LIKE CE1EH00. Data구조를 사용자가 정의한 구조로 복사 (예) CE1_EH00 = EP_SOURCE) CE1EH00의 Data가 EP_SOURCE를 통하여 CE1_EH00으로 Import 4. 경영단위와 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 User Exit 번호 Double Click
FI전표 유효성점검 Logic 만들기 T-Code : SE38 (ABAP Editor) 초기에 RGGBR000와 RGGBS000를 ZRGGBR000, ZRGGBS000 로 Program Copy 2. EXIT 선언 3. Exit 본문 전표에 입력한 Cost Center를 CSKS(CCtr Master Table)에서 찾아 코스트센타 범주에 따라 제조경비, 판관비를 서로 기표하지 못하게 하는 내용 1. Table선언 Exit에서 사용할 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’(내부오더)이 아니면 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의 통화유형 CO의 통화유형 GLT0 COSP 거래통화 TSL 거래통화 WTG 회사코드통화 HSL 오브젝트통화 WOG 그룹통화 KSL 관리회계통화 WKG
FI전표 대체(Substitution) 대체의 단계를 생성하면 아래와 같이 대체할 필드를 선택하게 된다. 상수값 : 일정 조건일 때 상수값 대체 종료(Exit) : Exit 사용하는 번호 필드 – 필드 : BSEG의 FLD를 타 필드로 대체 Exit No
FI전표 대체(Substitution) 대체는 ZRGGBS000에서 정의한다.
CO 내부전기에 대한 유효성점검 Double Click 유효성점검 생성 단계 생성 처음에는 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. 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. 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을 선언 특정조건에 따라 Statement 문이나 타 Program으로의 Branch IF ~ ELSEIF ~ ENDIF CASE ~ WHEN ~ ENDCASE 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. IF <f10> OR <f11> <statement1> ELSEIF <f20> OR <f21> <statement2> ELSEIF <f30> OR <f31> <statement3> ELSE <statement4> ENDIF SY-SUBRC