1、SAP 自学笔记 系列Page 1 of 16SAP 新 建 打 印 格 式SAP 默认为列表打印提供了 X_65_132、X _65_255、X _58_170、X _65_80、X_90_120 等多种打印格式,其中前三种是 A4 纸横向打印,而后两种是纵向打 印 。 我 们 一 般 使 用 纵 向 打 印 比 较 多 , 但 是 我 们 也 发 现 X_65_80 用 的 是 四 号 字(12pt) , 有时候觉得有点大, 而 X_90_120 用的是六号字 (大约是 8pt) , 又太小 了,怎么没有一个折中的字体格式呢?S AP 不提供,我们只好自己来建了。一、SP AD,假脱机管理
2、首先, 输入事务码 SPAD(E CC5 的菜单路径是 “工具 CCMSPrintSpool Administration”) ,假脱机管理。也就是管理跟打印相关的基础设置。界面如下:为了设置打印格式,我们需要点击“完全管理”按钮。Page 2 of 16SAP 自学笔记 系列 设置列表的打印格式可以看到, “完全管理”比“简单管理”多出了三个选项卡,分别是“设备类型” 、 “字符集” 和 “管理员” 。 顺便说一句, “扩展管理” 仅比 “简单管理” 多 一个“管理员”选项卡,而比“完全管理”少了“设备类型”和“字符集” 。 对于每个选项卡中的功能,这里就不一一说明了,因为我还没全部研究过。
3、 接下来点击“设备类型”选项卡,出现如下界面:32在 “设备类型” 选项卡种, 有 “设备类型” 、 “打印控制” 、 “格式类型” 、 “页 格式” 、 “封面文本” 等几个按钮, 分别进行相应类别信息的管理。 它们的管理顺 序基本上是越下面越接近物理层,越上面越接近逻辑层。具体来说: “页 格 式 ”SAP 自学笔记 系列 设置列表的打印格式Page 3 of 16对 应 于 最 基 本 的 纸 张 大 小 和 方 向 , 如 A4、 B5、 信 封 、 连 续 纸 等 等 ; “格式类型”对 应 纸 张 中 显 示 多 少 行 多 少 列 文 本 或 用 于 哪 种 形 式 的 打 印
4、( 是 列 表 、 SAPscript 或其他) ; “打印控制”用于定义控制打印的基本命令,如每英寸多少行多少列、 换行换页等等命令; “设备类型” 用于定义 SAP 系统中所能控制的打印机, 以及 对每个具体打印机所使用的格式类型、打印控制命令等。 “封面文本”我没有用 到过,不知道具体在什么情况下使用。顺便说一下应用工具栏的“显示 ”和“更改 ”按 钮 , 它 是 一 个 双 态 互 相 转 换 的 按 钮 。 当 屏 幕 显 示 “更 改 ”按 钮 时 , 系 统 处 于 显 示 状 态 , 这 时 选 择 任何功能都会进出它的查看状态, 不显示相关的修改按钮; 而屏幕显示 “显示 ”
5、按钮时,系统处于更改状态,这时选择功能就会进入其更改状态。下面我们根据需要依次定义格式类型和设备类型。二、格式类型管理点击 “格式类型” 按钮, 进入格式类型清单 (也可以在它后面的文本框里输 入某个格式类型,直接进入该格式类型的管理界面) ,列出所有的格式类型,如 下图:SAP 自学笔记 系列 设置列表的打印格式Page 4 of 16这 里 我 们 可 以 选 择 某 行 双 击 ( 或 者 单 击 选 中 行 , 再 点 上 面 的 “选 择 ”按钮 ) ,进入该格式类型的明细界面。如果要创建新的格式类型或修改现有格式, 需要先点击“更改 ”按钮,这时工具栏会扩充成下面的样子。可以看到,
6、 这时比最初多了三个按钮, 分别是 “删除 ”、 “创建 ”和 “使 用 模 版 创 建 ”。 删 除 和 创 建 就 不 用 说 了 , “使 用 模 版 创 建 ”这 个 功 能 实 际 就 相当于复制, 首先要选中某个格式类型行, 然后按 “使用模版创建” 按钮, 就会把该格式类型的信息都带到创建页,只是需要用户输入一个新的名字。 我们还是从头开始创建,点“创建”按钮,出现如下屏幕:首先需要输入格式类型的名称,我现在要创建一个 72 行 100 列的格式,所 以命名为“Z _72_100”,然后选择格式类型,默认是“SAPscript 的 格 式 类 型 ”, 我们为 List 创建格式
7、,不能选它,要选择“A BAP 列表的格式类型” ,如下图:SAP 自学笔记 系列 设置列表的打印格式Page 5 of 16选中 “ABAP 列表的格式类型 ”后, 会自动在下面出现行数和列数的输入框,而纸张的方向则隐藏了起来,因为对于 ABAP 列表的格式类型,纸张方向是自 动选择的。选择后的屏幕如下:页格式这里就选择 “ANY”, 不需要指定页格式 (其实是有一个假定的, 只 能打印到 A4 纸上, 这个在后面输出设备的设置里会说明) 。 行数填 “72”, 列 数 填 “100”(这里的 100 是英文字符数, 如果显示中文字符的话, 只能显示 50 个, 这点要尤其注意) , 根据
8、SAP 联机帮助的说明, 如果使用下列几种打印机类型的 话(H PLJ4000, KYOFS170, and POST2) ,就选中“列出驱动器” ,否则就不选, 不过我看 SAP 自带的格式中也都选中了这个选项,我们这里也选择它。最后填 写注释,也就是对这个格式类型的详细说明。SAP 自学笔记 系列 设置列表的打印格式Page 6 of 16如果在前面选中了 “列出驱动器” 并且回车或保存, 菜单栏按钮中就会出现“列出驱动程序属性 ”按钮,选择这个按钮,就打开下面的对话框:其中的“方向”就是纸张方向, “形式”是翻译不合理,实际就是纵向,另 一个选项是“横放” 。而“列表边距模式”是让你可以
9、选择打印范围,如果选择 默 认 的 “MAXIMUM: 使 用 最 大 可 打 印 面 ”的 话 , 就 使 用 打 印 机 能 够 打 印 的 最 大 幅 面 , 如 果 选 择 “CUSTOM: 注 释 列 表 边 距 ”则 会 出 现 四 边 边 距 的 输 入 框 , 可以在里面输入页边距。 按下面的 “定义页边距” 按钮, 也可以在上述两种边距模式间切换。选择完成后,按“继续 ”按钮返回上一屏幕。 然后按标准工具栏的 “保存” 按钮就可以保存这个格式类型了, 创建新的格式类型时需要指定开发类,如果需要传输给其他系统,还要指定传输请求。 这样, 一个新的格式类型就创建好了, 下面我们需
10、要把这个格式类型指定给打印 设备,并做一些相关设置。三、设备类型管理点击 “设备类型” 按钮, 进入设备类型清单 (也可以在它后面的文本框里输 入某个设备类型,直接进入该设备类型的管理界面) ,列出所有的设备类型,如 下图:SAP 自学笔记 系列 设置列表的打印格式Page 7 of 16大多数情况下,我们都会使用“C NSAPWIN”这种设备类型,它是 SAP 专为汉字打印所定义的一种打印设备类型, 通过 SAPgui 提供的 SAPLPD(SAP Print Daemon) 打 印 代 理 软 件 把 内 容 打 印 到 本 地 打 印 机 上 。 用 它 可 以 最 大 程 度 的 保
11、证 显示格式的一致性,无论用户本地使用何种打印机,打印出来的效果都一样。双击 “CNSAPWIN”行 (或选中改行后 按 “选择 ”按钮) , 就进入该打印 类型的详细维护界面,如下图:SAP 自学笔记 系列 设置列表的打印格式Page 8 of 16这个屏幕的基本设置都是 SAP 预设好的,不需要改变。我们接下来点“格式 ”按钮,来查看这个设备类型中包含的格式类型。接下来,按“创建 ”按钮,系统要求输入新的格式类型名称:输入我们刚才创建的格式类型 “Z_72_100”, 然后 按 “执行 ”按钮, 进入维护 格式代码窗口,如下图:SAP 自学笔记 系列 设置列表的打印格式Page 9 of
12、16可 以 看 到 系 统 列 出 了 各 种 操 作 , 前 面 的 状 态 是 灰 色 的 “ ”, 表 示 该 操 作 中 没 有 控 制 代 码 , 而 如 果 状 态 变 成 绿 色 的 “ ”, 就 说 明 该 操 作 中 已 经 编 写 了 控 制 代码。所谓控制代码,就是 SAP 系统在调用这个打印格式类型时需要执行的一 些控制打印行为的代码,后面我们还会详细分析。编写控制代码有两种方式, 一种是双击某个操作, 进入它的编写界面, 手工 输入代码,很明显,这种方法需要对控制代码非常熟悉才行;第二种就简单了, SAP 提供了复制的功能, 可以直接把另一个格式类型中现有的代码复制过
13、来。 我 们先采用第二种方法。在 应 用 工 具 栏 上 有 两 个 按 钮 “拷 贝 格 式 ”和 “拷 贝 动 作 ”, 按 下 后都会出现下图的屏幕。 区别是, 拷贝格式是把另一个格式类型的所有信息 (除 了名称) 都复制过来; 而拷贝动作 (动作和操作在这里是一样的, 只是对 Actions这个单词的翻译不同) 则需要先选择某个操作, 系统只把源格式类型的那个操作SAP 自学笔记 系列 设置列表的打印格式Page 10 of 16中的代码复制过来,而其他信息都不变。我 们 在 这 里 从 简 , 只 用 “拷 贝 格 式 ”就 行 了 。 在 这 个 复 制 窗 口 中 , 还 有 两
14、个按钮, 分别 是 “复制参考 ”和 “创建内容 ”, 它们用在复制操作上。 复制参考是直接把源格式类型的操作代码原样复制到当前格式类型的操作代码中,而 创 建 内 容 则 是 在 当 前 格 式 类 型 的 操 作 代 码 中 包 含 对 源 格 式 类 型 的 操 作 代 码 的 引用(例如:i,i 表示 引 用,表示引用 的 源 , CNSAPWIN 是 指源设备 类 型,X_90 _120 是指源格 式类型, LEAVE 是指源 操作 ) 。 使 用 引用就会在源操作和目标操作之间建立一个关联关系, 所有对源操作做的代码修 改都会应用到目标操作中, 当你确定几个格式类型必须保持操作完全
15、一致时, 就 用这种方式。 而如果需要两个格式类型互相独立的话, 则应该用复制参考的形式 创建代码。下面说明一些常用的控制代码的意义,注意,控制命令区分大小写。1、在打印初始化中(操作名称 SETUP)# CNSAPWIN X_72_100# #是注 释 的开始, 这 个是页头 说 明# SAPWIN indicatior makes it possible to send via berkeley protocol# 这 个 也 不 知 道 具 体 意 义 , 从 英 文 说 明 上 来 看 , e是 控 制 字 符 , %SAPWIN%是 一个特定 标 识。e%SAPWIN%# chang
16、e WinCharSet to 134# 修改字 符 集为GB23 12,没有找 到 在哪里设 置 ,W表示 设 置字符集eW134;# set font name(SimSun)# 设置字 体 名称, 这个 简单, SimSun就是宋 体 ,大概 SimHei就是黑 体 了,不 过我没找 到 去哪里设 置 ,F表示 设 置字体eFSimSun;SAP 自学笔记 系列 设置列表的打印格式Page 11 of 16# set orientation(PORTRAIT)# 设置打 印 方向(P 是 纵向,L 是 横向), P表示设置 打 印方向ePP# set font size(10.0poin
17、ts)# 设 置 字 体 大 小 , 我 感 觉 数 字 就 是 字 号 乘 以 20的 值 , 比 如 10pt的 字 就 写 200, 12pt的字 就 写240。S 表 示设置字 体 大小eS200X# set vertical spacing(7.3LPI)# 设置纵 向 行距,单 位 是行每英 寸 。L表示 设 置纵向行 距el7.3;# set horizontal spacing(15.0CPI)# 设置横 向 字距,单 位 是字每英 寸 。C表示 设 置横向字 距ec15.0;# set top/left margin(1.0cm/1.5cm)# 设置上 、 左页边距 , M表
18、示设 置 边距,T 表 示上端、 L表示左端 , 不知道有 没有R表 示 右端、B 表 示下端。eMT567;eML850;2、在退出以后重置(操作名称 LEAVE)# CNSAPWIN X_90_120# No control codes!# 这里没 有 写代码3、页结束(操作名称 ENDPAGE)# f 表 示 换新页( Form feed)f4、行的结束(操作名称 ENDLINE)# n 表 示 换行(Li ne feed)# r 表 示 回车(Ca rriage return)# s 表示 空格(Sp ace character (when required at the end of
19、 a line))n由于没有找到相关说明文档, 也不知道 e 这 个 标 记 之 后 能 够 有 多 少 控 制 命 令,不过上面列出的那些都是最常用的,多数情况下也够用了。在上面的控制语句中, el 和 ec 是 比 较 重 要 而 且 最 难 设 置 的 两 个 , 由 它 们 配 合行列数就决定了实际能够打印的最大宽度,比如上面的el 设 置 值 为 7.3LPI, 而我们这个格式的行数是 72,7 2/7.39.863 英寸,约合 25 厘 米 ; 上 面 的 ec 设 置值为 15CPI,而我们的格式的字符数是 100,100/156.667 英寸,约合 16.93 厘米。我们知道一
20、张 A4 纸 的 大 小 是 长 29.7 厘米、宽 21 厘米,去除页边距和打 印机无法打印到的一些边距, 上面的设置正好符合 A4 纸的大小。 通过上面的计SAP 自学笔记 系列 设置列表的打印格式Page 12 of 16算, 大家应该明白前面第 5 页倒数第 6 行我提到过的那个假定了, 其实系统为列表打印提供的标准格式类型也都遵循这个假定。 除 了 以 “”开 头 的 常 规 控 制语 句 外 , 代 码 编 辑 器 里 面 还 可 以 直 接 输 入 文 本信息, 引用一些程序中的变量 (疑似, 参见 SAP 标准的格式类型 “X_SPOOLERR” 中 “封面” 操作代码的文本,
21、 用$ (TITLE)等显示一些估计是从程序里带出来的数据,但是我在自己创建的格式类型里这样写,没有成功) 。 上面提到的操作名称如 SETUP、L EAVE、ENDP AGE、E NDLINE 等可以在选中某个操作行后,按应用工具栏的“说明 ”按钮来查看,如下图:在编写了格式类型的控制代码并全部保存之后, 我们的格式类型就算全部设 计完成,接下来就可以在报表程序里面调用它进行打印了。四、打印格式的使用首先需要说明的是, 如果要使用上面的格式类型, 在报表程序里就应该明确 定义出列表的行数和列数, 而且最好跟所要使用的格式类型完全一致, 这样便于 系统在打印时自动选择合适的打印格式。下面说说打
22、印设置, 在一个列表界面, 按系统工具栏上的打印按钮, 就会打 开标准打印屏幕,如下图:SAP 自学笔记 系列 设置列表的打印格式Page 13 of 16如果输出设备为空或者不是 localPrint 的话,就应该改成 localPrint,一般来说,都会把 localPrint 配 置 成 使 用 CNSAPWIN 这种设备类型,如果不是的话, 请在第一部分提到的 SPAD 事务码中,选择“设备 /服务器”选项卡的“输出设 备”按钮来调整设置,设置方法比较简单,这里就不再多说了。然后点击“属性”按钮,打开打印机属性设置屏幕,如下图:从这里可以看出当前所有的打印设置, 其中的格式化就是系统自
23、动匹配获得的格式类型。如果格式化栏不是我们前面创建的 Z_72_100 这种格式,就要修改 它,双击格式化行,该屏幕下方变成如下的样子:SAP 自学笔记 系列 设置列表的打印格式Page 14 of 16然后利用格式化栏的 F4 搜索帮助,打开下面的可用打印格式类型窗口。其中标注绿色状态灯 的, 是能够完全打印当前列表的格式; 而标注黄色状 态灯 的, 则无法完全打印当前列表, 也就是说打印出来可能会丢失行或列。 找 到所需格式后,双击或者选中后按“选择”按钮,就选中了这个格式。有时候为了方便, 我们还可以选中 “在初始屏幕显示选定的打印参数” 复选 框,这样,标准打印屏幕就会变成下面的样子,
24、可以直接选择打印格式。选择好合适的格式之后,就可以按“继续 ”按钮执行打印了。SAP 自学笔记 系列 设置列表的打印格式Page 15 of 16附录 1:一个意外收获 用大字体打印列表标题在最初学习 ABAP 的 时 候 , 就 存 在 一 个 疑 问 , 能 否 把 WRITE 语句输出的列 表以多种不同大小的字体打印?最终未果。 就在编写本篇笔记的时候, 我却发现 了一个可以在一个列表中打印两种字体的方法, 当然, 这个方法的实现并不完美, 只能用大字体打印单行标题, 但是, 总是个小小的突破, 也就写下来跟大家共享。在我们前面看到的格式代码清单中,除了我们填写的那四个外,还有很多, 我
25、们要用的是“页首(S TRTPAGE) ”,双击它,输入下列控制代码:# set font size(18.0points)eS360X# set vertical spacing(5LPI)el5;# set horizontal spacing(10.0CPI)ec10.0;上面代码的意思是, 在一个新页开始的时候, 重新设定该页的字体大小和行 距字距, 把字体设置成 18 号、 每英寸 5 行、 每英寸 10 个字符, 如果需要的话还 可以指定一种其他字体比如黑体等。 这样的话, 每次新开一页的时候, 就会变成 大字体,这适合于打印标题。如何把字体再恢复成正常的大小, 打印内容文字呢?这
26、就需要修改一下 “行 的结束 (E NDLINE) ”的控制代码了, 也很简单, 只要再恢复原来的字体和行距 字距就可以了。# set font size(12.0points)eS240X# set vertical spacing(6.5LPI)el6.5;# set horizontal spacing(12.0CPI)ec12.0;# 千万不 要 忘记了行 结 束后的换 行 ,否则所 有 字都打到 一 行上了n相信细心的你一定注意到了, 这样只能把第一行的字体变大, 第一行结束之 后, 字体就恢复正常了, 以后每行字体也都是正常的, 而且会重复设置。 这我就 没办法了,希望你能研究出来
27、更好的办法来。SAP 自学笔记 系列 设置列表的打印格式Page 16 of 16附录 2:如何计算行间距和字间距,以及间距与字体的关系在设计一个列表打印格式时, 纸张方向、 字号、 行距、 字距、 左页边距、 上 页边距等信息都会互相制约互相影响,最终影响到一张纸上能够打印的行列数。 我们一般都是根据前面这些信息确定行列数, 也就是说, 确定格式行列的过程正 好会跟在系统中设置的顺序相反。 当然这仅仅是我自己的一个实践方法, 您也完 全可以先确定行列数再去推导应该使用的字体大小。首先需要确定的是纸张, SAP 不是字处理系统, 在文字格式设置上相对死板 一些, 不能做到 Word 等软件的随
28、意调整纸张大小和方向。 所以在设定一个打印 格式的时候, 首先要明确将来要用什么样的纸来打印, 这样就定下来最大的打印 范围,我们的例子中,要用 A4 纸纵向打印,所以宽 21 厘米,高 29.7 厘米。然后确定页边距, 我们设定上边距 1 厘米, 左边距 1.5 厘米, 这样便于装订。 SAP 还可以在功能较强的打印机上实现单双页码双面打印, 这样就需要利用奇偶 页码的打印控制命令了,这里不多说,有兴趣的可以自己研究。确定好页边距后, 就能获得实际打印的最大范围, 我们的例子中没有设定右 下边距, 但是我们假定是对称的, 这样实际打印范围是宽 211.5218 厘米, 高 29.71227.
29、7 厘米。接下来是比较麻烦的事, 要确定字号跟行距字距的关系, 我们只能一般性的 做个大致估算。如果使用 12 号字,那么行间距最多 6.5 行每英寸,实际使用中这个 6.5 已经太大,会造成行间基本没有空白,建议选择 45;字间距最多 12 字每英寸, 前面说过了, 这里是英文字符的数量。 如果思考一下就应该知道, 对 于中文的方块字, 如果字间距是行间距的两倍, 则正好是把一个汉字放在一个小 正方形里, 一般为了美观, 行间距应该更大一些 (设定数值更小) 才好。 其他大 小的字体这里就不一一说明,可以参考 SAP 自定义格式去慢慢理解。定下来字间距, 最后就可以计算行列数量了, 182.541285 列, 27.7 2.546.570.9 行, 从这个计算也可以看出, 行距太窄了, 如果行间距为 4 左右, 则跟本文的行间距差不多。通过上面的计算, 大家应该对整个页面设置的计算有了一个大致的了解, 也 可能更糊涂了,实践出真知,多练习,会有收获的。