ABAP报告工具栏已禁用

ABAP报告工具栏已禁用,abap,alv,dynpro,Abap,Alv,Dynpro,尽管我尝试了多种解决方案,但仍无法使SAP报表的工具栏(见图)正常工作 我的报告代码: CLASS cl_orders_alv DEFINITION. PUBLIC SECTION. METHODS: on_init, on_display. PRIVATE SECTION. METHODS: on_data_fetch. DATA: ct_orders TYPE TABLE OF zo

尽管我尝试了多种解决方案,但仍无法使SAP报表的工具栏(见图)正常工作

我的报告代码:

CLASS cl_orders_alv DEFINITION.
    PUBLIC SECTION.
      METHODS:
        on_init, on_display.

    PRIVATE SECTION.
      METHODS:
        on_data_fetch.

      DATA: ct_orders           TYPE TABLE OF zordhead_str,           " header itab
            ct_orders_pos       TYPE TABLE OF zordpos_str,            " pos itab

            co_orders_alvgrid   TYPE REF TO cl_gui_alv_grid,          " ALV Table
            co_ordpos_alvgrid   TYPE REF TO cl_gui_alv_grid,          " ALV Table

            co_orders_alvccntr  TYPE REF TO cl_gui_custom_container,  " Orders Head
            co_ordpos_alvccntr  TYPE REF TO cl_gui_custom_container,  " Orders Position

            cs_orders           TYPE zordhead_str,                    " header structure
            cs_orders_pos       TYPE zordpos_str,

            cs_orders_fieldcat  TYPE slis_fieldcat_alv,               " ALV Structure
            ct_orders_fieldcat  TYPE lvc_t_fcat,                      " ALV Table
            cs_ordpos_fieldcat  TYPE slis_fieldcat_alv,
            ct_ordpos_fieldcat  TYPE lvc_t_fcat.

  ENDCLASS.                    "cl_orders_alv

  CLASS cl_orders_alv IMPLEMENTATION.
    METHOD on_init.

      CLEAR ct_orders.
      CLEAR ct_orders_pos.
      CLEAR cs_orders.
      CLEAR cs_orders_pos.

      CREATE OBJECT co_orders_alvccntr
        EXPORTING
          container_name = 'ALV_CCONTAINER0'.

      CREATE OBJECT co_ordpos_alvccntr
        EXPORTING
          container_name = 'ALV_CCONTAINER1'.

      CREATE OBJECT co_orders_alvgrid
        EXPORTING
          i_parent = co_orders_alvccntr.

      CREATE OBJECT co_ordpos_alvgrid
        EXPORTING
          i_parent = co_ordpos_alvccntr.

      on_data_fetch( ).
    ENDMETHOD.                    "on_init

    METHOD on_display.
      CALL METHOD co_orders_alvgrid->set_table_for_first_display
        EXPORTING
          i_structure_name = 'ZORDHEAD_STR'
        CHANGING
          it_outtab        = ct_orders.

      CALL METHOD co_ordpos_alvgrid->set_table_for_first_display
        EXPORTING
          i_structure_name = 'ZORDPOS_STR'
        CHANGING
          it_outtab        = ct_orders_pos.

      CALL SCREEN '0100'.
    ENDMETHOD.                    "on_display

    METHOD on_data_fetch.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name       = 'ZORDHEAD_STR'
        CHANGING
          ct_fieldcat            = ct_orders_fieldcat
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          OTHERS                 = 3.

      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name       = 'ZORDPOS_STR'
        CHANGING
          ct_fieldcat            = ct_ordpos_fieldcat
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          OTHERS                 = 3.

    ENDMETHOD.                    "on_data_fetch
  ENDCLASS.                    "CL_ORDERS_ALV IMPLEMENTATION

  START-OF-SELECTION.
    SET PF-STATUS 'STANDARD_FULLSCREEN'.

    DATA: go_alv_gui TYPE REF TO cl_orders_alv.

    CREATE OBJECT go_alv_gui.
    go_alv_gui->on_init( ).
    go_alv_gui->on_display( ).
这就是我迄今为止所尝试的:

  • 已将现有状态复制到我的计划/报告中:

    • 转到事务处理
      SE41
    • 用户界面
      =>
      复制
      =>
      状态…
    • From:
      程序
      =
      SAPLSLVC_全屏
      <代码>状态=
      标准全屏
    • 至:
      Program
      =
      ZESXDV
      <代码>状态=
      标准全屏
    • 点击Ok
    • 转到事务
      SE80
      并打开您的报告/程序
    • 将创建
      GUI Status
      文件夹,其中包含新的复制状态
  • 在报告的代码中添加了以下说明(在
    开始选择之后
    ):

    • 设置PF-STATUS“标准”全屏。
注意:我注意到,工具栏仅在处理ALV表和自定义ALV容器(两者都需要屏幕对象[由
调用屏幕'XXXX'
指令调用]时才起作用

我错过什么了吗

提前感谢你的帮助


备注:如果缺少一些信息,请告诉我,我会尽快添加。

感谢@Mustafa Hamit。我会在@Mustafa Hamit的评论中发布我所做的事情


  • 转到屏幕对象(双击
    调用屏幕100
  • 导航到选项卡<代码>流程逻辑
  • 在输出前的
    过程之后插入
    模块PBO\U 100。
  • 将模块PAI\U 100插入
    就在
    输入后处理。
  • 双击
    PBO_100
    ->
    Create Object
  • PBO_100
    屏幕上,在
    模块PBO_100输出。
    ENDMODULE
    之间写入
    设置PF-STATUS“{状态名称}”
  • 返回并创建
    PAI_100
    对象(双击它)
  • 激活一切
  • 两条
    INCLUDE
    语句应出现在程序末尾的报告代码中
  • 工具栏现在应该已启用并正常工作


感谢@Mustafa Hamit。我会在@Mustafa Hamit的评论中发布我所做的事情


  • 转到屏幕对象(双击
    调用屏幕100
  • 导航到选项卡<代码>流程逻辑
  • 在输出前的
    过程之后插入
    模块PBO\U 100。
  • 将模块PAI\U 100插入
    就在
    输入后处理。
  • 双击
    PBO_100
    ->
    Create Object
  • PBO_100
    屏幕上,在
    模块PBO_100输出。
    ENDMODULE
    之间写入
    设置PF-STATUS“{状态名称}”
  • 返回并创建
    PAI_100
    对象(双击它)
  • 激活一切
  • 两条
    INCLUDE
    语句应出现在程序末尾的报告代码中
  • 工具栏现在应该已启用并正常工作


您必须使用如下屏幕代码

PROCESS BEFORE OUTPUT.
  MODULE PBO_100.
*
PROCESS AFTER INPUT.
  MODULE PAI_100.
创建执行模块并将您的状态设置为pf状态

MODULE pbo_100 OUTPUT.

  SET PF-STATUS 'MAIN100'.
  set titlebar 'MAIN100'.

ENDMODULE.                             " PBO_100  OUTPUT

注意:检查激活的gui状态“MAIN100”

您必须使用如下屏幕代码

PROCESS BEFORE OUTPUT.
  MODULE PBO_100.
*
PROCESS AFTER INPUT.
  MODULE PAI_100.
创建执行模块并将您的状态设置为pf状态

MODULE pbo_100 OUTPUT.

  SET PF-STATUS 'MAIN100'.
  set titlebar 'MAIN100'.

ENDMODULE.                             " PBO_100  OUTPUT

注意:选中激活的gui状态“MAIN100”

您应该在0100屏幕上的pbo模块中粘贴“设置PF-status‘STANDARD_FULLSCREEN.”。在输出之前,您可以按照以下过程启用屏幕代码。模块状态_0100.*输入后处理。模块用户_命令_0100。粘贴到模块状态_0100。@MustafaHamit不起作用。我正在输入
模块状态\u 0100。将PF状态设置为“标准全屏”。ENDMODULE.
就在
开始选择之前。
否,正如您在调试中看到的,PBO模块未触发。PBO模块是这样声明的:
模块状态\u 0100输出。
您可以检查标准报告tcode SE38,进入“BCALV\u GRID\u 07”转到屏幕0100和转到模块PBO\u 100输出。您将看到设置PF-STATUS“MAIN100”代码。必须是活动gui状态,并且方式相同。谢谢@MustafaHamit,现在它可以工作了。我已经发布了一个基于您所说内容的答案。您应该在0100屏幕上的pbo模块中粘贴“设置PF-STATUS‘STANDARD_FULLSCREEN’”。在输出之前,您可以按照以下过程启用屏幕代码。模块状态_0100.*输入后处理。模块用户_命令_0100。粘贴到模块状态_0100。@MustafaHamit不起作用。我正在输入
模块状态\u 0100。将PF状态设置为“标准全屏”。ENDMODULE.
就在
开始选择之前。
否,正如您在调试中看到的,PBO模块未触发。PBO模块是这样声明的:
模块状态\u 0100输出。
您可以检查标准报告tcode SE38,进入“BCALV\u GRID\u 07”转到屏幕0100和转到模块PBO\u 100输出。您将看到设置PF-STATUS“MAIN100”代码。必须是活动gui状态,并且方式相同。谢谢@MustafaHamit,现在它可以工作了。我已经根据你所说的给出了答案。