附加2个列表的块ALV中的事件

2020-09-07 06:03发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我正在使用REUSE_ALV_BLOCK_LIST_APPEND和REUSE_ALV_BLOCK_LIST_DISPLAY FM在同一屏幕上显示两个列表。 我正在使用旧的列表显示方式,因为我需要将两个列表都打印在一页上。

我将第一个列表的最后3列设置为可编辑,这很好。 如下所示,当我运行报告时,所有内容均正确显示:

我的问题是,在生成上述报告后,如果我要更改列的任何方面(优化宽度或更改任何单个列的宽度),或者出于任何原因,无论如何,都会更改第一个" 5" 可编辑单元格的行,如下所示:

如您所见,在以黄色圈出的行中,列表最后一行的数据被复制到列表的前5行。 在优化列表的宽度之后,您可以比较第一张图像(立即生成报告后)和第二张图像。

即使我不想修改宽度或触发任何其他此类事件,我也必须打印报告。 即使我在生成报告后立即执行打印命令,打印输出也会如上更改,将前5个可编辑行复制为表格的最后一行。

就我而言,最后一行不是正确的"总计"行,而是自定义行。 我已经在此附上了代码(在文本文件链接中,因为它的时间太长,无法容纳本文的字符数限制。

请帮助我解决这种情况。 同样,由于OOPS ALV或SALV无法在与阻止ALV列表相同的页面上打印多个网格,因此我使用了阻止ALV选项。

BR,

阿比拉什

代码: report.txt

report-output-before-events.jpg (144.1 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我正在使用REUSE_ALV_BLOCK_LIST_APPEND和REUSE_ALV_BLOCK_LIST_DISPLAY FM在同一屏幕上显示两个列表。 我正在使用旧的列表显示方式,因为我需要将两个列表都打印在一页上。

我将第一个列表的最后3列设置为可编辑,这很好。 如下所示,当我运行报告时,所有内容均正确显示:

我的问题是,在生成上述报告后,如果我要更改列的任何方面(优化宽度或更改任何单个列的宽度),或者出于任何原因,无论如何,都会更改第一个" 5" 可编辑单元格的行,如下所示:

如您所见,在以黄色圈出的行中,列表最后一行的数据被复制到列表的前5行。 在优化列表的宽度之后,您可以比较第一张图像(立即生成报告后)和第二张图像。

即使我不想修改宽度或触发任何其他此类事件,我也必须打印报告。 即使我在生成报告后立即执行打印命令,打印输出也会如上更改,将前5个可编辑行复制为表格的最后一行。

就我而言,最后一行不是正确的"总计"行,而是自定义行。 我已经在此附上了代码(在文本文件链接中,因为它的时间太长,无法容纳本文的字符数限制。

请帮助我解决这种情况。 同样,由于OOPS ALV或SALV无法在与阻止ALV列表相同的页面上打印多个网格,因此我使用了阻止ALV选项。

BR,

阿比拉什

代码: report.txt

report-output-before-events.jpg (144.1 kB)
付费偷看设置
发送
5条回答
xfwsx85
1楼 · 2020-09-07 06:25.采纳回答

我会说"这是标准程序中的错误",但是SAP可能会回答" ALV追加不支持输入"。

在调试中,我可以看到SAP相信这些行 第二个附加项中的第一个属于第一个附加项,并相信第二个附加项的行包含最后一行的值,照此处理,但随后又返回到内部表的相应行,只是它是第一个

问题出在包含LKKBLF01的子例程FIELDS_READ中:

将行sy-index字段值读入lt_filter-valuf。
       如果sy-subrc ne 0。
         出口。
       万一。

       

SAP可能会在不检查之前添加以下几行(g_index是初始值,而g_index_slave是initial),我觉得这可以解决问题: p>

否(g_tabname = r_tabname或g_tabname = r_mtabname)。
   出口。
 endif。

现在,正如我所说,SAP可能不会更正此问题,但是您可以尝试在SAP支持部门获得帮助。

或使用其他技术(dynpro)重写程序

小c菟菟
2楼-- · 2020-09-07 06:33

演示:SALV_BCALV_TEST_PRINT_EVENTS也可以作为印刷品的很好参考。

南山jay
3楼-- · 2020-09-07 06:19

我启动了PF_STATUS:

参数:pfstatus类型slis_formname默认值'PF_STATUS_SET'。

使用所有必需的按钮/菜单功能为报告创建状态" STANDARD",并将其设置为PF_STATUS:

 FORM pf_status_set使用extab类型slis_t_extab。
   在extab中设置PF-STATUS'STANDARD'。
 ENDFORM。  

这是我将PF_STATUS链接到ALV块的方式:

呼叫功能'REUSE_ALV_BLOCK_LIST_INIT'
     出口
       i_callback_program = i_repid
       i_callback_user_command ='USER_COMMAND'
       i_callback_pf_status_set = pfstatus。

我可以确定PF_STATUS之前和之后的菜单界面(基于SE41中的设计)的区别。

风早神人
4楼-- · 2020-09-07 06:37

您正在调用标准pf状态,所以没有 真的改变了一切。 您可以尝试自己的状态并自行定义。

另一个方向是跟踪标准事件。 我发现您可以处理END_OF_LIST事件并更改输出表:

 FORM END_OF_LIST。
   字段符号:类型表。
   数据输出表类型字符串VALUE'(SAPLKKBL)T_OUTTAB []'。
   将(分配)分配到。
 ENDFORM。
 

可能是这样,您可以找出应该处理的事件以避免此问题。

compass1988
5楼-- · 2020-09-07 06:26

要直接打印而不是显示,请使用相同的代码+ 参数IS_PRINT及其组件print ='X'。 您有演示程序,例如BCALV_TEST_LIST_PRINT(或搜索论坛)。

 is_print = value slis_print_alv(print ='X'...)

一周热门 更多>