SAP中SmartForms报表工具的使用,一个简单的报表Demo
进度是缓慢的,续更SAP相关内容。
今天的内容是一个简单的SmartForms的实例。因为我之前是用环思ERP系统,所以接触到SAP的这个报表,第一感觉就是天呐,一个报表怎么可以这么麻烦,My God。不过随着更深入的了解,后续可能会改变这种看法,最终拜倒在SAP的石榴裙下。哈哈
废话不多说,好宝宝们,上课。
环境
SAP客户端是760版本的。
OFFICE版本是2013版本。(版本不对可能会导致SAP在集成富文本编辑器时出错,建议卸载掉WPS。电脑上有WPS时,可能也会影响SAP集成富文本编辑器。)
下面是一张流程图,可能比较粗糙,大家务必仔细看,因为我们首先要靠流程图将SmartForms这个概念装在脑袋瓜子里面,这样做报表的时候思路才比较清晰。
(一):设计报表
(1)在事务栏中输入SmartForms进入创建报表的界面。
切记报表的名称一定要以字母Z打头,要不然会报错的。
(2)然后点击创建。
这里最好改一下描述,这样时隔数月后,我们再来看的话,就可以给我们自己一个很好的提示。
(3)此时我们Ctrl+S进行保存的话,就会弹出一个这样的框,因为我们是测试环境的例子而已,所以直接点击本地对象进行保存就可以啦。(开发环境的话就要考虑实际情况喽)
(4)我们先点击表格属性,选择报表的格式和样式。
格式和样式都可以自己写,这里我们先用系统中自带的。格式我选的是A4纸的格式,样式就随便选一个啦。
(5)调好报表的格式后,我们来给他定义一个形参,用来接收数据。
如果你有仔细看流程图的话,就会发现其实就是流程图中的变量:ZLT_1
导入,导出和例外这三个栏目中的内容我们暂时不要动,它里面有自动生成的一些东西,因为我们现在做的只是一个简单的Demo,所以暂时不需要研究这里。
(6)到这一步,乱七八糟的东西就已经调好啦,下面就是主要的设计报表的环节。
我们要设计的报表就张这个样子,剖析一个这个报表,我们可以看到它是由四行组成,第一行是航班信息这个标题,它由一列组成,第二行是日期,它由两列组成,第三行是数据的标题,它由五列组成,第四行就是我们的数据,我们把数据统称为一行,它肯定也是由五列构成的喽。
下面,我们搞它。
(7)首先,我们右击MAIN主窗体,创建一个表
并设计表的数据。
(8)然后我们来为这个表设计四行。
(9)然后我们给表头创建表行。
通过上面我们的报表可以看出来,我们的报表是有三行表头的。所以我们依次为它增加三行表头。
(10)我们增加第二行的时候,一定要右击第一行进行添加,以此类推。因为逻辑上来看,第二行确实是在第一行后面的。
对了,插一句,在实用程序中可以打开字段列表。这样我们就可以清晰地看到SFLIGHT这张表中有哪些字段啦。
(11)到这里,我们就添加完所有行啦
(12)下面我们为每一行中的每一列增加文本。
要注意一下,日期是需要根据本地时间来的,不可以写死。其他表头信息都是直接写死就可以啦。
我们依然是给这个时间列创建文本。
然后点击常规属性一栏,输入获取时间的代码,给它动态获取时间。
其他几列的话,这样写死就可以。
(13)到这里我们的表头就已经做好啦。总共是三行表头。
(14)下面我们为主要区域(即我们的数据行部分)增加一行,并为行中的每一列都增加文本。方法同表头添加行的方法相同,不进行赘述。
只是赋值的时候要注意,因为这里的数据都是动态从外部传过来的,所以肯定不能写死,要和刚才的时间列一样进行动态赋值。赋值方法如下图。格式是:&形参名-字段名&
(15)到这里我们的报表就做完了。下面我们来运行一下看一下效果。
这样,就终于可以看到我们丑丑的Demo报表啦。这里是不会展示数据的,因为前面我们已经说过了,这报表只是一个模板,它定义了形参,我们要在可执行程序中调用报表并传入实参,这样才可以显示数据。
二:编写可执行程序来调用这个报表。
(1)首先,我们把刚才报表生成的模块名称记下来,因为在代码中要通过这个名字来调用报表。
(2)在事务栏中输入SE38进入写程序代码的界面。
因为是测试环境随便写个测试代码,所以直接选择本地对象就可以啦。(开发环境要看具体环境)
(3)上代码,下面我们一点一点慢慢分析。
*&---------------------------------------------------------------------*
*& Report Z_TEST3
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_TEST3 NO STANDARD PAGE HEADING LINE-SIZE 150
MESSAGE-ID ZBSUN.
DATA:
ZD_FLIGHT LIKE STANDARD TABLE OF SFLIGHT.
DATA:
FM_NAME TYPE RS38L_FNAM.
START-OF-SELECTION.
SELECT *
INTO TABLE ZD_FLIGHT
FROM SFLIGHT.
IF SY-SUBRC <> 0.
MESSAGE E001 WITH 'NO DATA'.
ENDIF.
END-OF-SELECTION.
fm_name = '/1BCDWB/SF00000061'.
CALL FUNCTION fm_name
TABLES
ZLT_1 = ZD_FLIGHT
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5 .
IF SY-SUBRC <> 0.
ENDIF.
(4)剖析代码
(5)大工告成,下面我们执行以下这段代码。康康效果
(6)效果图就是这个样子啦。虽然它很丑,但是我们不要嫌弃它哦。
(三)到这里一个简单的SmartForms示例就算是完成啦。大家有什么没看懂的或者我说的有什么错误的地方,可以评论在下方哦。欢迎前来交流。
都看完啦,点个赞呗。
文章来自于网络,如果侵犯了您的权益,请联系站长删除!