MGA00001 物料主文档(工业):校验与增强
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
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.