不使用Screen的ALV GRID。

2020-08-21 08:35发布

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

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



大家好,

我已经开发了一份报告,其中我正在使用ALV OOPS概念来分散报告

数据。

我正在使用以下代码:

调用全局类的方法如下:

方法:

创建对象o_alv
导出
i_appl_events ='X'
i_parent = v_custom_container。



如果i_fieldcat不初始。

v_variant = sy-repid。

调用方法o_alv-> set_table_for_first_display
*导出
* is_layout = v_layout
* i_default ='X'
* i_save ='U'
* is_variant = v_variant
更改
it_outtab = i_inventory []
it_fieldcatalog = i_fieldcat []
例外
invalid_parameter_combination = 1
程序错误= 2
too_many_lines = 3
其他= 4。

I_inventory []和i_fieldcat []包含数据,但未显示网格。我不希望报表中有任何屏幕。

谢谢

Arpita

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

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



大家好,

我已经开发了一份报告,其中我正在使用ALV OOPS概念来分散报告

数据。

我正在使用以下代码:

调用全局类的方法如下:

方法:

创建对象o_alv
导出
i_appl_events ='X'
i_parent = v_custom_container。



如果i_fieldcat不初始。

v_variant = sy-repid。

调用方法o_alv-> set_table_for_first_display
*导出
* is_layout = v_layout
* i_default ='X'
* i_save ='U'
* is_variant = v_variant
更改
it_outtab = i_inventory []
it_fieldcatalog = i_fieldcat []
例外
invalid_parameter_combination = 1
程序错误= 2
too_many_lines = 3
其他= 4。

I_inventory []和i_fieldcat []包含数据,但未显示网格。我不希望报表中有任何屏幕。

谢谢

Arpita

付费偷看设置
发送
6条回答
大道至简
1楼-- · 2020-08-21 09:04

REUSE_ALV_GRID_DISPLAY和CL_SALV_TABLE都同时在调用屏幕,调用只是封装在内部,因此您不必显式地进行操作。


可以 不要在没有屏幕的情况下执行此操作。

您可以按照此操作进行操作。 此处无需在屏幕100中创建任何自定义容器。只需调用它即可。

数据lr_alv类型引用至cl_gui_alv_grid。

数据lt_table类型表t529a。

选择*从t529a到表lt_table。


创建对象lr_alv
导出
i_parent = cl_gui_container => screen0。 导出
i_structure_name ='T529A'
更改
it_outtab = lt_t529a

调用屏幕100。


注意事项

Sreekanth

大道至简
2楼-- · 2020-08-21 09:22

您是最好的。 WRITE语句有效。

空代码
3楼-- · 2020-08-21 09:08

亲爱的Arpita,

有一个叫做SALV的概念!

*&--------------------------------------------- ------------------------ *

*&此代码段将显示如何使用CL_SALV_TABLE来

*&生成ALV

*&--------------------------------------------- ------------------------ *

报告ztest_oo_alv_main。

*

* ---------------------------------------------- ------------------------ *

* CLASS lcl_report定义

* ---------------------------------------------- ------------------------ *

CLASS lcl_report定义。

*

公共部分。

*

*最终输出表

类型:ty_vbak的开始,

vbeln TYPE vbak-vbeln,

erdat TYPE erdat,

auart TYPE auart,

kunnr TYPE kunnr,

ty_vbak结束。

*

数据:ty_vbak的t_vbak类型标准表。

*

* ALV参考

数据:o_alv类型参考cl_salv_table。

*

方法:

*数据选择

get_data,

*

*生成输出

generate_output。

*

* $ * $ * ..... CODE_ADD_1-开始................................. 1 .. * $ * $ *

*

*在本节中,我们将定义可以使用的私有方法

*用于设置ALV的属性,并且可以

中调用的

*

*

* $ * $ * ..... CODE_ADD_1-结束................................. ..1 .. * $ * $ *

*

ENDCLASS。 " lcl_report定义

*

*

开始选择。

数据:lo_report类型参考为lcl_report。

*

创建对象lo_report。

*

lo_report-> get_data()。

*

lo_report-> generate_output()。

*

* ---------------------------------------------- ------------------------ *

* CLASS lcl_report实施

* ---------------------------------------------- ------------------------ *

CLASS lcl_report实施。

*

方法get_data。

*数据选择

选择vbeln erdat auart kunnr

插入表t_vbak

来自vbak

最多20行。

*

终结法。 " get_data

*

* .............................................. .........................

方法generate_output。

*新的ALV实例

*我们正在调用静态的Factory方法,该方法将返回

* ALV对象引用。

*

*异常类

数据:lx_msg类型参考cx_salv_msg。

尝试。

cl_salv_table =>工厂(

导入

r_salv_table = o_alv

改变

t_table = t_vbak)。

捕获cx_salv_msg INTO lx_msg。

ENDTRY。

*

* $ * $ * ..... CODE_ADD_2-开始................................. 2 .. * $ * $ *

*

*在此区域中,我们将调用设置

的方法

*与ALV不同的属性

*

* $ * $ * ..... CODE_ADD_2-结束.................................. ..2 .. * $ * $ *

*

*

*显示ALV

*在这里,我们将调用DISPLAY方法以在屏幕上获取输出

o_alv-> display()。

*

终结法。 " generate_output

*

* $ * $ * ..... CODE_ADD_3-开始................................. 3 .. * $ * $ *

*

*在这一领域,我们将实现

中定义的方法

*类定义

*

* $ * $ * ..... CODE_ADD_3-结束................................. ..3 .. * $ * $ *

*

*

ENDCLASS。 " lcl_report IMPLEMENTATION

请复制上面的代码并进行调试,然后您就会知道! 希望能帮助到你!

此致

Dhruvin

木偶小白
4楼-- · 2020-08-21 09:14

嗨Arpita,

尝试我的代码。请注意最后一行中的write语句。

您可以使用write激活标准屏幕,而无需创建新屏幕。

数据:l_alv类型参考cl_gui_alv_grid,

lt_bkpf类型表bkpf。

选择*从bkpf最多10行到表lt_bkpf。

创建对象l_alv

导出

i_parent = cl_gui_container => screen0。

呼叫方法l_alv-> set_table_for_first_display

导出

i_structure_name ='BKPF'

改变

it_outtab = lt_bkpf。

写''。

谢谢

Sam

奄奄一息的小鱼
5楼-- · 2020-08-21 09:18

嗨Arpita,

您在哪里调用了SET_TABLE_FOR_FIRST_DISPLAY方法?

应该在以下位置调用此方法 屏幕的PBO。 甚至您已经创建了一个容器并将该容器包含在ALV对象(CL_GUI_ALV_GRID)中。

如果您要创建ALV网格而不使用屏幕和容器,则需要使用CL_SALV_TABLE。

下面给出了使用CL_GUI_ALV_GRID构建ALV_GRID的示例代码,请参考:

*&------------------------ --------------------------------------------- *

*&选择开始

*&------------------------------- -------------------------------------- *

开始- 选择。

*从数据库中提取数据到内部表中以显示

从MAKT中选择MATNR MAKTX

进入表GT_OUTPUT

S_MATNR中的MATNR

并且SPRAS ='EN'。

*&---------------------- ----------------------------------------------- *

*&选择结束

*&----------------------------- ---------------------------------------- *

END-

*调用屏幕以显示ALV网格

CALL 屏幕100。

*&-------------------------------------- ------------------------------- *

*&模块STATUS_0100输出

*&----------------------------------------------- ---------------------- *

*文字

* ---------- -------------------------------------------------- ---------- *

MODULE STATUS_0100 OUTPUT。

设置PF-STATUS'ZGVK_TEST'。 " PF状态

SET TITLEBAR'ZGVK_TEST'。"标题栏

ENDMODULE。 " STATUS_0100输出

*&-------------------------------------- ------------------------------- *

*&模块DISPLAY_ALV_0100输出

*&----------------------------------------------- ---------------------- *

*文字

* ---------- -------------------------------------------------- ---------- *

MODULE DISPLAY_ALV_0100输出。

*本地内部表* fieldcatalog的工作区

数据:LT_FLDCAT类型LVC_T_FCAT,

LS_FLDCAT类型LVC_S_FCAT。

*网格输出的填充字段目录

*在屏幕中为容器(CL_GUI_CUSTOM_CONTAINER)创建对象

创建对象GR_CONTAINER

导出

CONTAINER_NAME ='CONTAINER'。

" CONTAINER是屏幕上的容器名称

*为以下对象创建对象 ALV网格(CL_GUI_ALV_GRID)来设置显示

创建对象GR_GRID

导出

I_PARENT = GR_CONTAINER。 "在容器对象上方传递

*设置输出表以ALV GRID格式显示

GR_GRID-> SET_TABLE_FOR_FIRST_DISPLAY(

导出

I_STRUCTURE_NAME ='ZGVK_TEST'

"用于构建输出布局的全局选项卡/结构

更改

IT_OUTTAB = GT_OUTPUT"输出表

IT_FIELDCATALOG = LT_FLDCAT" Fieldcatalog表

例外情况

INVALID_PARAMETER_COMBINATION = 1

PROGRAM_ERROR = 2

TOO_MANY_LINES = 3

其他 = 4)。

如果SY-SUBRC <> 0。

消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO

带SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。

ENDIF。

ENDMODULE。 " DISPLAY_ALV_0100输出

致谢,

维杰

渐行渐远_HoldOn
6楼-- · 2020-08-21 09:22

嗨Arpita。

您可以尝试使用此代码生成简单而快速的ALV报告。


数据:lr_alv类型参考cl_salv_table,

lr_alv_cols类型参考cl_salv_columns,

lr_alv_func类型参考cl_salv_functions,

lrx_salv_error类型参考cx_salv_error。

尝试。

cl_salv_table =>工厂(正在导入r_salv_table = lr_alv

更改t_table = YOUR_TABLE_DATA)。

*配置列

lr_alv_cols = lr_alv-> get_columns()。

lr_alv_cols-> set_optimize()。

*激活所有ALV功能

lr_alv_func = lr_alv-> get_functions_base()。

lr_alv_func-> set_all()。

lr_alv-> display()。

捕捉cx_salv_error INTO lrx_salv_error。

ENDTRY。


此致。

一周热门 更多>