微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SUBMIT命令挂在ME49 / rm06eps0报告中

如何解决SUBMIT命令挂在ME49 / rm06eps0报告中

目标是使用类cl_salv_bs_runtime_info从报告中读取ALV数据并随后创建自己的ALV。

原始报告正在创建ALV:

enter image description here

捕获ALV数据的代码如下:(这是我用于许多ALV报告的标准代码)。

    REPORT zhgirm06eps0.
    
    FIELD-SYMBOLS <lt_data>   TYPE ANY TABLE.
    DATA lr_data              TYPE REF TO data.
    
    cl_salv_bs_runtime_info=>set(
       EXPORTING display  = abap_false
                 Metadata = abap_false
                 data     = abap_true ).
    
    SUBMIT RM06EPS0 AND RETURN.
    
    TRY.
        cl_salv_bs_runtime_info=>get_data_ref(
          IMPORTING r_data = lr_data ).
        ASSIGN lr_data->* TO <lt_data>.
      CATCH cx_salv_bs_sc_runtime_info.
        MESSAGE `Unable to retrieve ALV data` TYPE 'E'.
    ENDTRY.
    
    cl_salv_bs_runtime_info=>clear_all( ).
    
    LOOP AT <lt_data> ASSIGNING FIELD-SYMBOL(<line>).
      ...
    ENDLOOP.

调试标准代码后,我发现一切正常。标准程序正在获取数据,并且还可以正确运行REUSE_ALV_GRID_disPLAY

但是在ALV网格代码之后,有一个条件会导致问题。

程序FM06IF03中ALV的标准代码

    WHILE l_leave_sw IS INITIAL.

        ...

        CALL FUNCTION 'REUSE_ALV_GRID_disPLAY'
          ...
    
        IF ls_exit_caused_by_user = 'X'  OR              "1094328
           sy-batch = 'X' OR sy-binpt = 'X'.
             l_leave_sw = 'X'.
        ENDIF.
    
      ENDWHILE.

如您所见,整个部分处于WHILE循环中。使用SUBMIT时,不会退出while循环。原因是变量l_leave_sw永远不会为真。

正常运行报表时,一切正常,并显示ALV。

我尝试在我的代码中将sy-batchsy-binpt设置为true,但未成功。

关于如何使其工作的任何想法?

解决方法

我们需要使用SUBMIT选项将CALL TRANSACTION替换为USING bdc_tab

通过这种方式,变量sy-binpt将被设置为'X',并且报表应正确退出而不会出现无限循环。

仅替换提交后的最终代码:

*&---------------------------------------------------------------------*
*& Report zhgirm06eps0
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zhgirm06eps0.

FIELD-SYMBOLS <lt_data>   TYPE ANY TABLE.
DATA lr_data              TYPE REF TO data.

TYPES:
  BEGIN OF lr_record,icon_rang TYPE mere_icon_rang,ebeln     TYPE ebeln,ebelp     TYPE ebelp,lifnr     TYPE lifnr,name1     TYPE name1,submi     TYPE submi,ptext     TYPE ptext_d,matnr     TYPE matnr,matkl     TYPE matkl,txz01     TYPE txz01,menge     TYPE ktmng,meins     TYPE meins,netpr     TYPE netpr,zwert     TYPE netwr,waers     TYPE waers,rang      TYPE rang,proze     TYPE proze,gzwert    TYPE netwr,grang     TYPE rank_abs,gproze    TYPE rank_per,infnr     TYPE infnr,log1      TYPE merel_info,log2      TYPE merel_info,END OF lr_record.

DATA: lr_records TYPE TABLE OF lr_record WITH HEADER LINE,l_record   TYPE lr_record.

cl_salv_bs_runtime_info=>set(
   EXPORTING display  = abap_false
             metadata = abap_false
             data     = abap_true ).

DATA bdc_tab TYPE TABLE OF bdcdata.
CALL TRANSACTION 'ME49' USING bdc_tab.

TRY.
    cl_salv_bs_runtime_info=>get_data_ref(
      IMPORTING r_data = lr_data ).
    ASSIGN lr_data->* TO <lt_data>.
  CATCH cx_salv_bs_sc_runtime_info.
    MESSAGE `Unable to retrieve ALV data` TYPE 'E'.
ENDTRY.

cl_salv_bs_runtime_info=>clear_all( ).

LOOP AT <lt_data> ASSIGNING FIELD-SYMBOL(<line>).
  MOVE-CORRESPONDING <line> TO lr_records.
  APPEND lr_records.
ENDLOOP.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。