天天看点

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

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 <>  0  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 =  0 .

     MESSAGE  '该物料为外购件,计划交货天数至少为1天'  TYPE  'E'.

     RAISE application_error.

  ENDIF.

ENDIF.

IF sy-subrc <>  0  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.

继续阅读