ALV将小计导出到电子表格

2020-08-19 09:56发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)尊敬的专家, 我一直在搜索,但...

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

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


尊敬的专家,

我一直在搜索,但是找不到任何解决方案。 下面是更改ALV小计的报告。 更改后的值可以提取打印,打印预览,甚至下载到excel按钮。 但是,我无法从菜单工具栏"列表">"导出">"电子表格"将更改后的值导出到电子表格中。

我添加了sy-ucomm ="%PC",但它不会触发TOP_OF_LIST例程。

有人遇到过类似的问题吗?

参考链接:古典 -alv-change-subtotal

 *&---------------------------------------------  ------------------------ *
 *&报告ZALV_SUBTOT_CHANGE。
 *&
 *&------------------------------------------------  --------------------- *
 *&程序显示了如何更改经典ALV的小计
 *&检查子程序TOP_OF_PAGE
 *&
 *&------------------------------------------------  --------------------- *
 *
 报告ZALV_SUBTOT_CHANGE。

 TYPE-POOLS:slis。

 类型:开始于ty_bkpf,
        belnr TYPE bkpf-belnr,
        buzei TYPE bseg-buzei,
        dmbtr TYPE bseg-dmbtr,
        根据TYPE bseg-dmbtr,
        per1 TYPE char10,
        模式TYPE bapi_change_mode,
        结束于ty_bkpf。
 *
 数据:ty_bkpf的it_bkpf类型标准表,
       ty_bkpf的it_bkpf1类型标准表,
       wa_bkpf类型ty_bkpf。
 *
 数据:t_fieldcat类型slis_t_fieldcat_alv。
 数据:wa_fieldcat类型slis_fieldcat_alv。
 *
 选择开始。
 *
   SELECT BERNER BAZEI DMBTR
          进入表it_bkpf
          从bseg
          最多20行。
 *
   循环到it_bkpf INTO wa_bkpf。
     wa_bkpf-per = 0。
     wa_bkpf-mode ='O'。
     从wa_bkpf修改it_bkpf。
     清除wa_bkpf。
   结局。
 *
   执行create_field_catalog。
   执行create_alv_output。
 *
 *&------------------------------------------------  --------------------- *
 *&表格create_field_catalog
 *&------------------------------------------------  --------------------- *
 表格create_field_catalog。
 *
   执行add_field_catalog使用:
     '01''BELNR''Doc''10''',
     '02''BUZEI''Line''3''',
     '03''DMBTR''金额''17''X',
     '04''PER''百分比''17''X',
     '05''PER1''百分比''17''',
     '06''MODE''模式''4'''。
 *
 ENDFORM。  " create_field_catalog
 *
 *&------------------------------------------------  --------------------- *
 *&表单add_field_catalog
 *&------------------------------------------------  --------------------- *
 *将字段详细信息添加到字段目录中
 * -------------------------------------------------  --------------------- *
 FORM add_field_catalog使用p_colpos
                                  p_fldname
                                  p_fldtext
                                  p_outlen
                                  p_sum ..
 *
   wa_fieldcat-row_pos ='1'。
   wa_fieldcat-col_pos = p_colpos。
   wa_fieldcat-fieldname = p_fldname。
   wa_fieldcat-tabname ='IT_BKPF'。
   wa_fieldcat-reptext_ddic = p_fldtext。
   wa_fieldcat-outputlen = p_outlen。
   wa_fieldcat-no_zero ='X'。  " <<
   wa_fieldcat-do_sum = p_sum。
   如果wa_fieldcat-fieldname ='MODE'。
     wa_fieldcat-rollname ='BAPI_CHANGE_MODE'。
   万一。
   将wa_fieldcat附加到t_fieldcat。
   清除:wa_fieldcat。
 *
 ENDFORM。  " add_field_catalog
 *&------------------------------------------------  --------------------- *
 *&表格create_alv_output
 *&------------------------------------------------  --------------------- *
 *生成ALV网格输出
 * -------------------------------------------------  --------------------- *
 FORM create_alv_output。
   数据:l_repid像sy-repid,
         l_layout TYPE slis_layout_alv,
         l_print TYPE slis_print_alv。
 *
   数据:it_sort TYPE slis_t_sortinfo_alv,
         ls_sort TYPE slis_sortinfo_alv。
 *
   数据:it_filter类型slis_t_filter_alv,
         ls_filter类型slis_filter_alv。
 *
   数据:it_event_exit类型为slis_t_event_exit,
         ls_event_exit类型slis_event_exit。
 *
   数据:t_event类型slis_t_event,
         wa_event类型slis_alv_event。
 *
 *
   l_repid = sy-repid。
 *
 * l_layout-no_totalline ='X'。
   l_layout-colwidth_optimize =''。

   ls_sort-spos ='1'。
   ls_sort-fieldname ='BUZEI'。
   ls_sort-tabname ='IT_BKPF'。
   ls_sort-up ='X'。
   ls_sort-subtot ='X'。
   APPEND ls_sort到it_sort。


   ls_event_exit-ucomm ='&ILT'。
   ls_event_exit-after ='X'。
   APPEND ls_event_exit至it_event_exit。


   清除wa_event。
   wa_event-name ='USER_COMMAND'。
   wa_event-form ='USER_COMMAND'。
   APPEND wa_event至t_event。

   清除wa_event。
   wa_event-name ='TOP_OF_PAGE'。
   wa_event-form ='TOP_OF_PAGE'。
   APPEND wa_event至t_event。

   清除wa_event。
   wa_event-name ='TOP_OF_LIST'。
   wa_event-form ='TOP_OF_LIST'。
   APPEND wa_event至t_event。
 *
   通话功能'REUSE_ALV_GRID_DISPLAY'
     出口
       i_callback_program = l_repid
       i_callback_top_of_page ='TOP_OF_PAGE'
       is_layout = l_layout
       is_print = l_print
       it_sort = it_sort
       it_filter = it_filter
       it_fieldcat = t_fieldcat []
       it_events = t_event
     桌子
       t_outtab = it_bkpf
     例外情况
       程序错误= 1
       其他= 2。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。
 *
 ENDFORM。  " create_alv_output
 *
 *&------------------------------------------------  --------------------- *
 *&表格TOP_OF_PAGE
 *&------------------------------------------------  --------------------- *
 FORM top_of_page。
 *
   数据:lo_grid类型参考cl_gui_alv_grid。
 *
 *获取全球参考
   通话功能'GET_GLOBALS_FROM_SLVC_FULLSCR'
     输入
       e_grid = lo_grid。
 *
 *获取小计
   数据:it_01 TYPE REF TO数据,
         it_00 TYPE REF TO数据。
 *
   调用方法lo_grid-> get_subtotals
     输入
       ep_collect00 = it_00
       ep_collect01 = it_01。
 *
 *更改数据
   字段符号: TYPE ANY TABLE,
                   TYPE ANY TABLE,
                   TYPE ANY,
                   TYPE ANY。
   分配it_01-> *至。
     分配it_00-> *至。
 *
   环回分配。
     将结构的组件" PER"分配给 ='100'。
   结局。
 *
 *刷新表格显示
   调用方法lo_grid-> refresh_table_display
     出口
       i_soft_refresh ='X'。
 *
 ENDFORM。  " 页面顶部
 *
 *
 *&------------------------------------------------  --------------------- *
 *&表格TOP_OF_LIST
 *&------------------------------------------------  --------------------- *
 表格top_of_list。
 *
   数据:lo_grid类型参考cl_gui_alv_grid。
 *
 * FOR打印输出:
   检查sy-ucomm ='PRIN''打印
   或sy-ucomm ='&RNT_PREV''打印预览
   或sy-ucomm ='%PC'"下载到Excel
   或sy-ucomm ='&XXL'。 导出到Excel
 *
 *获取全球参考
   通话功能'GET_GLOBALS_FROM_SLVC_FULLSCR'
     输入
       e_grid = lo_grid。
 *
 *获取小计
   数据:it_01 TYPE REF TO数据。
 *
   调用方法lo_grid-> get_subtotals
     输入
       ep_collect01 = it_01。
 *
 *更改数据
   字段符号: TYPE ANY TABLE,
                   TYPE ANY,
                   TYPE ANY。
   分配it_01-> *至。
 *
   环回分配。
     将结构的组件" PER"分配给 ='100'。
   结局。
 *
 *设置打印/打印预览的小计
   字段符号:键入任何表。
   数据:l_tab_name TYPE字符串。
 *
   l_tab_name ='(SAPLKKBL)IT_COLLECT01 []'。
 *
   ASSIGN(l_tab_name)至。
   如果已分配。
 *
      = 。
 *
   万一。
 *
 ENDFORM。  " top_of_listE。

谢谢。

此致