SAP:MM发货移动收货MB01/MB1A/MB1C/MB21/MIGO/等用到的user-exitMBCF0002

本文探讨了在程序开发过程中,如何确保权限管理和库存管理的高效执行,通过具体实例展示了如何利用程序逻辑来实现对不同仓库类型(如成品库、半成品库等)的权限检查,同时对库存操作进行限制,例如防止对特定价格(如0.01)的物品进行移动。文章深入分析了权限控制、库存管理与程序开发之间的相互作用,提供了实际应用案例。
部署运行你感兴趣的模型镜像

MBCF0002

*&---------------------------------------------------------------------*

*&  包括                ZXMBCU02
*&---------------------------------------------------------------------*


DATA: movetype(20)  VALUE '261 201',
      movetype1(20) VALUE '261 262 201 202',
      ordtype(60)   VALUE 'ZP02 ZP03 ZP04 ZPS2 ZPS3 Z161 Z162 Z163 Z361 Z362 Z363',
      matkl LIKE mara-matkl,
      l_mseg TYPE  mseg,
      stprs LIKE mbew-stprs,
      zkprs LIKE mbew-zkprs.
.
IF ( sy-datum GE '20111230'  AND sy-uzeit GE '170000' AND ( sy-datum LE '20120101'  AND sy-uzeit LE '080000' ).
  IF  i_mseg-lgort+0(1) = 'T'.
    MESSAGE '应财务和物流要求目前关闭 备品备件库收发存' TYPE 'E'.
  ENDIF.
ENDIF.

IF ( sy-datum GE '20111230'  AND sy-uzeit GE '170000' AND ( sy-datum LE '20120101'  AND sy-uzeit LE '080000' ).
  IF  i_mseg-lgort EQ 'C001' OR  i_mseg-lgort EQ 'X003' .
    MESSAGE '应财务和物流要求目前关闭 C001 X003 收发存' TYPE 'E'.
  ENDIF.
ENDIF.

IF  i_mseg-grund IS INITIAL.
  IF i_mseg-bwart EQ '412' OR i_mseg-bwart EQ '414'.
    MESSAGE '412,414移类型禁止使用。' TYPE 'E'.
  ENDIF.
  "20110427增强标准价格为0.01的不允许移动
  IF sy-tcode EQ 'MB01'.
    IF i_mseg-matnr+10(1) EQ 1.
      CLEAR: stprs,zkprs.
      SELECT SINGLE stprs zkprs INTO (stprs , zkprs) FROM mbew WHERE matnr = i_mseg-matnr.
      IF stprs EQ '0.01' AND zkprs <= '0.01'.
        MESSAGE e010(zmmmsg) WITH i_mseg-matnr.
      ENDIF.
    ENDIF.
  ENDIF.
  "20110427增强标准价格为0.01的不允许移动1
  IF sy-tcode = 'MB31'.
    IF  i_mseg-lgort+0(1) = 'C' AND i_mseg-lgort NE 'C002'.
      AUTHORITY-CHECK OBJECT 'ZMMOBJ002' ID 'ZMB31C' FIELD '01'."20110120增强MB31入成品库半成品权限检查
      IF sy-subrc NE 0.
        MESSAGE '您没有成品库权限' TYPE 'E'.
      ENDIF.
    ELSEIF  i_mseg-lgort EQ 'C002'.
      AUTHORITY-CHECK OBJECT 'ZMMOBJ004' ID 'ZMB31C002' FIELD '01'.
      IF  sy-subrc EQ 0.
        CLEAR:matkl.
        SELECT SINGLE mara~matkl INTO matkl FROM mara WHERE mara~matnr = i_mseg-matnr.
        IF matkl NE '039'.
          MESSAGE '您的权限只能收料物料组为039胶板类产品.' TYPE 'E'.
        ENDIF.
      ELSE.
        AUTHORITY-CHECK OBJECT 'ZMMOBJ002' ID 'ZMB31C' FIELD '01'.
        IF sy-subrc NE 0.
          MESSAGE '您没有成品库权限' TYPE 'E'.
        ENDIF.
      ENDIF.
    ENDIF.



    IF  i_mseg-lgort+0(1)  = 'B' AND i_mseg-lgort NE 'B002'.
      AUTHORITY-CHECK OBJECT 'ZMMOBJ003' ID 'ZMB31B002' FIELD '01'."20110120增强MB31入成品库半成品权限检查
      IF sy-subrc NE 0.
        MESSAGE '您没有半成品库权限' TYPE 'E'.
      ENDIF.
    ELSEIF  i_mseg-lgort EQ 'B002'.
      AUTHORITY-CHECK OBJECT 'ZMMOBJ006' ID 'ZMMID004' FIELD '01'."20110120增强MB31入成品库半成品权限检查
      IF sy-subrc NE 0.
        MESSAGE '您没有B002半成品库权限' TYPE 'E'.
      ENDIF.
    ENDIF.

  ENDIF.

  IF sy-tcode = 'MB1B'.
    IF  i_mseg-lgort+0(1)  = 'B' AND i_mseg-lgort NE 'B002'.
      AUTHORITY-CHECK OBJECT 'ZMMOBJ003' ID 'ZMB31B002' FIELD '01'."20110120增强MB31入成品库半成品权限检查
      IF sy-subrc NE 0.
        MESSAGE '您没有半成品库权限' TYPE 'E'.
      ENDIF.
    ELSEIF  i_mseg-lgort EQ 'B002'.
      AUTHORITY-CHECK OBJECT 'ZMMOBJ006' ID 'ZMMID004' FIELD '01'."20110120增强MB31入成品库半成品权限检查
      IF sy-subrc NE 0.
        MESSAGE '您没有B002半成品库权限' TYPE 'E'.
      ENDIF.
    ENDIF.
  ENDIF.


  IF sy-tcode = 'MB1A' OR sy-tcode = 'MB11'.

    IF  i_mseg-lgort+0(1)  = 'B' AND i_mseg-lgort NE 'B002'.
      AUTHORITY-CHECK OBJECT 'ZMMOBJ003' ID 'ZMB31B002' FIELD '01'."20110120增强MB31入成品库半成品权限检查
      IF sy-subrc NE 0.
        MESSAGE '您没有半成品库权限' TYPE 'E'.
      ENDIF.
    ELSEIF  i_mseg-lgort EQ 'B002'.
      AUTHORITY-CHECK OBJECT 'ZMMOBJ006' ID 'ZMMID004' FIELD '01'."20110120增强MB31入成品库半成品权限检查
      IF sy-subrc NE 0.
        MESSAGE '您没有B002半成品库权限' TYPE 'E'.
      ENDIF.
    ENDIF.

    AUTHORITY-CHECK OBJECT 'ZMMOBJ001' ID 'ZMB1A' FIELD 'a'."20110113增强权检查 如果有此权限 即不需 要一定输入订单号或者预留号
    CHECK sy-subrc NE 0.
    IF i_mseg-rsnum IS INITIAL.
      IF ( movetype1 CS i_mseg-bwart ) AND i_mseg-grund IS INITIAL.
        MESSAGE ID 'ZMMMSG' TYPE 'E' NUMBER 007.
      ENDIF.
    ENDIF.
  ENDIF.
ENDIF.
DATA:gt_resb TYPE TABLE OF resb ,
     gs_resb TYPE  resb,
     gt_marc TYPE TABLE OF marc ,
     gs_marc TYPE  marc,
     gt_zpp_product_ll TYPE TABLE OF zpp_product_ll ,
     gs_zpp_product_ll TYPE  zpp_product_ll.
DATA:fqty TYPE bdmng,
     fqty1 TYPE bdmng.




IF sy-tcode = 'MB1A' AND movetype CS i_mseg-bwart.
  SELECT INTO CORRESPONDING FIELDS OF TABLE gt_resb FROM resb WHERE  rsnum = i_mseg-rsnum AND  rspos = i_mseg-rspos..
  SELECT INTO CORRESPONDING FIELDS OF TABLE gt_marc FROM marc WHERE   matnr = i_mseg-matnr.
  SELECT INTO CORRESPONDING FIELDS OF TABLE gt_zpp_product_ll
    FROM zpp_product_ll
    FOR ALL ENTRIES IN gt_marc
    WHERE dispo = gt_marc-dispo.
  READ TABLE gt_resb INTO gs_resb WITH KEY rsnum = i_mseg-rsnum rspos = i_mseg-rspos.
  CHECK sy-subrc = 0.
  READ TABLE gt_marc INTO gs_marc WITH KEY matnr = i_mseg-matnr.

  fqty = gs_resb-bdmng - gs_resb-enmng.
  IF fqty < i_mseg-menge .
*   MESSAGE ID 'ZPPMSG' TYPE 'E' NUMBER 002.
    READ TABLE gt_zpp_product_ll INTO gs_zpp_product_ll WITH KEY dispo = gs_marc-dispo.
    fqty1 = i_mseg-menge - fqty.
    IF sy-subrc = .
      MESSAGE w002(zppmsg) WITH fqty1 gs_resb-meins.
    ELSE.
      MESSAGE e002(zppmsg) WITH fqty1 gs_resb-meins.
    ENDIF.

  ENDIF.
ENDIF.
CLEAR:gs_resb,gs_marc,gs_zpp_product_ll.

您可能感兴趣的与本文相关的镜像

GPT-SoVITS

GPT-SoVITS

AI应用

GPT-SoVITS 是一个开源的文本到语音(TTS)和语音转换模型,它结合了 GPT 的生成能力和 SoVITS 的语音转换技术。该项目以其强大的声音克隆能力而闻名,仅需少量语音样本(如5秒)即可实现高质量的即时语音合成,也可通过更长的音频(如1分钟)进行微调以获得更逼真的效果

<think>好的,用户想知道SAPMB01MIGO的功能差异及使用场景。首先,我需要回忆这两个事务码的基本用途。MB01是传统的物料移动事务,主要用于执行货物移动,比如收货发货和转储过账。而MIGO是一个更现代、集成化的工具,支持多种业务操作,包括货物移动、质检和批次管理。接下来,我需要查阅提供的引用资料,看看有没有相关的信息。 引用[3]提到,入库时使用MB01MIGO,但没有具体说明区别。引用[4]讨论了MIGO收货和冲销中的应用,以及如何通过检查EKBE和MSEG表判断收货状态。这里可能需要对比两者的操作流程和后台处理方式。 MB01属于SAP较早版本的功能,操作界面较为简单,适合处理标准货物移动。而MIGO整合了多个旧事务码,如MB01MB1A等,提供统一的界面,支持更复杂的业务场景,比如结合质检和批次管理。此外,MIGO在处理冲销时可能需要更多的后台表检查,如引用[4]所述的方法。 需要注意的是,MB01生成的凭证类型通常是固定对应的,而MIGO通过不同的移动类型(如101103、105)来区分业务,并且这些类型可能组合使用以达到特定效果,如引用[2]提到的103和105结合相当于101。此外,MIGO在过账时可能需要调用BAPI,如BAPI_GOODSMVT_CREATE,并配合BAPI_TRANSACTION_COMMIT提交事务,如引用[1]所述。 总结下来,功能差异主要体现在操作界面、集成度、灵活性和后台处理方式。使用场景方面,MB01适用于简单的标准操作,而MIGO更适合复杂的业务流程,需要结合质检或批次管理的情况,以及需要灵活处理不同移动类型的场景。同时,用户可能需要考虑系统版本和业务需求来选择合适的事务码。 最后,确保回答结构清晰,分说明差异和应用场景,并引用相关资料支持观。同时生成相关问题,帮助用户进一步理解。</think>### SAPMB01MIGO的功能差异及使用场景 #### 1. **功能定位差异** - **MB01**:是SAP早期版本中用于执行**货物移动**(如采购订单收货、生产订单收货)的标准事务码,主要面向简单、直接的货物过账操作。例如,通过移动类型(如101、501)直接完成入库或出库[^3]。 - **MIGO**:是SAP后期推出的**集成化货物移动事务**,整合了MB01MB1A(发货)、MB1B(转储)等旧事务码的功能,支持更复杂的业务场景,包括质检、批次管理及冲销操作[^4]。 #### 2. **操作灵活性与集成度** - **MB01**:仅支持单一业务操作,如采购订单收货时直接生成物料凭证,界面简单但功能受限。 - **MIGO**: - 支持**多业务类型**(如收货发货、转储)在同一界面完成。 - 可结合质检流程(如103/105移动类型),允许收货到质检库存后再转移至非限制库存[^2]。 - 支持冲销操作时自动检查关联凭证(如通过MSEG表判断是否存在贷方记录)[^4]。 #### 3. **后台处理与数据关联** - **MB01**:生成的凭证直接更新后台表(如MKPF、MSEG、MATDOC),但缺乏灵活的事务关联逻辑。 - **MIGO**: - 使用标准BAPI(如`BAPI_GOODSMVT_CREATE`)生成凭证,需通过`BAPI_TRANSACTION_COMMIT`提交事务[^1]。 - 支持更复杂的数据关联,例如通过采购凭证历史表(EKBE)判断收货是否已冲销[^4]。 #### 4. **典型应用场景** - **MB01适用场景**: - 简单的采购订单收货移动类型101)。 - 无需质检或批次管理的标准入库操作。 - **MIGO适用场景**: - **质检相关操作**:如收货到质检库存(移动类型103)后转移至可用库存(移动类型105)。 - **冲销与反向操作**:通过物料凭证号追溯原始交易并生成反向记录。 - **批次管理**:在收货时直接分配或更新批次信息。 #### 5. **技术实现对比** | 特性 | MB01 | MIGO | |--------------------|-------------------------------|-------------------------------| | 事务类型 | 单一功能(如收货) | 多功能集成 | | 移动类型灵活性 | 固定对应移动类型 | 支持多种组合(如103+105) | | 后台数据关联 | 直接更新表 | 通过BAPI和事务提交机制 | | 冲销逻辑 | 需手动操作 | 自动检查凭证关联性 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值