您的当前位置:首页正文

SAP设置打印格式

2023-11-26 来源:步旅网
 SAP 自学笔记系列

SAP 新建打印格式

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),又太小 了,怎么没有一个折中的字体格式呢?SAP 不提供,我们只好自己来建了。

一、SPAD,假脱机管理

首先,输入事务码 SPAD(ECC5 的菜单路径是“工具-CCMS-Print-Spool Administration”),假脱机管理。也就是管理跟打印相关的基础设置。界面如下:

为了设置打印格式,我们需要点击“完全管理”按钮。

Page 1 of 16

SAP 自学笔记系列

设置列表的打印格式

可以看到,“完全管理”比“简单管理”多出了三个选项卡,分别是“设备

类型”、“字符集”和“管理员”。顺便说一句,“扩展管理”仅比“简单管理”多 一个“管理员”选项卡,而比“完全管理”少了“设备类型”和“字符集”。对

于每个选项卡中的功能,这里就不一一说明了,因为我还没全部研究过。 接下

来点击“设备类型”选项卡,出现如下界面:

3

2

在“设备类型”选项卡种,有“设备类型”、“打印控制”、“格式类型”、“页

格式”、“封面文本”等几个按钮,分别进行相应类别信息的管理。它们的管理顺 序基本上是越下面越接近物理层,越上面越接近逻辑层。具体来说:“页格式”

Page 2 of 16

SAP 自学笔记系列

设置列表的打印格式

对应于最基本的纸张大小和方向,如 A4、B5、信封、连续纸等等;“格式类型” 对应纸张中显示多少行多少列文本或用于哪种形式的打印(是列表、SAPscript 或其他);“打印控制”用于定义控制打印的基本命令,如每英寸多少行多少列、 换行换页等等命令;“设备类型”用于定义 SAP 系统中所能控制的打印机,以及 对每个具体打印机所使用的格式类型、打印控制命令等。“封面文本”我没有用 到过,不知道具体在什么情况下使用。

顺便说一下应用工具栏的“显示相转换的按钮。当屏幕显示“更改

”和“更改”按钮,它是一个双态互

”按钮时,系统处于显示状态,这时选择

任何功能都会进出它的查看状态,不显示相关的修改按钮;而屏幕显示“显示按钮时,系统处于更改状态,这时选择功能就会进入其更改状态。

下面我们根据需要依次定义格式类型和设备类型。

二、格式类型管理

点击“格式类型”按钮,进入格式类型清单(也可以在它后面的文本框里输 入某个格式类型,直接进入该格式类型的管理界面),列出所有的格式类型,如 下图:

Page 3 of 16

SAP 自学笔记系列

设置列表的打印格式

这里我们可以选择某行双击(或者单击选中行,再点上面的“选择”按

钮),进入该格式类型的明细界面。如果要创建新的格式类型或修改现有格式, 需要先点击“更改

”按钮,这时工具栏会扩充成下面的样子。

可以看到,这时比最初多了三个按钮,分别是“删除用模版创建

”、“创建”和“使

”。删除和创建就不用说了,“使用模版创建”这个功能实际就相

当于复制,首先要选中某个格式类型行,然后按“使用模版创建”按钮,就会把 该格式类型的信息都带到创建页,只是需要用户输入一个新的名字。 我们还是

从头开始创建,点“创建”按钮,出现如下屏幕:

首先需要输入格式类型的名称,我现在要创建一个 72 行 100 列的格式,所

以命名为“Z_72_100”,然后选择格式类型,默认是“SAPscript 的格式类型”, 我们为 List 创建格式,不能选它,要选择“ABAP 列表的格式类型”,如下图:

Page 4 of 16

SAP 自学笔记系列

设置列表的打印格式

选中“ABAP 列表的格式类型”后,会自动在下面出现行数和列数的输入框, 而纸张的方向则隐藏了起来,因为对于 ABAP 列表的格式类型,纸张方向是自 动选择的。选择后的屏幕如下:

页格式这里就选择“ANY”,不需要指定页格式(其实是有一个假定的,只 能打印到 A4 纸上,这个在后面输出设备的设置里会说明)。行数填“72”,列数 填“100”(这里的 100 是英文字符数,如果显示中文字符的话,只能显示 50 个, 这点要尤其注意),根据 SAP 联机帮助的说明,如果使用下列几种打印机类型的 话(HPLJ4000, KYOFS170, and POST2),就选中“列出驱动器”,否则就不选, 不过我看 SAP 自带的格式中也都选中了这个选项,我们这里也选择它。最后填 写注释,也就是对这个格式类型的详细说明。

Page 5 of 16

SAP 自学笔记系列

设置列表的打印格式

如果在前面选中了“列出驱动器”并且回车或保存,菜单栏按钮中就会出现

“列出驱动程序属性

”按钮,选择这个按钮,就打开下面的对话框:

其中的“方向”就是纸张方向,“形式”是翻译不合理,实际就是纵向,另 一个选项是“横放”。而“列表边距模式”是让你可以选择打印范围,如果选择 默认的“MAXIMUM:使用最大可打印面”的话,就使用打印机能够打印的最 大幅面,如果选择“CUSTOM:注释列表边距”则会出现四边边距的输入框, 可以在里面输入页边距。按下面的“定义页边距”按钮,也可以在上述两种边距

模式间切换。选择完成后,按“继续”按钮返回上一屏幕。 然后按标准工具

栏的“保存”按钮就可以保存这个格式类型了,创建新的格

式类型时需要指定开发类,如果需要传输给其他系统,还要指定传输请求。 这样,一个新的格式类型就创建好了,下面我们需要把这个格式类型指定给打印 设备,并做一些相关设置。

三、设备类型管理

点击“设备类型”按钮,进入设备类型清单(也可以在它后面的文本框里输 入某个设备类型,直接进入该设备类型的管理界面),列出所有的设备类型,如 下图:

Page 6 of 16

SAP 自学笔记系列

设置列表的打印格式

大多数情况下,我们都会使用“CNSAPWIN”这种设备类型,它是 SAP 专 为汉字打印所定义的一种打印设备类型,通过 SAPgui 提供的 SAPLPD(SAP Print Daemon)打印代理软件把内容打印到本地打印机上。用它可以最大程度的保证 显示格式的一致性,无论用户本地使用何种打印机,打印出来的效果都一样。

双击“CNSAPWIN”行(或选中改行后按“选择类型的详细维护界面,如下图:

”按钮),就进入该打印

Page 7 of 16

SAP 自学笔记系列

设置列表的打印格式

这个屏幕的基本设置都是 SAP 预设好的,不需要改变。我们接下来点“格

”按钮,来查看这个设备类型中包含的格式类型。

接下来,按“创建

”按钮,系统要求输入新的格式类型名称:

格式代码窗口,如下图:

输入我们刚才创建的格式类型“Z_72_100”,然后按“执行”按钮,进入维护

Page 8 of 16

SAP 自学笔记系列

设置列表的打印格式

可以看到系统列出了各种操作,前面的状态是灰色的“”,表示该操作中 没有控制代码,而如果状态变成绿色的“”,就说明该操作中已经编写了控制 代码。所谓控制代码,就是 SAP 系统在调用这个打印格式类型时需要执行的一 些控制打印行为的代码,后面我们还会详细分析。

编写控制代码有两种方式,一种是双击某个操作,进入它的编写界面,手工 输入代码,很明显,这种方法需要对控制代码非常熟悉才行;第二种就简单了, SAP 提供了复制的功能,可以直接把另一个格式类型中现有的代码复制过来。我 们先采用第二种方法。

在应用工具栏上有两个按钮“拷贝格式”和“拷贝动作”,按下

后都会出现下图的屏幕。区别是,拷贝格式是把另一个格式类型的所有信息(除 了名称)都复制过来;而拷贝动作(动作和操作在这里是一样的,只是对 Actions 这个单词的翻译不同)则需要先选择某个操作,系统只把源格式类型的那个操作

Page 9 of 16

SAP 自学笔记系列

设置列表的打印格式

中的代码复制过来,而其他信息都不变。

我们在这里从简,只用“拷贝格式两个按钮,分别是“复制参考

”就行了。在这个复制窗口中,还有

”,它们用在复制操作上。复

”和“创建内容

制参考是直接把源格式类型的操作代码原样复制到当前格式类型的操作代码中, 而创建内容则是在当前格式类型的操作代码中包含对源格式类型的操作代码的 引用(例如:\\i,\\i 表示引用,<...>表示引用的源,

CNSAPWIN 是指源设备类型,X_90_120 是指源格式类型,LEAVE 是指源操作)。使用

引用就会在源操作和目标操作之间建立一个关联关系,所有对源操作做的代码修 改都会应用到目标操作中,当你确定几个格式类型必须保持操作完全一致时,就 用这种方式。而如果需要两个格式类型互相独立的话,则应该用复制参考的形式 创建代码。

下面说明一些常用的控制代码的意义,注意,控制命令区分大小写。

1、在打印初始化中(操作名称 SETUP)

# CNSAPWIN X_72_100 # #是注释的开始,这个是页头说明

# SAPWIN indicatior makes it possible to send via berkeley protocol # 这个也不知道具体意义,从英文说明上来看,\\e是控制字符,%SAPWIN%是 一个特定标识。 \\e%SAPWIN%

# change WinCharSet to 134 # 修改字符集为GB2312,没有找到在哪里设置,W表示设置字符集 \\eW134; # set font name(SimSun) # 设置字体名称,这个简单,SimSun就是宋体,大概SimHei就是黑体了,不 过我没找到去哪里设置,F表示设置字体 \\eFSimSun;

Page 10 of 16

SAP 自学笔记系列

设置列表的打印格式

# set orientation(PORTRAIT) # 设置打印方向(P是纵向,L是横向),P表示设置打印方向 \\ePP # set font size(10.0points) # 设置字体大小,我感觉数字就是字号乘以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表示设置边距,T表示上端、L表示左端,不知道有 没有R表示右端、B表示下端。 \\eMT567; \\eML850; 2、在退出以后重置(操作名称 LEAVE) # CNSAPWIN X_90_120 # No control codes! # 这里没有写代码 3、页结束(操作名称 ENDPAGE) # \\f 表示换新页(Form feed) \\f 4、行的结束(操作名称 ENDLINE) # \\n 表示换行(Line feed) # \\r 表示回车(Carriage return) # \\s 表示空格(Space character (when required at the end of a line)) \\n 由于没有找到相关说明文档,也不知道 \\e 这个标记之后能够有多少控制命 令,不过上面列出的那些都是最常用的,多数情况下也够用了。

在上面的控制语句中,\\el 和\\ec 是比较重要而且最难设置的两个,由它们配 合行列数就决定了实际能够打印的最大宽度,比如上面的\\el 设置值为 7.3LPI, 而我们这个格式的行数是 72,72/7.3=9.863 英寸,约合 25 厘米;上面的\\ec 设 置值为 15CPI,而我们的格式的字符数是 100,100/15=6.667 英寸,约合 16.93 厘米。我们知道一张 A4 纸的大小是长 29.7 厘米、宽 21 厘米,去除页边距和打 印机无法打印到的一些边距,上面的设置正好符合 A4 纸的大小。通过上面的计

Page 11 of 16

SAP 自学笔记系列

设置列表的打印格式

算,大家应该明白前面第 5 页倒数第 6 行我提到过的那个假定了,其实系统为列 表打印提供的标准格式类型也都遵循这个假定。 除了以“\\”开头的常规控制

语句外,代码编辑器里面还可以直接输入文本

信息,引用一些程序中的变量(疑似,参见 SAP 标准的格式类型“X_SPOOLERR” 中“封面”操作代码的文本,用$(TITLE)等显示一些估计是从程序里带出来的数

据,但是我在自己创建的格式类型里这样写,没有成功)。 上面提到的操作名

称如 SETUP、LEAVE、ENDPAGE、ENDLINE 等可以在 选中某个操作行后,按应用工具栏的“说明

”按钮来查看,如下图:

在编写了格式类型的控制代码并全部保存之后,我们的格式类型就算全部设 计完成,接下来就可以在报表程序里面调用它进行打印了。

四、打印格式的使用

首先需要说明的是,如果要使用上面的格式类型,在报表程序里就应该明确 定义出列表的行数和列数,而且最好跟所要使用的格式类型完全一致,这样便于 系统在打印时自动选择合适的打印格式。

下面说说打印设置,在一个列表界面,按系统工具栏上的打印按钮,就会打 开标准打印屏幕,如下图:

Page 12 of 16

SAP 自学笔记系列

设置列表的打印格式

如果输出设备为空或者不是 localPrint 的话,就应该改成 localPrint,一般来 说,都会把 localPrint 配置成使用 CNSAPWIN 这种设备类型,如果不是的话, 请在第一部分提到的 SPAD 事务码中,选择“设备/服务器”选项卡的“输出设 备”按钮来调整设置,设置方法比较简单,这里就不再多说了。

然后点击“属性”按钮,打开打印机属性设置屏幕,如下图:

从这里可以看出当前所有的打印设置,其中的格式化就是系统自动匹配获得

的格式类型。如果格式化栏不是我们前面创建的 Z_72_100 这种格式,就要修改 它,双击格式化行,该屏幕下方变成如下的样子:

Page 13 of 16

SAP 自学笔记系列

设置列表的打印格式

然后利用格式化栏的 F4 搜索帮助,打开下面的可用打印格式类型窗口。

其中标注绿色状态灯的,是能够完全打印当前列表的格式;而标注黄色状 态灯的,则无法完全打印当前列表,也就是说打印出来可能会丢失行或列。找 到所需格式后,双击或者选中后按“选择”按钮,就选中了这个格式。

有时候为了方便,我们还可以选中“在初始屏幕显示选定的打印参数”复选 框,这样,标准打印屏幕就会变成下面的样子,可以直接选择打印格式。

选择好合适的格式之后,就可以按“继续

”按钮执行打印了。

Page 14 of 16

SAP 自学笔记系列

设置列表的打印格式

附录 1:一个意外收获——用大字体打印列表标题

在最初学习 ABAP 的时候,就存在一个疑问,能否把 WRITE 语句输出的列 表以多种不同大小的字体打印?最终未果。就在编写本篇笔记的时候,我却发现 了一个可以在一个列表中打印两种字体的方法,当然,这个方法的实现并不完美, 只能用大字体打印单行标题,但是,总是个小小的突破,也就写下来跟大家共享。

在我们前面看到的格式代码清单中,除了我们填写的那四个外,还有很多, 我们要用的是“页首(STRTPAGE)”,双击它,输入下列控制代码:

# set font size(18.0points) \\eS360X # set vertical spacing(5LPI) \\el5; # set horizontal spacing(10.0CPI) \\ec10.0; 上面代码的意思是,在一个新页开始的时候,重新设定该页的字体大小和行 距字距,把字体设置成 18 号、每英寸 5 行、每英寸 10 个字符,如果需要的话还 可以指定一种其他字体比如黑体等。这样的话,每次新开一页的时候,就会变成 大字体,这适合于打印标题。

如何把字体再恢复成正常的大小,打印内容文字呢?这就需要修改一下“行 的结束(ENDLINE)”的控制代码了,也很简单,只要再恢复原来的字体和行距 字距就可以了。

# set font size(12.0points) \\eS240X # set vertical spacing(6.5LPI) \\el6.5; # set horizontal spacing(12.0CPI) \\ec12.0;

# 千万不要忘记了行结束后的换行,否则所有字都打到一行上了 \\n 相信细心的你一定注意到了,这样只能把第一行的字体变大,第一行结束之 后,字体就恢复正常了,以后每行字体也都是正常的,而且会重复设置。这我就 没办法了,希望你能研究出来更好的办法来。

Page 15 of 16

SAP 自学笔记系列

设置列表的打印格式

附录 2:如何计算行间距和字间距,以及间距与字体的关系

在设计一个列表打印格式时,纸张方向、字号、行距、字距、左页边距、上 页边距等信息都会互相制约互相影响,最终影响到一张纸上能够打印的行列数。 我们一般都是根据前面这些信息确定行列数,也就是说,确定格式行列的过程正 好会跟在系统中设置的顺序相反。当然这仅仅是我自己的一个实践方法,您也完 全可以先确定行列数再去推导应该使用的字体大小。

首先需要确定的是纸张,SAP 不是字处理系统,在文字格式设置上相对死板 一些,不能做到 Word 等软件的随意调整纸张大小和方向。所以在设定一个打印 格式的时候,首先要明确将来要用什么样的纸来打印,这样就定下来最大的打印 范围,我们的例子中,要用 A4 纸纵向打印,所以宽 21 厘米,高 29.7 厘米。

然后确定页边距,我们设定上边距 1 厘米,左边距 1.5 厘米,这样便于装订。 SAP 还可以在功能较强的打印机上实现单双页码双面打印,这样就需要利用奇偶 页码的打印控制命令了,这里不多说,有兴趣的可以自己研究。

确定好页边距后,就能获得实际打印的最大范围,我们的例子中没有设定右 下边距,但是我们假定是对称的,这样实际打印范围是宽 21-1.5×2=18 厘米, 高 29.7-1×2=27.7 厘米。

接下来是比较麻烦的事,要确定字号跟行距字距的关系,我们只能一般性的 做个大致估算。如果使用 12 号字,那么行间距最多 6.5 行每英寸,实际使用中 这个 6.5 已经太大,会造成行间基本没有空白,建议选择 4~5;字间距最多 12 字每英寸,前面说过了,这里是英文字符的数量。如果思考一下就应该知道,对 于中文的方块字,如果字间距是行间距的两倍,则正好是把一个汉字放在一个小 正方形里,一般为了美观,行间距应该更大一些(设定数值更小)才好。其他大 小的字体这里就不一一说明,可以参考 SAP 自定义格式去慢慢理解。

定下来字间距,最后就可以计算行列数量了,18÷2.54×12=85 列,27.7÷ 2.54×6.5=70.9 行,从这个计算也可以看出,行距太窄了,如果行间距为 4 左右, 则跟本文的行间距差不多。

通过上面的计算,大家应该对整个页面设置的计算有了一个大致的了解,也 可能更糊涂了,实践出真知,多练习,会有收获的。

Page 16 of 16

因篇幅问题不能全部显示,请点此查看更多更全内容