MM 增强
1.mir7发票预制
. 业务需求
发票预制时金额不能为零
2 . 解决方案
发票预制BADI增强:INVOICE_UPDATE
SE18:INVOICE_UPDATE,实施->显示,打开ZINVOICE_UPDATE,在界面页CHANGE_BEFORE_UPDATE里面的程序
代码示例:
method IF_EX_INVOICE_UPDATE~CHANGE_BEFORE_UPDATE.
* 发票预制的增强
IF sy-tcode = 'MR11' or sy-tcode = 'MR11SHOW'.
return.
ENDIF.
IF S_RBKP_NEW-RMWWR = 0.
message '金额不能为零!' type 'E'.
exit.
ENDIF.
endmethod.
2.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kangliujie/article/details/74551108
一 . 用户需求
在PT项目中,用户实际业务需求如下:
-
采购订单抬头中通信页签中的销售员(VERKF)字段文本更改为OA合同号(参考文章:修改SAP标准字段文本描述–CMOD增强);
-
当采购订单的公司代码是8200时,该字段输入OA合同号,且是必输项,不能为空值,否则弹出报错消息,采购订单不能保存。
-
当采购订单行项目库存地点出现在自定义表ZMM_SET_INSMK时,收货库存类型设置为质检库存。
二 . 采购订单BADI增强ME_PROCESS_PO_CUST
- 为满足用户第二个需求,使用采购订单BADI增强ME_PROCESS_PO_CUST,在该增强的CHECK函数中写入检查逻辑,如不满足以上第二项业务需求逻辑,系统弹出错误消息,采购订单不允许保存。
采购订单BADI增强ME_PROCESS_PO_CUST 如下:
代码示例如下:
METHOD if_ex_me_process_po_cust~check.
DATA: lds_header TYPE mepoheader.
DO 1 TIMES.
CALL FUNCTION 'ZENHANCEMNET_CHECK'
EXPORTING
progname = 'ZMM007'
form = 'ZME_PROCESS_PO_CUST->CHECK'
serno = 1
EXCEPTIONS
no_activity = 1
OTHERS = 2.
IF sy-subrc <> 0.
EXIT.
ENDIF.
CALL METHOD im_header->get_data
RECEIVING
re_data = lds_header.
IF lds_header-bukrs = '8000' OR lds_header-bukrs = '8200'.
IF lds_header-verkf IS INITIAL.
MESSAGE '请输入OA合同号! (抬头信息中的"通信"标签页中)' TYPE 'E'. ''弹出错误信息
ch_failed = 0.
ENDIF.
ENDIF.
ENDMETHOD.
2 . 当采购订单行项目库存地点出现在自定义表ZMM_SET_INSMK(质检库存类型的库存地点设定表)时,收货库存类型设置为质检库存。
解决方案:在采购订单BADI增强ME_PROCESS_PO_CUST 中的PROCESS_ITEM方法写入以下逻辑代码:
METHOD if_ex_me_process_po_cust~process_item.
DATA: lds_item TYPE mepoitem,
ldf_mandt TYPE mandt.
* 设置库存类型! 'X'-质检库 S-
lds_item = im_item->get_data( ).
IF lds_item-werks IS NOT INITIAL AND lds_item-lgort IS NOT INITIAL.
SELECT SINGLE mandt
INTO ldf_mandt
FROM zmm_set_insmk
WHERE werks = lds_item-werks
AND lgort = lds_item-lgort.
IF sy-subrc = 0.
lds_item-insmk = 'X'.
im_item->set_data( lds_item ).
else.
lds_item-insmk = ''.
im_item->set_data( lds_item ).
ENDIF.
ENDIF.
ENDMETHOD.