使用BADI  MD_CHANGE_MRP_DATA,控制代码写在METHOD  CHANGE_MDPSX_MDUB中。
MD04的逻辑是先从数据库表中取出指定物料和工厂的能产生需求的销售订单、采购订单、预留等。BADI中的多个方法分别在取对应的凭证数据的时候触发。
MD04 增强,排除ZNB6调拨PO的需求_增强
其中CHANGE_MDPSX_MDUB在读取采购订单时触发
MD04 增强,排除ZNB6调拨PO的需求_增强_02
结构CH_MDPS中存放MRP元素,MD04会把CH_MDPS 追加进内表MDPSX中,然后再计算需求,在这个METHOD中可以对结构CH_MDPS进行修改。
参数CH_EXIT = 'X'时表示该元素将不进行MRP运算。但测试发现有时不管用,所以采取把MRP元素的需求数量改为0的做法,这样就不会产生需求了,且也不会再前台显示。(注意如果直接CLEAR CH_MDPS ,会在前台出现空行)
具体代码如下:
METHOD IF_EX_MD_CHANGE_MRP_DATA~CHANGE_MDPSX_MDUB.

DATA L_BSART TYPE EKKO-BSART.
SELECT SINGLE BSART
INTO L_BSART
FROM EKKO
WHERE EBELN = CH_MDPS-DELNR.
IF L_BSART = 'ZNB6'.
* CH_EXIT = 'X'. "元素将不计算需求

CLEAR CH_MDPS-MNG01. "清空需求数量之后,数量为0的项目在前台也不会显示的,两种做法效果一样(但是不知道为什么CH_EXIT = 'X'.突然不管用了)
CH_CHANGED = 'X'.
ENDIF.

ENDMETHOD.