在SAP/ERP項目的實施中銷售管理模塊(SD)的創建和修改銷售訂單必定會有輸入字段校驗檢查的需求,來防止業務人員錄入錯誤或少錄入數據,SAP這方面的配置功能也非常強大,通常情況下不需要寫開發代碼,業務顧問通過配置不完整日志就可以非常容易實現大部分需求,但是在實際項目中還是會遇到一些特殊的需求,不能通過配置實現,需要進行增強開發。
下面通過一個項目案例來介紹下如何通過增強實現銷售訂單創建和修改的字段輸入的合規性檢查。
業務需求如下:
某公司銷售模塊的業務要求:銷售組織為S010在創建ZPE類型的銷售訂單時候,如果銷售訂單行項目類型為Z001時,要求檢查銷售訂單行項目的訂單號必須輸入(如下圖說明)。
類似上面這樣的復雜的業務需求,就很難通過不完全日志的配置來實現,只能通過增強開發實現。
備注:SD方面的增強很多是USEREXIT這類用戶出口,屬于一代增強點,需要開發KEY直接在空的子程序中添加代碼,這相當于修改了標準源碼,升級會被覆蓋,四代增強出現后目前一般建議不要直接去修改程序,而是在這子程序里實施隱式增強。
詳細具體實施步驟:
上面找到隱方增強點后,繼續按如下步驟操作:
備注:如果需要傳輸的,必須選擇包,如果自己的學習系統,不需要傳輸的,包可以選擇$TMP或點擊本地對象保存即可。
備注:SO行項目數據被保存在內表XVBAP,可以從此內表讀取到維護的行項目值。
上面位置寫上增強代碼后點擊保存->激活。
上圖點擊確認后,這個增強需求的實施步驟就全部完成了。
增強代碼如下:
IF VBAK-VKORG = 'S010' AND VBAK-AUART = 'ZPE'.
LOOP AT XVBAP.
IF XVBAP-PSTYV = 'Z001' .
IF XVBAP-AUFNR IS INITIAL AND XVBAP-UPDKZ <> 'D'.
MESSAGE '訂單號必須輸入!' TYPE 'E' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
備注:XVBAP-UPDKZ = 'D' 表示刪除行,XVBAP-UPDKZ =' I '表示插入行。VA01/VA02創建SO時候,當行項目維護多條數據后,刪除其中的一條或者多條,被刪除的行項目依在內表XVBAP中,如果沒有增加這XVBAP-UPDKZ<>'D'的條件,會發現一個現象:未刪除的行項目滿足字段必輸的條件了,系統依然給出提示:“訂單號必須輸入!”
實際實施效果如下圖:
當上面VA01創建訂單時候,如果滿足銷售組織S010,訂單類型:ZPE,類別:Z001 時候,SO保存時候,系統報錯提示。