MIGO 增强

这段代码主要针对MIGO增强进行了控制和验证,包括检查库存操作如收货时的模具号、责任人和备注文本输入,确保模具号与资产编号关联,限制超领料,验证拆卸单副产品入库与报废数量,以及控制配套入库数量。此外,还涉及到订单收货数量与允许入库数量的对比,并提供了异常提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SMOD -- MBCF0002

注: 如果自己用SE37 会报

 

 

 

 

 

 

*&---------------------------------------------------------------------*
*& 包含               ZXMBCU02
*&---------------------------------------------------------------------*
DATA:lv_zxh TYPE zppt013-zxh.
DATA:p_zzmjh TYPE zmmt002-zzmjh.
DATA:lv_str1 TYPE zmmt002-zzmjh.
DATA:lv_str2 TYPE zmmt002-zzmjh.
DATA:lv_str3 TYPE zmmt002-zzmjh.
DATA:lv_str4 TYPE zmmt002-zzmjh.
DATA:lv_str5 TYPE zmmt002-zzmjh.
DATA:p_anln1 TYPE anla-anln1.
DATA:auart TYPE auart.
DATA:l_bdmng TYPE bdmng"需求数
     l_enmng TYPE enmng"提货数
DATA:kostl LIKE usr21-kostl.
DATA:g_matnr LIKE mara-matnr.
DATA:zyxrk TYPE menge_d.
*data:kostl like usr21-kostl.
DATAl_sgtxt LIKE mseg-sgtxt.
e_sgtxt i_mseg-sgtxt.
"控制CO11N不能做计划外投料
IF sy-tcode 'CO11N'
AND i_mseg-rsnum IS INITIAL.

  MESSAGE e003(zheleWITH i_mseg-zeile i_mseg-matnr.

ENDIF.
"控制CO11N不能做计划外投料

"控制素材收货时必须输入模具号
CLEAR:auart.
CLEAR kostl.
SELECT SINGLE kostl INTO kostl FROM usr21 WHERE bname sy-uname.
IF kostl ''.
  SELECT SINGLE auart FROM aufk INTO auart
    
WHERE aufnr i_mseg-aufnr.
  IF sy-subrc 0.
    IF sy-tcode 'MIGO'
    OR sy-tcode 'MIGO_GO' )
    AND i_mseg-bwart '101'
    AND auart 'LX03' OR auart 'LX21' OR auart 'LX22' OR auart 'LX23' ).

      SELECT SINGLE zzmjh INTO p_zzmjh FROM zmmt002 WHERE matnr i_mseg-matnr .
      CONDENSE p_zzmjh NO-GAPS.
      SPLIT p_zzmjh AT '/' INTO lv_str1 lv_str2 lv_str3 lv_str4 lv_str5.

*      lxf start
*      IF i_mseg-sgtxt = lv_str1 OR i_mseg-sgtxt = lv_str2 OR i_mseg-sgtxt = lv_str3 OR i_mseg-sgtxt = lv_str4 OR i_mseg-sgtxt = lv_str5.
*        SELECT SINGLE anln1 INTO p_anln1 FROM anla WHERE anlkl = '18010000' AND sernr = i_mseg-sgtxt.
*        IF p_anln1 = ''.
*          MESSAGE '模具编号没有建立资产编号' TYPE 'E'.
*          EXIT.
*        ENDIF.
*      ELSE .
*        MESSAGE '没有在物料主数据里维护相应的模具号' TYPE 'E'.
*        EXIT.
*      ENDIF.
*      lxf end
*      SELECT sernr INTO TABLE @DATA(gt_anla)
*        FROM anla
*        WHERE anlkl = '18010000'
*        AND   sernr <> ''.

*      SHIFT i_mseg-sgtxt LEFT DELETING LEADING space.
*      SELECT SINGLE zxh INTO lv_zxh FROM zppt013 WHERE matnr = i_mseg-matnr AND zzmjh = i_mseg-sgtxt AND loekz = ''.
*      IF lv_zxh = ''.
*        MESSAGE '请输入正确的模具编号' TYPE 'E'.
*        EXIT.
*      ENDIF.
    ENDIF .
*      READ TABLE gt_anla INTO DATA(gs_anla)
*      WITH KEY sernr = i_mseg-sgtxt.
*      IF sy-subrc <> 0.
*        MESSAGE '请输入正确的模具编号' TYPE 'E'.
*        EXIT.
*      ENDIF.
*    ENDIF.

  ENDIF.
  IF sy-tcode 'MIGO'
 OR sy-tcode 'MIGO_GO' )
 AND i_mseg-bwart '102'
 AND auart 'LX03' OR auart 'LX21' OR auart 'LX22' OR auart 'LX23' OR auart 'LX31' OR auart 'LX32' OR auart 'LX33' ).
    CLEAR l_sgtxt.
    SELECT SINGLE sgtxt INTO l_sgtxt FROM mseg WHERE mblnr i_mseg-smbln.

    IF l_sgtxt IS NOT INITIAL.
      i_mseg-sgtxt l_sgtxt.
    ENDIF.
  ENDIF.

  IF sy-mandt EQ '555' OR sy-mandt EQ '800' "只有创维控制
    IF 

<think>好的,用户想了解SAP MIGO增强功能或实现方法,特别是自定义配置。首先,我需要回忆一下SAPMIGO事务代码的作用,它主要用于物料移动的过账,比如收货、发货等。增强功能通常涉及用户出口、BADI或者屏幕增强。 根据提供的引用内容,引用[3]提到MIGO屏幕增强时,尝试修改自定义表但无效,因为更新任务中的提交早于标准逻辑,导致数据被覆盖。这说明在增强时需要注意数据更新的时机。引用[4]展示了一个更新函数模块的例子,使用IN UPDATE TASK来确保在正确的时机提交数据,避免覆盖。 接下来,用户可能需要知道具体的实现步骤。首先,BADI是常用的增强方式,比如使用MB_MIGO_BADI。然后,屏幕增强可以通过SPRO配置或隐式增强添加字段,但需要处理数据存储,比如附加表。另外,出口程序或用户出口也可能用到,比如MIGF0001。 还要考虑配置部分,比如在SPRO中设置国家或地区,如引用[1]提到的SPRO-T005S。这可能与字段的输入验证有关,比如工厂或库存地点需要根据地区配置。 需要注意的难点包括数据更新的顺序,确保自定义表的更新在标准表之后,避免被覆盖。此外,字段校验的逻辑需要与业务需求一致,并处理可能的错误消息。 最后,生成相关问题时要覆盖实现方式、配置、数据更新处理和常见错误,帮助用户全面理解。</think>关于SAP MIGO增强功能的实现方式,可通过以下方法实现: ### 一、增强实现方式 1. **BADI增强(MB_MIGO_BADI)** 在事务代码SE18中定义BADI实现,通过`IF_EX_MB_MIGO_BADI`接口拦截MIGO操作流程。例如在`BEFORE_SAVE`方法中可添加自定义校验逻辑: ```abap METHOD if_ex_mb_migo_badi~before_save. " 自定义校验逻辑(如检查移动类型与工厂关系) IF sy-tcode = 'MIGO' AND <字段校验失败>. MESSAGE E398(00) WITH '自定义错误提示'. ENDIF. ENDMETHOD. ``` 此方法可直接影响MIGO事务的提交过程[^3][^4]。 2. **屏幕增强(Screen Exit)** 在SPRO路径`物料管理 > 库存管理和实际库存 > 货物移动 > 货物移动的屏幕设置`中配置: - 使用隐式增强点添加自定义字段到MIGO界面 - 通过子屏幕增强(SUBSCREEN)在MIGO界面插入新页签 - 需搭配`CL_EXITHANDLER`类处理屏幕字段逻辑[^3] 3. **数据库表增强** 在标准表`MKPF`/`MSEG`附加结构(Append Structure)或创建自定义表(如`ZT_MIGO_ITEM`),通过UPDATE FUNCTION MODULE实现数据持久化: ```abap FUNCTION Z_MIGO_UPDATE. " IN UPDATE TASK模块中写入自定义表 INSERT ztmigo_item FROM TABLE it_migo_data. IF sy-subrc <> 0. RAISE error_update. ENDIF. ENDFUNCTION. ``` 需注意数据提交顺序避免被标准逻辑覆盖[^4] ### 二、关键配置路径 | 配置类型 | 事务代码 | 路径 | |-----------------|----------|----------------------------------------------------------------------| | 国家/地区设置 | SPRO | SAP NetWeaver > 常规设置 > 设置国家 > 插入地区(地方管理单元)[^1] | | 字段状态控制 | OMT4N | 物料管理 > 库存管理和实际库存 > 货物移动 > 定义字段的自动设置 | | 移动类型增强 | OMJJ | 物料管理 > 库存管理和实际库存 > 移动类型 > 复制/更改移动类型 | ### 三、数据更新处理要点 1. **更新顺序控制** 自定义表的更新必须声明为`IN UPDATE TASK`且通过`COMMIT WORK`触发,确保在标准表`MKPF/MSEG`更新后执行[^3] 2. **增强字段存储** 若新增字段需与物料凭证关联,建议: - 使用`MSEG`附加结构存储行项目级数据 - 创建独立自定义表时需包含`MBLNR`(物料凭证号)和`ZEILE`(行号)作为外键 3. **增强实施验证** 通过ST05跟踪SQL语句,验证自定义表与标准表的更新顺序是否符合`UPDATE MODULE`执行顺序 ### 四、典型错误场景 1. **字段显示但未存储** 需检查屏幕字段是否绑定到ABAP字典结构,并在`PBO/PAI`模块实现数据传输 2. **增强数据被覆盖** 确保UPDATE函数模块在标准表提交后执行,避免在`BEFORE_SAVE`阶段直接写库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT养家和SAP养家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值