1

我正在尝试从 MSEG 选择材料移动的最新日期,但材料需要有库存,并且来自使用未转换材料名称的定制表。

我试过使用CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'(and 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 中提取数据。

4

2 回答 2

1

您不应该在这里使用转换出口。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 ❌ nng 更改

很可能,您的定制表包含错误的材料编号,因此退出不会返回任何内容。或以不期望的格式退出的材料编号,例如 19 个字符而不是 18 个字符,依此类推。

附言

仅供参考,您可以使用模板进行转换。与调用转换 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 不会返回任何内容,但如果您注释掉模板行,它将返回。

于 2019-07-05T18:07:40.147 回答
0

除非您在该函数的用户出口中添加了代码,否则它不会执行您想要的操作。该功能的标准用途是格式化材料编号以在屏幕上显示。

做你想做的最快的方法是从你的自定义表中选择进行查找。

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

于 2019-07-04T11:29:44.597 回答