You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用字符串字面量查询原始值与输入值不一致的SAP数据表?

问题说明

我创建了以MATNR和另外两个字段为主键的自定义表z_test_db,并通过ABAP代码插入了4条测试数据(代码如下)。用字符串条件MATNR = '4711'查询这个Z表能正常返回结果,但用同样的条件查询SAP标准表MARA时却没有数据返回。排查后发现,MARA表中MATNR字段的实际存储值是带前导零的000000000000004711,只是SE16N界面会自动显示为去掉前导零的4711。

delete from z_test_db.
data ls_tab type z_test_db.
data now type timestamp.

get time stamp field now.
ls_tab = value #( matnr = '4711' vorne = 0010 terminal = 'AAA' etkpgm = 'XXX' drucker = 'MO-ED-01' voretkm = 1 etkcopy = 1 eruser = sy-uname ertime = now aeuser = '' aetime = 0 kzaktv = 'X' kzaaeu = '' kzaaet = 0 ).
insert z_test_db from ls_tab.

get time stamp field now.
ls_tab = value #( matnr = '4712' vorne = 0010 terminal = 'AAA' etkpgm = 'XXX' drucker = 'MO-ED-01' voretkm = 1 etkcopy = 1 eruser = sy-uname ertime = now aeuser = '' aetime = 0 kzaktv = 'X' kzaaeu = '' kzaaet = 0 ).
insert z_test_db from ls_tab.

get time stamp field now.
ls_tab = value #( matnr = '4711' vorne = 0010 terminal = 'BBB' etkpgm = 'XXX' drucker = 'MO-ED-01' voretkm = 1 etkcopy = 1 eruser = sy-uname ertime = now aeuser = '' aetime = 0 kzaktv = 'X' kzaaeu = '' kzaaet = 0 ).
insert z_test_db from ls_tab.

get time stamp field now.
ls_tab = value #( matnr = '4712' vorne = 0010 terminal = 'BBB' etkpgm = 'XXX' drucker = 'MO-ED-01' voretkm = 1 etkcopy = 1 eruser = sy-uname ertime = now aeuser = '' aetime = 0 kzaktv = 'X' kzaaeu = '' kzaaet = 0 ).
insert z_test_db from ls_tab.
解决方法
  • 使用物料编号转换函数处理查询值
    SAP提供了标准转换函数CONVERSION_EXIT_MATN1_INPUT,可以把不带前导零的物料短码转换成系统存储用的带前导零格式。示例代码:

    DATA: lv_matnr_short TYPE char18 VALUE '4711',
          lv_matnr_long  TYPE mara-matnr.
    
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        input  = lv_matnr_short
      IMPORTING
        output = lv_matnr_long.
    
    SELECT * FROM mara WHERE matnr = lv_matnr_long.
      " 这里处理查询到的结果
    ENDSELECT.
    
  • ABAP 7.50+直接在SQL中调用转换函数
    如果系统版本是ABAP 7.50及以上,可以直接在SELECT语句里嵌入转换函数,省去单独调用的步骤:

    SELECT * FROM mara 
      WHERE matnr = CONVERSION_EXIT_MATN1_INPUT( input = '4711' ).
    
  • 让Z表MATNR字段和标准表保持一致规则
    要是后续需要Z表和MARA做关联查询,建议修改z_test_db的MATNR字段,设置它参考标准数据元素MATNR。这样在维护Z表数据时,系统会自动补前导零;查询时输入短码也会自动转换,从根源上避免格式不匹配的问题。

内容的提问来源于stack exchange,提问作者Radinator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:45:02