SAP中会经常开发报表,那么一个简单的ALV报表是怎么实现的,话不多说了,这里直接演示了。
一个简单SAP报表一般是由,字典结构,字段,事件,子例程,屏幕,事务码
输入事务码:SE38,打开如下图所示的界面,报表程序命名一般是由规范约束的。例如开发SD模块,一般是以ZSD开头,开发财务模块的,就是以ZFI开头,RP代表意思是报表report的缩写,后面是按流水号。
我一般先会点击显示,看当前命名的程序是否存在,和他人程序是否重名,如果不存在,再点击创建按钮。
SAP报表一般都是有查询条件界面,界面的查询字段是怎样布局的。
SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE title.
"SELECT-OPTIONS s_appo FOR ztpay-applyorgcode."申请组织代码
PARAMETERS: s_appo LIKE ztats-orgcode.
SELECT-OPTIONS s_payma FOR ztpay-paymadedate."收款确认日期
SELECT-OPTIONS s_payda FOR ztpay-paydate."应收日期
SELECT-OPTIONS s_srco FOR ztpay-srcoutsystemcode."来源对接系统
"SELECT-OPTIONS s_ype FOR ztpay-paytypecode."交易类型
PARAMETERS: s_ype LIKE ztfdt-paytypecode.
SELECT-OPTIONS s_opc FOR ztpay-oppobjectcode."收方对象代码
SELECT-OPTIONS s_bukrs FOR ztpay-bukrs."公司代码
SELECT-OPTIONS s_gjahr FOR ztpay-gjahr."会计年度
SELECTION-SCREEN END OF BLOCK rad1.
查询界面字段转化为中文,点击菜单栏的转到按钮,然后选择文本元素,选择文本
这个可有可无的。INITIALIZATION.事件,这个使用情况一般是在程序在开始前,进行一些初始化东西。例如通用帮助,界面的描述
很多初学者看SAP报表,不知道如何下手,先看哪里。一个SAP报表程序一般很长的,打开一看,好几千行的代码,就懵逼了。ABAP和Java一样,也有方法的入口,这里就是START-OF-SELECTION,这个是程序的开始事件。我个人习惯看一个程序,先点上面的工具栏的显示对象列表按钮,然后左侧就会出来整个程序目录结构
先根据查询界面的查询条件,查询组装数,放到内表中。在这里,我放到了LT_ITAB中了
数据查询放到内表中后,在调用另一个子例程
内表中英文字段名称和这里要保持一致,是一一对应的。create_fieladcat是另一个子例程(把子例程认为一个函数就行,比较好理解),这个作用是设置字段的样式。
上代码
FORM display_alv .
PERFORM create_fieldcat USING:
* FIELDCAT 'CHECKBOX' '选择' '4' 'X' '' '' '' 'X' '' '' '',
fieldcat 'NOTECODE' '资金系统单据号' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'APPLYORGCODE' '组织代码' '8' '' '' '' '' '' '' '' '' '',
fieldcat 'SRCOUTSYSTEMCODE' '来源对接系统' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'SRCNOTECODE' '来源单据号' '12' '' '' '' '' '' '' '' '' '',
fieldcat 'DEPTCODE' '部门代码' '4' '' '' '' '' '' '' '' '' '',
fieldcat 'PAYDATE' '应付日期' '8' '' '' '' '' '' '' '' '' '',
fieldcat 'PAYMADEDATE' '收款确认日期' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'PAYTYPECODE' '交易类型' '8' '' '' '' '' '' '' '' '' '',
fieldcat 'V_TEXT' '交易类型描述' '4' '' '' '' '' '' '' '' '' '',
fieldcat 'PURPOSE' '用途' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'OURBANKACCOUNTNUMBER' '付方账号' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'OURAMOUNT' '付方金额' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'OURCURCODE' '货币' '10' '' 'ALPHA' '' '' '' '' '' '' '',
fieldcat 'OPPOBJECTCODE' '收方对象代码' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'OPPOBJECTNAME' '收方名称' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'BELNR' '凭证编号' '10' '' '' '' '' '' '' '' '' 'X',
fieldcat 'BSTAT' '凭证状态' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'BSTATW' '凭证状态文本' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'PAYINFO' '付款状态描述' '10' '' '' '' '' '' '' '' '' '',
fieldcat 'BUKRS' '公司代码' '40' '' 'ALPHA' '' '' '' '' '' '' '',
fieldcat 'GJAHR' '会计年度' '10' '' '' '' '' '' '' '' '' ''.
layout-cwidth_opt = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
it_fieldcat_lvc = fieldcat
is_layout_lvc = layout
* I_GRID_SETTINGS = I_GRID_SETTINGS
i_save = 'A'
i_callback_user_command = 'USER_COMMAND'
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
TABLES
t_outtab = lt_itab.
ENDFORM.
create_fieladcat,各个字段设置作用,这里做个简单介绍详细的看LVC_S_FCAT这个结构
第一个字段:fieldname是英文字段名称,
第二个字段:reptext是描述,
第三个字段:outputlen是输出长度,
第四个字段:edit是否编辑,如果先让此字段能修改,则标记为“X”,默认是空。
第八个字段:checkbox是否选择框,前面会多一个方框
第十二字段:hotspot,控制敏感,默认是空,如果标记敏感,则标记“X”,一般这个用于链接,链接到另一个界面上。
例如:销售订单字段可以标记敏感字段,点击一下,可以链接到销售订单界面上,当然只是设置敏感是不能链接过去的,要稍微写一下程序的。
FORM create_fieldcat USING p0 TYPE lvc_t_fcat p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12.
DATA: l_alv_filed TYPE lvc_s_fcat.
l_alv_filed-fieldname = p1.
l_alv_filed-reptext = p2.
l_alv_filed-outputlen = p3.
l_alv_filed-edit = p4.
l_alv_filed-convexit = p5.
l_alv_filed-key = p6.
l_alv_filed-do_sum = p7.
l_alv_filed-checkbox = p8.
l_alv_filed-no_zero = p9.
l_alv_filed-inttype = p10.
l_alv_filed-intlen = p11.
l_alv_filed-hotspot = p12.
APPEND l_alv_filed TO p0.
CLEAR l_alv_filed.
ENDFORM.