如果 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.
希望能帮助到你