Преобразование MATNR через выход преобразования завершается неудачно для пользовательской таблицы - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь выбрать самую последнюю дату движения материала из 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 ]

0 голосов
/ 05 июля 2019

Вы не должны использовать конверсионный выход здесь.Номер материала в таблицах 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 ничего не вернет, но если вы закомментируете строку шаблона, то это будет.

0 голосов
/ 04 июля 2019

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

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

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

...