matinal:S/4 hana系统中,内表Internal Table的改变

示例代码:

"test6
"secondary key
FORM f_test6.
  DATA:lt_spfli TYPE TABLE OF spfli
        WITH UNIQUE HASHED KEY k_hash COMPONENTS carrid connid countryfr
        WITH NON-UNIQUE SORTED KEY k_sort COMPONENTS carrid connid.
  SELECT * FROM spfli INTO TABLE lt_spfli.

  "loop时使用
  LOOP AT lt_spfli INTO DATA(ls_spfli) USING KEY k_sort WHERE carrid = 'AA' AND connid = '0001'.
  ENDLOOP.
  "read时使用
  READ TABLE lt_spfli INTO ls_spfli WITH KEY k_sort COMPONENTS carrid = 'AA' connid = '0001'.
  "当使用key读出记录需要更新时,必须使用对应key
  "sy-tabix记录的值会被key影响
  "更新时需要指定transporting字段,不能更新key值字段
  MODIFY lt_spfli USING KEY k_sort FROM ls_spfli INDEX sy-tabix
        TRANSPORTING countryfr.
ENDFORM. 

1.16 Internal Table:Processing Internal Tables Using Expressions

示例代码:

"test7
"表达式访问内表
FORM f_test7.
  DATA:lt_spfli TYPE TABLE OF spfli
       WITH NON-UNIQUE SORTED KEY k_sort
       COMPONENTS countryfr.
  DATA:ls_spfli LIKE LINE OF lt_spfli.
  DATA:lv_countryfr TYPE spfli-countryfr.
  SELECT * FROM spfli INTO TABLE lt_spfli.

  "line index从1开始
  ls_spfli = lt_spfli[ 1 ].
  WRITE:/ ls_spfli-carrid, ls_spfli-connid.
  "匹配多笔,只返回第一笔记录
  ls_spfli = lt_spfli[ carrid = 'AA' ].
  WRITE:/ ls_spfli-carrid, ls_spfli-connid.
  "使用key
  ls_spfli = lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ].
  WRITE:/ ls_spfli-carrid, ls_spfli-connid.
  "访问结构字段
  lv_countryfr = lt_spfli[ carrid = 'AA' ]-countryfr.

  "通过line index访问行
*  READ TABLE lt_spfli WITH KEY k_sort COMPONENTS countryfr = 'DE' TRANSPORTING NO FIELDS.
*  LOOP AT lt_spfli INTO ls_spfli FROM sy-tabix.
*  ENDLOOP.
  "line_index()方法
  "line_exists()方法
  "需要line_exists先判断访问数据行是否存在,
  "再使用line_index获取数据行
  IF line_exists( lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ] ).
    LOOP AT lt_spfli INTO ls_spfli
      FROM line_index( lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ] ).
    ENDLOOP.
  ENDIF.
ENDFORM.

1.17 Internal Table:Creating Comprehensions And Reductions

简化内表循环处理;

数据汇总方法;

示例代码:

"test8
"Creating Comprehensions And Reductions
FORM f_test8.
  DATA:lt_spfli TYPE TABLE OF spfli
       WITH NON-UNIQUE SORTED KEY s_sort COMPONENTS countryfr.
  DATA:lt_spfli2 TYPE TABLE OF spfli.
  DATA:ls_spfli LIKE LINE OF lt_spfli.
  TYPES:BEGIN OF s_ty1,
        carrid TYPE spfli-carrid,
        connid TYPE spfli-connid,

        END OF s_ty1.
  DATA:lt_ty1 TYPE TABLE OF s_ty1.
  DATA:ls_ty1 LIKE LINE OF lt_ty1.

  SELECT * FROM spfli INTO TABLE lt_spfli.
  "使用MOVE-CORRESPONDING进行内表赋值
  MOVE-CORRESPONDING lt_spfli TO lt_ty1.
  "保留lt_ty1已有记录
  "MOVE-CORRESPONDING lt_spfli TO lt_ty1 KEEPING TARGET LINES.
  "如果有嵌套结构赋值
  "MOVE-CORRESPONDING lt_spfli TO lt_ty1 EXPANDING NESTED TABLES.

  "不使用Loop,获取内表部分行
  lt_spfli2 = VALUE #( FOR wa IN lt_spfli
                             WHERE ( carrid = 'AA' )
                            ( wa ) ).
  "结合动态where条件,注意where两边括号不能有空格
  DATA:lv_carrid TYPE string VALUE 'AZ'.
  DATA:lv_connid TYPE string VALUE '0788'.
  DATA:lv_where TYPE string.
  lv_where = | CARRID = '{ lv_carrid }' AND CONNID = '{ lv_connid }' |.
  WRITE:/ lv_where.
  lt_spfli2 = VALUE #( FOR wa IN lt_spfli
                             WHERE (lv_where)
                            ( wa ) ).
  LOOP AT lt_spfli2 INTO DATA(ls_spfli2).
    WRITE:/ ls_spfli2-carrid,ls_spfli2-connid.
  ENDLOOP.

  "通过REDUCE,进行数据汇总
  DATA:lt_sflight TYPE TABLE OF sflight.
  DATA:ls_sflight LIKE LINE OF lt_sflight.
  TYPES:BEGIN OF s_ty2,
        carrid TYPE sflight-carrid,
        connid TYPE sflight-connid,
        sum_occ TYPE i,
        END OF s_ty2.
  DATA:lt_sflight2 TYPE TABLE OF s_ty2.
  DATA:lt_sflight3 TYPE TABLE OF s_ty2.
  DATA:lv_occ_total TYPE I.
  SELECT * FROM sflight INTO TABLE lt_sflight.
  "加总所有seatsocc
  lv_occ_total = REDUCE i( INIT i = 0
                   FOR ls_sflight2 IN lt_sflight
                   NEXT i = i + ls_sflight2-seatsocc
                  ).

  "根据carrid,connid分组汇总seatsocc
  LOOP AT lt_sflight INTO ls_sflight
    GROUP BY ( carrid = ls_sflight-carrid
               connid = ls_sflight-connid
               size = GROUP SIZE )
    ASCENDING ASSIGNING FIELD-SYMBOL(<fs_sflight>).
    lt_sflight2 = VALUE #( (
      carrid = <fs_sflight>-carrid
      co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值