大家好,最近在学习的时候遇到一个问题,我需要开发一个ALV报表,但是涉及了很多个表的字段,因为我是自学的,实力非常薄弱,有没有兄弟能帮个忙,让我看下这个应该怎么取数,研究了半个月查阅了各种资料,网上关于SAP ABAP的资料少之又少,有一点想放弃了都,唉。
参考C知道:
你可以使用以下步骤来在SAP ABAP中取数并显示在ALV报表中:
首先,使用SELECT语句从数据库表中选择需要的数据。
将选定的数据存储在内部表中。
使用CL_SALV_TABLE类创建一个ALV对象。
使用ADD_COLUMNS方法向ALV对象添加列。
使用SET_TABLE_FOR_FIRST_DISPLAY方法将内部表作为数据源传递给ALV对象。
最后,使用DISPLAY方法显示ALV报表。
下面是一个示例代码片段:
DATA: it_data TYPE TABLE OF your_data_structure,
wa_data TYPE your_data_structure,
alv_grid TYPE REF TO cl_gui_alv_grid.
SELECT * FROM your_table INTO TABLE it_data.
CREATE OBJECT alv_grid.
alv_grid->set_table_for_first_display(
EXPORTING
i_structure_name = 'YOUR_DATA_STRUCTURE'
CHANGING
it_outtab = it_data
).
alv_grid->display( ).
不知道你这个问题是否已经解决, 如果还没有解决的话:Jerry先不解释,而是请大家看下面这段代码:
执行,正好输出3473457这个魔幻数字。那么代码第四行31003500是哪里来的?其实就是字符串’15’的十六进制编码。
也就是说,二次开发顾问在RFC调用时,将硬编码的’15’传给了接受整型变量的函数参数IV_MAX_ENTRIES. 应该该参数类型为整型,所以’15’的十六进制编码’31003500’被自动转换成了对应的整型数3473457. 显然这不是开发顾问期望的行为,但因为程序能够继续运行,所以这个问题暂时被掩盖了。
而RFC调用完成之后,紧接着是一个嵌套的LOOP. 在Max Hit能按照期望工作的前提下,对于最多包含15条记录的内表,就算进行嵌套的LOOP操作也能很快完成。但如今因为Max Hit不工作,内表记录从最多15条一下子变成了超过40万条,在这么庞大规模的内表上进行嵌套LOOP操作,性能可想而知。
经历过这次incident的处理之后,我个人觉得,使用隐式类型转换的最佳实践就是根本不去用它。程序员在工作的时候,必须时刻清醒地知道自己在做什么,要扼住编译器的咽喉,而不要被编译器扼住了咽喉。
感谢阅读,祝大家五一节快乐。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":