sap 增強.docx_第1頁
sap 增強.docx_第2頁
sap 增強.docx_第3頁
sap 增強.docx_第4頁
sap 增強.docx_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

sap增強 2009年08月26日 星期三 19:46 1、關(guān)于增強的簡單介紹 1.1 SMOD包含具體的增強,而CMOD是包含一組SMOD編寫的增強. 1.2 User exits (Function module exits)是sap提供出口,它的命名規(guī)則如下: EXIT_ 示例: sd的VA01事務(wù),對應(yīng)的程序是SAPMV45A ,你會在程序里查到(用CALL CUSTOMER-FUNCTION字符串)如下代碼: CALL CUSTOMER-FUNCTION 003 exporting xvbak = vbak xvbuk = vbuk xkomk = tkomk importing lvf_subrc = lvf_subrc tables xvbfa = xvbfa xvbap = xvbap xvbup = xvbup. 則exit calls function module的名稱就是: EXIT_SAPMV45A_003 2、先試用SMOD建立一個SAP增強 2.1、選擇一個增強,如:SDVFX001 ,點擊修改,進(jìn)入sap增強維護(hù)屏幕; 2.2、點擊組件按鈕,進(jìn)入組件維護(hù)屏; 2.3、將光標(biāo)移到功能模塊名,輸入模塊名,如:EXIT_SAPLV60B_001; 2.4、選擇代碼修改按鈕進(jìn)入函數(shù)模塊; 2.5、雙擊函數(shù)模塊的包含單元,進(jìn)入包含單元加入自定義代碼并激活保存; 3、使用CMOD建立增強項目 3.1、輸入自定義的項目名,點擊創(chuàng)建; 3.2、進(jìn)入增強項目,選擇配置增強,進(jìn)入增強配置屏幕; 3.3、輸入增強名如:SDVFX001 3.4、保存,并退出; 4、使用CMOD將增強項目激活,便大工告成。*小技巧 透視ERP增強(一)什么是增強(Enhancement)?簡單地說,增強就是ERP系統(tǒng)中標(biāo)準(zhǔn)程序的出口,在該出口中由用戶根據(jù)企業(yè)實際需求編寫客戶化邏輯代碼。增強是ERP系統(tǒng)設(shè)計時考慮到企業(yè)實際的流程有可能和系統(tǒng)默認(rèn)標(biāo)準(zhǔn)流程不同,在標(biāo)準(zhǔn)流程框架下專門留的接口,每個接口對應(yīng)一個客戶化函數(shù),這些出口函數(shù)有標(biāo)準(zhǔn)處理程序傳入的參數(shù)和輸出參數(shù),用戶可根據(jù)系統(tǒng)輸入?yún)?shù)做條件編寫適合本企業(yè)流程的邏輯,然后通過輸出參數(shù)傳輸回。(二)用戶增強分類SAP的用戶增強通常包括下面3類。1.E類:Enhancement exits,即通常所謂的用戶出口(User_exit )用戶出口也叫功能出口(Function Exit)。使用Tcode:SE37搜索EXIT*,找到的函數(shù)大都是做系統(tǒng)預(yù)留的出口函數(shù),前面說過,用戶出口是標(biāo)準(zhǔn)程序留給用戶的接口,標(biāo)準(zhǔn)程序通常不允許用戶任意修改,如果修改需要申請Access Key,而且修改標(biāo)準(zhǔn)程序可能導(dǎo)致的錯誤erp公司通常是不負(fù)責(zé)的。在SAP中,自定義的程序通常以保留字Y或Z開頭,因此,出口函數(shù)中都預(yù)包含了一個Z開頭的程序。2.C類:GUI接口(GUI codes)3.S類:屏幕增強(Screen Exit)比如,在建立采購訂單,工單和固定資產(chǎn)主數(shù)據(jù)時,系統(tǒng)都預(yù)留屏幕增強,也就是說允許用戶自定義用戶輸入界面并編寫相應(yīng)的輸入輸出處理程序。在各類增強中,可能還用戶自己定義結(jié)構(gòu)或表格,系統(tǒng)對應(yīng)類型T類。比如增強MM06E005允許用戶建立兩個結(jié)構(gòu)CI_EKKODB和CI_EKPODB。接下來將重點介紹功能出口的應(yīng)用。(三)組織用戶增強相關(guān)增強表格:MODSAP:增強表格TFDIR:包括出口函數(shù)在內(nèi)的所有函數(shù)表(E類)CUATEXTS:修改 GVI 界面,界面: 菜單文本被客戶(C類)TSDIR:動態(tài)程序區(qū) CALL CUSTOMER SUBSCREEN(S類)* 對于以EXIT開頭的出口函數(shù),TFDIR-MAND值為C表示此出口函數(shù)被激活。相關(guān)增強檢查函數(shù):MODX_FUNCTION_ACTIVE_CHECK:檢查E類用戶出口是否被激活。MODX_MENUENTRY_ACTIVE_CHECK:檢查C類增強激活狀況MODX_SUBSCREEN_ACTIVE_CHECK: 檢查S類增強激活狀況你可能會發(fā)現(xiàn),SAP的各模塊的任何一個事務(wù)碼(Tcode)對應(yīng)的標(biāo)準(zhǔn)程序都留下了大量的用戶出口,正是SAP靈活的配置功能和強大的用戶出口才使其產(chǎn)品輕松應(yīng)對各種復(fù)雜需求成為可能,系統(tǒng)還為能快速找到和激活這些增強進(jìn)行了有效組織,各類增強被記錄在table中并且提供了相關(guān)檢查函數(shù),從而更方便企業(yè)用戶。熟悉ABAP開發(fā)的朋友通常都收集了一個可以輸入事務(wù)碼快速找到系統(tǒng)留下的所有出口的程序,下表就是一個檢測系統(tǒng)增強被激活的簡單參考程序。* 該程序可以檢測出系統(tǒng)所有被激活的用戶增強.* By Stone Fu. on 2006/11/07 .* Used to find out all the activated user-exit of SAP .report zfindactexit .tables: modsap,tfdir.data : begin of itab_exit occurs 0, funcname like tfdir-funcname, mand like tfdir-mand, name like modsap-name, end of itab_exit .data : field1(30)._select afuncname amand bnameinto table itab_exitfrom tfdir as a inner join modsap as b on afuncname = bmemberwhere amand = Cand afuncname = bmember .format color col_heading intensified on.write:/1 sy-vline,2 Enhancement Name,21 sy-vline ,22 Activated Exit Function,95 sy-vline.write:/(95) sy-uline.loop at itab_exit.format color col_normal intensified off.write:/1 sy-vline,2 itab_exit-name hotspot on,21 sy-vline ,22 itab_exit-funcname,95 sy-vline.endloop.at line-selection.get cursor field field1.set parameter id MON field sy-lisel+1(10).call transaction SMOD and skip first screen.有一種直接有效的查找用戶出口增強的方法,就是使用函數(shù)MODX_FUNCTION_ACTIVE_CHECK,如圖1。圖1中的判斷語句If tfdir-mand = aktiv_flag(常數(shù)C)則出口函數(shù)active標(biāo)志=X,表示該用戶出口被激活,處理邏輯將從標(biāo)準(zhǔn)程序轉(zhuǎn)入出口函數(shù),在該語句設(shè)置斷點然后運行任一個事務(wù)碼,都會調(diào)用該函數(shù)判斷是否存在用戶出口。(四)增強應(yīng)用實例業(yè)務(wù)背景:如果采購訂單已經(jīng)做了發(fā)票校驗后,則不再允許用戶修改價格。相關(guān)程序:MM06EFPO_POT_FUELLEN| MM06EF0C_CUSTSCR1_ITEM_SET_DAT相關(guān)Tcode:SMOD|CMOD如果沒有啟動采購審批功能,SAP標(biāo)準(zhǔn)功能是允許用戶隨時修改采購價格的,不同的企業(yè)有對采購價格控制有不同的策略,甲企業(yè)規(guī)模較小為了省事可能為以后數(shù)月的采購開了一個大采購單,如果中途材料價格變動則直接修改價格就行,乙集團(tuán)則嚴(yán)格控制采購價格,采購價格由總部集中維護(hù),各企業(yè)采購員只需要維護(hù)采購數(shù)量等信息等,真因如此,ERP系統(tǒng)顯然不會去禁止用戶修改價格,如果企業(yè)確實需要如此,則可通過增強實現(xiàn)。前面已經(jīng)介紹過如何通過在函數(shù)MODX_FUNCTION_ACTIVE_CHECK設(shè)置斷點跟蹤系統(tǒng)每個事務(wù)預(yù)留的用戶出口,你很快將發(fā)現(xiàn)增強MM06E005的EXIT_SAPMM06E_017用戶出口非常適合此業(yè)務(wù)背景。首先來看看增強的EXIT_SAPMM06E_017用戶出口(以下稱017出口)處理流程,Include程序MM06EFPO_POT_FUELLEN被專門用來處理增強出口,調(diào)用了子程序CUSTSCR1_ITEM_SET_DATA_PAI(對應(yīng)下一級Include程序MM06EF0C_CUSTSCR1_ITEM_SET_DAT),分析Include程序MM06EF0C_CUSTSCR1_ITEM_SET_DAT的代碼,如下表,這個程序是從系統(tǒng)原本Copy出來的,注意本人所加的附注粗體部分:*-* User-Exit fr Positionsfelder versorgen (PAI)FORM custscr1_item_set_data_pai USING im_no_screen LIKE fc_call. 770427DATA: l_ucomm LIKE sy-ucomm, l_enj_call TYPE c.STATICS: first_call(1) TYPE c VALUE X, active LIKE sy-calld.ENHANCEMENT-POINT CUSTSCR1_ITEM_SET_DATA_PAI_02 SPOTS ES_MM06EF0C_CUSTSCR1_I_SET_DAT INCLUDE BOUND .*$*$-Start: CUSTSCR1_ITEM_SET_DATA_PAI_02-$*$*ENHANCEMENT 1 OI0_COMMON_MM06EF0C_ITEM_S_DAT. active version* C5030897 I.Twardowski Implementation of BADI for OGSDPERFORM OI0_BADISCR1_ITEM_SET_DATA_PAI.ENDENHANCEMENT.*$*$-End: CUSTSCR1_ITEM_SET_DATA_PAI_02-$*$*IF NOT first_call IS INITIAL.CLEAR first_call.*注釋: MODX_FUNCTION_ACTIVE_CHECK用來檢查017出口是否被激活,如果激活則執(zhí)行之. CALL FUNCTION MODX_FUNCTION_ACTIVE_CHECK EXPORTING cprogname = SAPMM06E funcnumber = 017 IMPORTING active = active EXCEPTIONS not_found = 1 OTHERS = 2. IF NOT sy-subrc IS INITIAL. CLEAR active. ENDIF.ENDIF.CHECK NOT active IS INITIAL.IF fc_vorga EQ cva_en. l_enj_call = X.ELSE. l_enj_call = space.ENDIF.*-Define Data:DATA: lt_usr_tekpo LIKE bekpo OCCURS 0, lt_usr_teket LIKE beket OCCURS 0, lt_usr_tekkn LIKE ekknu OCCURS 0, lt_usr_tkomv LIKE tkomv OCCURS 0.*-Copy Tables:lt_usr_tekpo = pot.lt_usr_teket = ett.lt_usr_tekkn = knt.lt_usr_tkomv = tkomv.l_ucomm = ok-code.*注釋:調(diào)用出口的一般步驟是先定義數(shù)據(jù)(Define Data),多為內(nèi)表或工作區(qū),再將參數(shù)賦予這些內(nèi)表(Copy Tables),相當(dāng)于*建立了原始參數(shù)的一個鏡象.*-User Exit:*如果017出口增強被激活則執(zhí)行它.CALL FUNCTION EXIT_SAPMM06E_017 EXPORTING i_ekpo = ekpo i_ekpo_old = *ekpo i_ekko = ekko i_aktyp = aktyp i_bstyp = ekko-bstyp i_no_screen = im_no_screen 770427 i_lfa1 = lfa1 i_lfm1 = lfm1 i_rekpo = rekpo i_kekpo = kekpo i_aekpo = aekpo i_reban = reban i_mt06e = mt06e i_eina = *eina i_eine = *eine i_komp = komp i_ucomm = l_ucomm i_enj_call = l_enj_call TABLES tekpo = lt_usr_tekpo teket = lt_usr_teket tekkn = lt_usr_tekkn tkomv = lt_usr_tkomv EXCEPTIONS OTHERS = 0.ENDFORM. CUSTSCR1_ITEM_SET_DATA_PAI上面的程序代碼非常簡單,相信聰明的讀者看了對ERP增強的設(shè)計思路會開始有一定了解?,F(xiàn)在你可以通俗理解,增強就是ERP設(shè)計者在合適的地點設(shè)置了一些合適的游戲規(guī)則并提供了一些有意義的游戲給用戶自己玩耍!獨樂樂,與人樂樂,孰樂?好玩的東西應(yīng)該留點給用戶自己樂呵樂呵。接下來開始編寫增強程序,可以使用Tcode:SMOD直接激活增強或CMOD建立一個項目包含一個或多個增強,如圖2,輸入增強MM06E005并激活它,然后在EXIT_SAPMM06E_017出口函數(shù)中編寫代碼。在圖2中,我們發(fā)現(xiàn)增強MM06E005包括用戶出口和屏幕增強(Screen Exit),屏幕增強允許用戶在采購訂單自定義用戶界面,從而使采購訂單包含更多企業(yè)客戶化的信息,這種屏幕增強在固定資產(chǎn)模塊中更始發(fā)揮到極致。EXIT_SAPMM06E_017包含程序ZXM06U42,程序ZXM06U42示例代碼如下表,這段客戶化代碼邏輯十分簡單,為了方便說明,本人注釋出該出口函數(shù)的輸入?yún)?shù),該出口沒有輸出參數(shù),也就是說,你只能根據(jù)輸入?yún)?shù)進(jìn)行判斷而不能更改任何數(shù)據(jù):*增強 ZXM06U42的示例代碼*By Stone.Fu 2007/01/02*Lokale Schnittstelle:*IMPORTING/TABLES是輸入的單個參數(shù)和輸入的內(nèi)表參數(shù)* IMPORTING* VALUE(I_EKPO) LIKE EKPO STRUCTURE EKPO* VALUE(I_AKTYP)* VALUE(I_BSTYP) LIKE EKKO-BSTYP* VALUE(I_NO_SCREEN)* VALUE(I_LFA1) LIKE LFA1 STRUCTURE LFA1* VALUE(I_LFM1) LIKE LFM1 STRUCTURE LFM1* VALUE(I_EKKO) LIKE EKKO STRUCTURE EKKO* VALUE(I_REKPO) LIKE EKPO STRUCTURE EKPO OPTIONAL* VALUE(I_KEKPO) LIKE EKPO STRUCTURE EKPO OPTIONAL* VALUE(I_AEKPO) LIKE EKPO STRUCTURE EKPO OPTIONAL* VALUE(I_REBAN) LIKE EBAN STRUCTURE EBAN OPTIONAL* VALUE(I_MT06E) LIKE MT06E STRUCTURE MT06E OPTIONAL* VALUE(I_EINA) LIKE EINA STRUCTURE EINA OPTIONAL* VALUE(I_EINE) LIKE EINE STRUCTURE EINE OPTIONAL* VALUE(I_EKPO_OLD) LIKE EKPO STRUCTURE EKPO OPTIONAL* VALUE(I_KOMP) LIKE KOMP STRUCTURE KOMP OPTIONAL* VALUE(I_UCOMM) LIKE SY-UCOMM OPTIONAL* VALUE(I_ENJ_CALL) OPTIONAL* TABLES* TEKPO STRUCTURE BEKPO OPTIONAL* TEKET STRUCTURE BEKET OPTIONAL* TEKKN STRUCTURE EKKNU OPTIONAL* TKOMV STRUCTURE KOMV OPTIONAL*-*判斷程序代碼如下:DATA ZWATEKPO like BEKPO.TABLES EKBE .* 輸入的內(nèi)表參數(shù)TEKPO記錄該采購單所有的原始舊數(shù)據(jù) .* 輸入的I_EKPO 參數(shù)表示當(dāng)前處理的PO行項目,其包含的是采購行項目的最新更新數(shù)據(jù) .READ TABLE TEKPO INTO ZWATEKPO WITH KEY EBELP = I_EKPO-EBELP .*只對ME21N/22/23才生效.check SY-TCODE = ME22N or SY-TCODE = ME22N or SY-TCODE = ME23N .*EKBE是PO history 表,如有Q,R表示有發(fā)票校驗歷史,不允許更改價#SELECT SINGLE_ * FROM EKBE WHERE EBELN = I_EKPO-EBELN AND EBELP = I_EKPO-EBELP AND ( BEWTP = Q OR BEWTP = R ) .*如果SY-SUBRC =0表示發(fā)票已經(jīng)校驗,不允許更改價格。CHECK SY-SUBRC = 0 .*判斷數(shù)據(jù)更改后新采購行項目的單價是否和從數(shù)據(jù)庫讀出的原始行項目單價一致IF I_EKPO-NETPR ZWATEKPO-NETPR . MESSAGE E001(00) with 采購訂單行項目已經(jīng)進(jìn)行發(fā)票校驗,不再允許修改價格ENDIF.如果你熟悉增強,你會發(fā)現(xiàn)一些用戶出口都會傳入舊數(shù)據(jù)和更新后的新數(shù)據(jù)以方便兩者比較,和財務(wù)模塊的替代(Substitution)不同,ERP系統(tǒng)一般對增強保留嚴(yán)謹(jǐn)態(tài)度,通常只允許在出口中做檢查工作,這一點類似財務(wù)模塊的檢查(Validation)。(五)再次淺析增強企業(yè)實施ERP的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論