ATC检查:需要明确的SORT声明

2020-08-14 23:31发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我注意到,当我们使用FO...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我注意到,当我们使用FOR ALL ENTRIES在第一个表(例如ITAB1)的基础上从第二个表(例如ITAB2)中选择数据时,没有在第一个表上明确指定SORT语句(例如:通过键字段对SORT itab1进行指定) ,ATC检查会产生错误,即两个表可以联接,而不是单独选择。 如果我在ITAB1上写一个明确的SORT语句,该错误就会消失。

如果我们将ITAB1定义为SORTED TABLE OF或在获取数据时基于主键应用ORDER BY子句,则会发生这种情况。

这是否意味着ATC在寻找明确的SORT语句,并且不认为该表使用其他技术进行了排序?

此致

Manish

4条回答
吹牛啤
2020-08-15 00:29

桑德拉,你好

以下是各种情况的代码:

1。 任何地方都没有SORT语句:
如果我在lt_A501上不使用SORT语句,则在ATC检查中说我应该将这两个表(A501和KONP)连接起来。 由于A501是缓冲表,因此即使我这样做,我也不会将其与KONP合并,但当前的ATC错误消失了,但是又出现了一个提示" JOIN中的缓冲表"。

SELECT matnr,knumh

来自a501
        其中kappl ='V'
         AND kschl ='ZMGC'
          AND zzbuy ='G0050'
          AND matnr IN @lt_product_range
           AND datab LE @ sy-datum
           AND datbi GE @ sy-datum
         插入表@DATA(lt_a501)。

       如果lt_a501不是初始的。
         "仅获取活动状态记录
         SELECT knumh,kbetr
          来自konp
          对于@ lt_a501中的所有条目
          什么地方knumh = @ lt_a501-knumh
           AND loevm_ko =''
          插入表@DATA(lt_konp)。

2。 添加了显式SORT语句:
如果我在基于KNUMH的lt_A501上添加显式SORT语句,则ATC错误将消失。

 SELECT matnr,knumh
         从a501
        其中kappl ='V'
         AND kschl ='ZMGC'
          AND zzbuy ='G0050'
          AND matnr IN @lt_product_range
           AND datab LE @ sy-datum
           AND datbi GE @ sy-datum
         插入表@DATA(lt_a501)。

       如果lt_a501不是初始的。
         以knumh排序lt_a501。
         "仅获取活动状态记录
         SELECT knumh,kbetr
          来自konp
          对于@ lt_a501中的所有条目
          什么地方knumh = @ lt_a501-knumh
           AND loevm_ko =''
          插入表@DATA(lt_konp)。

3。 使用ORDER BY进行排序:
如果我在第一个查询本身中通过KNUMH指定ORDER,ATC错误就会再次出现

"从条件表中获取政府价格购买grp的数据
       SELECT matnr,knumh
         从a501
        其中kappl ='V'
         AND kschl ='ZMGC'
          AND zzbuy ='G0050'
          AND matnr IN @lt_product_range
           AND datab LE @ sy-datum
           AND datbi GE @ sy-datum
         订单编号
         插入表@DATA(lt_a501)。

       如果lt_a501不是初始的。
         "仅获取活动状态记录
         SELECT knumh,kbetr
          来自konp
          对于@ lt_a501中的所有条目
          什么地方knumh = @ lt_a501-knumh
           AND loevm_ko =''
          INTO TABLE @DATA(lt_konp)。

一周热门 更多>