MIGO 发货到成本中心自动替代或默认费用科目

1.需求:

实现功能1:在MVT201时录入成本中心,自动查询自定义表是否存在此成本中心对应费用科目,如果不存在,提示录入错误。
实现功能2:在MVT201时,根据成本中心自动带出费用科目。

2.解决方案:

2.1 建立自定义表ZFI101

2.2 实现功能1:

找到客户增强MBCF0002。
CMOD建立增强项目ZMMEN002;
添加MBCF0002客户功能退出: 物料凭证项目中的段文本;
点击“组件”,双击“EXIT_SAPMM07M_001”->”ZXMBCU02”

输入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATA: SAKTO  LIKE MSEG-SAKTO. "费用科目
IF SY-UNAME EQ 'FICO'.
BREAK-POINT.
ENDIF.

if ( I_MSEG-BWART = '201' OR I_MSEG-BWART = '202' ) AND I_MSEG-WERKS = '1120' .
SELECT SINGLE SAKNR INTO SAKTO
FROM ZFI101
WHERE KOSTL = I_MSEG-KOSTL.
IF SY-SUBRC <> 0.
MESSAGE E398(00) WITH '成本中心“'
I_MSEG-KOSTL
'”不存在对应费用科目,请维护“成本中心与费用科目对照表ZFI101”'.
ENDIF.
endif.

2.3 实现功能2:

Se19创建BADI MB_MIGO_BADI的实现。

在se19界面选择Create Implementation->选择Classic BAdI->输入MB_MIGO_BADI->点击Create Impl.

ImplementationName输入“ZMIGO_CHANGE_SAKNR”。

输入Implementation ShortText,然后点保存按钮。

创建传输请求并保存。这时弹出Create Enhancement Implementation对话框,在Enhancement Implementation输入ZMIGO,然后输入Short Text后保存。

双击ZCL_IM_MIGO_IMPORT_CHARG进入该Class Interface

找到方法IF_EX_MB_MIGO_BADI~LINE_MODIFY,双击打开它。

然后加入以下代码:

1
2
3
4
5
6
7
8
9
10
11
method IF_EX_MB_MIGO_BADI~LINE_MODIFY.
IF SY-UNAME EQ 'FICO'.
BREAK-POINT.
ENDIF.

IF CS_GOITEM-WERKS = '1120' AND ( CS_GOITEM-BWART = '201' OR CS_GOITEM-BWART = '202' ).
SELECT SINGLE SAKNR INTO CS_GOITEM-KONTO
FROM ZFI101
WHERE KOSTL = CS_GOITEM-KOSTL.
endif.
endmethod.