ALV 更改变体不应用过滤器
ALV changing variants doesn´t apply filter
我自己的程序有问题。在此程序中,用户必须在选择屏幕上输入数据。在那里,他还可以选择一种已保存的 ALV 变体。
在下一步中,将显示包含所选数据的 ALV 列表。此外,ALV 中的数据应具有选定的布局。在此 ALV 中,用户可以使用正常的 ALV 功能更改、保存、选择和管理 ALV 的变体。然而,这有一个问题。如果用户想要切换到带有过滤器的现有 ALV 变体,有时(90% 的情况)不会应用过滤器和所选 ALV 的排序。
如果他在选择屏幕中输入此变体,则将正确应用具有所有过滤器、排序等的正确 ALV 布局。
我在选择屏幕中的 f4-help 代码:
DATA: lwa_variant LIKE disvariant,
lw_exit_flag TYPE cmpflag.
lwa_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = lwa_variant
i_save = 'A'
IMPORTING
e_exit = lw_exit_flag
es_variant = wa_variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE s899(mm) WITH text-088.
ELSEIF NOT lw_exit_flag IS INITIAL.
MESSAGE s899(mm) WITH text-089.
CLEAR wa_variant.
ENDIF.
p_layou = wa_variant-variant.
我在带有ALV的屏幕的PBO中的代码:
DATA: i_fieldcat TYPE lvc_t_fcat,
wa_layout TYPE lvc_s_layo,
wa_stable TYPE lvc_s_stbl,
wa_r_variant TYPE DISVARIANT.
IF o_alv_container IS INITIAL.
CREATE OBJECT o_alv_container
EXPORTING
container_name = 'O_ALV_CONTAINER'.
CREATE OBJECT o_alv
EXPORTING
i_parent = o_alv_container
EXCEPTIONS
others = 1.
IF sy-subrc <> 0.
MESSAGE e002.
ENDIF.
IF wa_variant IS INITIAL AND p_layou IS INITIAL.
wa_r_variant-report = sy-repid.
ELSEIF wa_variant IS NOT INITIAL.
wa_r_variant = wa_variant.
wa_r_variant-handle = SPACE.
wa_r_variant-log_group = SPACE.
wa_r_variant-username = SPACE.
wa_r_variant-text = SPACE.
wa_r_variant-dependvars = SPACE.
ELSE.
wa_r_variant-report = sy-repid.
wa_r_variant-variant = p_layou.
ENDIF.
wa_layout-zebra = ''.
wa_layout-stylefname = 'IMPUT_STYLE'.
wa_layout-sel_mode = 'A'.
wa_layout-cwidth_opt = 'X'.
CALL METHOD o_alv->set_table_for_first_display
EXPORTING
is_variant = wa_r_variant
is_layout = wa_layout
i_save = 'A'
i_default = 'A'
CHANGING
it_outtab = i_alv_data
it_fieldcatalog = i_fieldcat
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE e002.
ENDIF.
ELSE.
wa_stable-COL = 'X'.
wa_stable-row = 'X'.
CALL METHOD o_alv->refresh_table_display
EXPORTING
is_stable = wa_stable
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE e003.
ENDIF.
ENDIF.
我在使用任何其他程序时从未遇到过这样的问题,也从未听说过。不幸的是,表中有很多字段(>20),所以用户必须按照他们想要的方式配置它(使用过滤器、排序等)。经过几个小时的测试,我无法弄清楚我的代码有什么问题。我还调试了 SAP ALV 方法。我发现在某些情况下系统无法加载过滤器。但我不知道为什么。任何提示或信息对我都有用。
提前致谢!
我终于明白了,哪里出了问题。
在程序中ALV的空闲区域用Shift+双击右键,可以看到ALV中出现的错误信息。修复它们后,功能正常运行。
我的问题是这一行:
wa_layout-stylefname = 'IMPUT_STYLE'.
此致
我自己的程序有问题。在此程序中,用户必须在选择屏幕上输入数据。在那里,他还可以选择一种已保存的 ALV 变体。 在下一步中,将显示包含所选数据的 ALV 列表。此外,ALV 中的数据应具有选定的布局。在此 ALV 中,用户可以使用正常的 ALV 功能更改、保存、选择和管理 ALV 的变体。然而,这有一个问题。如果用户想要切换到带有过滤器的现有 ALV 变体,有时(90% 的情况)不会应用过滤器和所选 ALV 的排序。 如果他在选择屏幕中输入此变体,则将正确应用具有所有过滤器、排序等的正确 ALV 布局。 我在选择屏幕中的 f4-help 代码:
DATA: lwa_variant LIKE disvariant,
lw_exit_flag TYPE cmpflag.
lwa_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = lwa_variant
i_save = 'A'
IMPORTING
e_exit = lw_exit_flag
es_variant = wa_variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE s899(mm) WITH text-088.
ELSEIF NOT lw_exit_flag IS INITIAL.
MESSAGE s899(mm) WITH text-089.
CLEAR wa_variant.
ENDIF.
p_layou = wa_variant-variant.
我在带有ALV的屏幕的PBO中的代码:
DATA: i_fieldcat TYPE lvc_t_fcat,
wa_layout TYPE lvc_s_layo,
wa_stable TYPE lvc_s_stbl,
wa_r_variant TYPE DISVARIANT.
IF o_alv_container IS INITIAL.
CREATE OBJECT o_alv_container
EXPORTING
container_name = 'O_ALV_CONTAINER'.
CREATE OBJECT o_alv
EXPORTING
i_parent = o_alv_container
EXCEPTIONS
others = 1.
IF sy-subrc <> 0.
MESSAGE e002.
ENDIF.
IF wa_variant IS INITIAL AND p_layou IS INITIAL.
wa_r_variant-report = sy-repid.
ELSEIF wa_variant IS NOT INITIAL.
wa_r_variant = wa_variant.
wa_r_variant-handle = SPACE.
wa_r_variant-log_group = SPACE.
wa_r_variant-username = SPACE.
wa_r_variant-text = SPACE.
wa_r_variant-dependvars = SPACE.
ELSE.
wa_r_variant-report = sy-repid.
wa_r_variant-variant = p_layou.
ENDIF.
wa_layout-zebra = ''.
wa_layout-stylefname = 'IMPUT_STYLE'.
wa_layout-sel_mode = 'A'.
wa_layout-cwidth_opt = 'X'.
CALL METHOD o_alv->set_table_for_first_display
EXPORTING
is_variant = wa_r_variant
is_layout = wa_layout
i_save = 'A'
i_default = 'A'
CHANGING
it_outtab = i_alv_data
it_fieldcatalog = i_fieldcat
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE e002.
ENDIF.
ELSE.
wa_stable-COL = 'X'.
wa_stable-row = 'X'.
CALL METHOD o_alv->refresh_table_display
EXPORTING
is_stable = wa_stable
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE e003.
ENDIF.
ENDIF.
我在使用任何其他程序时从未遇到过这样的问题,也从未听说过。不幸的是,表中有很多字段(>20),所以用户必须按照他们想要的方式配置它(使用过滤器、排序等)。经过几个小时的测试,我无法弄清楚我的代码有什么问题。我还调试了 SAP ALV 方法。我发现在某些情况下系统无法加载过滤器。但我不知道为什么。任何提示或信息对我都有用。 提前致谢!
我终于明白了,哪里出了问题。
在程序中ALV的空闲区域用Shift+双击右键,可以看到ALV中出现的错误信息。修复它们后,功能正常运行。
我的问题是这一行:
wa_layout-stylefname = 'IMPUT_STYLE'.
此致