SAP ALV程序模板:数据处理与显示

需积分: 32 3 下载量 137 浏览量 更新于2024-09-08 1 收藏 11KB TXT 举报
"ALV程序模板是用于在SAP系统中生成标准的列表视图(ALV Grid)的模板代码,通常用于展示和处理表格数据。这个模板涉及到SAP编程中的ABAP语言,特别是与ALV相关的数据处理和界面显示。ALV全称为Abap List Viewer,是SAP GUI中的一种组件,用于以表格形式展示数据,提供了排序、过滤、打印等交互功能。 在给出的代码中,我们看到以下几个关键部分: 1. **TYPE-POOLS**:声明使用了`slis`类型池,`slis`是SAP标准的类型池,包含了一些与ALV相关的数据结构和类型,如用于定义字段集的`sflvc_scat`。 2. **TABLES**:声明了将要使用的数据库表,如`mara`(物料主数据表)和`sscrfields`(用于动态定义ALV列的表)。 3. **TYPES**:定义了一个自定义类型`ty_data`,包含了两个字段,`box`(一个字符类型,可能是用于勾选或标记的字段)和`matnr`(物料编号,与`mara`表中的字段对应)。 4. **DATA**:声明了两个数据变量,`it_data`是一个基于`ty_data`类型的内部表,用于存储数据;`wa_data`是单个记录的数据结构,用于遍历和操作内部表。 5. **ALV**:这部分代码通常会包含初始化ALV、设置字段集、填充数据、调用`REUSE_ALV_GRID_DISPLAY`函数来显示ALV以及处理用户交互的逻辑。然而,在提供的代码片段中,这部分没有完整展示出来,通常还会包含`it_fieldcat`,这是一个字段分类表,用于定义ALV列的显示属性。 完整的ALV程序模板应包括从数据库读取数据、创建和填充字段分类表、初始化ALV实例、设置列显示及交互选项,以及处理用户事件(如点击、排序、过滤等)。在实际开发中,你需要根据业务需求对这些步骤进行相应的实现和扩展。例如,可能需要从`mara`表中读取更多字段到`ty_data`类型,或者根据`sscrfields`动态决定ALV列的显示。同时,ALV还支持通过`REUSE_ALV_GRID_TABLE_FOR_SCREEN`等函数创建交互式表格,以及通过`cl_salv_table`类进行面向对象的ALV编程。"
2010-10-26 上传
*&---------------------------------------------------------------------* *& Report YTEST31 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT YTEST31. DATA: OK_CODE TYPE SY-UCOMM, SAVE_OK TYPE SY-UCOMM. TABLES SPFLI. DATA LS_SPFLI TYPE SPFLI. DATA WA_SPFLI TYPE TABLE OF SPFLI. DATA WADEL_SPFLI TYPE TABLE OF SPFLI. SELECT * INTO TABLE WA_SPFLI FROM SPFLI. DATA: WA_CONTAINER TYPE SCRFNAME VALUE 'ALVDATA', ALV_GRID TYPE REF TO CL_GUI_ALV_GRID, WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER. DATA WA_LAYOUT TYPE LVC_S_LAYO. WA_LAYOUT-EDIT = 'X'. CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED. DATA EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER. ************************************************************************ * CLASS LCL_EVENT_RECEIVER DEFINITION * * * ************************************************************************ CLASS LCL_EVENT_RECEIVER DEFINITION. PUBLIC SECTION. TYPES: DEL_ROWS TYPE STANDARD TABLE OF SPFLI. DATA: DDEL_ROWS TYPE STANDARD TABLE OF SPFLI. METHODS: HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID IMPORTING ER_DATA_CHANGED. METHODS: UPDATE_DELTA_TABLES IMPORTING PR_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL. METHODS: GET_DELETED_ROWS EXPORTING DELETED_ROWS TYPE DEL_ROWS. ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION *&-------------------------------------------------------------------------- *& CLASS LCL_EVENT_RECEIVER IMPLENTMENTATION *& *&-------------------------------------------------------------------------- CLASS LCL_EVENT_RECEIVER IMPLEMENTATION. METHOD HANDLE_DATA_CHANGED. CALL METHOD UPDATE_DELTA_TABLES( ER_DATA_CHANGED ). ENDMETHOD. "HANDLE_DATA_CHANGED METHOD UPDATE_DELTA_TABLES. "HANDLE_DATA_CHANGED DATA: L_DEL_ROW TYPE LVC_S_MOCE. LOOP AT PR_DATA_CHANGED->MT_DELETED_ROWS INTO L_DEL_ROW. READ TABLE WA_SPFLI INTO LS_SPFLI INDEX L_DEL_ROW-ROW_ID. IF SY-SUBRC NE 0. MESSAGE E208(00) WITH '?理??'. ELSE. APPEND LS_SPFLI TO DDEL_ROWS. ENDIF. ENDLOOP. ENDMETHOD. "UPDATE_DELTA_TABLES METHOD GET_DELETED_ROWS. "update_delta_tables DELETED_ROWS = ME->DDEL_ROWS. ENDMETHOD. "GET_DELETED_ROWS ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION START-OF-SELECTION. CALL SCREEN 100. WRITE / '?除的内表??'. "get_deleted_rows WRITE / '______________'. "LCL_EVENT_RECEIVER DEFINITION CALL METHOD EVENT_RECEIVER->GET_DELETED_ROWS IMPORTING DELETED_ROWS = WADEL_SPFLI. LOOP AT WADEL_SPFLI INTO SPFLI. WRITE: / SPFLI-CARRID,SPFLI-CONNID,SPFLI-CITYFROM. ENDLOOP. WRITE: / '更新后的内表??:'. WRITE: / '__________________'. LOOP AT WA_SPFLI INTO SPFLI. WRITE : / SPFLI-CARRID,SPFLI-CONNID,SPFLI-CITYFROM. ENDLOOP. *此?是更新到数据?的操作 *WHEN 'SAVE'. * MODIFY SPFLI FORM TABLE WA_SPFLI. * IF SY-SUBRC NE 0. *MESSAGE I005(YMESS) WITH '更新数据??!'. EXIT. * ELSE. * MESSAGE I005(YMESS) WITH '更新数据OK!'. * ENDIF. * DELETE SPFLI FROM TABLE DELA_SPFLI. * IF SY-SUBRC NE 0. * MESSAGE I005(YMESS) WITH '更新数据??!'. * ELSE. * MESSAGE I005(YMESS) WITH '更新数据OK!'. * ENDIF. END-OF-SELECTION. INCLUDE YTEST31_STATUS_100. INCLUDE YTEST31_USER_COMMAND_100.