SAP:MM物料主数据 增强的地方 user-exit MGA00001

本文介绍了一种物料主文档的校验与增强方法,包括物料信息的完整性检查、物料冻结状态控制及物料描述的规范化处理等。针对不同类型的物料进行特定检查,并通过替换字符确保物料描述符合规范。

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

MGA00001      物料主文档(工业):校验与增强


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

*&  包括                ZXMG0U02
*&---------------------------------------------------------------------*

DATA: ls_makt TYPE makt,
      ls_short_desc TYPE short_desc,
      l_converted TYPE i.

DATA: l_len      TYPE i,
      l_tabix    TYPE i,
      l_char_be  TYPE zmm_char_be,
      l_char_af  TYPE zmm_char_af,
      l_text     TYPE maktx,
*      gt_zpp_mmcontrol TYPE TABLE OF zpp_mmcontrol,
*      gs_zpp_mmcontrol TYPE  zpp_mmcontrol,
      gt_mara    TYPE TABLE OF  mara,
      gs_mara    TYPE mara.
DATA: lt_replace_char   TYPE TABLE OF zmm_replace_char,
      ls_replace_char   TYPE zmm_replace_char.

CLEAR: ls_makt, ls_short_desc,gs_mara.
*2010-12-21
*增加通过物料组控制物料冻结状态
*SELECT * INTO CORRESPONDING FIELDS OF TABLE  gt_zpp_mmcontrol FROM zpp_mmcontrol.
SELECT INTO CORRESPONDING FIELDS OF TABLE  gt_mara FROM mara.
*READ TABLE gt_zpp_mmcontrol INTO gs_zpp_mmcontrol WITH KEY matkl = wmara-matkl.
*IF sy-subrc = 0 .
READ TABLE gt_mara INTO gs_mara WITH KEY matnr = wmara-matnr.
*IF sy-subrc <> 0 AND 'E X' CS wmarc-beskz.
*  cmara-mstae = 'Z1'.
IF  sy-subrc <> AND wmarc-beskz EQ 'F'.
  IF wmarc-ekgrp IS INITIAL.
    MESSAGE '该物料为外购件,采购组未填' TYPE 'E'.
    RAISE application_error.
  ELSEIF wmarc-plifz  IS INITIAL .
    MESSAGE '该物料为外购件,计划交货天数未填' TYPE 'E'.
    RAISE application_error.

  ELSEIF wmarc-plifz = .
    MESSAGE '该物料为外购件,计划交货天数至少为1天' TYPE 'E'.
    RAISE application_error.
  ENDIF.

ENDIF.

IF sy-subrc <> AND  wmara-mtart = 'SM01' .

  IF '001  002  003  004  005  006  007  008  009  010  011  012  013  014  015  016  017  018  019  020  021  022  023  024  025' CS wmara-matkl
  OR  '026  027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050' CS wmara-matkl
   OR '051  052 053 054 064 068 069 070 071 072 073 074 075' CS wmara-matkl.
    cmara-mstae = 'Z1'.
  ENDIF.
ENDIF.
*ENDIF.

*2010-12-21
IF '014 015 016 017 018 019 020 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 076 077' CS wmara-matkl.
  IF wmara-spart IS INITIAL.
    MESSAGE ID 'ZMMMSG' TYPE 'E' NUMBER '008'.
    RAISE application_error.
  ELSEIF  wmara-groes IS INITIAL.
    MESSAGE ID 'ZMMMSG' TYPE 'E' NUMBER '009' WITH wmara-matkl.
    RAISE application_error.
  ENDIF.
ENDIF.

"20110927 106 107 113 MSTAV
IF '106 107 113 160' CS wmarc-dispo AND sy-tcode EQ 'MM01'.
  cmara-mstav = 'Z1'.
  cmara-mstdv = sy-datum.
ENDIF.

READ TABLE stext INTO ls_short_desc WITH KEY spras = '1'.
CHECK sy-subrc = 0.

SHIFT ls_short_desc-maktx LEFT DELETING LEADING space.
l_text = ls_short_desc-maktx.

CALL FUNCTION 'SJIS_DBC_TO_SBC'
 EXPORTING
    all                  'X'
*   KATAKANA             = ' '
*   KATAKANA_LOOSE       = ' '
*   ALPHABET_UPPER       = ' '
*   ALPHABET_LOWER       = ' '
*   NUMERIC              = ' '
*   SPECIAL              = ' '
 IMPORTING
   converted            = l_converted
  CHANGING
    text                 = l_text
  EXCEPTIONS
    overflow             = 1
    OTHERS               2
          .
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  RAISE application_error.
ELSE.
  IF l_converted  > 0.
    MESSAGE ID 'ZMMMSG' TYPE 'E' NUMBER '006' WITH ls_short_desc-maktx.
    RAISE application_error.
  ENDIF.
ENDIF.

SELECT INTO CORRESPONDING FIELDS OF TABLE lt_replace_char
FROM zmm_replace_char
WHERE zactive = 'X'.
IF sy-subrc = 0.
  LOOP AT lt_replace_char INTO ls_replace_char.
    REPLACE ls_replace_char-zmm_char_be IN l_text WITH '~~~~'.
*    SEARCH ls_short_desc-maktx FOR ls_replace_char-zmm_char_be.
*    find
    IF sy-subrc = 0.
      MESSAGE ID 'ZMMMSG' TYPE 'E' NUMBER '006' WITH ls_short_desc-maktx ls_replace_char-zmm_char_be.
      RAISE application_error.
      EXIT.
    ENDIF.
  ENDLOOP.
ENDIF.

SELECT SINGLE INTO ls_makt
FROM makt
WHERE matnr <> wmara-matnr
  AND maktx = ls_short_desc-maktx
  AND spras = '1'.
IF sy-subrc = 0.
  MESSAGE ID 'ZMMMSG' TYPE 'E' NUMBER '005' WITH ls_short_desc-maktx.
  RAISE application_error.
ENDIF.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值