前言
在SAP官方社区上一同学发帖求助,为什么SALV状态栏上的"ABC 分析"按钮不见了,如何将它显示出来呢?本文将一探究竟,深入分析原因,并给出解决方案。
问题分析
默认的SALV状态栏如下,是没有"ABC 分析"按钮的
SALV显示时,根据debug追踪,在类CL_SALV_CONTROLLER_EVENTS的RAISE_BUILD_UIFUNCTION方法中调用了以下方法。
lr_model_base->set_screen_status( pfstatus = 'SALV_TABLE_STANDARD' report = 'SAPLSALV_FUNCTIONS_STATUS' ).报表SAPLSALV_FUNCTIONS_STATUS的GUI状态SALV_TABLE_STANDARD,见下图,是没有"ABC
分析"这个按钮的,因此SALV的状态栏中就无法显示出这个按钮了。
问题处理
我们知道类CL_SALV_TABLE的SET_SCREEN_STATUS方法中是可以传入指定的报表名称和GUI状态的,因此,我们只需要找到一个含有"ABC
分析"按钮的GUI状态就可以了。而标准的报表SAPLSLVC_FULLSCREEN的STANDARD_FULLSCREEN就满足我们的需求。
因此只需要在SALV创建之后,调用 CL_SALV_TABLE的 SET_SCREEN_ST ATUS方法就可以了,代码如下
TRY. CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = go_salv CHANGING t_table = gt_sflight. CATCH cx_salv_msg.ENDTRY.go_salv->set_screen_status( pfstatus = 'STANDARD_FULLSCREEN' report = 'SAPLSLVC_FULLSCREEN' ).再看下效果,"ABC 分析"按钮显示出来了。
这个按钮的作用是统计分析ALV的 每一行的
某一列数据,占这一列数据总和的比例,按照默认的前70%为A段,再后20%为B段,最后10%为C段,这个比例可以按自己需要调整
问题延伸
如果想要显示"ABC 分析"按钮,又需要增加自定义的功能按钮,用标准的GUI状态就不合适,这就需要复制一个标准的GUI状态,然后再加上自定义的按钮就可以了