对于自定义 table,通过转换出口转换 MATNR 失败

Converting MATNR via conversion exit fails for custom table

我正在尝试 select 来自 MSEG 的 material 运动的最新日期,但是 material 需要有库存并且来自定制 table 使用未转换的 Material 名称。

我试过使用 CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'(和 INPUT),但我不确定如何在 select 语句中正确使用它。

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 中提取数据。

除非您已将代码添加到该函数的用户出口中,否则它不会执行您想要的操作。该函数的标准用途是格式化 material 数字以显示在屏幕上。

完成您想要的操作的最快方法是从您的自定义 table select 进行查找。

也就是说,该函数中有一个用户出口,您可以在其中编写 select 代码来执行查找。这样做的额外好处是您的用户将能够输入旧的 material 号码,系统会将其切换为新号码。

您不应在此处使用转换出口。 Material SAP tables 中的数字采用内部 (INPUT) 格式,您正在将其转换为可读格式 (OUTPUT) 以便查询 table。很明显你不会找到任何东西。

样本:

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 ❌ nng 更改

最有可能的是,您定制的 table 包含错误的 material 号码,因此退出不会 return 任何东西。或者 material 格式的数字,exit 不期望,例如19 个字符而不是 18 个等等。

P.S.

仅供参考,您可以使用模板进行转换。和调用转换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 不会 return 任何东西,但是如果您注释掉模板行,它就会。