【转载】ALV的Excel方式显示缺少模板

有时候在ALV的Excel格式显示的时候,会提示:请和系统管理员联系,缺少下列模板:sap_om.xls

 

这时候,可以运行程序:BCALV_BDS_IMPORT_SAP_TEMPLATE,在Client000 Copy一个。

或者运行Tcode OAER,参数为:

 

Class name: ALVLAYOUTTEMPLATES
Class type:  OT
Object key: SAP_STANDARD_TEMPLATE

自己上传一个

 

原文地址:http://blog.chinaunix.net/uid-8527621-id-2029622.html

### 解决SAP ALV总计功能报错的方案 在SAP ABAP开发中,ALV总计功能的实现依赖于正确的数据结构逻辑设置。如果总计功能出现报错,通常是因为数据处理、字段定义或用户交互逻辑存在问题。以下是可能的原因及解决方案: #### 1. 数据字段类型不匹配 ALV总计功能要求字段的数据类型必须支持数值计算(如`NUMC`, `DEC`, `INT`等)。如果字段类型为字符型(如`CHAR`),则无法进行总计操作。 - **检查字段类型**:确保需要总计的字段在内部表中定义为数值类型[^1]。 - **转换字段类型**:如果字段原始类型为字符型,可以使用`CONVERSION_EXIT`或直接转换为数值型字段。 ```abap DATA: lv_value TYPE dec. lv_value = cl_abap_char_utilities=>numeric( gs_data-field_name ). ``` #### 2. 内部表定义问题 ALV总计功能依赖于内部表的字段定义是否正确。如果字段未正确映射到ALV字段目录,则可能导致报错。 - **检查字段目录**:确保`GT_FIELDCAT`中的字段定义与内部表一致,并且包含总计字段的属性设置。 - **设置总计标志**:在字段目录中为需要总计的字段设置`SUM`标志。 ```abap LOOP AT gt_fieldcat INTO gs_fieldcat. IF gs_fieldcat-fieldname = 'TOTAL_FIELD'. gs_fieldcat-sum = 'X'. " 设置总计标志 ENDIF. MODIFY gt_fieldcat FROM gs_fieldcat. ENDLOOP. ``` #### 3. 用户交互逻辑错误 如果用户点击总计按钮后触发了错误的事件处理逻辑,则可能导致短转储。例如,`USER_COMMAND`方法中未正确处理总计事件。 - **检查`USER_COMMAND`方法**:确保在`USER_COMMAND`方法中正确捕获总计事件,并调用相应的总计函数。 ```abap CASE iv_ucomm. WHEN '&IC1'. " 点击总计按钮 CALL METHOD lcl_alv->get_total_values EXPORTING is_fieldcatalog = gs_fieldcat IMPORTING et_total_values = gt_total_values. ENDCASE. ``` #### 4. 稳定性刷新问题 如果ALV界面的稳定性刷新逻辑未正确设置,则可能导致总计功能异常。 - **设置稳定性参数**:在刷新ALV时,确保设置了行列稳定性参数。 ```abap ls_stable-row = 'X'. ls_stable-col = 'X'. CALL METHOD lcl_alv->refresh_table_display EXPORTING is_stable = ls_stable. ``` #### 5. 模板文件缺失 如果ALV报表需要通过Excel导出或显示总计,但系统缺少模板文件(如`sap_sm.xls`),则可能导致报错。 - **上传模板文件**:运行事务代码`OAER`,上传缺失的模板文件。 ```plaintext Tcode: OAER Class name: ALVLAYOUTTEMPLATES Class type: OT Object key: SAP_STANDARD_TEMPLATE ``` #### 6. 数据读取逻辑错误 如果程序中存在数据读取逻辑错误(如未正确处理空值或非法字符),则可能导致总计功能报错。 - **验证数据完整性**:在数据加载到ALV之前,确保所有字段值有效。 ```abap LOOP AT gt_data INTO gs_data. IF gs_data-total_field IS INITIAL. gs_data-total_field = 0. ENDIF. APPEND gs_data TO gt_data. ENDLOOP. ``` --- ### 示例代码 以下是一个完整的ALV总计功能实现示例: ```abap " 定义字段目录 LOOP AT gt_fieldcat INTO gs_fieldcat. IF gs_fieldcat-fieldname = 'TOTAL_FIELD'. gs_fieldcat-sum = 'X'. " 设置总计标志 ENDIF. MODIFY gt_fieldcat FROM gs_fieldcat. ENDLOOP. " 创建ALV对象 CREATE OBJECT lcl_alv EXPORTING i_parent = cl_gui_container=>screen0. " 显示ALV CALL METHOD lcl_alv->set_table_for_first_display EXPORTING is_layout = gs_layout CHANGING it_outtab = gt_data it_fieldcatalog = gt_fieldcat. " 处理用户命令 FORM frm_alv_usercommand USING iv_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. CASE iv_ucomm. WHEN '&IC1'. " 点击总计按钮 CALL METHOD lcl_alv->get_total_values EXPORTING is_fieldcatalog = gs_fieldcat IMPORTING et_total_values = gt_total_values. ENDCASE. ENDFORM. ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值