SAP ABAP smartforms 创建并实现调用源码(上)
smartforms 入门详见上一篇博文。
一:报表程序调用 smartforms
示例:报表选中一行,将这行机相关数据通过表单打印出来。实际例子:采购订单表,销售订单。
调用核心代码:
-
根据SmartForm 名称获得Form的 Function Names
call function ‘SSF_FUNCTION_MODULE_NAME’
exporting
formname = uv_name
importing
fm_name = gv_fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3. -
传入参数
call function gv_fm_name
exporting
control_parameters = ls_ssfctrlop
ls_student = gs_student
tables
it_student = it_student
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
二:进阶功能
1.初始化变量
当变量是调用 smartforms 后需要计算或转换的,可以先在全局数据定义一个变量,在初始化页写代码赋值。例:打印的列表计算总和。
2.在se11中参考过了货币和数字单位字段,也需要在smartforms中的全局定义中做参考。否则报错消息编号601:参考字段&1在表格中未知 的错误。数量选择数据类型 ‘QUAN’ 货币选择数据类型 ‘CURR’。
3.动态表格行数超过一页打印纸,需要转到下一页打印并且其他部分布局和内容不变的情况,在表格下方右键新建命令。
PS:一定要设置条件页(仅在页为第一页)和常规属性(转到新页第二页)。
除了命令所在页,后续还有几页就创建几个命令。设置的所在页和转到下一页依次累加。
4.当前页码/总页码
&SFSY-PAGE&/&SFSY-JOBPAGES&
5.根据判断条件决定文本显示。在条件栏输入对应关系,下图的例子表示当这个字段是’张三’的时候就显示,否则不显示。文本的话要用引号。
三:全部代码
*&---------------------------------------------------------------------*
*& Report ZTEST_EXPORT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_EXPORT.
*----------------------------------------------------------------------*
* Type-pools/定义类型池
*----------------------------------------------------------------------*
TYPE-POOLS: slis.
*----------------------------------------------------------------------*
* Tables/声明数据库表
*----------------------------------------------------------------------*
TABLES:ZMMTEST.
*----------------------------------------------------------------------*
* Type/自定义类型
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_alv,
sel type char1, "是否被选择
id type zmmtest-id,
name type zmmtest-name,
age type zmmtest-age,
sex type zmmtest-sex,
hobby type zmmtest-hobby,
"include TYPE zmmtest,
times type numc4, "打印次数
END OF ty_alv.
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
gs_alv TYPE ty_alv,
gt_print type standard table of ty_alv,
gs_student type zmmtest,
it_student type TABLE OF zmmtest.
DATA:gv_fm_name TYPE rs38l_fnam.
*-------------------------------------*
* Define the Macros/定义
*----------------------------------------------------------------------*
DEFINE set_fieldcat.
CLEAR gs_fcat_lvc .
gs_fcat_lvc-fieldname = &1."内表的字段
gs_fcat_lvc-outputlen = &2."输出长度
gs_fcat_lvc-scrtext_l = &3."在ALV里面显示的名字
gs_fcat_lvc-just = &4."水平对齐方式,L左对齐,R右对齐。
gs_fcat_lvc-no_zero = &5."去除前导零
APPEND gs_fcat_lvc TO gt_fcat_lvc .
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* 声明ALV对象
*----------------------------------------------------------------------*
DATA:gs_layout_lvc TYPE lvc_s_layo,
gt_fcat_lvc TYPE lvc_t_fcat,
gs_fcat_lvc TYPE lvc_s_fcat.
*------------------------------------------------------------