需求:
实现功能1:在MVT201时录入成本中心,自动查询自定义表是否存在此成本中心对应费用科目,如果不存在,提示录入错误。 实现功能2:在MVT201时,根据成本中心自动带出费用科目。
解决方案:
建立自定义表ZFI101
实现功能1:
找到客户增强MBCF0002。 CMOD建立增强项目ZMMEN002; 添加MBCF0002客户功能退出: 物料凭证项目中的段文本; 点击“组件”,双击“EXIT_SAPMM07M_001”->”ZXMBCU02”
输入如下代码:
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:
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,双击打开它。
然后加入以下代码:
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.