Если SY-SUBRC равно «4», то материал в таблице MARA не существует или значение wa-basic_data1-matnr
не готово для ввода, и вы должны его преобразовать.
Иногда значение «MATNR» в таблице «MARA» настраивается в SAP для использования диапазона для автоматического присвоения номера материалам в стандартных транзакциях «MM01» и «MM41». Такое поведение не применяется в пользовательских программах, поэтому в этих ситуациях обязательно используйте функциональные модули «CONVERSION_EXIT_MATN1_INPUT» и «CONVERSION_EXIT_MATN1_OUTPUT».
Тип данных «MATNR» - это символ CHAR (18), а значения (в этом случае) сохраняются с нулями слева, хотя вы видите число без этих нулей. И это потому, что SAP внутренне преобразует для вывода значения, чтобы пользователь не видел эти нули.
Например, если значение MARA-MATNR в транзакции «SE16N» или «MM03» равно «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 '0000000000'
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.
Надеется, что это помогает
Можете ли вы предоставить больше данных, например; являются ли эти Z уникальными индексами? Какова ценность 'wa-basic_data1-matnr'? Преобразован ли он для ввода ?, и т. Д. –
Что такое SY-SUBRC, когда он не работает? Является ли материал заблокированным, когда вы делаете это обновление? –
@ Нельсон Миранда "matnr = wa-basic_data1-matnr." Я проверил это значение правильно. это готовый товарный материал № –