在alv网格输出中动态插入一行

2020-08-21 20:50发布

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

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


大家好,

您是否有可能在alv网格输出中动态插入一行,而无需使用新的内部表(插入行)调用另一个first_display?

让我雄辩:就像我们对cols进行小计时一样,我们看到在输出中插入了一个带有小计值的新行。如何插入一行,有可能还是会创建另一个 内部表并插入行,然后使用新表调用显示功能/方法。

致谢,

Venkat

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

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


大家好,

您是否有可能在alv网格输出中动态插入一行,而无需使用新的内部表(插入行)调用另一个first_display?

让我雄辩:就像我们对cols进行小计时一样,我们看到在输出中插入了一个带有小计值的新行。如何插入一行,有可能还是会创建另一个 内部表并插入行,然后使用新表调用显示功能/方法。

致谢,

Venkat

付费偷看设置
发送
3条回答
闻人可可
1楼 · 2020-08-21 21:18.采纳回答

HI

是的。 默认情况下,类CL_GUI_ALV_GRID提供此功能,alv网格工具栏中将提供一个按钮,允许您执行此操作。 您要做的就是通过为偶数data_changed实现事件处理程序来控制插入的数据,该事件处理程序提供了一个表,其中所有数据都已更改,添加,更新或删除。

查看标准程序bcalvedit4,它会准确显示您的需求。

奖励积分(如果有帮助)

致谢

小熊yu生菜
2楼-- · 2020-08-21 21:18

Hello Venkat

如果您有一个可编辑 ALV列表,那么您将自动具有可用于追加和插入新行的工具栏功能。

如果您有一个仅显示 ALV列表,则可以使用以下示例报告中所示的不同方法。 运行报告并在命令字段" ADD_ROWS"或" APPEND_ROW"中输入。

 *&---------------------------------------------  ------------------------ *
 *&报告ZUS_SDN_ONE_ALV_GRID
 *&
 *&------------------------------------------------  --------------------- *
 *&屏幕" 0100"不包含任何元素。
 *&ok_code->分配给GD_OKCODE
 *&
 *&流逻辑:
 *输出前处理。
 * MODULE STATUS_0100。
 **
 *输入后处理。
 * MODULE USER_COMMAND_0100。
 *&
 *&------------------------------------------------  --------------------- *

 报告zus_sdn_one_alv_grid。




 数据:
   gd_okcode TYPE ui_func,
 *
   go_docking类型参考cl_gui_docking_container,
   go_grid类型参考cl_gui_alv_grid,
   gs_layout TYPE lvc_s_layo,
   gs_variant TYPE变量,
   gt_fcat类型lvc_t_fcat。


 数据:
   gt_outtab knb1的标准类型表。





 * -------------------------------------------------  -------------------- *
 * CLASS lcl_eventhandler的定义
 * -------------------------------------------------  -------------------- *
 *
 * -------------------------------------------------  -------------------- *
 CLASS lcl_eventhandler定义。

   公共部分。

     类方法:
       handle_user_command FOR事件EV_user_command of cl_gui_alv_grid
         输入
           e_ucomm
           发件人。


 ENDCLASS。  " lcl_eventhandler定义



 * -------------------------------------------------  -------------------- *
 * CLASS lcl_eventhandler的实现
 * -------------------------------------------------  -------------------- *
 *
 * -------------------------------------------------  -------------------- *
 CLASS lcl_eventhandler的实现。

   方法handle_user_command。

     案例e_ucomm。
       当cl_gui_alv_grid => mc_fc_loc_append_row时。
         将初始行追加到gt_outtab。

       当别人。
     结束。


   终结法。  " handle_user_command

 ENDCLASS。  " lcl_eventhandler的实现






 选择开始。

   SELECT * FROM knb1进入表gt_outtab最多10个行
          其中bukrs ='1000'。


 *创建停靠容器
   创建对象go_docking
     出口
       父母= cl_gui_container => screen0
       比例= 90
     例外情况
       其他= 6。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。




 *创建ALV网格
   创建对象go_grid
     出口
       i_parent = go_docking
     例外情况
       其他= 5。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。








 *显示数据
   gs_layout-grid_title ='客户'。
   呼叫方法go_grid-> set_table_for_first_display
     出口
       i_structure_name ='KNB1'
       is_layout = gs_layout
     改变
       it_outtab = gt_outtab
     例外情况
       其他= 4。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 **执行Modify_fieldcatalog。
 ** go_grid-> set_ready_for_input(1)。




 *将对接容器链接到目标dynpro
   呼叫方法go_docking->链接
     出口
       repid =系统恢复
       dynnr ='0100'
 *容器=
     例外情况
       其他= 4。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 *注意:dynpro不包含任何元素
   呼叫屏幕" 0100"。
 * dynpro的流程逻辑(不包含任何dynpro元素):
 *
 *输出前的处理。
 * MODULE STATUS_0100。
 **
 *输入后的过程。
 * MODULE USER_COMMAND_0100。



 选择结束。

 *&------------------------------------------------  --------------------- *
 *&模块STATUS_0100输出
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模块状态_0100输出。
   设置PF-STATUS'STATUS_0100'。  "包含按钮" DETAIL"
 * SET TITLEBAR'xxx'。


 *刷新显示ALV清单
   呼叫方法go_grid-> refresh_table_display
 *出口
 * IS_STABLE =
 * I_SOFT_REFRESH =
     例外情况
       其他= 2。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 ENDMODULE。  " STATUS_0100输出

 *&------------------------------------------------  --------------------- *
 *&模块USER_COMMAND_0100输入
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 MODULE user_command_0100输入。

   将gd_okcode转换为大写。

   案例gd_okcode。
     当"返回"时
          "结束"或
          " CANC"。
       设置屏幕0。离开屏幕。

     当" ADD_ROWS"时。
       执行add_rows。

     当" APPEND_ROW"时。
       调用方法lcl_eventhandler => handle_user_command
         出口
           e_ucomm = cl_gui_alv_grid => mc_fc_loc_append_row
           发件人= go_grid。

     当别人。
   结束。

   清除:gd_okcode。

 ENDMODULE。  " USER_COMMAND_0100输入


 *&------------------------------------------------  --------------------- *
 *&表格MODIFY_FIELDCATALOG
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 *-> p1文字
 * <-p2文字
 * -------------------------------------------------  --------------------- *
 FORM Modify_fieldcatalog。
 *定义本地数据
   数据:
     ls_fcat TYPE lvc_s_fcat,
     lt_fcat类型lvc_t_fcat。


   呼叫方法go_grid-> get_frontend_fieldcatalog
     输入
       et_fieldcatalog = lt_fcat。

   ls_fcat-edit = abap_true。
   从ls_fcat修改lt_fcat
     运输编辑
     在哪里(编辑NE ls_fcat-edit)。

   go_grid-> set_frontend_fieldcatalog(lt_fcat)。


 ENDFORM。  " MODIFY_FIELDCATALOG


 *&------------------------------------------------  --------------------- *
 *&表格ADD_ROWS
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 *-> p1文字
 * <-p2文字
 * -------------------------------------------------  --------------------- *
 FORM add_rows。

   做5次。
     将初始行追加到gt_outtab。
   ENDDO。
 ENDFORM。  " ADD_ROWS 

致谢

Uwe

半个程序猿
3楼-- · 2020-08-21 21:23

我们可以使用" REUSE_ALV_GRID_DISPLAY"来做到这一点吗??

一周热门 更多>