"负号提前
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.