SY-SUBRC が '4' の場合は、テーブル MARA の品目が存在しないか、値がwa-basic_data1-matnr
入力できないため、変換する必要があります。
テーブル 'MARA' の 'MATNR' の値が SAP で構成され、範囲を使用して標準トランザクション 'MM01' および 'MM41' の品目に番号が自動的に割り当てられる場合があります。この動作はカスタム プログラムには適用されません。この状況では、関数モジュール ' CONVERSION_EXIT_MATN1_INPUT ' および ' CONVERSION_EXIT_MATN1_OUTPUT 'を必ず使用してください。
データ型 'MATNR' は CHAR(18) で、値 (この場合) は左側にゼロで格納されますが、数値にはゼロが含まれていません。これは、SAP が値を出力用に内部的に変換するため、ユーザーにはそれらのゼロが表示されないためです。
たとえば、トランザクション 'SE16N' または 'MM03' の MARA-MATNR の値が '9999999' の場合、格納される実際の値は '000000000009999999' です。トランザクション 'SE11' で同じテーブルを確認すると、今度は生データが表示されます。次のコードは、上記をもう少しよく説明できます。
DATA: lv_matnr TYPE matnr,
wa_mara TYPE mara.
lv_matnr = '1234567'. " -> Not ready for input
SELECT SINGLE * FROM mara INTO wa_mara WHERE matnr eq lv_matnr.
WRITE sy-subrc. " -> sy-subrc = 4. Not found
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' " Format for input
EXPORTING
INPUT = lv_matnr " The value is '1234567'
IMPORTING
OUTPUT = lv_matnr " The value will be formatted to '000000000001234567'
EXCEPTIONS
LENGTH_ERROR = 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.
ENDIF.
SELECT SINGLE * FROM mara INTO wa_mara WHERE matnr eq lv_matnr.
WRITE / sy-subrc. " -> sy-subrc = 0. Found
あなたの場合、これを試してください。
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = wa-basic_data1-matnr
IMPORTING
OUTPUT = wa-basic_data1-matnr " Add zeroes at the left
EXCEPTIONS
LENGTH_ERROR = 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.
ENDIF.
UPDATE mara
SET
zzmanu = wa-sales_data2-zzmanu
zzmatnr_sf = wa-sales_data2-zzmatnr_sf
WHERE matnr = wa-basic_data1-matnr.
if sy-subrc eq 0.
commit work.
wait up to 2 seconds.
ENDIF.
それが役に立てば幸い