前言
销售订单增强与交货单/采购订单增强方式不太一样,没有公开的BADI可以使用,对销售订单的增强在程序"MV45AFZZ"中处理。
在 " MV45AFZZ "程序中 可以做以下增强:
设置默认值
1.USEREXIT_MOVE_FIELD_TO_VBAK子例程用来修改销售订单抬头信息,
需创建隐式增强,示例代码如下
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form USEREXIT_MOVE_FIELD_TO_VBAK, End A*$*$-Start: (1)---------------------------------------------------------------------------------$*$*ENHANCEMENT 2 ZSD_EI_MV45ATZZ. "active version "设置成本中心 IF vbak-auart = 'ZCU2'. vbak-kostl = vbak-kunnr. ENDIF.
IF us_vbakkom-kostl IS NOT INITIAL. vbak-kostl = us_vbakkom-kostl. ENDIF.ENDENHANCEMENT.*$*$-End: (1)---------------------------------------------------------------------------------$*$*2.USEREXIT_MOVE_FIELD_TO_VBAP子例程用来修改销售订单行信息,
需创建隐式增强,示例代码如下
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form USEREXIT_MOVE_FIELD_TO_VBAP, End A*$*$-Start: (1)---------------------------------------------------------------------------------$*$*ENHANCEMENT 3 ZSD_EI_MV45ATZZ. "active version "根据订单类型按照销售组织替换利润中心
DATA: lt_ztsd_auart_conf TYPE TABLE OF ztsd_auart_conf, ls_ztsd_auart_conf TYPE ztsd_auart_conf.
IF vbak-auart = 'ZEC4' OR vbak-auart = 'ZER4' OR vbak-kunnr = 'Z004'. IF vbak-vkorg IS NOT INITIAL. SELECT SINGLE prctr INTO vbap-prctr FROM ztsd_auart_conf WHERE vkorg = vbak-vkorg. xvbap-prctr = vbap-prctr. ENDIF. ENDIF.ENDENHANCEMENT.*$*$-End: (1)---------------------------------------------------------------------------------$*$*定价过程增强
1.USEREXIT_PRICING_PREPARE_TKOMK子例程用来修改定价抬头信息,
通常需要先在KOMK中增加自定义字段
然后创建隐式增强,示例代码如下
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(3) Form USEREXIT_PRICING_PREPARE_TKOMK, Start A*$*$-Start: (3)---------------------------------------------------------------------------------$*$*ENHANCEMENT 1 ZSD_EI_PRICING_TKOMK. "active version SELECT SINGLE znsrlb FROM but000 INTO tkomk-znsrlb WHERE partner = vbak-kunnr.ENDENHANCEMENT.*$*$-End: (3)---------------------------------------------------------------------------------$*$*
2.USEREXIT_PRICING_PREPARE_TKOMP 子例程用来修改定价行信息,
通常需要先在KOMP中增加自定义字段
然后创建隐式增强,示例代码如下
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(2) Form USEREXIT_PRICING_PREPARE_TKOMP, End A*$*$-Start: (2)---------------------------------------------------------------------------------$*$*ENHANCEMENT 1 ZE_INVOICE_PRICE_TKOMP. "active version SELECT SINGLE zyear zseason zchannel zmat_cate mtart INTO (tkomp-zyear,tkomp-zseason,tkomp-zchannel,tkomp-zmat_cate,tkomp-mtart ) FROM mara WHERE matnr = tkomp-matnr.ENDENHANCEMENT.*$*$-End: (2)---------------------------------------------------------------------------------$*$*
保存前检查
在USEREXIT_SAVE_DOCUMENT_PREPARE子例程 中创建隐式增强,示例代码如下
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(6) Form USEREXIT_SAVE_DOCUMENT_PREPARE, Start A*$*$-Start: (6)---------------------------------------------------------------------------------$*$*ENHANCEMENT 4 ZSD_EI_MV45ATZZ. "active version DATA: BEGIN OF lt_vbap OCCURS 0, werks TYPE t001w-werks, bukrs TYPE t001k-bukrs, S END OF lt_vbap . DATA: BEGIN OF lt_mara OCCURS 0, matnr TYPE mara-matnr, zbrand TYPE mara-zbrand, END OF lt_mara . IF xvbap[] IS NOT INITIAL AND vbak-bukrs_vf IS NOT INITIAL. SELECT b~werks a~bukrs INTO TABLE lt_vbap FROM t001k AS a JOIN t001w AS b ON a~bwkey = b~bwkey FOR ALL ENTRIES IN xvbap WHERE b~werks = xvbap-werks. SORT lt_vbap BY werks. SELECT matnr zbrand INTO TABLE lt_mara FROM mara FOR ALL ENTRIES IN xvbap WHERE matnr = xvbap-matnr. SORT lt_mara BY matnr. LOOP AT xvbap ASSIGNING FIELD-SYMBOL(<fs_xvbap>) WHERE updkz <> 'D'. "删除的项目不判断 "业务范围增强 READ TABLE lt_mara WITH KEY matnr = <fs_xvbap>-matnr BINARY SEARCH. IF sy-subrc = 0. <fs_xvbap>-gsber = lt_mara-zbrand. ENDIF. READ TABLE lt_vbap WITH KEY werks = <fs_xvbap>-werks BINARY SEARCH. IF sy-subrc = 0. IF lt_vbap-bukrs <> vbak-bukrs_vf . READ TABLE xkomv WITH KEY kposn = <fs_xvbap>-posnr kschl = 'ZDS7'. IF sy-subrc NE 0 OR xkomv-kwert IS INITIAL. MESSAGE e020(zsd001) WITH <fs_xvbap>-posnr <fs_xvbap>-matnr. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDIF.ENDENHANCEMENT.*$*$-End: (6)---------------------------------------------------------------------------------$*$*总结
就个人而言,比较喜欢基于BADI的增强方式,这种一代增强方式略显落后和麻烦,不知道SAP在后续的版本中会不会做修改呢?