ABAP ALV负号提前 LOOP嵌套LOOP优化

"负号提前

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
      CHANGING
        value = lw_output-wemng.

LOOP内嵌套LOOP的优化

内表一定要按照主键排序,主键要写全

SORT LT_DATA BY 主键1 主键2.

LOOP AT GT_DATA INTO GW_DATA .
	READ TABLE LT_DATA TRANSPORTING NO FIELDS WITH KEY 主键1 = GW_DATA-主键1 主键2 = GW_DATA-主键2 BINARY SEARCH.
	IF SY-SUBRC = 0.
		LV_TABIX = SY-TABIX.
		LOOP AT LT_DATA FROM LV_TABIX INTO LW_DATA.
        IF GW_DATA-主键 <> LW_DATA-主键 OR GW_DATA-主键2 <> LW_DATA-主键2.
          EXIT.
        ENDIF.
        "数据处理
      ENDLOOP.
	ENDIF.
ENDLOOP.

关键字TRANSPORTING NO FIELDS 用于READ TABLE WITH KEY 一般用于等读取内表的时候,只是判断该内表中是否有次数据 不需要读取到工作区中。

实例:

"获取次要数据--订单状态
  SELECT
    jest~objnr,
    jest~stat, "订单状态
    tj02t~txt30 "订单状态文本
    FROM jest
    LEFT JOIN tj02t ON jest~stat = tj02t~istat
    INTO TABLE @DATA(lt_tj02t)
    FOR ALL ENTRIES IN @lt_output
    WHERE objnr = @lt_output-objnr
    AND   spras = @sy-langu
    AND   stat IN @s_sttxt
    .
  SORT lt_tj02t BY objnr.
  "合并数据
  CLEAR lw_output.
*  "显示一个订单编号的所有状态 ---------初版
*  LOOP AT lt_output INTO lw_output.
*    LOOP AT lt_tj02t INTO DATA(ls_tj02t).
*      IF lw_output-objnr = ls_tj02t-objnr.
*        lw_output-stat = ls_tj02t-stat.
*        lw_output-txt30 = ls_tj02t-txt30.
*        MODIFY lt_output FROM lw_output.
*        APPEND lw_output TO lt_output2.
*        CLEAR ls_tj02t.
*      ENDIF.
*    ENDLOOP.
*  ENDLOOP.

   "显示一个订单编号的所有状态 -------- 优化版
  SORT lt_output BY objnr.
  LOOP AT lt_output INTO lw_output.
    READ TABLE lt_tj02t TRANSPORTING NO FIELDS WITH KEY objnr = lw_output-objnr BINARY SEARCH.
    IF SY-subrc = 0.
      lv_tabix = SY-TABIX.
      LOOP AT lt_tj02t FROM lv_tabix INTO DATA(ls_tj02t).
        IF lw_output-objnr <> ls_tj02t-objnr.
          EXIT.
        ENDIF.
        lw_output-stat  = ls_tj02t-stat. "订单状态
        lw_output-txt30 = ls_tj02t-txt30. "订单状态文本
        MODIFY lt_output FROM lw_output.
        APPEND lw_output TO lt_output2.
        CLEAR ls_tj02t.
      ENDLOOP.
    ENDIF.
  ENDLOOP.
  CLEAR lt_output.
  lt_output = lt_output2.
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值