1.2.2.2 Paragraph Formats and Attributes. 6
1.2.2.3 Character Formats and Attributes. 8
1.2.2.7 Text Elements (文本元素) 12
1.2.3.4 Using Boxes, Lines, and Shading. 27
2.SAPscript Control Commands.. 30
2.2.3 下一个main window命令:NEW-WINDOW.. 31
2.2.5 格式化日期字段:SET DATE MASK. 32
2.2.6 格式化Time字段:SET TIME MASK. 33
2.2.7 设置与国家相关的格式:SET COUNTRY. 33
2.2.9 Initializing Numbered Paragraphs:RESET. 34
2.2.13在main window中设置Header Text:TOP. 37
2.2.14在main window中设置Footer Text:BOTTOM.. 37
4.3 Omitting the Leading Sign. 44
4.3 Omitting Leading Zeros. 45
4.5 Number of Decimal Places. 45
4.6 Omitting the Separator for ‘Thousands’ 46
4.7 Specifying an Exponent for Floating Point Numbers. 46
4.10 Suppressing Output of Initial Values. 47
4.11Local Dates(Currently Only for Japan) 47
4.12Changing the Value of a Counter 47
4.13Preceding and Subsequent Texts(Pre-Text/Post-Text) 48
5.SAPscript Function Modules.. 49
1 SAPscript Forms
1.1 SAPscript的组成
SAPscript由下面五个部分组成:
1)编辑器用来编辑一行文本。如果用户决定维护与应用程序相关的文本,应用程序事务会自动调用这个文本编辑器,
2)styles和forms,用来打印layout。
3)中央输出模块设计器。它的任务是根据相应的格式信息为某种外部设备准备文本,这些格式信息来自于分配了文本的style和forms。
4)程序接口,通过将SAPscript组件包括在程序中来控制form的输出。
5)用来存储文本、styles、forms的数据库表格。
可以用下图来表示:
1.2 Forms: 组件和技术
1.2.1 概念
1.2.1.1修改SAP Forms
如果需要修改SAP Forms,可以象下面这样设置开发环境:
l 确信客户端没有标准的SAP Forms
l 拷贝你需要的标准SAP Forms到你的开发环境中
l 重新命名,最好以Y或者Z开头
l 为了使更改生效,需要修改相关的SAP 打印程序使用经过你修改后的Forms,可以使用SAP IMG来进行。
1.2.1.2 Forms:概念
Forms用来控制文档中的页面layout和文本格式。在将某一文档输出到打印机或者屏幕的时候,必须将一个Form分配给该文档。如果没有指定,就使用系统默认的Form。
在SAP应用中,通常利用Forms来定制诸如发票、支票之类的特殊文档的layout。这些Forms用来描述文档页面中的信息结构,比如地址抬头、item行、页脚等等。
有两种方法来格式化Forms中的的文本:
l 在标准的SAPscript文本处理器中(Tools ® Word processing ® Standard text),可以为一个文档选择一Form。然后在Form的Main窗口中输入文本并格式化。例如,我们为信件选择一个Form,然后在Main窗口中输入信件内容,当打印该信件时,信件内容随同其他信息一并打印出来(比如抬头、页脚等等)。
l 通过SAP应用中的打印程序生成文档。该打印程序使用一个Form,并提示用户输入相关文本信息。
1.2.1.3 Client和语言版本:概念
Forms和Styles是与客户端相关的,也就是说,在哪一个客户端创建的Form和Styles只能在这个客户端使用。
同样的,Forms和Styles也是语言相关的,在Forms和Styles中的定义的文本只能用一种语言来进行定义。可以用SAP翻译工具来翻译这些Forms和Styles
Client 000缺省:SAPscript给在client000中的Forms和Styles赋予一种特殊状态。
如果在打印一个文档的时候,文档中定义的Forms和Styles在当前客户端不可用,则SAPscript就在client000中检查所定义的Forms和Styles,如果找到,就利用client000中的来进行打印。SAP标准Forms和Styles总是存储在client000中。可以通过拷贝这些标准Forms和Styles到当前客户端并重新以YXXX或者ZXXX命名加以使用。
Language rules: SAPscript uses the following rules to manage versions of forms and styles in different languages:
- The language in which a form or style is created is its "original language." You can translate a form or style into other languages using SAP’s translation tools.
- If a form or style is needed only in its original language and need not be translated, then you can indicate this in the language attributes in the header data. The form or style then does not appear in work lists in the translation tools.
- In versions other than the original language version, changes to a form or style are limited only to translation of texts. No changes to definitions and attributes are permitted.
1.2.2 组件
1.2.2.1 Header Data
Header Data由全局数据,比如page格式、page方向、初始字体等组成。在Header Data的Basic settings标签中可以对这些数据进行维护。Header Data还包括form的名字、描述、类以及状态。
Header Data的操作画面如下:
一个例子:
下图是简单的发票的例子,是利用SAPscript Form创建的。每一个form由一个start page和任意数量的subsequent pages组成,这依赖于字符文本的长度。在这个例子中,start page由地址栏窗口、包含参考消息的信息窗口、包含公司相关数据的窗口以及包含真正业务数据的窗口(业务数据也显示在subsequent page中)和包含页码的窗口组成。
包含业务数据的窗口不同于其他窗口。无论什么时候,只要一页数据显示不下时,会自动显示在subsequent中。因而,这个窗口控制换页,而且这种窗口只能有一个,在SAPscript form中称这种窗口为main window.
如下图所示:
1.2.2.2 Paragraph Formats and Attributes
在SAPscript中,Paragraph(段落)就是使用某种格式和相应属性的一种格式设置。通过应用不同的段落属性组来简化文本处理,这些属性组包括:
l 标准属性
l 字体
l Tabs
l Outline
对一个段落标志命名有下面的约定束成:
l 段落名由一到两个字符组成;
l 第一个字符必须是字母,第二个字符可以是字母、数字或者空格;特殊字符无效;
l 段落格式在Description域中必须进行标识。
段落格式设置画面如下:
下面分别对前面的属性组加以说明:
1) 标准属性
在标准属性组中,可以设置在段落格式中需要用到的通用属性,包括:
描述信息(Description)
左边右边距(Left margin, Right margin)
第一行的缩进(indent 1st line)
前后空格(Space before, Space after)
对齐方式(Alignment)
行间距(Line spacing)
是否空行(No blank lines)
是否页面保护(Page protection)
同一页上是否有下一个段落(Next paragraph same page)
2) Font 属性
可以为段落格式指定字体属性,用来控制文本中的字体。字体属性包括字体、大小、黑体/粗体/斜体、下划线等等。、
3) Tabs in Paragraph Formats
可以根据需要为每个段落格式定义tabs的位置,在pc editor中两个”,,”symbol代表段落中的一个tabs。可以使用下面的度量单位来定义tabs的位置:
CH (字符)
CM (厘米)
MM(毫米)
PT(点阵)
TW(1/20 点)
4) Outline
用来指定文档中的层次和目录结构。具体请参见sap online help
1.2.2.3 Character Formats and Attributes
Character formats and Attributes可以用来格式段落中的一段文字。命名方式与段落一样。字符属性组可以是:
l Standard
l Font
Standard 属性包括marker(标记或者超连接)、Barcode、Protected、Hidden、Superscript等。
Font属性与段落中的Font属性一样使用。
1.2.2.4 Windows
Windows在Form维护中定义。代表页面中的一个区域(Page Window),每一个Form中至少定一个window,否则,SAPscript不能格式化文本。
可以为window定义类型和名字,注意在每一个Form中只能有一个Main window。
在定义一个Form Window的时候,必须选择一个窗口类型。
下面是可以使用的窗口类型:
l Main Window
每一个Form必须有一个MAIN类型的窗口,这样的窗口叫做Main Window。在SAPscript中主窗口具有下面的意义:
1) 控制换页;
2) 包含可以跨越多个pages的内容;
3) 可以在page window中固定文本元素,比如列标题。
一旦main window内容填满后,就会自动换页,在下一页的main window中继续输出余下的内容。而且格式保持不变。
注意:如果page中没有main window,系统会隐含处理page中的其他window以及subsequent page,在这种情况下,SAPscript会在处理完(最多)三个subsequent pages后终止处理。
为了输出header line或者totals,需要指定main window中的输出区域(output area)。
为了在页面(page)中的main window中进行文本输出,可以选择三种类型的区域之一。Main window中的顶层区域叫TOP Area;下层区域叫BOTTOM Area;它们之间的区域叫做BODY Area。TOP Area和BOTTOM Area的大小依赖于各自的文本内容,BODY Area的大小相应的发生变化。
如下图所示:
在Form输出时,可以对这三个区域的内容进行动态修改。SAPscript在包含main windwo的Form的每一页上自动输出这些区域。当在调用函数模块WRITE_FORM或者WRITE_FORM_LINES时,TYPE参数决定在哪一个区域输出文本,如果在调用时,没有指定TYPE参数,系统默认输出BODY区域的内容。
比如下面的图示以及代码:
l VAR Window(可变窗口)
可变窗口的内容在每一个page中都要处理一次。系统输出仅仅适合窗口尺寸,超出窗口的文本被自动截掉;可变窗口也不会触发换页处理。不象CONST Window,page window如果声明为VAR Window,意味着在不同的Form pages中可以有不同的尺寸。
注意:在窗口内容处理方面,系统并不区分CONST Window和VAR Window,唯一的区别就是在全部Form中具有同样尺寸。
l CONST window(常量窗口)
从版本4.0开始,在系统内部处理中,并不区分CONST Window和VAR Window,所以,如果创建一个新的window,总是使用VAR类型的。
1.2.2.5 Pages(页面)
对每一个Form必须定义至少一个page,而且必须在Form的header属性标签中指定“first” page。否则,不能进行文本格式化。另外,应该指定当到达第一页的末尾的时候,接下来的一页是哪页。如果没有指定的话,输出就在当前页的末尾终止。
为了定义一个page,需要为它指定名字和属性:
l 下一页的名字
l page的计数模式
l page数的数字类型
l 资源名字
l 打印模式
文档的单个pages通常有不同的layouts:发票的第一页与接下来的页不一样,在这些页上不需要重复通用信息,比如地址或者客户数据,象窗口中的文本元素一样,page也有名字,在有需要换页的情况下,需要通过这些名字来指定下一页,如果想文档的样式变化越多,就需要在SAPscript中定义越多的page。
下图说明如何利用事务代码SE71维护一个page。在WIN32操作系统中可以利用Form Painter。
1.2.2.6 Pages window(页面窗口)
Pages window就是定义在页面中的窗口,这里的页面和窗口都是已经预先定义好的,定义pages window的主要任务就是将窗口和页面关联起来,一个页面中可以有多个窗口。
在定义pages windows时,窗口的名字与page的名字关联起来。必须指定分配给page的窗口的位置和大小。
通过指定左边和上边距来定义窗口的位置,指定其高度和宽度来定义窗口的大小。
注意:
1)在所有pages中的main window的宽度必须相同。其他的窗口类型在不同的pages中可以有不同的尺寸和位置。
2)为了打印多列,需要在一个page中定义多个main window。因为文本条目是连续的,一旦第一个main window被写满之后,输出可以在第二个窗口继续。
当定义windows和pages的时候,可以不必指定位置和输出的文本间隔。为了指定这些值,可以直接创建一个page window。
l 当定义page window时,需要指定:
l 显示在page上的window
l window的尺寸(包括大小、宽度、高度)
l 页面中各个window的位置
如下图所示:
1.2.2.7 Text Elements (文本元素)
SAPscript将form中的单个文本组件称之为Text Elements(文本元素),为了获得较好的结构和可读性,可以为form中的每一个Text Elements分配一个固定的名字,打印程序通过这些定义的名字来访问Text Elements。
Text Elements与window相关,就是说,打印程序仅仅能够调用定义在窗口中的文本元素。下图显示了定义在main window中的HEADING和FLIGHTIST两个Text Elements。
可以将这里定义的Text Elements和ABAP程序中(比如TEXT-001)定义的文本相比较来学习,但是,Text Elements比ABAP程序中(比如TEXT-001)定义的文本更灵活,主要表现在:
l Text Elements的长度没有限制;
l Text Elements可以包含变量符;
l 在一个Text Elements中可以使用几个不同的格式选项;
l 在Text Elements中可以使用SAPscript控制语句。
在window中,可以使用两种不同的Text Elements,一种叫做有名Text Elements;另外一种叫做无名Text Elements。
1) 有名Text Elements
通过段落格式“/E”来识别有名Text Elements,在行编辑器中,看起来象这样:
字符串<NAME>代表Text Elements的名字,名字可以有30个长度,而且可以包含字母、数字、特殊字符。名字后面接下来就是这个Text Elements的文本行。一个Text Elements在下一个Text Elements开始处结束。
注意:Text Elements的名字仅仅在本地有效(LOCAL),即不同的窗口可以包含相同的Text Elements的名字。
为了输出有名Text Elements,必须在程序中(ABAP)使用函数模块WRITE_FORM。
下图说明了发票中的列头Text Elements。
2) 无名Text Elements
无名Text Elements或者叫做缺省文本元素是这样的一些文本行和控制语句,它们显示在相应window contents的起始处,没有“/E”段落格式。包括所有的行直到出现“/E” 段落格式,或者直到末尾,如果中间没有其他“/E”标志出现,因此,在一个window中只能包括一个无名Text Elements。
这两种Text Elements之间的区别在于:
l 对于有Text Elements来说,只有当系统显示调用函数模块WRITE_FORM时,才被输出;而对名Text Elements,系统会自动处理。
l Main window 中的Text Elements仅仅出现一次,它不会出现在包含main window的form的subsequent page中。
l 其它window类型(除main window外)的无名Text Elements每次都会出现。
下面的例说明了在form中的ADDRESS window的无名Text Elements,这个Text Elements输出客户地址,ADRS_SENDER标准文本仅仅在第一页显示(通过IF AND CASE语句可以控制)。
3) 激活Text Elements
当函数模块WRITE_FORM的时候,可以通过设置FUNCTION参数的值在打印程序中激活窗口中的Text Elements,FUNCTION可以是下面的值:
l SET
用当前的值代替所有window中激活的文本元素
l APPEND
将当前的Text Elements追加到激活的Text Elements
l DELETE
从激活的Text Elements列表中删除当前的Text Elements
注:激活Text Elements是指当当前page调用时,系统准备输出的window Text Elements。
在main window BODY域中,APPEND和SET具有相同的效果,DELETE对其没有影响,在TOP和BOTTOM域中,与上面描述的相同。
1.2.3 技术
1.2.3.1在Form中包含图形
这一节主要介绍在form中包括图形的技术,主要介绍如何在form中打印公司logo和如何打印条形码。
1) 在form中打印公司logo
为了能够打印公司logo,不管是在form中,还是在PCL-5打印机预定的宏中,下面的规则有助于选择合适的方法:
l 如果不能够以TIF6.0的格式提供logo,则公司logo应该在PCL-5打印机预定的宏中进行打印;
l 如果没有PCL-5打印机,则需要将公司logo包含在form中;
l 在其他任何情况下,将公司logo包含在form中。
如果在打印公司logo的时候,正确的参照了这里的说明,但还是没有能够正确打印出公司的logo,可能是因为你提供的logo的图形格式不是基于TIF6.0的,如果文件格式不正确,SAP并不给出任何错误信息。 |
下面介绍在form中包含公司logo的步骤:
1.2.3.2在FORM中包含公司logo
|
Step-by-Step Guide Task 1 Convert your company logo into a SAPscript standard text. |
1. Create your company logo with a graphic program and save it in the Baseline TIFF 6.0 format. 2. From the SAP main menu, choose Tools ® ABAP Workbench. 3. On the ABAP Workbench screen, choose ABAP Editor. |
|
4. In the Program field, enter RSTXLDMC. 5. Choose Execute. |
|
6. Determine the location of LOGO.TIF. 7. In the File name field, enter the file name with its location. Note: UNIX file names are case sensitive. 8. In the Type field, enter the appropriate type for the raster image. § BMON stands for a black and white raster image. Use BMON for monochrome printers because these printers normally do not perform a gray-level conversion. § BCOL stands for a color raster image with up to 256 colors. For this example, use BMON. 9. In the Text name field, enter ZHEX-MACRO-LOGO. 10. Choose Execute. |
|
The upload may take a while. The result should be a protocol as shown. 11. At the end of the protocol, a Standard text ZHEX-MACRO-LOGO ID ST Language EN saved successfully message indicates that the standard text was created. 12. Choose Back four times to return to the SAP main menu. |
|
|
You can easily display the created standard text. 1. Choose Tools ® Word processing ® Standard text. 2. In the Text name field, enter ZHEX-MACRO-LOGO. 3. Choose Display. |
|
For additional information about report RSTXLDMC, access the report documentation: 1. Choose Tools ® ABAP Workbench. 2. Choose ABAP Editor. 3. In the Program field, enter RSTXLDMC. 4. Select Documentation. 5. Choose Display. |
|
Step-by-Step Guide Task 2 Include the standard text ZHEX-MACRO_LOGO in the sales order confirmation form Z_9H_RVORDER01. |
1. From the SAP main menu, choose Tools ® Word processing ® Form. |
|
2. In the Form field, enter Z_9H_RVORDER01, and in the Language field, enter EN. 3. In the Sub-objects section, select Page layout. 4. Choose Change. The synchronized screens of the Form Painter appear. |
|
5. In the Design window, create a new window by choosing Create window form the form layout manipulation menu. The new window is automatically named Window1.
|
|
6. Activate Window1 and choose Rename window from the form layout manipulation menu.
|
|
7. Rename Window1 as LOGO. 8. Choose Execute. |
|
9. Define the position of the window LOGO using the graphical Form Painter. With graphics or macros the system considers only the window position but not the size. The Left margin must be specified in CH (characters) and the Upper margin must be specified in LN (line). |
|
10. Activate the LOGO window and choose Edit window text from the form layout manipulation window. The PC Editor for the LOGO window appears. |
|
11. In the PC Editor choose the Insert command button. The Insert Additional Information screen appears. |
|
12. Select Command. 13. Enter INCLUDE ZHEX-MACRO-LOGO OBJECT TEXT ID ST in the command line. 14. Choose Continue. |
|
The new command line (gray highlighted) appears in the PC Editor. 15. Choose Back. The window text is automatically saved by the system. 16. Confirm the information.
|
|
17. Activate the changed form.
|
|
|
Your company logo appears on the first page of form Z_9H_RVORDER01 using the standard text ZHEX-MACRO-LOGO and the window LOGO for the print output. If the company logo should be displayed on the subsequent pages, you must copy the window LOGO to page NEXT. You have to repeat the following procedure for all defined pages: 1. In the administrative screen, choose the window LOGO. 2. Copy the window. 3. Choose page NEXT. 4. Insert the window. The position and size of the window LOGO defined for page FIRST apply to the other pages. 5. Activate the form. |
注:关于如何在PCL-5打印机中打印公司logo,请参见相关资料,这里从略。
1.2.3.3在form中打印条形码
|
Step-by-Step Guide Task Define the material numbers on the sales order confirmation Z_9H_RVORDER01 as a “3 of 9” bar code with a check digit. |
1. From the SAP main menu, choose Tools ® Word processing® Form. 2. In the Form field, enter Z_9H_RVORDER01, and in the Language field, enter EN. 3. Select Character formats. 4. Choose Change. |
|
5. In the String field, enter B3. 6. In the Description field, enter Bar code 3 of 9 w/check. 7. Choose Enter. The new character format appears in the character formats frame. 8. In the Bar code field, press the F4 help key and choose the appropriate bar code from the list of available bar codes. Choose BC_CD39C. 9. Save the new character format. The bar code is now defined and can be used. Next, we have to adjust the output of the Main window. 10. Choose Layout.
|
|
11. In the Design Window activate the Main window and choose Edit window text. |
|
12. In the text editor, scroll down until you see /E ITEM_LINE. 13. Place the cursor at the end of the first line under /E ITEM_LINE. 14. Choose Enter to create a new line. |
|
15. In the new line, enter 16. Choose Back. 17. Confirm all the subsequent popup windows.
|
|
|
The two commas, for the first tab, position the bar code under the material number. <B3> changes the current character string to B3, which defines the bar code. </> ends the character string and returns to IL. |
|
In our example, notice the bar code, which reserves space for the entire material number field (this field is 18 characters long). If you do not use all 18 characters and do not want to waste space, delimit the field length by using the output length formatting option. The text editor line is ,,<B3>&VBDPA-MATNR(8)&</> |
18. Activate the form. |
|
1.2.3.4 Using Boxes, Lines, and Shading
SAPscript提供了在文档中使用Boxes, frames, lines, shading的文本命令:
l BOX命令用来画一个框或者是垂直、水平直线;
l POSITION命令用来指定框或者线的起始点;
l SIZE命令用来指定框的高度和宽度。
下面分别加以说明。
1) BOX 命令
语法
/: BOX [XPOS] [YPOS] [WIDTH] [HEIGHT] [FRAME] [INTENSITY]
作用:在指定的位置用指定的尺寸画框
参数:对XPOS、YPOS、WIDTH、HEIGHT、FRAME中的每一个,必须指定值以及度量单位;指定INTENSITY为0-100之间的百分比数,比如20。
①XPOS、YPOS
相对于POSITION命令设定的值而言,框的左上角。
缺省:POSITION命令设定的值
下面的计算式用来计算page上的框的绝对位置:
X(abs) = XORIGIN + XPOS
Y(abs) = YORIGIN + YPOS
②WIDTH
框的宽度,缺省为SIZE命令所设定的宽度值
③HEIGHT
框的高度,缺省为SIZE命令所设定的高度值
④FRAME
边框,缺省为0,无边框
⑤INTENSITY
框的灰度比,缺省为100
度量值以及度量单位:度量值为数字,度量单位可以是下面几种之一:
· TW (twip)
· PT (point)
· IN (inch)
· MM (millimeter)
· CM (centimeter)
· LN (line)
· CH (character).
示例:
/: BOX WIDTH '17.5' CM HEIGHT 1 CM FRAME 10 TW INTENSITY 15
/: BOX WIDTH '17.5' CM HEIGHT '13.5' CM FRAME 10 TW
/: BOX XPOS '10.0' CM WIDTH 0 TW HEIGHT '13.5' CM FRAME 10 TW
/: BOX XPOS '13.5' CM WIDTH 0 TW HEIGHT '13.5' CM FRAME 10 TW
特别注意:如果度量值有小数位,必须用” '' ”号将度量值引起来。如上面的'17.5'等等。
2) POSTION 命令
语法:
/: POSITION [XORIGIN] [YORIGIN] [WINDOW] [PAGE]
作用:设置坐标原点,BOX命令中的XPOS, YPOS参数会使用这个值。当window第一次启动的时候,POSITION
值就是window的左上角。
参数:
① XORIGIN、YORIGIN
坐标系统原点
② WINDOW
设置左边和上边距匹配当前window
③ PAGE
设置左边和上边距匹配当前输出page(XORIGIN = 0 cm, YORIGIN = 0 cm)
示例:
/: POSITION WINDOW
Sets the origin for the coordinate system to the upper left corner of the window.
/: POSITION XORIGIN 2 CM YORIGIN '2.5 CM'
Sets the origin for the coordinate system to a point 2 cm from the left edge and 2.5 cm from the upper edge of the output page.
/: POSITION XORIGIN '-1.5' CM YORIGIN -1 CM
Shifts the origin for the coordinates 1.5 cm to the left and 1 cm up
3) SIZE 命令
语法:
/: SIZE [WIDTH] [HEIGHT] [WINDOW] [PAGE]
作用:设置在BOX命令中的WIDTH、HEIGHT值,当window第一次启动时,SIZE值与window相同。
参数:
① WIDTH、WIDTH
矩形或者线的尺寸
② WINDOW
设置宽度和高度值为当前window的宽度和高度
③ PAGE
设置宽度和高度值为当前page的宽度和高度
示例:
/: SIZE WINDOW
Sets WIDTH and HEIGHT to the current window dimensions.
/: SIZE WIDTH '3.5' CM HEIGHT '7.6' CM
Sets WIDTH to 3.5 cm and HEIGHT to 7.6 cm.
/: POSITION WINDOW
/: POSITION XORIGIN -20 TW YORIGIN -20 TW
/: SIZE WIDTH +40 TW HEIGHT +40 TW
/: BOX FRAME 10 TW
A frame is added to the current window. The edges of the frame extend beyond the edges of the window itself, so as to avoid obscuring the leading and trailing text characters.
2.SAPscript Control Commands
2.1 Control Commands语法
SAPscript Control Commands和通常文本行一样,在文本编辑器中输入和编辑,然而,和文本行相比,有下面一些区别:
l 在格式列输入段落格式“/:”表示一个控制命令;
l 在文本行中输入命令;
l Control Commands连同其参数,最多占用一行文本行;
l 每一行只能有一个Control Commands;
l 编辑器行的格式对Control Commands没有影响。
如果Control Commands没有定义或者有语法错误,则Control Commands所在的行被作为注释处理。
2.2 Control Commands 种类
2.2.1 显示分页:NEW-PAGE
当main window显示不下时,SAPscript就会自动分页。可以利用NEW-PAGE命令强制分页(只要你想)。分页命令后面的文本显示在新页上,分页命令总是会执行(如果使用了)。
NEW-PAGE结束当前页。如果分页命令NEW-PAGE不带参数,在当前form中定义的page就作为next page使用;如果form中包括多个pages,可以将其中的任何pages作为next page使用。
语法:
/: NEW-PAGE [page_name]
示例:
/: NEW-PAGE
当前页结束,接下来的文本将显示在form中指定的page上
/: NEW-PAGE S1
和上面一个例子一样,除了S1被指定为next page外
2.2.2 限制分页:PROTECT
在打印文档的时候,有时候不想将一段段落打印在不同的页上,这时候就需要设置限制分页命令。为了做到这一点,SAPscript提供了PROTECT和ENDPROTECT命令对。如果当前页面上的余留空白能够用来打印一段完整的文本,则这一段文本就在当前也上打印,就好像没有PROTECT命令一样。然而,如果余留空白不能够用来打印整个文本,则PROTECT命令和NEW-PAGE具有同样的作用,这一段完整的文本将会在新的page中打印出来。
因而,PROTECT/ENDPROTECT也可以被看成是有条件的NEW-PAGE命令,条件就是当前main window中的余留空白是否能够满足PROTECT/ENDPROTECT中指定的文本。
语法:
/: PROTECT
:
:
/: ENDPROTECT
被保护的文本行封装在这两个命令之间。
注意:
l 没有PROTECT命令的ENDPROTECT命令是没有任何作用的;
l 如果漏掉了ENDPROTECT命令,SAPscript默认受保护的文档直到文本结束;
l PROTECT/ENDPROTECT不能嵌套,如果在第一个ENDPROTECT结束前,定义了第二个PROTECT,则第二个 PROTECT/ENDPROTECT被忽略;
l 如果在PROTECT/ENDPROTECT命令对中封装的文本对于单个page来说太长的话,则在这段文本之前立即执行换页命令,文本按照通常的方式打印。在文本中某一个位置换页是不可避免的。
2.2.3 下一个main window命令:NEW-WINDOW
理论上,每一page能够由99个main windows组成。每一个main window被分配一个从0到98的识别号,windows也按照这个顺序来加载。这个特征使得SAPscript可以打印labels和输出多列文本。当一个main window填满后,如果有下一个main window的话,就是用下一个main window,在这两者之间会插入一个分页。
可以使用命令NEW-WINDOW来显示的调用下一个main window,即使当前的main window没有填满。
语法:
/: NEW-WINDOW
2.2.4 给文本symbol分配值:DEFINE
语法:
/: DEFINE &symbol_name& = 'value'
通过这种定义获得的值在事务结束后就失去了。如果想再次打印这个文本块,必须再次给这个文本symbol赋值。DEFINE命令的一个目的就是提供将值持久赋给文本的一种方式,以便当文本模块再次调用时,值可以重复使用。
示例:
/: DEFINE &subject& = 'Your letter of 7/3/95'
分配给symbol的值最大可以有60个字符。也可以包含其他的symbol变量。
请注意下面两个例子:
第一个例子:
/: DEFINE &symbol1& = 'mail'
/: DEFINE &symbol2& = 'SAP&symbol1&'
/: DEFINE &symbol1& = 'script'
&symbol2& -> SAPscript
第二个例子:
/: DEFINE &symbol1& = 'mail'
/: DEFINE &symbol2& := 'SAP&symbol1&'
/: DEFINE &symbol1& = 'script'
&symbol2& -> SAPmail
请注意观察这两个例子中的&symbol2&以及后面的赋值symbol,可以看出,可以将一个symbol变量连同其他字符赋给另一个symbol变量,但是如果用“=” 赋值symbol,则当“=”右边的symbol变量值发生变化时,“=”左边的值相应发生变化;另外一个方面,如果用“=” 赋值symbol,则当“:=”右边的symbol变量值发生变化时,“:=”左边的值并不发生变化。
2.2.5 格式化日期字段:SET DATE MASK
为了定义日期格式的字段,需要使用SET DATE MASK控制命令。
语法:
/: SET DATE MASK = 'date_mask'
MASK可以是下面的代码:
l DD: day (two digits)
l DDD: day name - abbreviated
l DDDD: day name - written out in full
l MM: month (two digits)
l MMM: month name – abbreviated
l MMMM: month name - written out in full
l YY: year (two digits)
l YYYY: year (four digits)
l LD: day (formatted as for the L option)
l LM: month (formatted as for the L option)
l LY: year (formatted as for the L option)
在MASK中除了上面的代码外出现的所有其它字符都被当成简单文本处理,直接拷贝到输出。
示例:
假设当前的系统日期为 March 1st 1997,则
/: SET DATE MASK = 'Foster City, MM/DD/YY'
&DATE& -> Foster City, 03/01/97 (输出)
/: SET DATE MASK = 'MMMM DD, YYYY'
&DATE& -> March 01, 1997 (输出)
日期MASK可以通过下面命令设置成缺省值:
/: SET DATE MASK = ' '
注:在SAP系统表TTDTG中储存有所有的日期MASK,可以参考。
2.2.6 格式化Time字段:SET TIME MASK
为了定义Time格式的字段,需要使用SET TIME MASK控制命令。
语法:
/: SET TIME MASK = 'time_mask'
其中TIME MASK可以是下面的代码之一:
l HH hours (two digits)
l MM minutes (two digits)
l SS seconds (two digits)
在MASK中除了上面的代码外出现的所有其它字符都被当成简单文本处理,直接拷贝到输出。
示例:
假设当前的系统时间为 10:08:12,则,
/: SET TIME MASK = 'HH:MM'
&TIME& -> 10:08(输出)
/: SET TIME MASK = 'HH hours MM minutes'
&TIME& -> 10 hours 08 minutes(输出)
时间MASK可以通过下面命令设置成缺省值:
/: SET TIME MASK = ' '
2.2.7 设置与国家相关的格式:SET COUNTRY
语法:
/: SET COUNTRY country_key
其中country_key储存在系统表T005X中,可以参照这个系统表,获得要设置的country_key.
说明:
某种类型的字段其格式与Country设置有关。比如,象日期和数字字段,不同的国家有不同的表示方式。为了指定一种格式选项,就是用SET COUNTRY命令。
示例:
/: SET COUNTRY 'CAN'
/: SET COUNTRY &country_key& (可以用symbol变量类设置)
2.2.8 设置symbol位:SET SIGN
语法:
/: SET SIGN LEFT
在数字的左边显示symbol
/: SET SIGN RIGHT
在数字的右边显示symbol
2.2.9 Initializing Numbered Paragraphs:RESET
为了重置段落大纲的番号为其初始值,需要使用RESET命令,如果没有使用RESET命令,则所有段落大纲的番号就是连续的(但这可能不是你所需要的),如果在RESET命令中指定了段落大纲的名字,则段落及其子段落的番号就被重新初始化。
语法:
/: RESET paragraph_format
我们看一个例子,就明白了:
假设有这样一个段落N1,这个段落的作用是一个简单的用户交互,用户通过输入来做相应的处理:
* Proceed as follows if you want to work with the SAP R/3
system:
N1 Ensure that you have a PC
N1 Switch the PC on
N1 Click on the SAP icon using the mouse.
* You will then enter the SAP logon screen. In order to log
on here, you must carry out the following actions:
/: RESET N1
N1 Enter your user name
N1 Enter your password
N1 Select the application you want to use
注意其中的/: RESET N1命令,这一段段落将象下面这样输出:
Proceed as follows if you want to work with the SAP R/3
system:
1. Ensure that you have a PC
2. Switch the PC on
3. Click on the SAP icon using the mouse.
You will then enter the SAP logon screen. In order to log on here, you must carry out the following actions:
1. Enter your user name
2. Enter your password
3. Select the application you want to use
而如果没有/: RESET N1命令,这一段段落输出则为:
Proceed as follows if you want to work with the SAP R/3
system:
1. Ensure that you have a PC
2. Switch the PC on
3. Click on the SAP icon using the mouse.
You will then enter the SAP logon screen. In order to log on here, you must carry out the following actions:
4. Enter your user name
5. Enter your password
6. Select the application you want to use
2.2.10包含其他文本:INCLUDE
为了在当前文本中包含其他文本,需要使用INCLUDE命令,需要注意的是SAPscript仍然将include进来的文本作为独立的文本处理,仅仅只是在输出时,才将include进来的文本插入到INCLUDE命令指定的地方作为输出。
语法:
/: INCLUDE name [OBJECT o] [ID i] [LANGUAGE l] [PARAGRAPH p] [NEW-PARAGRAPH np]
其中name参数是必需的,其余参数是可选的。
示例:
/: INCLUDE MYTEXT
这个例子将MYTEXT文本包含在当前文本中
/: INCLUDE MYTEXT LANGUAGE 'E' PARAGRAPH 'A1'
这个例子将MYTEXT文本包含在当前文本中,同时指定了语言版本,这个语言版本与调用INCLUDE的文本无关,同时指定了这段文本将要使用的段落格式'A1'。
INCLUDE命令使用SAPSCRIPT-SUBRC作为状态代码返回:
l 0:INCLUDE命令执行成功
l 1:命令包含语法错误,因而不能执行
l 2:如果在SAPscript form中使用这个命令,将不会返回这个值
l 4:指定文本没有找到
2.2.11改变样式:STYLE
STYLE控制命令允许改变文本的样式,新的样式对所有余下的文本有效,除非碰到另外一个STYLE命令,如果指定”*”作为样式的名字,则执行这个命令后,将恢复成系统原始样式。
语法:
①/: STYLE style [DOMINANT]
②/: STYLE *
注意:1)STYLE命令对INCLUDE命令中包含的文本没有作用,如果要使其对INCLUDE命令中的文本起作用,必须添加DOMINANT选项。
2)如果INCLUDE命令中的文本页包含STYLE命令,则即使使用了DOMINANT选项,INCLUDE命令中的文本仍然使用它自己的STYLE命令指定的样式。
2.2.12格式化地址:ADDRESS
语法:
/: ADDRESS [DELIVERY] [TYPE t] [PARAGRAPH a] [PRIORITY p] [LINES l]
/: TITLE title
/: NAME name1[,name2[,name3[,name4]]]
/: PERSON name of natural person [TITLE form of address]
/: PERSONNUMBER number of the personen
/: DEPARTMENT department
/: STREET street name HOUSE house number
/: LOCATION additional location information
/: POBOX po box [CODE post code / zip code] [CITY city]
/: POSTCODE post code / zip_code
/: CITY city1[,city2]
/: NO_UPPERCASE_FOR_CITY
/: REGION county / state
/: COUNTRY recipient country [LANGUAGE language code]
/: COUNTRY_IN_REC_LANG
/: LANG_FOR_COUNTRY language key
/: FROMCOUNTRY sender country
/: ADDRESSNUMBER address number
/: ENDADDRESS
ADDRESS-ENDADDRESS控制命令根据COUNTRY参数所在的邮政习惯来格式化地址文本,参考字段在结构ADRS1, ADRS2, ADRS3中描述,值或者是变量可以分配给参数。
关于ADDRESS-ENDADDRESS控制命令的具体用法以及参数意义请参见SAP online help
示例:
/: ADDRESS
/: TITLE 'Firma'
/: NAME 'Schneider & Co', 'Finanzberatung'
/: STREET 'Kapitalgasse 33'
/: POBOX '12345' CODE '68499'
/: POSTCODE '68309'
/: CITY 'Mannheim'
/: COUNTRY 'DE'
/: FROMCOUNTRY 'DE'
/: ENDADDRESS
输出为:
Firma
Schneider & Co
Finanzberatung
Postfach 12345
68499 Mannheim
2.2.13在main window中设置Header Text:TOP
为了能够总是在main window的顶部打印指定的文本行,可以使用TOP/ENDTOP命令。通过这个命令,文本行总是作为main window中的Header Text。
语法:
/: TOP
:
:
/: ENDTOP
这样,main window中总是以TOP/ENDTOP中的文本行作为开始。
为了禁止Header Text,可以使用不带任何文本的TOP/ENDTOP命令,就象这样:
/: TOP
/: ENDTOP
注意:
如果main window已经包含了一些输出,那么新指定的Header Text仅对后续的页起作用;
对于Header Text的删除,同上
2.2.14在main window中设置Footer Text:BOTTOM
和在main window指定Header Text一样,也可以在main window中指定Footer Text,Footer Text总是在main window的底部打印。
语法:
/: BOTTOM
:
:
/: ENDBOTTOM
同样的,为了禁止Header Text,可以使用不带任何文本的BOTTOM/ENDBOTTOM命令,就象这样:
/: BOTTOM
/: END BOTTOM
2.2.15条件文本:IF
可以用IF命令来控制只有当满足一定条件的时候,才打印相应的文本行。
语法1:
/: IF condition
:
:
/: ENDIF
语法2:
/: IF condition
:
/:ELSEIF condition
:
/:ELSE
/: ENDIF
语法3:
/: IF condition
:
/:ELSE
:
/: ENDIF
2.2.16条件文本:CASE
CASE控制命令相当于多个IF命令,用来控制当满足相应条件的时候,打印相应的文本行。
语法:
/: CASE symbol
/: WHEN value1
:
/: WHEN value2
:
/: WHEN valuen
:
/: WHEN OTHERS.
:
/: ENDCASE
注意:1)CASE语句必须以ENDCASE结束
2)WHEN OTHERS是可选的
2.2.17调用ABAP子程序:PERFORM
可以使用PERFORM命令调用ABAP子程序(FORM),可以这种调用来进行计算、从数据库中获取需要显示和打印的数据,格式化数据等等。
PERFORM和其他控制命令一样,当文档需要显示和打印而被格式化的时候执行。通过在子程序中设置symbol变量的值来完成子程序和文档之间的通讯。
语法:
/: PERFORM <form> IN PROGRAM <prog>
/: USING &INVAR1&
/: USING &INVAR2&
......
/: CHANGING &OUTVAR1&
/: CHANGING &OUTVAR2&
......
/: ENDPERFORM
这里INVAR1 和INVAR2可以是SAPscript四种Symbol类型之一;
OUTVAR1和OUTVAR2是本地symbol,因此必须是字符串型。
这里调用的ABAP中的子程序必须象下面这样定义:
FORM <form> TABLES IN_TAB STRUCTURE ITCSY
OUT_TAB STRUCTURE ITCSY.
...
ENDFORM.
示例:
在SAPscript from中,调用了ABAP程序QCJPERFO中的子程序GET_BARCODE。
SAPscript form 中的定义:
/: PERFORM GET_BARCODE IN PROGRAM QCJPERFO
/: USING &PAGE&
/: USING &NEXTPAGE&
/: CHANGING &BARCODE&
/: ENDPERFORM
/
/ &BARCODE&
ABAP 程序中的子程序定义:
REPORT QCJPERFO.
FORM GET_BARCODE TABLES IN_PAR STUCTURE ITCSY
OUT_PAR STRUCTURE ITCSY.
DATA: PAGNUM LIKE SY-TABIX, "page number
NEXTPAGE LIKE SY-TABIX. "number of next page.
READ TABLE IN_PAR WITH KEY ‘PAGE’.
CHECK SY-SUBRC = 0.
PAGNUM = IN_PAR-VALUE.
READ TABLE IN_PAR WITH KEY ‘NEXTPAGE’.
CHECK SY-SUBRC = 0.
NEXTPAGE = IN_PAR-VALUE.
READ TABLE IN_PAR WITH KEY ‘BARCODE’.
CHECK SY-SUBRC = 0.
IF PAGNUM = 1.
OUT_PAR-VALUE = ‘|’. "First page
ELSE.
OUT_PAR-VALUE = ‘||’. "Next page
ENDIF.
IF NEXTPAGE = 0.
OUT_PAR-VALUE+2 = ‘L’. "Flag: last page
ENDIF.
MODIFY OUT_PAR INDEX SY-TABIX.
ENDFORM.
2.2.18合计:SUMMING
SUMMING控制命令用来合计值。该命令仅能定义一次。
语法:
/: SUMMING program_symbol INTO total_symbol
注意:SAPscript不能够动态创建合计字段,program_symbol必须定义在调用程序的TABLES结构中。
3.SAPscript Symbols
SAPscript识别四种类型的symbols:
l System symbols
l Standard symbols
l Program symbols
l Text symbols
这四种类型之间的主要区别在于值的来源。
l System symbols值由SAPscript提供;
l Standard symbols值在系统表TTDTG中定义;
l Program symbols值由运行时刻的程序提供;
l Text symbols值既可以从文本中的控制命令获取,也可以由Text Editor的Include函数动态提供。
SAPscript自动识别symbols的类型;
首先,检查symbols是否为System symbols;如果不是,然后检查symbols是否定义在调用程序的数据域中,如果是,就是Program symbols;如果不是,SAPscript就从TTDTG表中读取,如果在TTDTG表中发现symbols,则为Standard symbol;如果上面都不是,就是Text symbols。
3.1Syntax of Symbols
定义一个symbol有下面的要求:
¨ 在一个symbol两边需要使用“&”;
¨ 在symbol名字内不能使用空白字符,而且也不能用'+()这些符号,因为这些符号是用来定义格式选项的;
¨ 在SAPscript Editor中不能将symbol分开在多行编写,如果一定要这么做,需要使用long line来避免(long line段落格式为= or /=);
¨ 封装在“&”符号之间的格式选项必须用“()”,而且表示格式的字母要用大写。
注意:如果定义了一个不能满足上面所有条件的symbol,则系统不会将它当成symbol来处理,而是作为一个文本直接输出。
下面是一些有效的symbol的例子:
&symbol&
&MY_symbol&
&KNA1-NAME1&
&DATE&
&KNA1-UMSAT(I)&
下面是一些无效的symbol的例子:
&mysymbol
&my symbol&
&mysymbol)&
&symbol(Z&
&KNA1-UMSAT(i)&
请大家思考一下为什么?
注意:symbol名字不区分大小写,比如下面三个symbol在SAPscript中会作为一个symbol处理;
&mysymbol&
&Mysymbol&
&MYSYMBOL&
3.2System Symbols
SAPscript提供了可以在各种文本中使用的system symbols,而且这些symbols的定义是固定的,其值由SAPscript提供。
这些system symbols可以参见下表,具体用法请参见sap online help
名字 |
定义 |
描述 |
Current Date |
&DATE& |
显示当前时间 |
Current Day Number |
&DAY& |
显示当前的天数 |
Current Month Number |
&MONTH& |
显示当前的月数 |
Current Year Number |
&YEAR& |
显示当前年号,四位数字 |
Local Date |
&LDATE& |
将当前日期转换为本地日期(仅对COUNTRY = JAPAN) |
Current Day Name |
&NAME_OF_DAY& |
当前天数的名字,比如Monday等等。 |
Current Month Name |
&NAME_OF_MONTH& |
当前月的名字,比如1月等等。 |
Current Time |
&TIME& |
显示当前时间 |
Hours Component of Current Time |
&HOURS& |
显示小时 |
Minutes Component of Current Time |
&MINUTES& |
显示分钟 |
Seconds Component of Current Time |
&SECONDS& |
显示秒 |
Current Page Number |
&PAGE& |
显示当前页数 |
Page Number of the Next Page |
&NEXTPAGE& |
显示当前页的下一页 |
Selected Device Type |
&DEVICE& |
用来指定外部打印设备类型 |
Spaces |
&SAPCE& |
用来生成空格字符串 |
Underline |
&ULINE& |
用来在输出文本中插入一个带下划线的字符 |
Vertical Line |
&VLINE& |
用来在输出文本中插入一个垂直方向的字符 |
3.3Program Symbols
如果symblos从数据区域获得值,这种symbols就称为program symbols。program symbols最大为255个字符,当使用TABLES声明语句的时候,program symbols的名字由表名和字段名中间加短横线组成,例如:
&KNA1-NAME1&, &KNA1-ORT01&, &KNA1-PFACH&等等。
否则,program symbols按照打印程序中定义的方式使用(比如&MYCOUNTRY&)。
注意:symbol在form中出现的顺序是很重要的,它决定symbol当前的值,例如:
Form/text中有如下定义:
....
/: DEFINE &mysymbol& = ‘abc’ ①
* &mysymbol& ②
....
打印程序中定义为:
....
Data: mysymbol(5) value ‘xyz’.
....
在这个例子中,最终输出为:abc
但是如果将Form/text中①、②的位置交换一下,如下所示:
....
* &mysymbol& ②
/: DEFINE &mysymbol& = ‘abc’ ①
....
打印程序中定义为:
....
Data: mysymbol(5) value ‘xyz’.
....
在这个例子中,最终输出为:xyz
如果在①后面再加上* &mysymbol&,则输出为:xyz、abc
关于program symbols的更为详细的描述请参见sap online help
3.4Standard Symbols
Standard symbols在系统表TTDTG中定义,这个表包含每一个Standard symbols的名字和值,而且和语言相关,可以由60个字符组成,SAP提供了修改这个表的表准入口,从而可以让用户自己定义自定义的Standard symbols。可以在各种文本中使用Standard symbols。
3.5Text Symbols
除了上述的三中Symbols外,其余的Symbols都叫做Text Symbols,有两种方式来定义Text Symbols:
¨ 在文本编辑器中,选择Include ® Symbols ® Text,然后按照提示来做;
¨ 在文本中,使用DEFINE控制命令。
例如:
/: DEFINE &mysymbol& = 'xxx xxx xxxxx xxxx'
&mysymbol&
/: DEFINE &mysymbol& = 'yyyyy yyy yyyy'
/ &mysymbol&
输出为:
xxx xxx xxxxx xxxx
yyyyy yyy yyyy
注意:
Text Symbols使用“' '”符号。
4.Formatting Options
打印symbols值的时候,通常是打印其完整的长度,尽管移去了尾部的空格,例外情况是对于这样一些类型的program symbols:URR, DEC, QUAN, INT1 INT2, INT4, PREC, 以及FLTP。这些类型的program symbols是右对齐的,其输出长度在SAP Dictionary中定义。
可以通过使用Formatting Options,按照你自己的要求来改变标准的格式。在定义symbols同时提供Formatting Options参数,这些选项很多就是一个单个的大写字母,在单个symbol中可以定义多个Formatting Options。
SAPscript中定义了大约20个Formatting Options,我们对其中比较重要的加以介绍,其余的请参考sap online help
4.1Offset(偏移量)
语法:
&symbol+offset&
作用:为symbol指定偏移量,在显示时,不显示从symbol第一个字符到offset位置的字符,如果offset的值大于symbol的最大长度,则没有显示;请看下面的例子:
If < symbol> has the value 123456789, the following will be displayed:
&symbol& -> 123456789
&symbol+3& -> 456789
&symbol+7& -> 89
&symbol+12& ->
&symbol+0& -> 123456789
4.2Output Length
如果在输出时,只需要symbol的一部分,我们可以使用Output Length选项。
语法:
&symbol(length)&
示例:
If < symbol> has the value 123456789.
&symbol(3)& -> 123
&symbol(7)& -> 1234567
当然,也可以将offset选项和Output Length结合起来使用,比如:
&symbol+4(3)& -> 567
¨ 如果指定的值大于symbol的长度,则在symbol后追加空格。
¨ 可以用字符“*”来指定program symbol的长度,这样的话,在打印的时候,按照ABAP Dictionary中定义的长度来打印输出。
语法:
&symbol(*)&
4.3 Omitting the Leading Sign
数值型program symbols可以有符号,通常,符号显示在数值的右边。可以使用S选项略去符号位。
语法:
&symbol(S)&
示例:
The ITCDP-TDULPOS field contains the value -100.00. The ABAP Dictionary definition for this field includes a leading sign.
&ITCDP-TDULPOS& -> 100.00-
&ITCDP-TDULPOS(S)& -> 100.00
类似的选项有:
①&symbol(<)& à Leading Sign to the Left
例如:
&ITCDP-TDULPOS& -> 100.00-
&ITCDP-TDULPOS(<)& -> -100.00
②&symbol(>)& àLeading Sign to the Right
例如:
&ITCDP-TDULPOS& -> 100.00-
&ITCDP-TDULPOS(<)& -> -100.00
&ITCDP-TDULPOS(>)& -> 100.00-
4.3 Omitting Leading Zeros
某些symbol values在输出时带有0,比如01,如果想禁止这个特性,使用Omitting Leading Zeros选项。
语法:
&symbol(Z)&
示例:
Assuming the current date is 1.1.1994,
&DAY& -> 01
&DAY(Z)& -> 1
4.4 Space Compression
如果symbol value是一列单词,每一个单词之间既可以用单个字符作为分隔,也可以用一串空字符来分隔,Space Compression选项的作用就是将每一个空字符串用单个的空格字符来代替,如果symbol value最前面是空格,则会被删除,Space Compression的作用和ABAP的CONDENSE命令相同。
语法:
&symbol(C)&
示例:
Assuming ' Albert Einstein ' is the symbol value,
则,
&symbol& -> Albert Einstein
&symbol(C)& ->Albert Einstein
4.5 Number of Decimal Places
如果program symbol是DEC, QUAN和FLTP数据类型之一,则它们可以包含小数位。用Number of Decimal Places格式选项,可以覆盖在SAP Dictionary中默认定义的这些数据类型的小数位置。
语法:
&symbol(.N)&
示例:
The EKPO-MENGE field contains the value 1234.56. The Dictionary definition specifies 3 decimal places and an output length of 17.
&EKPO-MENGE& -> 1,234.560
&EKPO-MENGE(.1) -> 1,234.6
&EKPO-MENGE&(.4) -> 1,234.5600
&EKPO-MENGE&(.0) -> 1,235
4.6 Omitting the Separator for ‘Thousands’
DEC, CURR, INT和QUAN类型的Symbols的整数位通常用千位分隔符进行格式化,Omitting the Separator for ‘Thousands’选项可以忽略位分隔符。
语法:
&symbol(T)&
示例:
The EKPO-MENGE field contains the value 1234.56. The Dictionary definition specifies 3 decimal places and an output length of 17.
&EKPO-MENGE& -> 1,234.560
&EKPO-MENGE(T)& -> 1234.560
4.7 Specifying an Exponent for Floating Point Numbers
这个选项为浮点数指定指数。
语法:
&symbol(EN)&
注意:如果指定N = 0,则不显示指数,这时,&symbol(E0)&和&symbol(E)&作用相同。
示例:
In this example, the PLMK-SOLLWERT field is assumed to have the value 123456.78 and to be of data type FLTP.
&PLMK-SOLLWERT& -> +1.23456780000000E+05
&PLMK-SOLLWERT(E3)& -> +123.456780000000E+03
&PLMK-SOLLWERT(E6)& -> +0.12345678000000E+06
&PLMK-SOLLWERT(E0)& -> +123456.780000000
&PLMK-SOLLWERT(E)& -> +123456.780000000
4.8 Right-Justified Output
Symbol values与其它数值型不一样,通常是左对齐,如果要指定右对齐方式,需要使用这个Formatting Optios。
注意:在使用这个选项的时候,必须指定输出长度。
语法:
&symbol(R)&
示例:
If symbol has the value 1234.
&symbol& -> 1234
&symbol(8R) -> 1234
注意:对program symbols来说,可能会使用定义在SAP Dictionary中的长度,而不是象这里显示指定。
4.9 Fill Characters
对于symbols value的起始空格,可以用你指定的字符来代替,在这个选项后面紧接着给出要替换成的字符。
语法:
&symbol(F f )&
这里f = 要替换成的字符。
示例:
The figure for customer sales in the KNA1-UMSAT field is $700. The Dictionary description of the field specifies an output length 8.
&KNA1-UMSAT& -> 700.00
&KNA1-UMSAT(F*)& -> **700.00
&KNA1-UMSAT(F0)& -> 00700.00
4.10 Suppressing Output of Initial Values
如果symbols仍然包含初始值,用这个选项可以禁止输出symbols的初始值。
语法:
&symbol(I)&
示例:
Assuming KNA1-UMSAT contains the value 0 and the currency is DEM.
&KNA1-UMSAT& -> 0,00
&KNA1-UMSAT(I)& ->
If the field contains an amount other than 0, this value is printed in the normal way.
&KNA1-UMSAT& -> 700,00
&KNA1-UMSAT(I)& -> 700,00
4.11Local Dates(Currently Only for Japan)
可以将日期字段转化为本地日期,使用的编辑mask为JPDA,代表使用日本语设置,因而仅仅在日语版R/3中使用。
语法:
&symbol(L)&
4.12Changing the Value of a Counter
对于SAPSCRIPT-COUNTER_x(x = 0 … 9),在打印当前值之前,可以以1位单位递增或者递减SAPSCRIPT-COUNTER_x的值。
语法:
①&SAPSCRIPT-COUNTER_x(+)& Increases by 1 the contents
of the counter variable x
(x=0.. 9)
②&SAPSCRIPT-COUNTER_x(-)& Decreases by 1 the contents
of the counter variable x
(x=0.. 9)
注意:1)如果仅仅只是想改变SAPSCRIPT-COUNTER_x的值,并不实际打印改变后的值,可以结合输出长度Formatting Options(参见下面的例子)
2)如果想指定某一个具体的值,使用DEFINE命令
示例:
Assume that &SAPSCRIPT-COUNTER_1& initially has the value 2.
&SAPSCRIPT-COUNTER_1& -> 2
&SAPSCRIPT-COUNTER_1(+)& -> 3
&SAPSCRIPT-COUNTER_1(-)& -> 2
&SAPSCRIPT-COUNTER_1(-)& -> 1
&SAPSCRIPT-COUNTER_1(+0)& ->
&SAPSCRIPT-COUNTER_1(+)& -> 3
4.13Preceding and Subsequent Texts(Pre-Text/Post-Text)
除了使用symbols的初始值外,在symbols的初始值发生改变后,也可以在输出symbols的同时,指定与symbols一同输出的文本;这样的文本既可以在symbols之前(Pre-Text),也可以在symbols之后(Post-Text),注意,如果symbols包含初始值,这些文本就被禁止。
语法:
&'pre-text'symbol'post-text'&
注意:所有这些必须写在一行中(在文本编辑器中),如果太长,需要使用“=”或者“/=”段落属性。
示例:
The KNA1-PFACH field contains a customer P.O. Box number. Since the text "P.O. Box" is not stored in the field along with the value, you would normally write the following for the P.O. Box line of an address:
P.O. Box &KNA1-PFACH&
However, if no P.O. Box has been specified, the text "P.O. Box" would still appear on its own in the address. To prevent this, use pre-text or post-text (in this case, pre-text).
P.O. Box &KNA1-PFACH& -> P.O. Box
&'P.O. Box 'KNA1-PFACH& ->
If a P.O. Box has been specified, then this will be displayed together with the appropriate text in the normal way.
&'P.O. Box 'KNA1-PFACH& -> P.O. Box 123456
5.SAPscript Function Modules
为了在ABAP程序中调用我们设计的FORM来打印我们需要的文档,SAPscript提供了很多Function Modules,下表是SAPscript中所提供的所有Function Modules,在本指南中,我们仅仅详细地讨论其中的三个Function Modules,它们是OPEN_FORM、CLOSE_FORM和WRITE_FORM;关于其他Function Modules的使用方法,请大家参考sap online help。
数据库相关 |
描述 |
READ_TEXT |
Reads a text module and passes it to the specified work areas. |
Like READ_TEXT. In addition, it passes the first few text lines to a second lines table. |
|
Reads the text lines of a reference text and passes them to the specified lines table. |
|
Saves a text. |
|
Deletes a text. |
|
Copies a text. |
|
Finds the texts for an application object. |
|
管理相关 |
|
Creates a reference to another text. |
|
Renames the text in the text memory. |
|
Creates for all texts in the text memory the call of an appropriate update module. |
|
Initializes the internal work areas for a text. |
|
调用编辑器 |
|
Calls the text editor. |
|
Merges the inline lines with the other text lines and calls the text editor. |
|
一致性检查 |
|
Checks the authorization for standard texts. |
|
Checks whether the specified text ID is valid. |
|
Checks whether the specified text language is valid. |
|
Checks whether the specified text object is valid. |
|
Checks whether the specified text name is valid. |
|
编辑函数 |
|
Finds the variable symbols that occur in a text. |
|
Checks whether a character string is a SAPscript symbol. |
|
Replaces symbols in a text with their values. |
|
Defines the value of a text symbol. |
|
Replaces control statements in a text (IF, CASE...). |
|
Replaces INCLUDE control statements by the text lines of the corresponding text. |
|
打印相关 |
|
Formats a text for output. |
|
Prints a text in the internal ITF format. |
|
Form 函数相关 |
|
Opens the form output. |
|
Ends the form output. |
|
Starts a new form. |
|
Calls a form element. |
|
Writes text lines into a form. |
|
Ends the current form. |
|
Sends a control statement to the form. |
|
Finds the elements of a form. |
|
Passes the lines of a form elements into an internal lines table. |
|
格式转换 |
|
Converts texts between different formats. |
|
Converts texts between R/3 format (SAPscript) and R/2 format. |
|
Converts the formatted text (OTF format). |
|
Exchanges the paragraph and character formats of a text with those of another style or form. |
|
文本传输相关 |
|
Imports texts. |
|
Exports texts. |
|
Uploads/Downloads texts. |
5.1OPEN_FORM
OPEN_FORM function module作用是打开将要打印的form,在你使用其它form function比如(WRITE_FORM, START_FORM, CONTROL_FORM...)之前,必须先要调用这个function module。
必须通过使用CLOSE_FORM function module来结束将要打印的form,否则,系统不会显示或者打印任何东西。
在一个ABAP程序中,可以使用多个OPEN_FORM…CLOSE_FORM对,这样的话,可以在一个程序中,将几个不同的输出格式输出到缓冲池中。
语法(ABAP程序):
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = SPACE
LANGUAGE = SY-LANGU
DEVICE = 'PRINTER'
DIALOG = 'X'
OPTIONS = SPACE
APPLICATION = 'TX'
ARCHIVE_INDEX = SPACE
ARCHIVE_PARAMS = SPACE
IMPORTING
LANGUAGE =
RESULT =
NEW_ARCHIVE_PARAMS =
EXCEPTIONS
CANCELED =
DEVICE =
FORM =
OPTIONS =
UNCLOSED =
参数说明:
1) Exporting 参数
FORM------à控制输出格式的form的名字,当调用了OPEN_FORM后,可以使用其它Function Modules来向这个form中输出文本。如果没有指定这名字,则在调用任何output functions时,必须使用START_FORM来启动一个有效的form。缺省值:SPACE
LANGUAGE------àform使用的语言,缺省值:SY-LANGU
DEVICE------à指定form的输出设备,缺省值:PRINTER
DIALOG------à打印时是否显示打印对话框,可能值——' ',不显示;'X',显示;缺省值为'X'
OPTIONS------à用这个参数来设置打印选项,打印选项在结构ITCOP中定义,缺省值SPACE
APPLICATION------à当DEVICE为SCREEN的时候,在显示格式化文本的界面上,需要定义一些menu,这些menu为在SCREEN中选择其他打印设备提供输入。参数值为SAPscript提供的一个界面名字,关于这些界面的对象名,可以参考表TTXOB,缺省值为'TX'
ARCHIVE_INDEX------à为要打印的归档输入索引信息,参考结构TOA_DATA,缺省值:SPACE
ARCHIVE_PARAMS------à归档参数,参考ABAP Dictionary结构ARC_PARAMS,缺省值:SPACE
2) Importing 参数
LANGUAGE------à当前系统使用的form的语言环境,参考字段:THEAD-TDSPRAS
RESULT------à保存打印结果信息,存储在结构ITCPP中
NEW_ARCHIVE_PARAMS------à包含归档处理结果,存储在结构ARC_PARAMS中
3) Exceptions 参数
CANCELED------à用户取消当前这次form打印
DEVICE------à有效的设备类型
FORM------à包含系统不能找到的form的名字
OPTIONS------à包含无效的formatting options
UNCLOSED------à当旧的from仍然打开的时候,系统被告知要打开一个新的form,必须先关闭旧的form
5.2CLOSE_FORM
功能:关闭用OPEN_FORM打开的form。
语法:
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT =
TABLES
OTFDATA = ?...
EXCEPTIONS
UNOPENED =
参数说明:
RESULT------àCLOSE_FORM处理结果,存储在结构ITCPP中
OTFDATA------à如果在参数OPTIONS中,字段TDGETOTF包含'X',系统就返回在OTFDATA表中定义
的OTF输出格式(?)
UNOPENED------à如果这里没有form被打开,则出错。
5.3WRITE_FORM
系统将在ELEMENT参数中指定的element输出到当前打开的form。
语法:
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = SPACE
WINDOW = 'MAIN'
FUNCTION = 'SET'
TYPE = 'BODY'
IMPORTING
PENDING_LINES =
EXCEPTIONS
ELEMENT =
FUNCTION =
TYPE =
UNOPENED =
UNSTARTED =
WINDOW =
参数说明:
1) Exporting 参数
ELEMENT-----à指定想输出到指定window(WINDOW参数)中的文本元素的名字,这个文本元素必须定义在form window中,如果没有指定文本元素,将用缺省值:SPACE
WINDOW-----à指定想输出的文本元素所在的window,缺省为:MAIN
FUNCTION-----à这参数决定如何输出文本元素,输出类型依赖与window的类型和区域,具体参见sap online help
TYPE-----à这个参数仅仅针对main window而言,这个参数决定将文本元素输出到main window的什么位置,可能值为:TOP, BODY, BOTTOM;缺省值为:BODY
2) Importing 参数
PENDING_LINES-----à如果文本输出到main window的BOTTOM位置,可能会因为main window中没有足够的空间来容纳这些文本,这时候,系统就会自动将这些文本输入到下一页的BOTTOM位置,这种输出就叫做PENDING;如果输出是PENDING,则参数PENDING_LINES包含’X’,而且打印程序也会做出相应的反映,例如,文本末尾的显示分页命令NEW-PAGE可以显示触发PENDING输出到下一页的BOTTOM位置。
3) Exceptions 参数
ELEMENT-----à指定的文本元素不存在
FUNCTION-----à指定的值不存在,FUNCTION的可能值为SET, APPEND, DELETE
TYPE-----à指定的window区域类型无效,TYPE的可能值为BODY, TOP, BOTTOM
UNOPENED-----à如果这里没有form被打开,则出错
UNSTARTED-----à如果这里没有form被打开,则出错
WINDOW-----à在当前的form中指定的window不存在
6一个完整的例子
(具体说明在培训时讲解)
REPORT Z_TEST .
TABLES: EKKO,EKPO,NAST,THEAD,ITCPO,EKET,MAKT.
PARAMETERS: ZEBELN LIKE EKKO-EBELN.
*ALL SCREEN 200.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'Z_TEST'
LANGUAGE = SY-LANGU.
SELECT SINGLE * FROM EKKO WHERE EBELN = ZEBELN.
SELECT * FROM EKPO WHERE EBELN = ZEBELN.
SELECT SINGLE * FROM EKET WHERE EBELN = ZEBELN AND EBELP = EKPO-EBELP.
SELECT SINGLE * FROM MAKT WHERE MATNR = EKPO-MATNR AND
SPRAS = SY-LANGU.
* SHIFT ekpo-matnr LEFT DELETING LEADING '0'.
SHIFT EKPO-EBELP LEFT DELETING LEADING '0'.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'TEST'
TYPE = 'BODY'
WINDOW = 'MAIN'
EXCEPTIONS
OTHERS = 01.
ENDSELECT.
CALL FUNCTION 'CLOSE_FORM'.
REPORT ZBC400_04_020 NO STANDARD PAGE HEADING.
TABLES:SPFLI,SFLIGHT.
TYPES:BEGIN OF REC1,
CARRID LIKE SPFLI-CARRID,
CONNID LIKE SPFLI-CONNID,
CITYFROM LIKE SPFLI-CITYFROM,
CITYTO LIKE SPFLI-CITYTO,
DISTANCE LIKE SPFLI-DISTANCE,
END OF REC1.
DATA: ITAB1 TYPE TABLE OF REC1 WITH HEADER LINE.
DATA: I,J TYPE I.
DATA: Z_FREE LIKE SFLIGHT-SEATSMAX.
START-OF-SELECTION.
SELECT CARRID CONNID CITYFROM CITYTO DISTANCE
FROM SPFLI
INTO TABLE ITAB1.
LOOP AT ITAB1.
I = I + 1.
J = I MOD 2.
IF J = 0 .
FORMAT COLOR 3.
ELSE.
FORMAT COLOR 2.
ENDIF.
WRITE:/1 ITAB1-CARRID,
15 ITAB1-CONNID,
30 ITAB1-CITYFROM,
45 ITAB1-CITYTO,
60 ITAB1-DISTANCE.
ENDLOOP.
END-OF-SELECTION.
SET PF-STATUS 'Z_YZH'.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'DETAIL'.
PERFORM DETAIL.
ENDCASE.
TOP-OF-PAGE.
WRITE:/30 '航班信息表'.
WRITE:/ '打印日期:',SY-DATUM, 50 '打印者:',SY-UNAME.
ULINE.
FORMAT COLOR 1.
WRITE:/1 '航班号',
15 '连接号',
30 '出发地',
45 '目的地',
60 '飞行距离'.
ULINE.
*&---------------------------------------------------------------------*
*& Form DETAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DETAIL.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'Z_04_04'
LANGUAGE = SY-LANGU.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'TITLE'
TYPE = 'BODY'
WINDOW = 'MAIN'
EXCEPTIONS
OTHERS = 01.
SELECT *
FROM SPFLI INTO SPFLI.
SELECT *
FROM SFLIGHT INTO SFLIGHT WHERE CARRID = SPFLI-CARRID
AND CONNID = SPFLI-CONNID.
CLEAR Z_FREE.
Z_FREE = SFLIGHT-SEATSMAX - SFLIGHT-SEATSOCC.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'INFORMATION'
TYPE = 'BODY'
WINDOW = 'MAIN'
EXCEPTIONS
OTHERS = 01.
CLEAR SFLIGHT.
ENDSELECT.
CLEAR SPFLI.
ENDSELECT.
CALL FUNCTION 'CLOSE_FORM'.
ENDFORM. " DETAIL