REDUCE 循环迭代构造数据可以计算以下数据
1.统计表中有多少行符合要求的数据?
2.循环累计总金额
3.循环拼接字符串
具体代码如下
""""准备测试数据 DATA lv_numb TYPE i . SELECT ryear ,racct , rbukrs , tslvt , tsl01 ,tsl02 , tsl03 , tsl04 , tsl05 ,tsl06 , tsl07 , tsl08 , tsl09 ,tsl10 , tsl11 , tsl12 , tsl13 ,tsl14 , tsl15 , tsl16 FROM faglflext WHERE rbukrs = '1000' AND ryear = '2020' AND racct = '8035000001' INTO TABLE @DATA(lt_fag) UP TO 10 ROWS. IF lt_fag[] IS INITIAL. " DO 10 TIMES. APPEND INITIAL LINE TO lt_fag ASSIGNING FIELD-SYMBOL(<fs_fag>) . DO 20 TIMES. ASSIGN COMPONENT sy-index OF STRUCTURE <fs_fag> TO FIELD-SYMBOL(<fs_viue>) . CASE sy-index. WHEN 1. <fs_viue> = '2020'. WHEN 2. <fs_viue> = '8035000001'. WHEN 3. <fs_viue> = '1000'. WHEN 4. <fs_viue> = '0'. WHEN OTHERS. <fs_viue> = <fs_viue> lv_numb . ENDCASE. lv_numb = lv_numb 1 . ENDDO. ENDDO. ENDIF. ""统计表中有多少行符合要求的数据? DATA(lv_lines) = REDUCE i( INIT x = 0 FOR wa1 IN lt_fag WHERE ( rbukrs = '1000' ) NEXT x = x 1 ). ""循环累加计算总金额 DATA(lv_sum) = REDUCE wertv12( INIT x = 0 FOR wa2 IN lt_fag NEXT x = x wa2-tslvt wa2-tsl01 wa2-tsl02 ). ""循环拼接字符串 DATA(lv_string) = REDUCE string( INIT tex = `递增数据:` FOR n = 1 THEN N 1 UNTIL n > 9 NEXT tex = tex && n ).
REDUCE句子只能计算一个值,类型紧随其后REDUCE基本数据类型和数据元素可以定义类型,INIT接变量后,初始化数据,for连接循环数据,可循环表,也可累积循环,循环表正常loop循环相同,循环每一行存储在工作区域,然后进行计算,计循环for控制数据,then修改每个循环一次,until作为跳出循环的条件,next作为无循环的计算。