需求:

实现功能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.