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

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

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

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值