原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
一
前言
行表转列表在某些特定行业,比如鞋服行业应用较多. 相比行表,列表呈现方式更直观,便于数据的比较.
比如,图二的列表呈现形式可以更直观的看出每个人员电视销量的对比或同一个人员不同产品销量的对比.
前文介绍了一个通用ALV行表转列表显示的类.
> 详见连接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 通用ALV行转列
> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486272&idx=1&sn=fbe7f87870f668231894feb7c425934b&chksm=cf5dd676f82a5f600e2aeb297058391b2e539427d0606715a1ef2f3f442850a08230e396d41f#rd)
**本文主要介绍怎么把ALV转列表后调整的数量回写到源ALV中**
二
调用方式的调整
因为传递的内表内容涉及到修改内容. 所以类方法的参数类型做了调整. 由importing参数调整为 changing 参数
**全屏ALV**
函数 REUSE_ALV_GRID_DISPLAY_LVC
在ALV添加自定义功能,调用类方法 ,传入ALV显示的内表.
CALL METHOD zcl_rep_comm_line_col=>convert_line_to_col_full_alv changingit_data = gt_alv
**对象ALV**
在ALV添加自定义功能, 调用类方法,传入ALV显示的内表及ALV对象.
CALL METHOD zcl_rep_comm_line_col=>convert_line_to_col_full_alv changingct_data = gt_alv .
同时补充参数
• IV_EDIT 用于强制列表指标可编辑
• IV_DECAN 分摊时保留的小数位数
三
列表编辑状态
两种情况下,列表显示允许修改指标字段内容
• 源ALV的指标字段存在编辑属性
• 源ALV的指标字段没有编辑属性, 但是转列表时传递了参数IV_EDIT = 'X'. (该参数为可选参数,默认为空)
四
操作步骤
ALV行表转列表的详细处理步骤见前文. 这里只补充关键步骤及数据回写步骤
_**01** _
**进入列表显示**
源ALV选中行/列进入列表显示
_**02** _
**设置关键要素**
_**03** _
**列表编辑模式**
列表显示时如果允许修改指标, 功能区会多一个保存按钮.同时指标字段允许修改内容
_**04** _
**数据保存**
修改数据后,点击保存按钮.
_**05** _
**原表被更新**
再点击返回按钮返回源ALV时,源内表值会被更新
五
更新规则
• 如果源内表中一个单元格对应列表中的一个单元格(下图中的6121地点),直接回写
• 如果源内表多个单元格汇总成列表中的一个单元格, 按照占比回写(下图中的G495/G499地点).
六
关于分摊时整除问题的设置
分配时的最小拆分数量通过传入参数确定 IV_DECAN(分摊时保留的小数位数)确定,该参数默认值0
• 金额允许分拆到0.01 传入参数IV_DECAN = 2 .
• 数量允许分拆到1 传入参数IV_DECAN = 0 .
设置IV_DECAN=0后,会确保分配的数量不会出现小数,分摊中产生的余数会回写到最后一行中.
七
逻辑实现过程
• 传入内表如果选中了行,则只有选中行参数转列.
• 选中行或全部行写入子内表. 并记录子内表与源内表的行对应关系(全部行转列表无需该关系)
• 行表转列表的同时, 记录列表中的每个指标字段与行表指标字段的对应关系.
• 行表转列表的同时,定义与列表同结构的嵌套哈希内表,记录每个单元格与传入的子行表的行号对应关系.
• 列表中修改的单元格需要记录下来. 后续只处理这些修改了的单元格.
• 对于修改的单元格,读取同到单元格与传入子行表的行号,再次读取对应的源内表的行号.
• 对于修改的单元格字段,读取到对应的源内表字段.
• 如果源内表对应的行号只有一个,回写内容
• 如果源内表行号有多个, 则把调整的单元格的内容分配到多个行号中.再回写内容
八
总结
实际处理回写逻辑的时候发现,回写逻辑比行表转列表逻辑复杂.
为了回写性能考虑,记录了列表中改变的单元格信息,同时在行表转列表时补充记录了多个对应关系表, 这些对应关系表记录了源表单元格与列表单元格的对应关系.
回写时,通过这些对应关系表快速获取源表单元格信息后,分配并回写数量.
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
**公众号 : syjf1976_abap**
**ABAP开发技巧**
**微信号 : 392077**
**公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群**