ABAP新语法合集
分组循环(LOOP AT Group) / REDUCE
此代码在分组汇总的时候,或者在打印的时候都可以用,汇总可以代替AT END OF field 和 AT NEW field ( 这个是需要调整内表结构字段顺序的)。
打印的时候,比如同一个单号要打印在同一页上面
*LOOP AT itab result [cond] GROUP BY key ( key1 = dobj1 key2 = dobj2 … * [gs = GROUP SIZE] [gi = GROUP INDEX] ) * [ASCENDING|DESCENDING [AS TEXT]] * [WITHOUT MEMBERS] * [{INTO group}|{ASSIGNING <group>}] * … * [LOOP AT GROUP group|<group> * … * ENDLOOP.] * … *ENDLOOP. * *… REDUCE type( *INIT result = start_value * … *FOR for_exp1 *FOR for_exp2 *… *NEXT … * result = iterated_value *… ) "首先创建一个内表 TYPES:BEGIN OF ty_data, id TYPE i, "人员ID name TYPE char10, "人员名称 country TYPE char10, "国家 language TYPE char2, "语言 age TYPE i, END OF ty_data, ty_t_data TYPE STANDARD TABLE OF ty_data WITH EMPTY KEY. "数据 DATA(gt_data) = VALUE ty_t_data( ( id = 1 name = 'Jerry' country = 'China' language = 'ZH' age = 18 ) ( id = 2 name = 'Jack' country = 'China' language = 'ZH' age = 19 ) ( id = 3 name = 'Nick' country = 'Korea' language = 'EN' age = 20 ) ( id = 4 name = 'Rossi' country = 'Korea' language = 'EN' age = 25 ) ( id = 5 name = 'Randy' country = 'Korea' language = 'EN' age = 23 ) ( id = 6 name = 'Tab' country = 'China' language = 'ZH' age = 22 ) ( id = 7 name = 'Lily' country = 'Korea' language = 'EN' age = 21 ) ( id = 8 name = 'Lucy' country = 'China' language = 'EN' age = 24 ) ( id = 9 name = 'Zera' country = 'China' language = 'EN' age = 28 ) ( id = 10 name = 'Grace' country = 'China' language = 'EN' age = 19 ) ) . "REDUCE "1计算年龄最大 DATA(lv_age_max_zh) = REDUCE i( INIT x = 0 FOR lw_data IN gt_data WHERE ( language = 'ZH' ) NEXT x = nmax( val1 = x val2 = lw_data-age ) ) . WRITE:/ |说中文的人中年龄最大的是:{ lv_age_max_zh } |. "2.输出的reduce TYPES:outref TYPE REF TO if_demo_output. DATA(output) = REDUCE outref( INIT out = cl_demo_output=>new( ) text = 'Count up:' FOR n = 1 UNTIL n > 11 NEXT out = out->write( text ) text = | { n } | ). output->display( ). "分组循环 "1.ls_data这个工作区里面是没有内容的 "2.<group>里面只有size index 和分组参数 LOOP AT gt_data INTO DATA(ls_data) GROUP BY ( country = ls_data-country language = ls_data-language size = GROUP SIZE index = GROUP INDEX ) ASCENDING ASSIGNING FIELD-SYMBOL(<group>). WRITE:/ |Group:{ <group>-index } Country :{ <group>-country } language : { <group>-language }| & | Number lines :{ <group>-size } |. "3.按照<group>中的分组参数循环 GT_data中的数据 LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_member>). WRITE:/ | Name:{ <ls_member>-name } |. ENDLOOP. DATA(lv_age_max) = REDUCE i( INIT max = 0 FOR lw_member IN GROUP <group> NEXT max = nmax( val1 = max val2 = lw_member-age ) ). DATA(lv_age_min) = REDUCE i( INIT min = 100 FOR lw_member IN GROUP <group> NEXT min = nmin( val1 = min val2 = lw_member-age ) ). DATA(lv_age_sum) = REDUCE i( INIT sum = 0 FOR lw_member IN GROUP <group> NEXT sum = sum + lw_member-age ). DATA(lv_age_avg) = lv_age_sum / <group>-size. WRITE:/ | 该组最大年龄,最小年龄和平均年龄分别为:{ lv_age_max } { lv_age_min } { lv_age_avg } |. ENDLOOP.
往内表添加数据
APPEND VALUE #( RSNUM = GS_DATA-MBLNR RSPOS = GS_DATA-ZEILE ) TO LT_CAPPR_M[].
截取字符串后几个字符
SHIFT LV_PS_PSP_PNR BY strlen( LV_PS_PSP_PNR ) - 2 PLACES LEFT.
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号