帮助改善此代码段的性能

2020-09-01 04:59发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, SAP ECC 6...

         点击此处--->   EasySAP.com群内免费提供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。

谢谢。

3条回答
clever101
2020-09-01 05:34

从ABAP 7.4开始 您可以尝试用LOOP ... GROUP BY直到ean11来查找组大小,然后从那里知道哪些记录是重复的。

因此,对于相同的理想情况,对于较旧的版本,也许在NEW ... AT END 可以做同样的事情。 理想的情况是,您可以通过在AT END事件中检查收集的记录来首先检查ALV的重复记录,将其删除或执行任何操作。

一周热门 更多>