- 一对多时,即输出数据包含表头和表体item时,方法之一是将全部数据select进一个flat内表中,此时在数据处理时不能在loop中用at new 控制重复,因为at new中其他字段会作为 * 赋值给输出字段,需使用on change of 作为at new 的替代,重复结束后用at end结束重复,所以首先一定要使用sort进行排序,at new 和at end之间的程序块用来输入item的字段值,即内表多行值。
- input中某字段包含多行数据时,可预先在top文件中定义相关结构,使其全局可见,然后使用range表接受input某字段的多行数据,也可在form中使用tables structure 传入range表实现解耦。
*type 输出结构 表头和表体
DATA:lt_makpla_item TYPE TABLE OF zdt_marketing_plan_resp_item,
ls_makpla_item TYPE zdt_marketing_plan_resp_item,
lt_makpla_out TYPE TABLE OF zdt_marketing_plan_resp_data,
ls_makpla_out TYPE zdt_marketing_plan_resp_data.
REFRESH:lt_makpla_item,lt_makpla_out.
*loop中进行 数据处理
SORT lt_output BY vbeln."at 程序块必须先排序
LOOP AT lt_output INTO ls_output.
ON CHANGE OF ls_output-vbeln."功能类似at new 但此处不可使用at new
ls_makpla_out-erdat = ls_output-erdat.
ls_makpla_out-auart = ls_output-auart.
ls_makpla_out-vbeln = ls_output-vbeln.
ENDON.
*处理item内表中数据
MOVE-CORRESPONDING ls_output TO ls_makpla_item.
APPEND ls_makpla_item TO lt_makpla_item.
*结束相同表头数据的处理
AT END OF vbeln.
ls_makpla_out-item = lt_makpla_item.
APPEND ls_makpla_out TO lt_makpla_out.
REFRESH:lt_makpla_item.
CLEAR:ls_makpla_item,ls_makpla_out.
ENDAT.
ENDLOOP.