2020-08-21 20:50发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
您是否有可能在alv网格输出中动态插入一行,而无需使用新的内部表(插入行)调用另一个first_display?
让我雄辩:就像我们对cols进行小计时一样,我们看到在输出中插入了一个带有小计值的新行。如何插入一行,有可能还是会创建另一个 内部表并插入行,然后使用新表调用显示功能/方法。
致谢,
Venkat
HI
是的。 默认情况下,类CL_GUI_ALV_GRID提供此功能,alv网格工具栏中将提供一个按钮,允许您执行此操作。 您要做的就是通过为偶数data_changed实现事件处理程序来控制插入的数据,该事件处理程序提供了一个表,其中所有数据都已更改,添加,更新或删除。
查看标准程序bcalvedit4,它会准确显示您的需求。
奖励积分(如果有帮助)
致谢
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
我们可以使用" REUSE_ALV_GRID_DISPLAY"来做到这一点吗??
最多设置5个标签!
HI
是的。 默认情况下,类CL_GUI_ALV_GRID提供此功能,alv网格工具栏中将提供一个按钮,允许您执行此操作。 您要做的就是通过为偶数data_changed实现事件处理程序来控制插入的数据,该事件处理程序提供了一个表,其中所有数据都已更改,添加,更新或删除。
查看标准程序bcalvedit4,它会准确显示您的需求。
奖励积分(如果有帮助)
致谢
Hello Venkat
如果您有一个可编辑 ALV列表,那么您将自动具有可用于追加和插入新行的工具栏功能。
如果您有一个仅显示 ALV列表,则可以使用以下示例报告中所示的不同方法。 运行报告并在命令字段" ADD_ROWS"或" APPEND_ROW"中输入。
致谢
Uwe
我们可以使用" REUSE_ALV_GRID_DISPLAY"来做到这一点吗??
一周热门 更多>