1. 前言
對于銷售單螢幕增強:
- 螢幕使用sap程式SAPMV45A标準預留的兩個子螢幕8309 8459
- 增強出口BAdI & USER_EXIT
- BAdI
- 使用SAP BADI_SD_SALES_BASIC(SE18->BAdI名稱)中
- BADI_SLS_HEAD_SCR_CUS
-
BADI_SLS_ITEM_SCR_CUS
進行增強
- USER_EXIT(MV45AOZZ)
- USEREXIT_FIELD_MODIFICATION
- USEREXIT_MOVE_FIELD_TO_VBAK
- USEREXIT_SAVE_DOCUMENT
- USEREXIT_SAVE_DOCUMENT_PREPARE
- 更多出口函數及函數作用請參考官方文檔:User Exits In Sales Document Processing 對于銷售訂單增強的标準變量:
- BAdI
- 擡頭
- XVBAK:新資料如有變化/否則與舊資料相同
- YVBAK:舊資料如果有變化(考慮項目)/否則為空
- VBAK:工作區
- 行項目
- XVBAP:新資料如有變化/否則與舊資料相同
- YVBAP:舊資料如果有變化(考慮項目)/否則為空
- VBAK:工作區
- 其他
- 等同擡頭行項目(自行測試)
2. 增強效果
- 擡頭
- 行項目
3. Step1:新增兩個結構并include到VBAK(銷售憑證擡頭表) VBAP(銷售憑證行項目表)
- 字段命名需要用YY ZZ開頭(本例中由于某些原因未使用,系統更新有覆寫的風險),命名規則可參考Note:16466 - Customer name range for SAP objects
- 擡頭
- 行項目
4. Step2:螢幕增加布局
- 擡頭
- 行項目
5. Step3:螢幕PBO PAI事件
- 擡頭
MODULE status_8309 OUTPUT. IF SY-TCODE EQ 'VA03'. LOOP AT SCREEN. IF SCREEN-NAME = 'VBAK-ZGFH' OR SCREEN-NAME = 'VBAK-ZJFD' OR SCREEN-NAME = 'VBAK-ZXTGG'. SCREEN-INPUT = 0. MODIFY SCREEN. ENDIF. ENDLOOP. ENDIF. ENDMODULE.
- 行項目
IF SY-TCODE = 'VA03'. LOOP AT SCREEN . IF SCREEN-NAME = 'VBAP-ZXTGG' OR SCREEN-NAME = 'VBAP-ZYQYQ' OR SCREEN-NAME = 'VBAP-ZXTDYXH' OR SCREEN-NAME = 'VBAP-ZXTBZ'. SCREEN-INPUT = 0. MODIFY SCREEN. ENDIF. ENDLOOP. ENDIF.
6. Step4:使用者出口儲存前增強和儲存後增強(程式:SAPMV45A 包含程式:MV45AFZZ)
- 儲存前 USEREXIT_SAVE_DOCUMENT_PREPARE(建立增強點,增加校驗)
IF ( SY-TCODE = 'VA01' AND SY-UCOMM = 'SICH' AND VBAK-ERDAT > '20210916' ) OR "跳過曆史訂單;因為有信貸增強,是以增加了一個UCOMM ENT2 ( SY-TCODE = 'VA01' AND SY-UCOMM = 'ENT2' AND VBAK-ERDAT > '20210916' ) OR ( SY-TCODE = 'VA02' AND SY-UCOMM = 'SICH' AND VBAK-ERDAT > '20210916' ). DATA: BEGIN OF LT_MARA OCCURS 0, MATNR TYPE MARA-MATNR, MTPOS_MARA TYPE MARA-MTPOS_MARA, END OF LT_MARA. IF VBAK-AUART = 'Z001' OR VBAK-AUART = 'Z002' OR VBAK-AUART = 'Z003' OR VBAK-AUART = 'Z004' OR VBAK-AUART = 'Z005'. "Herder check * IF VBAK-ZXTGG IS INITIAL. * MESSAGE |銷售憑證:{ VBAK-VBELN } "擡頭-附加資料B-傳遞-箱貼規格"未維護值,不允許儲存| TYPE 'E'. * ENDIF. "ITEM Check SELECT MATNR MTPOS_MARA INTO TABLE LT_MARA FROM MARA FOR ALL ENTRIES IN XVBAP WHERE MATNR = XVBAP-MATNR. LOOP AT XVBAP WHERE UPDKZ NE 'D'. READ TABLE LT_MARA TRANSPORTING NO FIELDS WITH KEY MATNR = XVBAP-MATNR MTPOS_MARA = 'NORM'. "NORN類型物料 IF SY-SUBRC = 0. IF XVBAP-ZMPXX IS INITIAL. MESSAGE |銷售憑證:{ XVBAP-VBELN } "行項目:{ XVBAP-POSNR }-附加資料B-銘牌資料-銘牌選項"未維護值,不允許儲存| TYPE 'E'. ELSEIF XVBAP-ZYSBM IS INITIAL. MESSAGE |銷售憑證:{ XVBAP-VBELN } "行項目:{ XVBAP-POSNR }-附加資料B-銘牌資料-顔色編碼"未維護值,不允許儲存| TYPE 'E'. ELSEIF XVBAP-ZYQBZ IS INITIAL. MESSAGE |銷售憑證:{ XVBAP-VBELN } "行項目:{ XVBAP-POSNR }-附加資料B-銘牌資料-油漆标準"未維護值,不允許儲存| TYPE 'E'. ELSEIF XVBAP-ZXTGG IS INITIAL. MESSAGE |銷售憑證:{ XVBAP-VBELN } "行項目:{ XVBAP-POSNR }-附加資料B-傳遞資料-箱貼規格"未維護值,不允許儲存| TYPE 'E'. ELSEIF XVBAP-ZYQYQ IS INITIAL. MESSAGE |銷售憑證:{ XVBAP-VBELN } "行項目:{ XVBAP-POSNR }-附加資料B-傳遞資料-要求編碼"未維護值,不允許儲存| TYPE 'E'. ENDIF. ENDIF. READ TABLE LT_MARA TRANSPORTING NO FIELDS WITH KEY MATNR = XVBAP-MATNR MTPOS_MARA = 'NOR2'. "NOR2類型物料 IF SY-SUBRC = 0. IF XVBAP-ZXTGG IS INITIAL. MESSAGE |銷售憑證:{ XVBAP-VBELN } "行項目:{ XVBAP-POSNR }-附加資料B-傳遞資料-箱貼規格"未維護值,不允許儲存| TYPE 'E'. ENDIF. ENDIF. ENDLOOP. ENDIF. ENDIF.
- 儲存後:FORM USEREXIT_SAVE_DOCUMENT(無需求,未做增強)