ABAP Smartform实例

         Smartform网上有很详细的例子,不过使用的版本都有点老了,有一些界面、操作不一样。所以写下来,特别会详细讲一些版本区别。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了。代码:

*&---------------------------------------------------------------------*
*& Report  ZLEARNING7_SMARTFORM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZLEARNING7_SMARTFORM.
DATA: ZLT_FLIGHT LIKE STANDARD TABLE OF ZLT_FLIGHT WITH HEADER LINE.
DATA: L_OUTSET TYPE SSFCOMPOP.
SELECT *
  INTO CORRESPONDING FIELDS OF TABLE ZLT_FLIGHT
  FROM SFLIGHT
  AS A INNER JOIN SCARR AS B
  ON A~CARRID = B~CARRID.

DELETE ADJACENT DUPLICATES FROM ZLT_FLIGHT.
*DATA: ctrl_param TYPE ssfctrlop,
*      out_option TYPE ssfcompop.
*
*ctrl_param-preview = 'X'.
*out_option-tddest = 'LP01'. " in your case it is LOCL
*ctrl_param-no_dialog = 'X'.
L_OUTSET-TDDEST = 'CODE'.
L_OUTSET-TDIMMED = 'X'.
L_OUTSET-TDARMOD = 1.
CALL FUNCTION '/1BCDWB/SF00000026'

EXPORTING
  OUTPUT_OPTIONS = L_OUTSET
  USER_SETTINGS = ''
*EXPORTING
*    control_parameters = ctrl_param
*    output_options     = out_option
*    user_settings      = space
  TABLES
    ZLT_FLIGHT                 = ZLT_FLIGHT.
          .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.


 


         运行后会弹出对话框,设备输入lp01,点击打印预览,就可以出来结果了。还可以设置不弹出对话框直接预览,方法是代码里注释掉的部分。

 

 

最后,可以通过实际的form名来实现报表的调用,不用smartform直接执行生成的funciton module名来调用。大概方法就是调用系统函数“SSF_FUNCTION_MODULE_NAME“来实现,这里就不详细叙述了。

  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值