SAP 的单据打印类型开发主要分为:ScriptForm、SMARTFORMS、AdobeForm.
下面就这三个不同代际的打印技术做下总结:
一、ScriptForm
ScriptForm 常用于系统自带的单据打印模板,较早版本的ECC或国外企业相对使用比较多。相比较其他类型的单据格式,开发友好程度低,难度偏大,因为帮助文档以及相关资料较少,需要自己摸索和验证。
常用T-CODE
SE71 SAPscript 格式 (创建、修改、显示 SCRIPT表单)
SE78 表格图形管理 (管理图片)
SO10 SAPscript:标准文本 (管理统一的文本)
NACE WFMC:初始定制屏幕 ( 集成到标准单据输出的配置 )
Script表单介绍
SAP SCRIPT 表单主要分为页、窗口、页窗口、段落格式、字符格式。
页数主要用于配置表单页分类。
窗口显示表单所有窗口信息,其中MAIN窗口可以跨页
页窗口设置本页所有窗口及其位置(菜单中设置 -> 格式绘制器 可预览位置)
段落格式控制输出的对齐方式、行间距,也可以设置字体,制表符
(制表符设置可以精细控制每一行的空格间隔,很重要)
字符格式可设置字体、大小、粗细、斜体、下划线
(这里和段落格式中字体设置有重复,简单表单可以合并到段落格式)
系统中有大量标准SCRIPTFORM 可供参考,如销售订单打印程序配置。
(使用T-CODE: NACE , 选中 V1 ,点击 "输出类型" )
( 选中 PNST ,双击 "处理程序" )
(这里查看调用程序、例程及表单,其中FORM 子程序就是 例程,表单就是SCRIPT表单)
(这里可以参考调用程序标准语法,查看标准script 表单的写法规则,Demo是最好的老师)
SCRIPT表单开发常识
1、变量尽量在调用程序中定义,全局变量在SCRIPT表单可以直接用
2、自定义逻辑尽量在调用程序中完成,表单可以通过INCLUDE程序调用逻辑赋值,更新麻烦
3、新增打印尽量避免使用,改用smart表单或PDF
文章推荐
扫盲文章:SAP SCRIPTFORM 操作手册
大神详解:SAPscript Forms 教程
二、SMARTFORMS
SMARTFROM,即智能表单,是SAP表单开发中最常见的一种,基本可以覆盖大部分打印需求,包括标签打印。熟悉SCRIPT表单开发的朋友就会知道,SMART表单是SCRIPT表单的升级版,开发界面更加优化、数据传输更规范、编程语法更友好,调用更方便,同时也集成了SCRIPT表单的一些特性。SMART表单虽然控件比较少,但是可灵活运用,可化腐朽为神奇,挑战不可能。
常用T-CODE
SMARTFORMS SAP 智能表格 (创建、修改、显示 SMART表单、样式、文本模块)
SMARTSTYLES SAP Smart Styles (创建、修改、显示 SMART 样式)
SE78 表格图形管理 (管理图片)
SE73 SAPscript 字体维护 (可定义二维码和条形码)
SO10 SAPscript:标准文本 (管理统一的文本)
NACE WFMC:初始定制屏幕 ( 集成到标准单据输出的配置,细节见上面 )
SPAD 假脱机管理 (常用配置打印设备、页格式等)
SMART表单介绍
(已标准SF:SF_XSF_DEMO1 为例)
全局设置
1、表格属性
显示基本SF属性,设置 翻译语言、页格式、样式
2、表格接口
导入 页签:设置打印属性,如Control属性、output 属性、User Settings; 还有自定义表单抬头结构、变量等
导出 页签:设置输出属性
表 页签:全局内表,用户数据内外交互,常用于接收ITEM内表信息
例外 页签:定义异常
3、全局定义
全局数据 页签:定义全局结构、内表、变量等
类型 页签:自定义类型结构,用于参考创建结构、内表
字段符号 页签:暂无使用过
初始化 页签:
格式化程序 页签:
货币/数量字段 页签:设置货币/数量字段参考格式
页和窗口(主要控件)
页控件
需明确 横向还是纵向 (其他默认即可)
(根据需求决定几页,一般首页和其他页 即两页,涉及自动跳转或强制跳转。)
窗口控件
主要作用是设置窗口类型及大小位置。
常规页签:窗口类型,主窗口(每页只能一个,可自动跨页),次窗口即常规窗口。
输出选项页签:设置窗口大小及位置,边框及底纹。
条件页签:可根据字段值动态控制显隐 及其他附加设置
(注意:窗口复制到不同页,可改位置及大小,但是增删里面控件,因为会同时修改。)
模板控件
主要作用是规范文本输出,尤其是同行多字段的情况,有固定的高和宽。
模板页签:设置行及列的高和宽,设置单元格边框及底纹
输出选项页签:设置样式和边框(基本不用)
条件页签:可根据字段值动态控制显隐 及其他附加设置
表控件
表格输出,专门处理内表数据展示,仅用于主窗口,自动换行,自动跨页。
表页签:设置行和列的宽,单元格边框和底纹。(一般需要设置表头行、item行、脚标行)
数据页签:设置LOOP循环及其WHERE条件,有内表转为行数据
计算页签:预定义平均值、统计数量、总计方法
输出选项页签:设置样式
条件页签:可根据字段值动态控制显隐 及其他附加设置
(表头行用于显示列名称,item行用于显示item数据,脚标行用户显示统计数据或说明。)
文本控件
主要用户展示文本或条码,同时设置文本段落格式和字符格式。
常规属性页签:设置文本类型,文本信息及其段落格式,字符格式。(详细解释)
文本类型 | 解释 |
动态文本 | 显示完整表类型 |
文本元素 | 输入字符、字段变量 |
包含文本 | 长文本显示(SO10显示) |
文本模块 | 统一预定义的文本(其他SMART表单可用) |
字符格式作用 |
字体、大小、粗细、斜体、下划线、颜色 |
二维码或条形码 |
Web属性页签:设置Web页交互控件,比如按钮、下拉框
输出选项页签:设置样式和边框(基本不用)
条件页签:可根据字段值动态控制显隐 及其他附加设置
循环控件
处理内表数据不过根据需求设置LOOP循环及输出
数据页签:设置LOOP循环及其WHERE条件,有内表转为行数据
计算页签:预定义平均值、统计数量、总计方法
输出选项页签:设置样式
条件页签:可根据字段值动态控制显隐 及其他附加设置
程序行控件
根据需求穿插程序逻辑,一般用于统计计算或判断标识逻辑
常规属性页签:设置输入输出参数,写程序逻辑
条件页签:可根据字段值动态控制显隐 及其他附加设置
命令控件
常用于强制换页
常规属性页签:设置跳转目标页及其他控制设置
输出选项页签:设置控件位置
条件页签:可根据字段值动态控制显隐 及其他附加设置
可选控件
类似于IF判断,根据条件控制显示信息
常规属性页签:设置节点条件,满足就走TURE,不满足就走FALSE
输出选项页签:设置控件位置
条件页签:可根据字段值动态控制显隐 及其他附加设置
图形控件
常用于显示LOG等图片
常规属性页签:设置图片属性(SE78中上传图片)
条件页签:可根据字段值动态控制显隐 及其他附加设置
开发注意事项
1、打印需求第一要义就是需求明确,越细越好,否则会反复修改到无语
2、常见注意点:页格式、横向或纵向、字体、列表字段控制、左右两边间距等
3、页控制:第一页和第二页布局,一般就是第二页抬头有变化,其他需求可能要复杂了
4、SMART表单复制通过导出、导入实现
5、类似凭证打印可以通过 SSF_OPEN、SSF_CLOSE 控制
6、字符输出特殊控制,常用的如:&symbol (ZC)&,不显示前导0和空格
&symbol& 括号中,小写字母为变量
&symbol (n)& 只显示前N位
&symbol (S)& 忽略正负号
&symbol (<)& 符号在左边
&symbol (>)& 符号在右边
&symbol (Z)& 不输出前导零
&symbol (C)& 空格压缩去空格(留一个)
&symbol (.n)& 显示n 位的小数位
&symbol (T)& 忽略千位分隔符
&symbol (En)& 浮点数的幂指数为n
&symbol (nR)& n位显示,居右
&symbol (Ff)& fill character,用f 填充字段至完整位数显示
&symbol (I)& 如果该字段是INITIAL,不输出
&symbol (K)& 禁止系统类型转换
&symbol+N& 偏移
&symbol(R)& 右对齐
7、打印输出控制
gs_output_option-tdimmed = 'X'. "开启立即打印
gs_output_option-tddelete = 'X'. "打印完后断开设置连接,清空打印内容缓存
gs_output_option-tdnoprint = 'X'. "不显示“打印”按钮
gs_control_param-no_dialog = 'X'. "不显示选择打印对话框
gs_control_param-preview = 'X'. "打印预览gs_output_option-tddest = 'VS'. "打印输出设备
8、小技巧:打印预览时PDF导出。(在预览界面的命令框中输入 PDF! 回车后自动导出PDF)
文章推荐
2、页格式设置、创建样式、修改默认文本编辑器、图片使用、二维码
4、自动生成PDF,作为附件发送邮件(待补充)
5、添加特殊符号功能
方块通过模板单元格边框实现,里面的符号通过插入特殊符号实现(最终实现动态控制)
三、AdobeForm
Adobe From 又称为PDF FROM 是SAP的一种表单生成技术,相比较Sap Script From 与 Smartforms 其优点更加灵活方便开发。功能设计上编辑模式进行了拆分,接口设计与样式设计分为两块。
从功能上讲,SAP ABAP系统与Adobe Forms集成,使你能够创建可交互的PDF表单。你可以使用Adobe Form Designer创建包含表单字段、复选框、下拉框等交互元素的表单。然后,使用ABAP代码将数据填充到表单中,并将其导出为PDF格式。当然,script 和 smart表单也可以转化成PDF,但是功能没那么强大。
SAP官方测试表单(不迷路):FP_TEST*
常用T-CODE
SFP 表格构建器
Adobe表单介绍
(以标准表单:SD_SDOC_FORM01,接口(界面):SDOC_INTERFACE 为例)
基本常识:
接口(界面)定义传入传出结构及必要的全局变量
Form(表单) 负责 绑定interface 并 绘制布局(Layout)
所以,我们优先完成接口(界面)的定义,然后在表单中引用并绑定到对应的控件中。
接口(界面)介绍
导入、导出、全局定义和初始化功能一致,可参考SMART表单全局设置的介绍。
表单(Form)介绍
属性
填写描述,选择布局类型和 接口(界面)绑定。
标准布局 | 适用于打印,发送PDF邮件,不适用于Web dynpro |
ZCI layout | 适用于Web dynpro 的PDF 表单 没有启用ActiveX |
xACF layout | 适用于Web dynpro 的PDF 表单 浏览器启用了ActiveX |
未知类型格式 | 适用于 sap netweaver |
上下文
完成 接口(界面)绑定后,在上下文中显示并可拖拉到右侧,可直接在布局中绑定。
布局
通过布局界面,简单分为四块:菜单功能(上部)、层次结构(左侧)、视图配置(中间)、控件配置(右侧)
解释:
Master Page:母版功能,每个表单设计都至少包含一个Adobe lifecycle designer 自动创建的母版页。(标准案例严格按照设计,母版仅用于整体布局,建议参考)
Body Page: 单页,每个body page 从 master page上获得 页大小和页方向。
开发注意事项
1、通过Data View 字段或表拖拽可快速创建控件,自动完成绑定
2、Body Page,应该选择Flowed 浮动,因为是动态的
3、遇到布局里显示异常,重置下即可。(Palettes->Workspace->Reset Palettes Locations)
4、有How to 指导教程(官方文档,不迷路)和控件库(自由发挥,直接拖拽)
5、ABAP 调用代码Demo( FP_JOB_OPEN、FP_JOB_CLOSE)
CALL FUNCTION 'FP_JOB_OPEN'
CHANGING
ie_outputparams = fp_outputparams
EXCEPTIONS
cancel = 1
usage_error = 2
system_error = 3
internal_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
Endif.
TRY.
CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
EXPORTING
i_name = form_name
IMPORTING
e_funcname = fm_name.
CATCH cx_root INTO gv_w_cx_root.
lv_mesg = gv_w_cx_root->get_text( ).
MESSAGE lv_mesg TYPE 'E'.
ENDTRY.
CALL FUNCTION fm_name
EXPORTING
/1bcdwb/docparams = fp_docparams
SLS_PRT_COM = fp_SLS_PRT_COM
IMPORTING
/1bcdwb/formoutput = fp_form_output
EXCEPTIONS
usage_error
=1
system_error
=2
internal_error
=3.
IF sy-subrc <> 0.
* <error handling>
MESSAGE ID 'ZV_SAP1' TYPE 'E' NUMBER 999 WITH
'Adobe function errored out; RC='(251) sy-subrc ##TEXT_POOL.
ENDIF.
CALL FUNCTION 'FP_JOB_CLOSE'
IMPORTING
e_result = fp_result
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc = 0.
IF nast-nacha = '7' OR ( nast-nacha = '5' AND nast-anzal = '0' )
OR p_mail = 'X'.
PERFORM external_send_email.
ELSEIF nast-nacha = 1 .
retcode = 0.
ENDIF.
ELSE.
MESSAGE ID 'ZV_SAP1' TYPE 'E' NUMBER 999 WITH
'Job (spool) close failed; RC='(250) sy-subrc ##TEXT_POOL.
ENDIF.
文章案例推荐
1、简单Demo案例练手:Adobe Form创建教程
2、入门案例:Adobe From(PDF From)入门 及条码
3、WebDynpro for ABAP中AdobeForm 开发(待补充)