Преобразование MATNR через выход преобразования завершается неудачно для пользовательской таблицы
Я пытаюсь выбрать самую последнюю дату движения материала из MSEG, но материал должен быть на складе, и он получен из таблицы на заказ, в которой используются неконвертированные названия материалов.
Я пытался использовать функцию CALL 'CONVERSION_EXIT_MATN1_OUTPUT' (и INPUT), но я не уверен, как правильно использовать ее в операторе выбора.
IF MSEG-BWART = '101'.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
INPUT = ZBJSTOCK-ZMAT10
IMPORTING
OUTPUT = WA2-MATNR.
SELECT MAX( BUDAT_MKPF )
FROM MSEG
INTO GRDT
WHERE MATNR = WA2-MATNR.
ENDIF.
В настоящее время WA2-MATNR кажется пустым и поэтому не получает данные из MSEG.
2 ответа
Вы не должны использовать конверсионный выход здесь. Номер материала в таблицах SAP лежит во внутреннем (INPUT) формате, и вы преобразовываете его в читаемый формат (OUTPUT) для запроса таблицы. Очевидно, вы ничего не найдете.
Образец:
Внутренний формат MATNR (для выходов OUT)
000000000000025567
Внешний формат MATNR (для выходов IN)
25567
Случаи конверсии:
000000000000025567 -> CONVERSION_EXIT_MATN1_OUTPUT
-> 25567 ✔️
25567 -> CONVERSION_EXIT_MATN1_OUTPUT
-> 25567 ❌ ничего не меняется
25567 -> CONVERSION_EXIT_MATN1_INPUT
-> 000000000000025567 ✔️
000000000000025567 -> CONVERSION_EXIT_MATN1_INPUT
-> 000000000000025567 - изменения
Скорее всего, ваша таблица содержит неверный номер материала, поэтому exit ничего не возвращает. Или номер материала в формате, который при выходе не ожидается, например, 19 символов вместо 18 и так далее.
PS
Только для вашей информации, вы можете использовать шаблоны для конвертации. Это так же, как вызов конверсионных FM
SELECT SINGLE matnr FROM mara INTO @DATA(l_matnr) WHERE EXISTS ( SELECT * FROM mseg WHERE matnr = mara~matnr ).
l_matnr = | { l_matnr ALPHA = OUT } |. <<-- templating
SELECT SINGLE matnr, budat_mkpf
FROM mseg
INTO @DATA(l_mkpf)
WHERE matnr = @l_matnr.
В приведенном выше примере SELECT ничего не вернет, но если вы закомментируете строку шаблона, это будет.
Если вы не добавили код в пользовательский выход в этой функции, он не будет делать то, что вы хотите. Стандартное назначение этой функции - отформатировать номер материала для отображения на экране.
Самый быстрый способ сделать то, что вы хотите, это выбрать из пользовательской таблицы, чтобы сделать поиск.
Тем не менее, в этой функции есть пользовательский выход, где вы можете кодировать выбор для поиска. Дополнительным преимуществом этого является то, что ваши пользователи смогут вводить устаревший номер материала, и система переключит его на новый.