`

具有edit和save to db功能的ALV

UP 
阅读更多
*&---------------------------------------------------------------------*
*& Report  Z_DEMO_ALV_JG
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_DEMO_ALV_JG.
******************************************************************\*
* TYPE-POOLS *
******************************************************************\*
TYPE-POOLS: slis.
******************************************************************\*
* INTERNAL TABLES/WORK AREAS/VARIABLES *
******************************************************************\*
DATA: i_fieldcat TYPE slis_t_fieldcat_alv,
i_index TYPE STANDARD TABLE OF i WITH HEADER LINE,
w_field TYPE slis_fieldcat_alv,
p_table LIKE dd02l-tabname,
dy_table TYPE REF TO data,
dy_tab TYPE REF TO data,
dy_line TYPE REF TO data.
******************************************************************\*
* FIELD-SYMBOLS *
******************************************************************\*
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa> TYPE ANY,
<dyn_field> TYPE ANY,
<dyn_tab_temp> TYPE STANDARD TABLE.
******************************************************************\*
* SELECTION SCREEN *
******************************************************************\*
PARAMETERS: tabname(30) TYPE c,
lines(5) TYPE n.
******************************************************************\*
* START-OF-SELECTION *
******************************************************************\*
START-OF-SELECTION.
* Storing table name
p_table = tabname.
* Create internal table dynamically with the stucture of table name
* entered in the selection screen
CREATE DATA dy_table TYPE STANDARD TABLE OF (p_table).
ASSIGN dy_table->* TO <dyn_table>.
IF sy-subrc <> 0.
MESSAGE i000(z_zzz_ca_messages) WITH ' No table found'.
LEAVE TO LIST-PROCESSING.
ENDIF.
* Create workarea for the table
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
* Create another temp. table
CREATE DATA dy_tab TYPE STANDARD TABLE OF (p_table).
ASSIGN dy_tab->* TO <dyn_tab_temp>.
SORT i_fieldcat BY col_pos.
* Select data from table
SELECT * FROM (p_table)
INTO TABLE <dyn_table>
UP TO lines ROWS.
REFRESH <dyn_tab_temp>.
* Display report
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = p_table
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'SET_PF_STATUS'
TABLES
t_outtab = <dyn_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
*&----------------------------------------------------------------\-*
*& Form SET_PF_STATUS
*&----------------------------------------------------------------\-*
* Setting custom PF-Status
*\-----------------------------------------------------------------\-*
* \-->RT_EXTAB Excluding table
*\-----------------------------------------------------------------\-*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'Z_STANDARD'.
ENDFORM. "SET_PF_STATUS
*&---------------------------------------------------------------\-*
*& Form user_command
*&----------------------------------------------------------------\-*
* Handling custom function codes
*\-----------------------------------------------------------------\-*
* \-->R_UCOMM Function code value
* \-->RS_SELFIELD Info. of cursor position in ALV
*\-----------------------------------------------------------------\-*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
* Local data declaration
DATA: li_tab TYPE REF TO data,
l_line TYPE REF TO data.
* Local field-symbols
FIELD-SYMBOLS:<l_tab> TYPE table,
<l_wa> TYPE ANY.
* Create table
CREATE DATA li_tab TYPE STANDARD TABLE OF (p_table).
ASSIGN li_tab->* TO <l_tab>.
* Create workarea
CREATE DATA l_line LIKE LINE OF <l_tab>.
ASSIGN l_line->* TO <l_wa>.
CASE r_ucomm.
* When a record is selected
WHEN '&IC1'.
* Read the selected record
READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX
rs_selfield-tabindex.
IF sy-subrc = 0.
* Store the record in an internal table
APPEND <dyn_wa> TO <l_tab>.
* Fetch the field catalog info
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = 'Z_DEMO_PDF_JG'
i_structure_name = p_table
CHANGING
ct_fieldcat = i_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0.
* Make all the fields input enabled except key fields
w_field-input = 'X'.
MODIFY i_fieldcat FROM w_field TRANSPORTING input
WHERE key IS INITIAL.
ENDIF.
* Display the record for editing purpose
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = p_table
it_fieldcat = i_fieldcat
i_screen_start_column = 10
i_screen_start_line = 15
i_screen_end_column = 200
i_screen_end_line = 20
TABLES
t_outtab = <l_tab>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc = 0.
* Read the modified data
READ TABLE <l_tab> INDEX 1 INTO <l_wa>.
* If the record is changed then track its index no.
* and populate it in an internal table for future
* action
IF sy-subrc = 0 AND <dyn_wa> <> <l_wa>.
<dyn_wa> = <l_wa>.
i_index = rs_selfield-tabindex.
APPEND i_index.
ENDIF.
ENDIF.
ENDIF.
* When save button is pressed
WHEN 'SAVE'.
* Sort the index table
SORT i_index.
* Delete all duplicate records
DELETE ADJACENT DUPLICATES FROM i_index.
LOOP AT i_index.
* Find out the changes in the internal table
* and populate these changes in another internal table
READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX i_index.
IF sy-subrc = 0.
APPEND <dyn_wa> TO <dyn_tab_temp>.
ENDIF.
ENDLOOP.
* Lock the table
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
mode_rstable = 'E'
tabname = p_table
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc = 0.
* Modify the database table with these changes
MODIFY (p_table) FROM TABLE <dyn_tab_temp>.
REFRESH <dyn_tab_temp>.
* Unlock the table
CALL FUNCTION 'DEQUEUE_E_TABLE'
EXPORTING
mode_rstable = 'E'
tabname = p_table.
ENDIF.
ENDCASE.
rs_selfield-refresh = 'X'.
ENDFORM. "user_command
分享到:
评论

相关推荐

    ALV EDIT_MASK字段的使用.rar_ABAP EDIT_MASK_ALV EDIT_MASK字段的使用_ALVEDIT

    总之,`ALV EDIT_MASK`和`ALVEDIT`是ABAP中增强ALV界面功能的重要工具。正确使用它们,可以显著提高数据输入的准确性和效率,同时为用户提供更友好的交互界面。在实际项目中,开发者应根据业务需求灵活运用这些功能...

    OOALV常用功能完整简例

    标题中提及的“OOALV常用功能完整简例”,描述中说明了该简例包含的内容:热键单击、双击、帮助、编辑和自定义工具条等。OOALV是指面向对象的ALV,它是在SAP系统中常用的报表输出组件,用于将数据以表格形式展示。在...

    ABAP OO去掉ALV中的标准工具栏

    在ABAP面向对象编程(ABAP OO)中,经常需要对ALV(Application List Viewer)进行定制化的控制,包括移除或隐藏某些默认显示的工具栏功能。这通常是为了提供更简洁、更符合业务需求的用户界面。本文将详细介绍如何...

    SAP ALV功能总结

    ### SAP ALV功能总结 ...通过对报告`Z_ALV_TEST01`的深入剖析,我们可以更全面地理解如何利用SAP ALV的功能来提高数据展示的质量和效率。此外,合理的数据准备和ALV组件配置对于实现良好的用户体验至关重要。

    alv使用 alv使用

    ALV,全称ABAP List Viewer,是一种在SAP系统中用于展示数据的标准组件...总的来说,ALV是SAP系统中处理和展示数据的强大工具,通过其丰富的功能和易用的API,开发者可以快速构建交互式的数据展示界面,提升用户体验。

    ALV.rar_SAP_abaP ALV_abap_alv_sap alv

    这将启动ALV的多层输出功能,允许用户展开和折叠数据层次。 ```abap lo_salv_table-&gt;display( ). ``` 在ALV中实现多层输出,主要是利用ALV的嵌套表功能。这可能涉及到对源数据的额外处理,以便能够正确地分层次...

    abap_alv去掉标准按钮

    例如,`CL_GUI_ALV_GRID=&gt;MC_FC_MAXIMUM`表示最大值计算功能,而`CL_GUI_ALV_GRID=&gt;MC_MB_VARIANT`则代表了变体视图功能。 #### 3. 调用ALV网格控件方法 在设置好排除列表后,需要在ALV网格控件的初始化过程中传递...

    [SAP ABAP开发技术总结]ALV详解(Fuction ALV 和OO ALV)

    [SAP ABAP开发技术总结]ALV详解(Fuction ALV 和OO ALV) 图文并茂,详细介绍了Fuction ALV 和OO ALV的相关开发 [SAP ABAP开发技术总结]ALV详解:Function ALV(一) [SAP ABAP开发技术总结]ALV详解:Function ALV...

    SAP ABAP ALV 详解

    SAP ABAP ALV 详解 SAP ABAP 中的 ALV(ABAP List Viewer)是一种列表输出方式,在 R/3 4.6C 之前称为 ABAP List ...ALV 是 SAP 系统中的一个强大工具,提供了丰富的列表输出功能和交互功能,可以满足不同的业务需求。

    ABAP OOALV学习文档

    通过以上步骤,我们可以构建一个基础的 ALV 网格,并在此基础上进一步添加交互式功能和其他定制化的设置。这只是一个非常基础的例子,实际应用中可以根据具体需求进行更多定制和扩展。 通过本篇文档的学习,希望...

    abap-ALV.rar_ABAP系统ALV_abap_abap开发alv

    ALV提供了一种标准化的方式来展示表格数据,包括排序、过滤、分组和自定义列等功能,极大地简化了用户界面的开发。 标题“abap-ALV.rar_ABAP系统ALV_abap_abap开发alv”暗示我们将深入探讨ABAP ALV的使用,特别是在...

    在alv输出屏幕上增加按钮实现方法

    在 SAP ABAP 开发中,ALV (ABAP List Viewer) 是一种常用的数据展示工具,它允许用户以表格形式查看和操作数据。然而,标准的 ALV 输出...通过以上步骤,开发者可以自定义 ALV 功能,增强用户界面的交互性和功能性。

    ABAP-ALV进阶

    ALV 菜单栏提供了多种功能,包括细节按钮、升序排列、降序排列、设置过滤器、打印预览、Microsoft Excel、字处理、本地文件、邮件收件人、图形和更改布局等。 2. ALV 标题栏 ALV 标题栏主要是用来显示一些抬头信息...

    ALV完成功能代码实现

    ### ALV功能代码实现 #### 概述 本篇文章旨在探讨如何在SAP ABAP环境中实现ALV(Application List Viewer)的功能代码。ALV是一种在SAP系统中用于展示列表数据的强大工具,它允许开发者创建高度自定义化的列表视图...

    ALV_GRID介绍

    DATA: lv_alv_grid TYPE REF TO cl_gui_alv_grid. ``` #### 四、ALV GRID相关的控制结构 为了更好地控制ALV_GRID的显示效果,ALV_GRID提供了一系列的控制结构。其中最重要的控制结构是“字段目录”(Field Catalog...

    面向对象的alv 资料

    * EDIT_MASK ALV控制:为输出编辑掩码,格式 * EMPHASIZE ALV控制:带有颜色的高亮列的颜色 * FIX_COLUMN ALV控制:固定列 * DO_SUM ALV控制:总计列值,X',合计 * NO_SUM ALV控制:没有总计列值,X' * NO_OUT ALV...

    ALV For WebDynpro

    "ALV for Web Dynpro"是将ALV的功能集成到Web Dynpro应用程序中,使得在Web环境中也能实现丰富的数据列格式化、排序、过滤和交互操作。本文将详细介绍如何在Web Dynpro中使用ALV,以及相关的设置步骤和技巧。 首先...

    源代码(ALV 报表 F4 增删插改按钮功能).pdf

    在SAP ABAP领域,ALV(ABAP List Viewer)是一个功能强大的组件,用于在SAP系统中创建和显示列表格式的数据。ALV报表中的F4按钮是为用户提供数据搜索和维护功能的一种方式。通过添加F4增强功能,开发人员可以为ALV...

    [ABAP]Function实现ALV Table 二:ALV的弹出窗口形式

    总结起来,通过正确使用ABAP的Function模块和适当的回调处理,我们可以创建具有弹出窗口形式的ALV,以灵活地展示和操作业务数据。这不仅提高了用户体验,还使得SAP系统的报表功能更加强大和易用。

    SAP ABAP ALV分页显示

    ALV是SAP GUI中用于展示表格数据的一种灵活方式,它提供了丰富的自定义功能,例如排序、筛选、分组等,能够满足各种复杂的数据展示需求。本文主要关注如何通过内表数据处理来实现分页功能。 #### 技术背景介绍 在...

Global site tag (gtag.js) - Google Analytics