一、SmartForms 是什么
SmartForms 是 SAP 从 4.6C 起推出的图形化表单设计工具,用于替代老旧的 SAPScript,用来制作发票、采购订单、交货单、工资条等可打印 / 可导出(PDF / 邮件)的业务单据。
- 事务码:SMARTFORMS(设计表单)、SMARTSTYLES(定义样式:字体、段落、条码)。
- 核心理念:可视化拖拽 + 少量代码 + 激活生成函数模块。
- 输出介质:打印机、传真、PDF、邮件、XML。

-
表单
- 创建 Smartforms 及相关对象属性设置
-
样式
- 指定 FORM 中的文本属性
- 字体 / 颜色 / 大小等
-
文本模块
- 很多对象、文本、消息、提示内容都可以预先设定,可以复用的文本模块多在此设定
二、核心架构与组件

点击创建后可以看到有三个编辑框
-
1.Navigation Menu(导航菜单)
- Smart Form 开发的 Form element(表单元素)、节点,在此显示,在窗口左边显示。
-
2.Maintenance Frame(维护框架)
- 选择的节点属性在此设定,在窗口的中间部分显示。
-
3.Form Painter(表单绘制器)
- 点击
Form Painter按钮出现 Form Painter,在窗口的最右边,显示 windows(窗口)和 graphics(图形)的位置、大小、布局。
- 点击

- 表格属性:主要是这个窗体的一般属性和输出选择。
- 表格接口:这个属性很重要!它主要用来描述这个SMARTFORM的接口属性,比如IMPORT、EXPORT、TABLES、EXCEPTION。当我们做好了一个SMARTFOR以后,如果想从ABAP程序中调用这个FORM的话,就会用到这些接口来传递参数,这个将在下面详细说明。
全局定义:主要用来定义一些全局的数据,还有FIELD SYMBOLS、初始化

三、核心架构与组件
每个选项说明:
| 选项 | 说明 |
|---|---|
| 页面 | 不同的页面允许维护不同的格式 |
| 窗体 | 包括主窗体和子窗体,后续节点包括 Window 和 Page 外的所有节点 |
| 图形 | 输出页面中的图片 |
| 地址 | 包含数据库中的标准地址 |
| 模板 | 输出包含静态数据的表格(固定行列) |
| 表 | 输出包含应用数据的表格(可自动扩展) |
| 命令 | 命令操作(如分页) |
| 文件夹 | 将多个后续节点组合为一个组 |
最近的做的小Demo

手工画线确实体力活了,三个窗口主要对应表头、页脚、主窗口

主窗口-LOOP循环到全局变量工作区,创建文本用工作区赋值

表画了⑤列,则创建表头和主要区域会自动生成五列

接下来就是代码了:
TABLES:ekpo,ekko.
DATA: lv_formname TYPE tdsfname, " Smart Forms 名称
lv_fmname TYPE rs38l_fnam, " 实际函数模块名
ls_control TYPE ssfctrlop, " 控制参数
ls_outputopt TYPE ssfcompop. " 输出选项
DATA gt_data TYPE zkj_wl_t.
DATA gs_head TYPE zkj_sm_head.
PARAMETERS p_ebeln TYPE ekpo-ebeln.
START-OF-SELECTION.
p_ebeln = |{ p_ebeln ALPHA = IN }|.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF gs_head FROM ekko WHERE ebeln = p_ebeln.
SELECT ekko~ebeln
ekpo~ebelp
ekpo~matnr
ekpo~menge
makt~maktx
FROM ekpo
LEFT JOIN ekko ON ekpo~ebeln = ekko~ebeln
LEFT JOIN makt ON ekpo~matnr = makt~matnr
INTO CORRESPONDING FIELDS OF TABLE gt_data " 关键改动
WHERE ekpo~ebeln = p_ebeln.
* ========== 1. 根据 Smart Forms 名称获取函数模块名称 ==========
lv_formname = 'ZKJ_SMARTFORMS'. " 改成你自己的 Smart Forms 名称
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lv_formname
IMPORTING
fm_name = lv_fmname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'Smart Forms 不存在,请检查名称' TYPE 'E'.
ENDIF.
* ========== 2. 设置控制参数 ==========
" ls_control-no_dialog = 'X'. " 不弹出打印对话框
" ls_control-preview = 'X'. " 仅预览,不直接打印
* ========== 3. 打开 Smart Forms 输出 ==========
" CALL FUNCTION 'SSF_OPEN'
" EXPORTING
" control_parameters = ls_control.
* ========== 4. 调用 Smart Forms 函数模块 ==========
CALL FUNCTION lv_fmname
EXPORTING
" control_parameters = ls_control
" output_options = ls_outputopt
" user_settings = space " 重要:不读取用户默认设置
gw_head = gs_head " 抬头参数(按你的接口命名调整)
TABLES
t_data = gt_data " 行项参数(按你的接口命名调整)
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
* ========== 5. 关闭 Smart Forms 输出 ==========
" CALL FUNCTION 'SSF_CLOSE'.
四、注意点
在使用数量的时候,会报错,要定义全局变量替换。
2582

被折叠的 条评论
为什么被折叠?



