为什么在我的ALV报告中,subtotal_text事件不起作用?

2020-08-14 03:17发布

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

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


我正在使用以下代码显示ALV和小计

数据:开始于IT_OUTPUT_ALL次发生0,
         ACCT类型FAGLFLEXT-rAcct,
         ANAM TYPE SKAT-txt20,
         项目类型ZTFI03-zfiitem
         SITEM TYPE ZTFI03-zfisuit,
         文本类型ZTFI03-ZFITEXT,
         ZFISIGN类型ZTFI03-ZFISIGN,
         HSL_ALL TYPE FAGLFLEXT-HSL01。
 数据:GT_EVENTS类型SLIS_T_EVENT,
       LS_T_EVENT的LS_EVENT类型行。
 数据:wa_sort TYPE slis_sortinfo_alv,
       i_sort TYPE slis_t_sortinfo_alv。

 FORM sub_populate_sort。
     wa_sort-spos ='01'。
     wa_sort-fieldname ='ITEM'。
     wa_sort-up ='X'。
     wa_sort-subtot ='X'。
     APPEND wa_sort到i_sort。
     清除wa_sort。
 ENDFORM。

 FORM subtotal_text更改
                p_total TYPE任意
                p_subtot_text类型slis_subtot_text。
 *物料级别小计
   IF p_subtot_text-criteria ='ITEM'。
     p_subtot_text-display_text_for_subtotal
     ='总计材料级别'。
   万一。
 ENDFORM。

 表格FRM_SET_FIELDCAT。
   数据:LV_FIELDNAME(7)C型,
         LV_LTX(20)C型。
   FILLFIEDCAT'ACCT''Acct NO''''。
   FILLFIEDCAT'ANAM''帐户名称'''''。
   FILLFIEDCAT'项目''项目否''''。
   LS_FIELDCAT-FIELDNAME ='文字'。
   LS_FIELDCAT-SELTEXT_L ='ITEM名称'。
   LS_FIELDCAT-NO_ZERO =''。
   LS_FIELDCAT-OUTPUTLEN =''。
   LS_FIELDCAT-no_out ='X'。
   将LS_FIELDCAT附加到GT_FIELDCAT。
   清除LS_FIELDCAT。
   LS_FIELDCAT-FIELDNAME ='HSL_ALL'。
   LS_FIELDCAT-SELTEXT_L ='CURRENT YEAR CUMULATIVE'。
   LS_FIELDCAT-NO_ZERO =''。
   LS_FIELDCAT-OUTPUTLEN =''。
   LS_FIELDCAT-do_sum ='X'。
   将LS_FIELDCAT附加到GT_FIELDCAT。
   清除LS_FIELDCAT。
 ENDFORM。

 表格DISPLAY_ALV。
   将" SUBTOTAL_TEXT"移动到LS_EVENT-NAME。
   将" SUBTOTAL_TEXT"移动到LS_EVENT-FORM。
   将LS_EVENT附加到GT_EVENTS。
    进行FRM_SET_FIELDCAT。
   执行sub_populate_sort。
   按项目排序IT_OUTPUT_ALL。
   调用功能" REUSE_ALV_GRID_DISPLAY"的状态列表
     出口
       I_CALLBACK_PROGRAM = SY-REPID
       I_CALLBACK_PF_STATUS_SET ='PF_STATUS_SET'
       I_CALLBACK_USER_COMMAND ='USER_COMMAND'
       IS_LAYOUT = GS_LAYOUT
       IT_FIELDCAT = GT_FIELDCAT
       IT_EVENTS = GT_EVENTS
       IT_SORT = i_sort
       I_SAVE ='A''Anzeigevarianten
     桌子
       T_OUTTAB = IT_OUTPUT_ALL
     例外情况
       PROGRAM_ERROR = 1
       其他= 2。
 ENDFORM。
 

ALV具有以下字段:ACCT,ANAME,ITEM,TEXT,HSL_ALL。 TEXT是ITEM的名称。 我想按项目显示小计,并在小计行中显示项目的文本。 所以我写了上面的代码,我仍然没有确切地做到这一点,所以我仍然没有修改subtotal_text子表单。 但是,使用上述代码调试时,它根本没有转到此subtotal_text子窗体。 我的问题是:1.为此,我是否需要使用subtotal_text事件? 2.我的代码有什么问题? 谢谢。

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

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


我正在使用以下代码显示ALV和小计

数据:开始于IT_OUTPUT_ALL次发生0,
         ACCT类型FAGLFLEXT-rAcct,
         ANAM TYPE SKAT-txt20,
         项目类型ZTFI03-zfiitem
         SITEM TYPE ZTFI03-zfisuit,
         文本类型ZTFI03-ZFITEXT,
         ZFISIGN类型ZTFI03-ZFISIGN,
         HSL_ALL TYPE FAGLFLEXT-HSL01。
 数据:GT_EVENTS类型SLIS_T_EVENT,
       LS_T_EVENT的LS_EVENT类型行。
 数据:wa_sort TYPE slis_sortinfo_alv,
       i_sort TYPE slis_t_sortinfo_alv。

 FORM sub_populate_sort。
     wa_sort-spos ='01'。
     wa_sort-fieldname ='ITEM'。
     wa_sort-up ='X'。
     wa_sort-subtot ='X'。
     APPEND wa_sort到i_sort。
     清除wa_sort。
 ENDFORM。

 FORM subtotal_text更改
                p_total TYPE任意
                p_subtot_text类型slis_subtot_text。
 *物料级别小计
   IF p_subtot_text-criteria ='ITEM'。
     p_subtot_text-display_text_for_subtotal
     ='总计材料级别'。
   万一。
 ENDFORM。

 表格FRM_SET_FIELDCAT。
   数据:LV_FIELDNAME(7)C型,
         LV_LTX(20)C型。
   FILLFIEDCAT'ACCT''Acct NO''''。
   FILLFIEDCAT'ANAM''帐户名称'''''。
   FILLFIEDCAT'项目''项目否''''。
   LS_FIELDCAT-FIELDNAME ='文字'。
   LS_FIELDCAT-SELTEXT_L ='ITEM名称'。
   LS_FIELDCAT-NO_ZERO =''。
   LS_FIELDCAT-OUTPUTLEN =''。
   LS_FIELDCAT-no_out ='X'。
   将LS_FIELDCAT附加到GT_FIELDCAT。
   清除LS_FIELDCAT。
   LS_FIELDCAT-FIELDNAME ='HSL_ALL'。
   LS_FIELDCAT-SELTEXT_L ='CURRENT YEAR CUMULATIVE'。
   LS_FIELDCAT-NO_ZERO =''。
   LS_FIELDCAT-OUTPUTLEN =''。
   LS_FIELDCAT-do_sum ='X'。
   将LS_FIELDCAT附加到GT_FIELDCAT。
   清除LS_FIELDCAT。
 ENDFORM。

 表格DISPLAY_ALV。
   将" SUBTOTAL_TEXT"移动到LS_EVENT-NAME。
   将" SUBTOTAL_TEXT"移动到LS_EVENT-FORM。
   将LS_EVENT附加到GT_EVENTS。
    进行FRM_SET_FIELDCAT。
   执行sub_populate_sort。
   按项目排序IT_OUTPUT_ALL。
   调用功能" REUSE_ALV_GRID_DISPLAY"的状态列表
     出口
       I_CALLBACK_PROGRAM = SY-REPID
       I_CALLBACK_PF_STATUS_SET ='PF_STATUS_SET'
       I_CALLBACK_USER_COMMAND ='USER_COMMAND'
       IS_LAYOUT = GS_LAYOUT
       IT_FIELDCAT = GT_FIELDCAT
       IT_EVENTS = GT_EVENTS
       IT_SORT = i_sort
       I_SAVE ='A''Anzeigevarianten
     桌子
       T_OUTTAB = IT_OUTPUT_ALL
     例外情况
       PROGRAM_ERROR = 1
       其他= 2。
 ENDFORM。
 

ALV具有以下字段:ACCT,ANAME,ITEM,TEXT,HSL_ALL。 TEXT是ITEM的名称。 我想按项目显示小计,并在小计行中显示项目的文本。 所以我写了上面的代码,我仍然没有确切地做到这一点,所以我仍然没有修改subtotal_text子表单。 但是,使用上述代码调试时,它根本没有转到此subtotal_text子窗体。 我的问题是:1.为此,我是否需要使用subtotal_text事件? 2.我的代码有什么问题? 谢谢。

付费偷看设置
发送
4条回答
昵称总是被占用
1楼 · 2020-08-14 04:11.采纳回答

最短的演示代码(在7.51中运行):

类型:开始于alv_line,
          carrid TYPE轻型-carrid,
          connid TYPE sflight-connid,
          文字TYPE Scarr-Carrname,
          text_2 TYPE字符串,
          price TYPE sflight-price,
        结束于alv_line。
 数据:alv_line的it_output_all类型标准表。

 FORM subtotal_text更改
                p_total TYPE任意
                p_subtot_text类型slis_subtot_text。
   案例p_subtot_text-criteria。
     当" CARRID"时。
       p_subtot_text-display_text_for_subtotal ='载波总数'。
     当" CONNID"时。
       p_subtot_text-display_text_for_subtotal = | {p_subtot_text-display_text_for_subtotal} total |。
   结束。
 ENDFORM。

 选择开始。
   DATA(gt_events)= VALUE slis_t_event((name ='SUBTOTAL_TEXT'form ='SUBTOTAL_TEXT'))。
   DATA(gt_fieldcat)= VALUE slis_t_fieldcat_alv(
       (fieldname ='CARRID'seltext_l ='CARRID NO'no_out ='X')
       (fieldname ='CONNID'seltext_l ='CONNID'no_out ='X')
       (fieldname ='TEXT'seltext_l ='CARRID名称')
       (fieldname ='TEXT_2'seltext_l ='Conn。#')
       (fieldname ='PRICE'seltext_l ='Price'do_sum ='X'))。
   DATA(i_sort)= VALUE slis_t_sortinfo_alv(
       (spos = 1字段名称='CARRID'up ='X'subtot ='X')
       (spos = 2 fieldname ='CONNID'up ='X'subtot ='X'))。
   选择scarr〜carrid AS carrid,
          sflight〜connid AS connid,
          Scarr〜carrname AS文字,
          concat_with_space('Connection',sflight〜connid,1)AS text_2,
          价格〜AS价格
     从sflight INNER JOIN进入scarr〜carrid = sflight〜carrid
     到表@it_output_all的对应字段中。
   SORT it_output_all BY康乃馨。
   通话功能'REUSE_ALV_GRID_DISPLAY'
     出口
       i_callback_program = sy-repid
       it_fieldcat = gt_fieldcat
       it_events = gt_events
       it_sort = i_sort
       i_save ='A'
     桌子
       t_outtab = it_output_all
     例外情况
       程序错误= 1
       OTHERS = 2。
zZ12138
2楼-- · 2020-08-14 03:49

尝试以下更改:

 ls_fieldcat-fieldname ='ITEM'。
   ls_fieldcat-seltext_l ='ITEMS NO'。
   ls_fieldcat-no_zero =''。
   ls_fieldcat-outputlen =''。
   ls_fieldcat-no_out ='X'。  " <==============
   附加ls_fieldcat至gt_fieldcat。
   ls_fieldcat-fieldname ='TEXT'。
   ls_fieldcat-seltext_l ='ITEM名称'。
   ls_fieldcat-no_zero =''。
   ls_fieldcat-outputlen =''。
   LS_FIELDCAT-no_out =''。  " <============= 
悠然的二货
3楼-- · 2020-08-14 03:52

@ Sandra Rossi Thx。可行,还有一个问题,我可以在小计内使用小计。例如,在Item类别内,每个站点都有小计。

哎,真难
4楼-- · 2020-08-14 03:52

是的,您自己很容易看到:添加第二个小计列并在表单的开头设置一个断点。每个小计中断(每个小计列都需要调用它)。

一周热门 更多>