【问题标题】:ABAP report toolbar is disabledABAP 报告工具栏已禁用
【发布时间】:2020-12-10 10:45:00
【问题描述】:

尽管尝试了多种解决方案,但我的 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
    • User Interface => Copy => Status...
    • 发件人:Program= SAPLSLVC_FULLSCREENStatus=STANDARD_FULLSCREEN
    • 收件人:Program = ZESXDVStatus = STANDARD_FULLSCREEN
    • 点击确定。
    • 转到事务SE80 并打开您的报告/程序
    • GUI Status 文件夹已创建,其中包含新复制的状态。
  • 在报告代码中添加如下指令(START-OF-SELECTION之后):

    • SET PF-STATUS 'STANDARD_FULLSCREEN'.

注意:我注意到工具栏仅在使用 ALV 表和自定义 ALV 容器时不起作用(它们都需要一个屏幕对象[由 CALL SCREEN 'XXXX' 指令调用。])

我错过了什么吗?

提前感谢您的帮助。

P.S.:如果缺少某些信息,请告诉我,我会尽快添加。

【问题讨论】:

  • 您应该粘贴“SET PF-STATUS 'STANDARD_FULLSCREEN'”。在屏幕 0100 上的 pbo 模块中。您启用屏幕代码,如下所示 PROCESS BEFORE OUTPUT。模块状态_0100。 * 输入后的过程。模块 USER_COMMAND_0100。粘贴到 MODULE STATUS_0100。
  • @MustafaHamit 不起作用。我将MODULE STATUS_0100. SET PF-STATUS 'STANDARD_FULLSCREEN'. ENDMODULE. 放在START-OF-SELECTION 之前。
  • 不,正如您在调试中看到的那样,您的 PBO 模块没有被触发。 PBO 模块是这样声明的:MODULE STATUS_0100 OUTPUT.
  • 您可以检查标准报告 tcode SE38 输入“BCALV_GRID_07”转到屏幕 0100 并转到 MODULE pbo_100 输出。您将看到 SET PF-STATUS 'MAIN100' 代码。必须是活动的 gui 状态和相同的方式。
  • 感谢@MustafaHamit,现在可以了。我已经根据你所说的发布了一个答案。

标签: abap alv dynpro


【解决方案1】:

您必须使用如下屏幕代码

PROCESS BEFORE OUTPUT.
  MODULE PBO_100.
*
PROCESS AFTER INPUT.
  MODULE PAI_100.

创建执行模块并将您的放入 pf-status

MODULE pbo_100 OUTPUT.

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

ENDMODULE.                             " PBO_100  OUTPUT

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

【讨论】:

    【解决方案2】:

    感谢@Mustafa Hamit。我将根据@Mustafa Hamit 的评论发布我所做的事情。


    • 转到屏幕对象(双击CALL SCREEN 100)。
    • 导航到标签Flow Logic
    • PROCESS BEFORE OUTPUT. 之后插入MODULE PBO_100.
    • PROCESS AFTER INPUT. 之后插入MODULE PAI_100.
    • 双击PBO_100 -> Create Object
    • PBO_100 屏幕上,在MODULE pbo_100 OUTPUT.ENDMODULE 之间写入SET PF-STATUS '{NAME OF THE STATUS}'
    • 返回并创建PAI_100 对象(双击它)。
    • 激活一切。
    • 两个INCLUDE 语句应出现在程序末尾的报告代码中。
    • 工具栏现在应该已启用并且可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多