SAP设置打印格式.docx
《SAP设置打印格式.docx》由会员分享,可在线阅读,更多相关《SAP设置打印格式.docx(19页珍藏版)》请在冰豆网上搜索。
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-SpoolAdministration”),假脱机管理。
也就是管理跟打印相关的基础设置。
界面如下:
为了设置打印格式,我们需要点击“完全管理”按钮。
可以看到,“完全管理”比“简单管理”多出了三个选项卡,分别是“设备
类型”、“字符集”和“管理员”。
顺便说一句,“扩展管理”仅比“简单管理”多一个“管理员”选项卡,而比“完全管理”少了“设备类型”和“字符集”。
对
于每个选项卡中的功能,这里就不一一说明了,因为我还没全部研究过。
接下来点击“设备类型”选项卡,出现如下界面:
3
2
在“设备类型”选项卡种,有“设备类型”、“打印控制”、“格式类型”、“页格式”、“封面文本”等几个按钮,分别进行相应类别信息的管理。
它们的管理顺序基本上是越下面越接近物理层,越上面越接近逻辑层。
具体来说:
“页格式”
对应于最基本的纸张大小和方向,如A4、B5、信封、连续纸等等;“格式类型”
对应纸张中显示多少行多少列文本或用于哪种形式的打印(是列表、SAPscript或其他);“打印控制”用于定义控制打印的基本命令,如每英寸多少行多少列、换行换页等等命令;“设备类型”用于定义SAP系统中所能控制的打印机,以及对每个具体打印机所使用的格式类型、打印控制命令等。
“封面文本”我没有用到过,不知道具体在什么情况下使用。
顺便说一下应用工具栏的“显示
”和“更改
”按钮,它是一个双态互相转换的按钮。
当屏幕显示“更改
”按钮时,系统处于显示状态,这时选择任何功能都会进出它的查看状态,不显示相关的修改按钮;而屏幕显示“显示
”
按钮时,系统处于更改状态,这时选择功能就会进入其更改状态。
下面我们根据需要依次定义格式类型和设备类型。
二、格式类型管理
点击“格式类型”按钮,进入格式类型清单(也可以在它后面的文本框里输入某个格式类型,直接进入该格式类型的管理界面),列出所有的格式类型,如下图:
这里我们可以选择某行双击(或者单击选中行,再点上面的“选择
”按
钮),进入该格式类型的明细界面。
如果要创建新的格式类型或修改现有格式,需要先点击“更改
”按钮,这时工具栏会扩充成下面的样子。
可以看到,这时比最初多了三个按钮,分别是“删除
”、“创建
”和“使用模版创建
”。
删除和创建就不用说了,“使用模版创建”这个功能实际就相
当于复制,首先要选中某个格式类型行,然后按“使用模版创建”按钮,就会把
该格式类型的信息都带到创建页,只是需要用户输入一个新的名字。
我们还是从头开始创建,点“创建”按钮,出现如下屏幕:
首先需要输入格式类型的名称,我现在要创建一个72行100列的格式,所以命名为“Z_72_100”,然后选择格式类型,默认是“SAPscript的格式类型”,我们为List创建格式,不能选它,要选择“ABAP列表的格式类型”,如下图:
选中“ABAP列表的格式类型”后,会自动在下面出现行数和列数的输入框,
而纸张的方向则隐藏了起来,因为对于ABAP列表的格式类型,纸张方向是自动选择的。
选择后的屏幕如下:
页格式这里就选择“ANY”,不需要指定页格式(其实是有一个假定的,只能打印到A4纸上,这个在后面输出设备的设置里会说明)。
行数填“72”,列数填“100”(这里的100是英文字符数,如果显示中文字符的话,只能显示50个,这点要尤其注意),根据SAP联机帮助的说明,如果使用下列几种打印机类型的话(HPLJ4000,KYOFS170,andPOST2),就选中“列出驱动器”,否则就不选,不过我看SAP自带的格式中也都选中了这个选项,我们这里也选择它。
最后填写注释,也就是对这个格式类型的详细说明。
如果在前面选中了“列出驱动器”并且回车或保存,菜单栏按钮中就会出现
“列出驱动程序属性
”按钮,选择这个按钮,就打开下面的对话框:
其中的“方向”就是纸张方向,“形式”是翻译不合理,实际就是纵向,另一个选项是“横放”。
而“列表边距模式”是让你可以选择打印范围,如果选择默认的“MAXIMUM:
使用最大可打印面”的话,就使用打印机能够打印的最大幅面,如果选择“CUSTOM:
注释列表边距”则会出现四边边距的输入框,可以在里面输入页边距。
按下面的“定义页边距”按钮,也可以在上述两种边距
模式间切换。
选择完成后,按“继续
”按钮返回上一屏幕。
然后按标准工具栏的“保存”按钮就可以保存这个格式类型了,创建新的格
式类型时需要指定开发类,如果需要传输给其他系统,还要指定传输请求。
这样,一个新的格式类型就创建好了,下面我们需要把这个格式类型指定给打印设备,并做一些相关设置。
三、设备类型管理
点击“设备类型”按钮,进入设备类型清单(也可以在它后面的文本框里输入某个设备类型,直接进入该设备类型的管理界面),列出所有的设备类型,如下图:
大多数情况下,我们都会使用“CNSAPWIN”这种设备类型,它是SAP专
为汉字打印所定义的一种打印设备类型,通过SAPgui提供的SAPLPD(SAPPrintDaemon)打印代理软件把内容打印到本地打印机上。
用它可以最大程度的保证显示格式的一致性,无论用户本地使用何种打印机,打印出来的效果都一样。
双击“CNSAPWIN”行(或选中改行后按“选择
”按钮),就进入该打印类型的详细维护界面,如下图:
这个屏幕的基本设置都是SAP预设好的,不需要改变。
我们接下来点“格
式
”按钮,来查看这个设备类型中包含的格式类型。
接下来,按“创建
”按钮,系统要求输入新的格式类型名称:
输入我们刚才创建的格式类型“Z_72_100”,然后按“执行
”按钮,进入维护格式代码窗口,如下图:
可以看到系统列出了各种操作,前面的状态是灰色的“
”,表示该操作中没有控制代码,而如果状态变成绿色的“
”,就说明该操作中已经编写了控制代码。
所谓控制代码,就是SAP系统在调用这个打印格式类型时需要执行的一些控制打印行为的代码,后面我们还会详细分析。
编写控制代码有两种方式,一种是双击某个操作,进入它的编写界面,手工输入代码,很明显,这种方法需要对控制代码非常熟悉才行;第二种就简单了,SAP提供了复制的功能,可以直接把另一个格式类型中现有的代码复制过来。
我们先采用第二种方法。
在应用工具栏上有两个按钮“拷贝格式
”和“拷贝动作
”,按下后都会出现下图的屏幕。
区别是,拷贝格式是把另一个格式类型的所有信息(除了名称)都复制过来;而拷贝动作(动作和操作在这里是一样的,只是对Actions
这个单词的翻译不同)则需要先选择某个操作,系统只把源格式类型的那个操作
中的代码复制过来,而其他信息都不变。
我们在这里从简,只用“拷贝格式
”就行了。
在这个复制窗口中,还有两个按钮,分别是“复制参考
”和“创建内容
”,它们用在复制操作上。
复
制参考是直接把源格式类型的操作代码原样复制到当前格式类型的操作代码中,
而创建内容则是在当前格式类型的操作代码中包含对源格式类型的操作代码的引用(例如:
\iX_90_120:
LEAVE>,\i表示引用,<...>表示引用的源,CNSAPWIN是指源设备类型,X_90_120是指源格式类型,LEAVE是指源操作)。
使用引用就会在源操作和目标操作之间建立一个关联关系,所有对源操作做的代码修改都会应用到目标操作中,当你确定几个格式类型必须保持操作完全一致时,就用这种方式。
而如果需要两个格式类型互相独立的话,则应该用复制参考的形式创建代码。
下面说明一些常用的控制代码的意义,注意,控制命令区分大小写。
1、在打印初始化中(操作名称SETUP)
#CNSAPWINX_72_100
##是注释的开始,这个是页头说明
#SAPWINindicatiormakesitpossibletosendviaberkeleyprotocol
#这个也不知道具体意义,从英文说明上来看,\e是控制字符,%SAPWIN%是一个特定标识。
\e%SAPWIN%
#changeWinCharSetto134
#修改字符集为GB2312,没有找到在哪里设置,W表示设置字符集
\eW134;
#setfontname(SimSun)
#设置字体名称,这个简单,SimSun就是宋体,大概SimHei就是黑体了,不过我没找到去哪里设置,F表示设置字体
\eFSimSun;
#setorientation(PORTRAIT)
#设置打印方向(P是纵向,L是横向),P表示设置打印方向
\ePP
#setfontsize(10.0points)
#设置字体大小,我感觉数字就是字号乘以20的值,比如10pt的字就写200,12pt的字就写240。
S表示设置字体大小
\eS200X
#setverticalspacing(7.3LPI)
#设置纵向行距,单位是行每英寸。
L表示设置纵向行距
\el7.3;
#sethorizontalspacing(15.0CPI)
#设置横向字距,单位是字每英寸。
C表示设置横向字距
\ec15.0;
#settop/leftmargin(1.0cm/1.5cm)
#设置上、左页边距,M表示设置边距,T表示上端、L表示左端,不知道有没有R表示右端、B表示下端。
\eMT567;
\eML850;
2、在退出以后重置(操作名称LEAVE)
#CNSAPWINX_90_120
#Nocontrolcodes!
#这里没有写代码
3、页结束(操作名称ENDPAGE)
#\f表示换新页(Formfeed)
\f
4、行的结束(操作名称ENDLINE)
#\n表示换行(Linefeed)
#\r表示回车(Carriagereturn)
#\s表示空格(Spacecharacter(whenrequiredattheendofaline))
\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纸的大小。
通过上面的计
算,大家应该明白前面第5页倒数第6行我提到过的那个假定了,其实系统为列
表打印提供的标准格式类型也都遵循这个假定。
除了以“\”开头的常规控制语句外,代码编辑器里面还可以直接输入文本
信息,引用一些程序中的变量(疑似,参见SAP标准的格式类型“X_SPOOLERR”中“封面”操作代码的文本,用$(TITLE)等显示一些估计是从程序里带出来的数
据,但是我在自己创建的格式类型里这样写,没有成功)。
上面提到的操作名称如SETUP、LEAVE、ENDPAGE、ENDLINE等可以在
选中某个操作行后,按应用工具栏的“说明
”按钮来查看,如下图:
在编写了格式类型的控制代码并全部保存之后,我们的格式类型就算全部设计完成,接下来就可以在报表程序里面调用它进行打印了。
四、打印格式的使用
首先需要说明的是,如果要使用上面的格式类型,在报表程序里就应该明确定义出列表的行数和列数,而且最好跟所要使用的格式类型完全一致,这样便于系统在打印时自动选择合适的打印格式。
下面说说打印设置,在一个列表界面,按系统工具栏上的打印按钮,就会打开标准打印屏幕,如下图:
如果输出设备为空或者不是localPrint的话,就应该改成localPrint,一般来
说,都会把localPrint配置成使用CNSAPWIN这种设备类型,如果不是的话,请在第一部分提到的SPAD事务码中,选择“设备/服务器”选项卡的“输出设备”按钮来调整设置,设置方法比较简单,这里就不再多说了。
然后点击“属性”按钮,打开打印机属性设置屏幕,如下图:
从这里可以看出当前所有的打印设置,其中的格式化就是系统自动匹配获得
的格式类型。
如果格式化栏不是我们前面创建的Z_72_100这种格式,就要修改它,双击格式化行,该屏幕下方变成如下的样子:
然后利用格式化栏的F4搜索帮助,打开下面的可用打印格式类型窗口。
其中标注绿色状态灯
的,是能够完全打印当前列表的格式;而标注黄色状态灯
的,则无法完全打印当前列表,也就是说打印出来可能会丢失行或列。
找到所需格式后,双击或者选中后按“选择”按钮,就选中了这个格式。
有时候为了方便,我们还可以选中“在初始屏幕显示选定的打印参数”复选框,这样,标准打印屏幕就会变成下面的样子,可以直接选择打印格式。
选择好合适的格式之后,就可以按“继续
”按钮执行打印了。
附录1:
一个意外收获——用大字体打印列表标题
在最初学习ABAP的时候,就存在一个疑问,能否把WRITE语句输出的列表以多种不同大小的字体打印?
最终未果。
就在编写本篇笔记的时候,我却发现了一个可以在一个列表中打印两种字体的方法,当然,这个方法的实现并不完美,只能用大字体打印单行标题,但是,总是个小小的突破,也就写下来跟大家共享。
在我们前面看到的格式代码清单中,除了我们填写的那四个外,还有很多,我们要用的是“页首(STRTPAGE)”,双击它,输入下列控制代码:
#setfontsize(18.0points)
\eS360X
#setverticalspacing(5LPI)
\el5;
#sethorizontalspacing(10.0CPI)
\ec10.0;
上面代码的意思是,在一个新页开始的时候,重新设定该页的字体大小和行距字距,把字体设置成18号、每英寸5行、每英寸10个字符,如果需要的话还可以指定一种其他字体比如黑体等。
这样的话,每次新开一页的时候,就会变成大字体,这适合于打印标题。
如何把字体再恢复成正常的大小,打印内容文字呢?
这就需要修改一下“行的结束(ENDLINE)”的控制代码了,也很简单,只要再恢复原来的字体和行距字距就可以了。
#setfontsize(12.0points)
\eS240X
#setverticalspacing(6.5LPI)
\el6.5;
#sethorizontalspacing(12.0CPI)
\ec12.0;
#千万不要忘记了行结束后的换行,否则所有字都打到一行上了
\n
相信细心的你一定注意到了,这样只能把第一行的字体变大,第一行结束之后,字体就恢复正常了,以后每行字体也都是正常的,而且会重复设置。
这我就没办法了,希望你能研究出来更好的办法来。
附录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左右,则跟本文的行间距差不多。
通过上面的计算,大家应该对整个页面设置的计算有了一个大致的了解,也可能更糊涂了,实践出真知,多练习,会有收获的。