点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
SAP ECC 6.0(SAP_ABA 701),因此不能在内部表中使用辅助键...:(
我们有一个报告来维护表MLEA的数据。
其中一项要求是,该表中的EAN11字段必须唯一,不允许在其他任何记录中使用相同的值。
该报告具有一个选择屏幕,因此可能不会显示所有数据库记录。
我们需要检查ALV的任何行在EAN11字段中是否具有相同的值,然后出错。
如果不是,我们需要检查数据库中的任何记录在EAN11字段中是否具有相同的值,但是在标记为错误之前,我们需要检查同一记录是否在ALV中并且在EAN11中具有其他值( 用户可以修改报告中的值...)
---
我不喜欢解决问题的方法。
有什么帮助改进代码的地方吗?
数据: lt_alv mlea类型标准表, lt_alv_sort_keys具有唯一键的mlea的类型排序表matnr meinh lifnr lfnum, lt_alv_sort_ean带有唯一键ean11的mlea类型排序表 lt_ean_db具有非唯一键ean的mlea的类型排序表。 将lt_alv的行插入表lt_alv_sort_keys。 将lt_alv的行插入表lt_alv_sort_ean。 *选择具有相同EAN的数据库记录 如果lt_alv不是INITIAL。 选择Matnr Meinh Lifnr lfnum ean11 表lt_mlea_db的对应字段 来自mlea 对于lt_alv中的所有条目 在ean11 EQ lt_alv-ean11中。 万一。 循环至lt_alv分配。 *检查ALV中的其他行是否具有相同的EAN 循环播放lt_alv_sort_ean 分配 在ean11 EQ -ean11中," EAN11中的值相同 AND(matnr NE -matnr"不同的关键字段 或meinh NE -meinh 或lifnr NE -lifnr 或lfnum NE -lfnum)。 "错误 出口。 结局。 IF sy-subrc NE 0。 *检查任何数据库记录是否具有相同的EAN 循环播放lt_ean_db 分配 在ean11 EQ -ean11中。 *检查记录是否相同 检查 -matnr NE -matnr 或 -meinh NE -meinh 或 -lifnr NE -lifnr 或 -lfnum NE -lfnum。 *检查ALV中是否存在其他值 读取表lt_alv_sort_keys 分配 WITH KEY matnr = -matnr meinh = -meinh lifnr = -lifnr lfnum = -lfnum。 如果sy-subrc NE 0 或sy-subrc EQ 0和 -ean11 EQ -ean11。 "错误 出口。 万一。 结局。 万一。 ENDLOOP。
谢谢。
拼写错误:我认为lt_ean_db和lt_mlea_db应该是同一内部表。
代码有错误,因为您用UNIQUE键定义了lt_alv_sort_keys和lt_alv_sort_ean。 它应该是非唯一的。
此外,不需要lt_ean_db,可以使用lt_alv_sort_ean。
除此之外,我看不到更好的解决方案(最终会降低性能) 通过用lt_alv初始化"索引表"并仅更新与更改的值相对应的行来获得收益,但我认为这是过大的:微小的性能收益与较差的代码可维护性。)
从ABAP 7.4开始 您可以尝试用LOOP ... GROUP BY直到ean11来查找组大小,然后从那里知道哪些记录是重复的。
因此,对于相同的理想情况,对于较旧的版本,也许在NEW ... AT END 可以做同样的事情。 理想的情况是,您可以通过在AT END事件中检查收集的记录来首先检查ALV的重复记录,将其删除或执行任何操作。
很抱歉输入错误,这是原始报告的简化代码,我只写了一个很短的代码就发布了这个问题。 变量的名称与原始报告不同。
您是对的,lt_alv_sort_ean必须具有NON-UNIQUE KEY。 lt_ean_db是lt_mlea_db,我已经修复了。
代码中还有其他错别字,最后一次读取应使用而不是。
但是,lt_ean_db和lt_alv_sort不能是同一表。 因为您在lt_alv中没有数据库中的所有记录,所以仅从选择屏幕中进行选择(此代码中未截断)。 用户可以在ALV中手动添加其他新行。 因此,您需要在验证之前从数据库中选择值。 可能是您在ALV中具有来自DB的相同记录,但是值已更改...
一周热门 更多>