SmartForm是sap用来设计打印单据的基于可视化的一种技术,设计好后可以在程序里调用,传参,参数一般是内表。
smartform总的来说就3个主要步骤。1,设置表格接口,就是指定该form显示哪个数据库的数据;2,设计报表头(也可以没有),就是表单的上部分,一般用来放公司logo、日期、页数这些信息。 3.设计主窗口,也就是表单显示数据的部分,主要工作就是设计表的列名和列名下面对应的表的字段。程序调用时会先在数据库中取数,然后填充到form。
事务代码:smartforms进入,可以去设计form的样式,这里就不讲了,在表格处输入一个名字创建一个表格。
进入后:
点击上方的“表格绘制器”可以显示表单,可视化。在“全局设置“->”表格接口“处定义参数ZLT_FLIGHT,关联类型是ZLT_FLIGHT,这个是自己建立的一个数据库表,这里的form就是显示zlt_flight的数据。
ZLT_FLIGHT结构如下:
在“实用程序”->“字段列表打开/关闭”可以打开字段列表,这时候可以看到zlt_flight表的字段。
表头设计就略过了。当我们创建了ZTEST_HXG_F3的时候,系统会默认的建立一个页面“%PAGE 新页面”。然后在MAIN 主窗口上点击右键,创建一个TABLE。
新建后系统会自动在table下创建3个项目:表头,主要区域,脚标。
选中table,点击细节,可以设置表行格式。这里注意表的宽度一定要大于下面行类型的各个列加起来的宽度。行类型右边的1,2,3这些是第一列第二列第三列,还有他们的长度单位。
然后点击“数据”,设计loop循环如下。就是说循环的读取表数据填充到每一行里。一般来说内部表里第一个应该是接口定义的那个变量,第二个应该在全局变量再定义一个。
表有多少列这些格式已经设计好了,现在来设计表头,也就是列名。右键表头->新建行。系统会自动的帮你在行下创建等量的cell(列)。
然后我们现在要为每一列添加上名字。选中第一个cell新列,右键新建“文本”。
如上图,画横线处输入列名,这里注意的是第一个列的“开始“一定要选”新行“。因为第一列一开始要新起一行嘛。
接下来设置第二列的列名,同上新建文本,
这里注意的是,“开始“处选择直接添加意思就是接着第一列添加该文本。后面的列同理设置成直接添加。
做完了列名,接下来要设计每一列下面该显示什么数据了,也就是table下的”主要区域“。
和前面一样,选中“主要区域“右键创建列,系统也会自动生成相应数量的cell,同理在第一个列右键新建文本,在右侧出来的界面里点击如下图画圈按钮,选择”一般属性“。
出现如下图界面,第一步和前面设置列一样,第一个列的开始要是”新行”如圈圈1,第二部,在左下角的字段名称下找到ZLT_FLIGHT,将CARRID拖动到箭头处,这样在这列就会显示这个字段的值。
到了第二个列,“开始”选择“直接添加”,拖动字段到那片空白处。后面的列也是这样设置。
实际上到了这里,一个form基本完成了,但是Smartform的输出不支持“QUAN”和”CURR”类型,这里要转换。这些都可以在Smartform内部实现(如果你们的字段不是这两个类型的,可以跳过这部分内容)。步骤如下:
1).在全局变量增加一变量LPRICE来保存PRICE转换至,类型定义为字符型:CHAR18。
2)编写代码,转换参数类型。在主要区域price那一列,选择右键创建—>流逻辑->程序行,创建转换代码。如下图:
到此已经创建完成,保存,激活,运行会生成一个funciton 模块。
在这样我们就可以在程序中调用这个form了。代码:
运行后会弹出对话框,设备输入lp01,点击打印预览,就可以出来结果了。还可以设置不弹出对话框直接预览,方法是代码里注释掉的部分。
最后,可以通过实际的form名来实现报表的调用,不用smartform直接执行生成的funciton module名来调用。大概方法就是调用系统函数“SSF_FUNCTION_MODULE_NAME“来实现,这里就不详细叙述了。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19636.html