Преобразование 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 ничего не вернет, но если вы закомментируете строку шаблона, это будет.

Если вы не добавили код в пользовательский выход в этой функции, он не будет делать то, что вы хотите. Стандартное назначение этой функции - отформатировать номер материала для отображения на экране.

Самый быстрый способ сделать то, что вы хотите, это выбрать из пользовательской таблицы, чтобы сделать поиск.

Тем не менее, в этой функции есть пользовательский выход, где вы можете кодировать выбор для поиска. Дополнительным преимуществом этого является то, что ваши пользователи смогут вводить устаревший номер материала, и система переключит его на новый.

Другие вопросы по тегам