场景:二次维护某报表,用户需要的字段会将之前的数据对应多条数据
首先将原先的数据 存入另一个表(用原先的表去loop会死循环)
itab_so1[] = itab_so[].
然后去loop这个新内表,声明两个index,用于判断,然后进行赋值。
第二层loop的第一次读取最后去modify,免得多出一条数据;
其它次读取直接append.
itab_so1[] = itab_so[].
DATA:l_index TYPE sy-index."第二层loop的index
DATA:l_idx TYPE sy-index."第一层loop的index
CLEAR:l_idx,l_index.
LOOP AT itab_so1 INTO w_itab_so.
l_index = 1."初始化
l_idx = l_idx + 1.
LOOP AT t_zsd_allot INTO w_zsd_allot WHERE vbeln = w_itab_so-vbeln.
w_itab_so-vkbur1 = w_zsd_allot-vkbur."销售办公室
READ TABLE t_tvkbt WITH KEY vkbur = w_itab_so-vkbur1.
IF sy-subrc = 0.
w_itab_so-text1 = t_tvkbt-bezei."销售办公室描述
ENDIF.
w_itab_so-zempno1 = w_zsd_allot-zempno."雇员部门
READ TABLE it_zsdemp WITH KEY zempno = w_itab_so-zempno1.
IF sy-subrc = 0.
w_itab_so-text2 = it_zsdemp-zempna."雇员部门描述
ENDIF.
w_itab_so-pernr1 = w_zsd_allot-pernr."人员编号
READ TABLE t_pa0002 INTO w_pa0002 WITH KEY pernr = w_itab_so-pernr1.
IF sy-subrc = 0.
CONCATENATE w_pa0002-nachn w_pa0002-vorna INTO w_itab_so-zname1."人员名称
ENDIF.
w_itab_so-zprovince = w_zsd_allot-zprovince."省份
w_itab_so-zpercent = w_zsd_allot-zpercent."业绩比例
CASE l_index.
WHEN 1."当第二层loop的index = 1 时,去modify.
MODIFY itab_so[] FROM w_itab_so INDEX l_idx TRANSPORTING vkbur1 text1 zempno1 text2 pernr1 zname1 zprovince zpercent.
CLEAR: w_zsd_allot.
l_index = l_index + 1.
WHEN OTHERS."当第二层loop的index > 1 时,去append.
APPEND w_itab_so TO itab_so[] .
CLEAR: w_zsd_allot.
ENDCASE.
ENDLOOP.
CLEAR: w_itab_so.
ENDLOOP.
ENDIF.
SORT itab_so BY vbeln posnr erdat.