ABAP 一行对多行的数据处理

  1. 一对多时,即输出数据包含表头和表体item时,方法之一是将全部数据select进一个flat内表中,此时在数据处理时不能在loop中用at new 控制重复,因为at new中其他字段会作为 * 赋值给输出字段,需使用on change of 作为at new 的替代,重复结束后用at end结束重复,所以首先一定要使用sort进行排序,at new 和at end之间的程序块用来输入item的字段值,即内表多行值。
  2. 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.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值