sap 增強(qiáng).docx_第1頁(yè)
sap 增強(qiáng).docx_第2頁(yè)
sap 增強(qiáng).docx_第3頁(yè)
sap 增強(qiáng).docx_第4頁(yè)
sap 增強(qiáng).docx_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

sap增強(qiáng) 2009年08月26日 星期三 19:46 1、關(guān)于增強(qiáng)的簡(jiǎn)單介紹 1.1 SMOD包含具體的增強(qiáng),而CMOD是包含一組SMOD編寫(xiě)的增強(qiáng). 1.2 User exits (Function module exits)是sap提供出口,它的命名規(guī)則如下: EXIT_ 示例: sd的VA01事務(wù),對(duì)應(yīng)的程序是SAPMV45A ,你會(huì)在程序里查到(用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的名稱(chēng)就是: EXIT_SAPMV45A_003 2、先試用SMOD建立一個(gè)SAP增強(qiáng) 2.1、選擇一個(gè)增強(qiáng),如:SDVFX001 ,點(diǎn)擊修改,進(jìn)入sap增強(qiáng)維護(hù)屏幕; 2.2、點(diǎn)擊組件按鈕,進(jìn)入組件維護(hù)屏; 2.3、將光標(biāo)移到功能模塊名,輸入模塊名,如:EXIT_SAPLV60B_001; 2.4、選擇代碼修改按鈕進(jìn)入函數(shù)模塊; 2.5、雙擊函數(shù)模塊的包含單元,進(jìn)入包含單元加入自定義代碼并激活保存; 3、使用CMOD建立增強(qiáng)項(xiàng)目 3.1、輸入自定義的項(xiàng)目名,點(diǎn)擊創(chuàng)建; 3.2、進(jìn)入增強(qiáng)項(xiàng)目,選擇配置增強(qiáng),進(jìn)入增強(qiáng)配置屏幕; 3.3、輸入增強(qiáng)名如:SDVFX001 3.4、保存,并退出; 4、使用CMOD將增強(qiáng)項(xiàng)目激活,便大工告成。*小技巧 透視ERP增強(qiáng)(一)什么是增強(qiáng)(Enhancement)?簡(jiǎn)單地說(shuō),增強(qiáng)就是ERP系統(tǒng)中標(biāo)準(zhǔn)程序的出口,在該出口中由用戶根據(jù)企業(yè)實(shí)際需求編寫(xiě)客戶化邏輯代碼。增強(qiáng)是ERP系統(tǒng)設(shè)計(jì)時(shí)考慮到企業(yè)實(shí)際的流程有可能和系統(tǒng)默認(rèn)標(biāo)準(zhǔn)流程不同,在標(biāo)準(zhǔn)流程框架下專(zhuān)門(mén)留的接口,每個(gè)接口對(duì)應(yīng)一個(gè)客戶化函數(shù),這些出口函數(shù)有標(biāo)準(zhǔn)處理程序傳入的參數(shù)和輸出參數(shù),用戶可根據(jù)系統(tǒng)輸入?yún)?shù)做條件編寫(xiě)適合本企業(yè)流程的邏輯,然后通過(guò)輸出參數(shù)傳輸回。(二)用戶增強(qiáng)分類(lèi)SAP的用戶增強(qiáng)通常包括下面3類(lèi)。1.E類(lèi):Enhancement exits,即通常所謂的用戶出口(User_exit )用戶出口也叫功能出口(Function Exit)。使用Tcode:SE37搜索EXIT*,找到的函數(shù)大都是做系統(tǒng)預(yù)留的出口函數(shù),前面說(shuō)過(guò),用戶出口是標(biāo)準(zhǔn)程序留給用戶的接口,標(biāo)準(zhǔn)程序通常不允許用戶任意修改,如果修改需要申請(qǐng)Access Key,而且修改標(biāo)準(zhǔn)程序可能導(dǎo)致的錯(cuò)誤erp公司通常是不負(fù)責(zé)的。在SAP中,自定義的程序通常以保留字Y或Z開(kāi)頭,因此,出口函數(shù)中都預(yù)包含了一個(gè)Z開(kāi)頭的程序。2.C類(lèi):GUI接口(GUI codes)3.S類(lèi):屏幕增強(qiáng)(Screen Exit)比如,在建立采購(gòu)訂單,工單和固定資產(chǎn)主數(shù)據(jù)時(shí),系統(tǒng)都預(yù)留屏幕增強(qiáng),也就是說(shuō)允許用戶自定義用戶輸入界面并編寫(xiě)相應(yīng)的輸入輸出處理程序。在各類(lèi)增強(qiáng)中,可能還用戶自己定義結(jié)構(gòu)或表格,系統(tǒng)對(duì)應(yīng)類(lèi)型T類(lèi)。比如增強(qiáng)MM06E005允許用戶建立兩個(gè)結(jié)構(gòu)CI_EKKODB和CI_EKPODB。接下來(lái)將重點(diǎn)介紹功能出口的應(yīng)用。(三)組織用戶增強(qiáng)相關(guān)增強(qiáng)表格:MODSAP:增強(qiáng)表格TFDIR:包括出口函數(shù)在內(nèi)的所有函數(shù)表(E類(lèi))CUATEXTS:修改 GVI 界面,界面: 菜單文本被客戶(C類(lèi))TSDIR:動(dòng)態(tài)程序區(qū) CALL CUSTOMER SUBSCREEN(S類(lèi))* 對(duì)于以EXIT開(kāi)頭的出口函數(shù),TFDIR-MAND值為C表示此出口函數(shù)被激活。相關(guān)增強(qiáng)檢查函數(shù):MODX_FUNCTION_ACTIVE_CHECK:檢查E類(lèi)用戶出口是否被激活。MODX_MENUENTRY_ACTIVE_CHECK:檢查C類(lèi)增強(qiáng)激活狀況MODX_SUBSCREEN_ACTIVE_CHECK: 檢查S類(lèi)增強(qiáng)激活狀況你可能會(huì)發(fā)現(xiàn),SAP的各模塊的任何一個(gè)事務(wù)碼(Tcode)對(duì)應(yīng)的標(biāo)準(zhǔn)程序都留下了大量的用戶出口,正是SAP靈活的配置功能和強(qiáng)大的用戶出口才使其產(chǎn)品輕松應(yīng)對(duì)各種復(fù)雜需求成為可能,系統(tǒng)還為能快速找到和激活這些增強(qiáng)進(jìn)行了有效組織,各類(lèi)增強(qiáng)被記錄在table中并且提供了相關(guān)檢查函數(shù),從而更方便企業(yè)用戶。熟悉ABAP開(kāi)發(fā)的朋友通常都收集了一個(gè)可以輸入事務(wù)碼快速找到系統(tǒng)留下的所有出口的程序,下表就是一個(gè)檢測(cè)系統(tǒng)增強(qiáng)被激活的簡(jiǎn)單參考程序。* 該程序可以檢測(cè)出系統(tǒng)所有被激活的用戶增強(qiá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.有一種直接有效的查找用戶出口增強(qiáng)的方法,就是使用函數(shù)MODX_FUNCTION_ACTIVE_CHECK,如圖1。圖1中的判斷語(yǔ)句If tfdir-mand = aktiv_flag(常數(shù)C)則出口函數(shù)active標(biāo)志=X,表示該用戶出口被激活,處理邏輯將從標(biāo)準(zhǔn)程序轉(zhuǎn)入出口函數(shù),在該語(yǔ)句設(shè)置斷點(diǎn)然后運(yùn)行任一個(gè)事務(wù)碼,都會(huì)調(diào)用該函數(shù)判斷是否存在用戶出口。(四)增強(qiáng)應(yīng)用實(shí)例業(yè)務(wù)背景:如果采購(gòu)訂單已經(jīng)做了發(fā)票校驗(yàn)后,則不再允許用戶修改價(jià)格。相關(guān)程序:MM06EFPO_POT_FUELLEN| MM06EF0C_CUSTSCR1_ITEM_SET_DAT相關(guān)Tcode:SMOD|CMOD如果沒(méi)有啟動(dòng)采購(gòu)審批功能,SAP標(biāo)準(zhǔn)功能是允許用戶隨時(shí)修改采購(gòu)價(jià)格的,不同的企業(yè)有對(duì)采購(gòu)價(jià)格控制有不同的策略,甲企業(yè)規(guī)模較小為了省事可能為以后數(shù)月的采購(gòu)開(kāi)了一個(gè)大采購(gòu)單,如果中途材料價(jià)格變動(dòng)則直接修改價(jià)格就行,乙集團(tuán)則嚴(yán)格控制采購(gòu)價(jià)格,采購(gòu)價(jià)格由總部集中維護(hù),各企業(yè)采購(gòu)員只需要維護(hù)采購(gòu)數(shù)量等信息等,真因如此,ERP系統(tǒng)顯然不會(huì)去禁止用戶修改價(jià)格,如果企業(yè)確實(shí)需要如此,則可通過(guò)增強(qiáng)實(shí)現(xiàn)。前面已經(jīng)介紹過(guò)如何通過(guò)在函數(shù)MODX_FUNCTION_ACTIVE_CHECK設(shè)置斷點(diǎn)跟蹤系統(tǒng)每個(gè)事務(wù)預(yù)留的用戶出口,你很快將發(fā)現(xiàn)增強(qiáng)MM06E005的EXIT_SAPMM06E_017用戶出口非常適合此業(yè)務(wù)背景。首先來(lái)看看增強(qiáng)的EXIT_SAPMM06E_017用戶出口(以下稱(chēng)017出口)處理流程,Include程序MM06EFPO_POT_FUELLEN被專(zhuān)門(mén)用來(lái)處理增強(qiáng)出口,調(diào)用了子程序CUSTSCR1_ITEM_SET_DATA_PAI(對(duì)應(yīng)下一級(jí)Include程序MM06EF0C_CUSTSCR1_ITEM_SET_DAT),分析Include程序MM06EF0C_CUSTSCR1_ITEM_SET_DAT的代碼,如下表,這個(gè)程序是從系統(tǒng)原本Copy出來(lái)的,注意本人所加的附注粗體部分:*-* 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用來(lái)檢查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ù)的一個(gè)鏡象.*-User Exit:*如果017出口增強(qiáng)被激活則執(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上面的程序代碼非常簡(jiǎn)單,相信聰明的讀者看了對(duì)ERP增強(qiáng)的設(shè)計(jì)思路會(huì)開(kāi)始有一定了解。現(xiàn)在你可以通俗理解,增強(qiáng)就是ERP設(shè)計(jì)者在合適的地點(diǎn)設(shè)置了一些合適的游戲規(guī)則并提供了一些有意義的游戲給用戶自己玩耍!獨(dú)樂(lè)樂(lè),與人樂(lè)樂(lè),孰樂(lè)?好玩的東西應(yīng)該留點(diǎn)給用戶自己樂(lè)呵樂(lè)呵。接下來(lái)開(kāi)始編寫(xiě)增強(qiáng)程序,可以使用Tcode:SMOD直接激活增強(qiáng)或CMOD建立一個(gè)項(xiàng)目包含一個(gè)或多個(gè)增強(qiáng),如圖2,輸入增強(qiáng)MM06E005并激活它,然后在EXIT_SAPMM06E_017出口函數(shù)中編寫(xiě)代碼。在圖2中,我們發(fā)現(xiàn)增強(qiáng)MM06E005包括用戶出口和屏幕增強(qiáng)(Screen Exit),屏幕增強(qiáng)允許用戶在采購(gòu)訂單自定義用戶界面,從而使采購(gòu)訂單包含更多企業(yè)客戶化的信息,這種屏幕增強(qiáng)在固定資產(chǎn)模塊中更始發(fā)揮到極致。EXIT_SAPMM06E_017包含程序ZXM06U42,程序ZXM06U42示例代碼如下表,這段客戶化代碼邏輯十分簡(jiǎn)單,為了方便說(shuō)明,本人注釋出該出口函數(shù)的輸入?yún)?shù),該出口沒(méi)有輸出參數(shù),也就是說(shuō),你只能根據(jù)輸入?yún)?shù)進(jìn)行判斷而不能更改任何數(shù)據(jù):*增強(qiáng) ZXM06U42的示例代碼*By Stone.Fu 2007/01/02*Lokale Schnittstelle:*IMPORTING/TABLES是輸入的單個(gè)參數(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記錄該采購(gòu)單所有的原始舊數(shù)據(jù) .* 輸入的I_EKPO 參數(shù)表示當(dāng)前處理的PO行項(xiàng)目,其包含的是采購(gòu)行項(xiàng)目的最新更新數(shù)據(jù) .READ TABLE TEKPO INTO ZWATEKPO WITH KEY EBELP = I_EKPO-EBELP .*只對(duì)ME21N/22/23才生效.check SY-TCODE = ME22N or SY-TCODE = ME22N or SY-TCODE = ME23N .*EKBE是PO history 表,如有Q,R表示有發(fā)票校驗(yàn)歷史,不允許更改價(jià)#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)校驗(yàn),不允許更改價(jià)格。CHECK SY-SUBRC = 0 .*判斷數(shù)據(jù)更改后新采購(gòu)行項(xiàng)目的單價(jià)是否和從數(shù)據(jù)庫(kù)讀出的原始行項(xiàng)目單價(jià)一致IF I_EKPO-NETPR ZWATEKPO-NETPR . MESSAGE E001(00) with 采購(gòu)訂單行項(xiàng)目已經(jīng)進(jìn)行發(fā)票校驗(yàn),不再允許修改價(jià)格ENDIF.如果你熟悉增強(qiáng),你會(huì)發(fā)現(xiàn)一些用戶出口都會(huì)傳入舊數(shù)據(jù)和更新后的新數(shù)據(jù)以方便兩者比較,和財(cái)務(wù)模塊的替代(Substitution)不同,ERP系統(tǒng)一般對(duì)增強(qiáng)保留嚴(yán)謹(jǐn)態(tài)度,通常只允許在出口中做檢查工作,這一點(diǎn)類(lèi)似財(cái)務(wù)模塊的檢查(Validation)。(五)再次淺析增強(qiáng)企業(yè)實(shí)施ERP的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論