聊聊 SAP 早期产品实现源代码里的命名规则:比如 SPRAS 是什么鬼?

相信很多国内的 SAP 从业者,在初次接触到一些 SAP On-Premise 产品的数据库表时,都会一头雾水,至少笔者就是如此。

比如 SAP ERP 和 SAP S/4HANA 里的 MARA 表。这些整整齐齐长度为 5 的数据库字段名,读起来就像天书一样。

这种两眼一抹黑的情况,直到后来笔者去做另一个产品,也就是 SAP CRM 的标准开发时才有所好转:数据库表的字段名称终于变成了友好的英文拼写。然而这些字段里使用的 Data Element,比如下图 LANGU 字段的类型 SPRAS,仍然让我看起来很是费解。这个 SPRAS 是什么鬼?

后来花时间网上查了一下资料,才知道这些命名背后的来龙去脉。

SPRAS 源自德语单词 Sprache(语言)与 Schlüssel(键)拼合而成。

<think>好的,用户需要寻找在SAP ECC6.0 EHP7.0环境下,用于ABAP中物料主数据查重的代码。首先,我需要理解查重的具体需求是什么。物料主数据通常包含多个字段,如物料编号、描述、分类、基本计量单位等,查重可能基于这些字段的组合。 接下来,我得回忆一下SAP中物料主数据存储的表结构。物料主数据主要存储在MARA表中,而其他相关数据可能分布在MARC(工厂视图)、MARD(库存地点)、MAKT(物料描述)等表中。查重通常需要检查这些表中的关键字段是否存在重复值。 用户提到的是ABAP代码,所以需要编写一个ABAP程序,可能使用SELECT语句从MARA和其他表中检索数据,并进行比较。需要注意的是,SAP系统可能已有标准的事务代码或报表用于查重,比如MM03查看物料主数据,但用户可能需要自定义逻辑,因此需要自行开发。 接下来,考虑如何实现查重逻辑。例如,根据物料描述(MAKTX)和物料类型(MTART)的组合来判断是否存在重复。或者根据更复杂的条件,如基本计量单位(MEINS)和物料组(MATKL)等。需要明确查重的条件,这可能需要用户进一步说明,但假设用户需要基于物料描述和类型的组合。 然后,编写ABAP代码的步骤。首先声明需要的变量和内表,使用SELECT语句从MARA和MAKT中获取数据,然后根据条件进行比较。使用LOOP和AT NEW等语句来检测重复项。需要注意的是处理性能问题,比如避免全表扫描,但物料主数据量可能较大,因此可能需要使用索引或更高效的查询方式。 另外,权限问题也很重要,用户需要有访问相关表的权限。同时,SAP版本ECC6.0 EHP7.0的ABAP语法可能有一些特定的限制或功能,需要确保代码兼容性。 最后,测试代码的准确性,可能需要用测试数据验证查重逻辑是否正确,是否遗漏了某些情况。同时,提供使用说明,比如如何执行报表,输入参数等。 可能还需要考虑用户是否有访问生产系统的权限,或者是否应该在开发系统中进行测试。另外,用户可能需要将查重结果导出或显示在ALV报表中,方便查看。 总结下来,步骤是:确定查重条件,选择相关数据库表,编写ABAP查询逻辑,处理重复检测,输出结果,并考虑性能和权限问题。</think>在SAP ECC6.0 EHP7.0系统中,物料主数据查重可以通过ABAP程序实现,核心路是检查$MARA$(通用物料数据)和$MAKT$(物料描述)表中的关键字段组合。以下是具体实现步骤和示例代码: ### 一、标准查重逻辑 物料查重通常基于以下字段组合: 1. 物料描述+物料类型($MAKTX+MTART$) 2. 基本计量单位+物料组($MEINS+MATKL$) 3. 行业领域+分类视图($MBRSH+CLASS_TYPE$) $$ \text{查重公式} = \begin{cases} \text{重复判定} & \text{当 } \exists \, (MAKTX,MTART) \in MARA \times MAKT \\ \text{非重复} & \text{其他情况} \end{cases} $$ ### 二、ABAP代码示例 ```abap REPORT ZMAT_DUPLICATE_CHECK. TYPES: BEGIN OF TY_MATDATA, MATNR TYPE MARA-MATNR, "物料编号 MAKTX TYPE MAKT-MAKTX, "物料描述 MTART TYPE MARA-MTART, "物料类型 MEINS TYPE MARA-MEINS, "基本单位 END OF TY_MATDATA. DATA: LT_MARA TYPE TABLE OF TY_MATDATA, LT_MAKT TYPE TABLE OF TY_MATDATA, LT_DUP TYPE TABLE OF TY_MATDATA. START-OF-SELECTION. "步骤1:获取主数据 SELECT A~MATNR B~MAKTX A~MTART A~MEINS INTO TABLE @DATA(LT_DATA) FROM MARA AS A INNER JOIN MAKT AS B ON A~MATNR = B~MATNR WHERE B~SPRAS = '1'. "中文描述 "步骤2:按描述排序检测重复 SORT LT_DATA BY MAKTX MTART. LOOP AT LT_DATA ASSIGNING FIELD-SYMBOL(<DATA>). AT NEW MAKTX. CONTINUE. ENDAT. APPEND <DATA> TO LT_DUP. "检测到重复项 ENDLOOP. "步骤3:ALV输出结果 IF LT_DUP IS NOT INITIAL. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_STRUCTURE_NAME = 'TY_MATDATA' TABLES T_OUTTAB = LT_DUP. ELSE. MESSAGE '未发现重复物料' TYPE 'S'. ENDIF. ``` ### 三、关键注意事项 1. **性能优化**:建议添加选择屏幕参数限定查询范围,避免全表扫描影响性能 2. **权限控制**:需要`S_TABU_NAM`权限组中对$MARA$和$MAKT$表的访问授权[^3] 3. **扩展性**:可通过`CL_SALV_TABLE`增强输出功能,添加双击查看明细等交互操作 ### 四、标准替代方案 SAP标准事务代码$MM03$的"附加→重复检查"功能已内置查重逻辑(事务代码$MM06$新建物料时自动触发)[^1]。如需批量检测,可使用标准报表$MCRA_MATERIAL_DUPLICATES$。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪子熙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值