Smart Forms&ScriptFrom

时间:2024-01-01 19:08:27
Smart Forms&ScriptFrom
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292174.html

Smart Forms

Smart Forms是在SAPScript的基础上产生的一种新的表单制作方式,它完全兼容SAPScript。但Smart Forms 更独立,且使用起来更加方便,可以创建FORM的同时,生成该表单对应的功能块(Function Module),从而为FORM和ABAP程序的交互提供参数接口

在中文环境下创建的Form,一般只在中文环境下打开来编辑,在英文环境中中文文本节点可能显示不出

事务码:SMARTFORMS

Smart Forms&ScriptFrom

Form:表单版式

Style:文本样式

Text Module:文本模块

一个FORM往往是由页面(PAGES)、输出区域(OUTPUT AREAS即WINDOWS)、地址栏(ADRESS)、图形(GRAPHICS,比如公司LOGO)、数据(DATA)、以及文本内容(TEXT)组成

文本模块

Text Module:文本模块,主要用于设置一段固定的文本信息,如报表头名称,或者是报表附加条款说明等信息。

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

像下面这此使用:

Smart Forms&ScriptFrom

节点元素

FORM中元素的输出顺序由Pages and Windows中的后继节点结构和顺序来决定,导航树中的第一个页节点是FORM处理的起始页,该节点在FORM创建过程中被自动创建。

节点类型决定了节点可能的处理过程,如打印节点内容(文本、地址、图片等)、执行节点中的语句或根据规则执行当前节点的后继循环节点。

导航树中的所有节点,按照从上到下的顺序依次进行处理(包括“Pages and Windows”节点之间)

除开“Pages and Windows”外,其它所有节点都是可以加上执行条件属性设置的,也就是说,只要满足设置条件时,该节点及子节点才被处理

Page节点

每一个Form至少包含一个页(Page)节点

Page节点为“Pages and Windows”的子节点,如果某个Page内容超出一页,则会将其他内容输出到Pages节点的Next Page属性所指定页面,即多出一页的内容会产生分页,一般Next Page分页默认为自己,因为一般报表的主体内容会使用分页,并且这些分页排版相同,所以此种Page的Next Page不会设置成其他Page。如果报表需要有封面与封底,则需要另外添加Page这样的节点元素

注:要注意的是,这里的Page不是一页的概念,它是指定页面的一种统称,具体输出内容由它下面子节点元素来决定,且输出内容可能会产生多页

Smart Forms&ScriptFrom

每Page页面除了通过Next Pag静态属性来设置下一页外,还可以在通过COMMAND节点的Go to New Page属性来设置,当然,这种页面跳转是有条件的,所以COMMAND一般放在CONDITION条件节点里使用:

Smart Forms&ScriptFrom

窗口元素

页面中的包含主窗口(Main Windows)和子窗口(Secondary Windows),其中,主窗口中的数据可以在多个打印页面中可连续输出,即可跨页面(分页显示)。每个页面(PAGE)中只能包含一个主窗口,但可以有多个子窗口(分页情况下,子窗口应该在每页上都会显示,就是页眉页脚一样)。

一个FORM中只能定义一个主窗体;

不同PAGE上的主窗体必须宽度相同,但是高度可以不同;

一个没有主窗体的PAGE指向的下一个页面不能为它自己。

窗口中的模板的宽度与高度不要超过了窗口的高度与宽度,否则显示不出

另外,表格式的宽度也不能比窗口的宽,否则编译时出错:Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

文本节点

一般使用文本节点在已经定义的窗口中添加各种类型的文本元素,唯一的例外是地址类型的文本元素也可以通过Address节点来添加。SAP Smart Form中含下列类型的文本:

①文本元素:使用Smart Form中的PC Editor在Form创建过程中编辑的新文本。

②文本模块:独立于Smart Form,可以直接添加至Form,或参照文本模块生成Form文本元素。

③包含文本:已经插入设计好的SAPScript标准文本(在SO10中创建,可通过SE75查找),体现了二者之间的兼容性。

可以把一个文本节点直接添加到下列各种类型的节点下:

1、 主窗口(Main Window):文本可能在多页中连续输出

2、 子窗口(Secondary Window):将文本确切定义在指定页中

3、 表格节点(Table):用于显示表格的内容

4、 模板节点(Template):把文本定义在静态表格的单元格中

5、 标题(Header)和脚注(Footer):用于显示表格中总计数据等

6、 事件(Event)节点:用于显示表格的小计数据

Smart Forms&ScriptFrom

有以下系统字段可以直接引用

Smart Forms&ScriptFromSmart Forms&ScriptFrom

&SFSY-FORMPAGES&:返回Form中的总页数,在一些报表中可能会出现总页数为“*”号的问题,可以考虑使用参数压缩输出字符串,例如:&SFSY-FORMPAGES(3CZ)&

&SFSY-WINDOWNAME&:返回当前窗口的名称 Smart Forms&ScriptFrom

&SFSY-PAGENAME&:返回当前页的名称Smart Forms&ScriptFrom

&SFSY-PAGEBREAK&:触发分页后该字段被赋值为 X

图形节点SE78

图开节点中的图片可以直接使用服务器上已有的图片,或者通过事务代码SE78先将本地图片上传到SAP服务器后再使用:

Smart Forms&ScriptFrom

模板节点

模板节点比表格节点要灵活,模板单元格中可以存储图片节点,可以显示图片,而不是只文本节点,另外,模板节点设置出的表格的行高是可以设置的,但表格节点是不能进行设置的。

Smart Forms&ScriptFrom

所有单元格的总宽度一定要等于事个模板的宽度,否则编辑出错

Smart Forms&ScriptFrom

行定义中的“From”和“To”选项用于指定当前的设置应用于哪些行,行号的起始值为1,且行号不能出现间隔与重复。可以通过指定“Reference”的值将其他行的设置应用到当前行,指定引用号后,系统将自动拷贝该行的行高和列宽等设置到当前行

将文本等节点输出到模板指定的单元格位置:

Smart Forms&ScriptFrom

注意边框线的宽度:默认为15TW。在实际工作中建议设置为20TW,用来适应针式打印机,激光打印机,喷墨打印机等。

边框宽度:因为在实际工作中所使用的打印机不一样,导致有的边框线条打印不出来,所以建议设计成20TW(为临界值)

Smart Forms&ScriptFrom

地址节点

地址是经常出现在各种信函中的文本,在SAPScript中,它是文本元素的一部分。通过地址的好处是保证地址是根据发信人国家的书写规范输出,使用地址节点有一个前提条件,即该用户必须具有SAP CAA的管理员权限,否则只有通过文本节点进行地址添加

样式

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

“表头数据”是用来设置默认的字体及段落格式,其主要属性包括如下内容:

Smart Forms&ScriptFrom

创建新的“段落格式”与“字符格式”时,名称最长不能超过两位

SAP中的字体并非从当前操作系统的字体库所取,除了一些默认的字体外,其他类型的主题还需要在SAP中额外安装,通过SE73可以实现对字段基本属性的维护

Smart Forms&ScriptFrom

通过“字符格式”还可以指定字段样式外,还可以定义成条形码:

Smart Forms&ScriptFrom

小技巧:查看Form生成的函数

在设计好一个 smartform 后,系统会自动生成一个相对应的 function module , 我们在调用smartform时实际上就是调用这个对应的 function

如下我们可以找到对应的function: 点击菜单环境->功能模块名

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

注意:程序调用Smart Form的时候,一定要用CALL FUNCTION  ' SSF_FUNCTION_MODULE_NAME '先根据Smart Form名称得到它的函数名称fm_name。然后再  CALL FUNCTION fm_name调用Smart Form。因为Smart Form的fm_name可以重新分配,是个不固定值

SmartForm强制分页(抬头、项目表都显示)

一、如果是模板,强制分页命令要放在循环中;

二、如果是表格,强制分页命令要放在表的主要区域循环中,而不能放在表头部分。

强制分页可以控制每页固定显示的数据条数

SmartForm设计:

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

.
DISP_AUTO_PAGING_TXT
= 'X'.
endif.
Smart Forms&ScriptFrom
Smart Forms&ScriptFrom
Smart Forms&ScriptFrom

SmartForm源码:

在中文环境下导入Smart Forms&ScriptFrom

主调程序:


     
.
      gt_item-amount = sy-index.
      APPEND gt_item.
    ENDDO.
  ENDDO.

gt_head-class = '6 班'.
  APPEND gt_head.

ENDFORM.                    "initData

FORM callsmartform .
  DATA: lf_fm_name TYPE rs38l_fnam.

"***********调用SMARTFORM程序生成函数
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = 'YJZJ_SMARTFORM_CONTROL_PAGING'
    IMPORTING
      fm_name            = lf_fm_name.

"***********动态调用新生成的函数
  CALL FUNCTION lf_fm_name.
ENDFORM.

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

打印参数控制

DATA:lf_fm_name TYPE rs38l_fnam.
  DATA:l_output_options TYPE ssfcompop.
  DATA:l_control_parameters TYPE ssfctrlop.
  DATA:l_job_output_options TYPE ssfcresop.
  "********设置打印对话框中的参数
 "打印对话框中的参数可以与l_output_options 结构中的相关字段对应
  l_output_options-tddest = 'LP01'."打印设备
  l_output_options-tdpageslct = '1,2,4'."打印哪几页,多页使用逗号分隔
  l_output_options-tdnoprev = 'X'."隐藏打印预览按钮
  "********控制打印对话框显示与否,及直接打印预览方式输出
  l_control_parameters-no_dialog = 'X'."打印前不显示打印设置对话框
  l_control_parameters-preview = 'X'."而是直接显示预览结果

"***********调用SMARTFORM程序生成函数
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname = 'YJZJ_SMARTFORM_CONTROL_PAGING'
    IMPORTING
      fm_name  = lf_fm_name.

"***********动态调用新生成的函数
  CALL FUNCTION lf_fm_name
    EXPORTING
      output_options     = l_output_options
      control_parameters = l_control_parameters
    IMPORTING      "获取打印对话框中用户选择、输入、操作的结果:如判断用户在
                "打印对话框中点击的是打印预览还是点击的直接打印
      job_output_options = l_job_output_options.
  IF l_job_output_options-tdpreview = 'X'. "有些开发需求中需要控制报表的打印次数,可以通过该方法来统计操作结果,将打印记录累加后存放于系统中,作为重复打印控制的依据。
    WRITE :'打印预览模式'.
  ELSE.
    WRITE:'直接打印模式'.
  ENDIF.

Smart Forms&ScriptFrom

一次性输出多张报表

有时候可能需要一次性打印多张不同的报表,直接调用SmartForms时,每次打印一张后报表后,会在循环中反复出现打印对话框,影响程序执行效率。SAP打印控制提供了假脱机功能,允许将多张需要打印的报表缓存,最的再一次性提交打印请求。

.
        l_control_parameters-no_open = 'X'.
        l_control_parameters-no_close = space."最后关闭假脱机准备打印
    ENDCASE.

"***********调用SMARTFORM程序生成函数
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname = 'YJZJ_SMARTFORM_CONTROL_PAGING'
      IMPORTING
        fm_name  = lf_fm_name.

"***********动态调用新生成的函数
    CALL FUNCTION lf_fm_name
      EXPORTING
        control_parameters = l_control_parameters.
  ENDDO.
ENDFORM.

SmartForm转PDF乱码问题

如果将SmartForm输出为PDF文件时,可能会出现乱码,则使用SPAD(假脱机管理工具)设置打印设备的设备类型,设置为以CN开头的设备类型即可,然后在程序中使用这个LP01打印设备

Smart Forms&ScriptFrom

定义打印机纸张类型

关于打印纸张的定义,在国际上有很多通用的标准,如A5、A5等,这些通用的格式一般在Windows和SAP中都默认加载。但是,在实际应用中,经常会碰到一些不规范的纸张,对于这些非通用纸张,就需要用户在系统中自己定义相关的纸张格式了。

1、 通过SPAD假脱机管理工具中的“设备类型->页格式”可以自定义纸张,打开“设备类型”页签,在“页格式”字段中输入自定义名称,然后点击后面的“显示”按钮,显示“页面格式清单”页面,再点击“编辑”即可创建新的纸张:

Smart Forms&ScriptFrom

2、 上面定义的纸张,下面再定义“格式类型”,“页格式”选择上面定义的ZF_PAGE,“类型”选择 S SAPscript的格式类型,这样就可以在SmartForm中进行调用了,如果是ALV,则要选择 L ABAP列表的格式类型:

Smart Forms&ScriptFrom

定义好页格式和格式类型的,则需要将页格式(即纸张)分配到指定的设备类型。SAP的假脱机操作中是需要指定输出设备的,而每个输出设备需要设定设备类型。所以当打印时,只有属于该打印设备的页格式才能被操作。若没有维护的话,预览不会存在问题,但在选择打印时,系统提示错误。

目前对中文输出所使用的设备类型大部分都默认为“CNSAPWIN”,在“设备类型”中输入“CNSAPWIN”,再点击“显示”,出现以下界面:

Smart Forms&ScriptFrom

点击Smart Forms&ScriptFrom,将列出该设备所支持的所有格式类型:

Smart Forms&ScriptFrom

输入“格式化”名称(注:这里输入的其实是上面创建的“格式类型”,而不是“页格式(即纸张)”),确认后如下:

Smart Forms&ScriptFrom

需要对打印机操作维护基本的指令,没维护指令时,操作该类型的报表数据可能会出现打印机不切纸或者不执行打印问题。需维护的指令和打印机的驱动存在关系,可以参照CNSAPWIN下已经维护好的格式类型来维护。

以SAP标准的A4纸张(DINA4)为例,一般需要维护操作包括:打印初始化、尾页、行结束,如:

Smart Forms&ScriptFrom

最后就可以在SmartForm编辑器里选择上面自定义的“页格式(纸张)”了:

Smart Forms&ScriptFrom

Table节点循环问题

虽然表头、主要区域、脚标三者都在 %TABLE1表里,但是只对主要区域节点进行循环,表头、脚标在每一页中只执行一次,所以,表头节点里实质上还没有开始对GT_HEAD内表进行循环,所以在表头节点里是不能访问到GW_HEAD工作区的数据的,因此,如果像下面那样在表头节点里读取到GT_HEAD中的数据,只能像这样手动根据head_index(该变量会在主要区域节点的某代码片断里进行赋值处理,即在每一个小分类处理完后,head_index设置为下一小分类,即GT_HEAD下一条数据)来读取了(其实还会在主要区域节点里对GT_HEAD再读取一次,这里为了提前读取到数据,所以只能在表头里手动读取了)

Smart Forms&ScriptFrom

ScriptForm转PDF并发送邮件

(转PDF应该还可以使用此函数:SX_OBJECT_CONVERT_OTF_PDF

data: gt_otfdata  like itcoo occurs 0 with header line.

以动态的方式获取ScriptForm数据(没有试过,可能获取不到):

.
      gt_otfdata[] = <fs>.
    endif.

如果上面这种方式取不到Form表单数据,则可以在CLOSEForm时得到:

.

CLOSE_FORM 的otfdata  作用:当调用PRINT_TEXT 或者 OPEN_FORM时,如果参数OPTIONS(结构类型为ITCPO)中的字段TDGETOTF值为'X' 时,将会通过参数OTFDATA以OTF的格式输出,在这种情况下,打印输出、屏幕显示、传真将不会被执行。

itcpo-tdnoprint  = ' '.No printing from print preview
    itcpo-tdnoprev   = 'X'.No print preview
    itcpo-tdgetotf = 'X'.Return of OTF table. No printing, display, or faxing

下面开始将ScriptForm数据转换成PDF格式的数据:

data: binfilesize type i.

data: i_tline type table of tline with header line,


      err_format           
      err_conv_not_possible
      err_bad_otf          
      .

经过上面的PDF的转换,我们就可以将以上的PDF格式的数据直接存储到文本中(此时下载或写入文件时需要以二进制的方式进行传输),这个文本就是PDF。但如果还需要将这个PDF以附件的形式发送邮件,则还需要下一步转换(其实就是将两列的i_tline内表合并成一列的内表i_objbin):

data:i_objbin  like solisti1 occurs 0 with header line.

.

最后以附件的形式将i_objbin发送出去

SmartForm转PDF

DATA: job_output_options TYPE ssfcresop.
  DATA: ls_output  TYPE ssfcrescl.
  DATA: lt_lines TYPE TABLE OF tline WITH HEADER LINE,
        lt_docs TYPE TABLE OF docs WITH HEADER LINE,
        t_otfdata TYPE ssfcrescl,
        t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE, " SAPscript: Text Lines
        t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE.     " OTF Structure

DATA: lv_filesize TYPE i.

DATA: control_parameters TYPE ssfctrlop,
  output_options     TYPE ssfcompop.
  control_parameters-no_dialog = 'X'.
  control_parameters-getotf    = 'X'.

internal_error    
      send_error        
      user_canceled     
     
      err_format           
      err_conv_not_possible
      err_bad_otf          
      .
*"还可以使用下面的CONVERT_OTF_2_PDF函数来替代上面CONVERT_OTF函数
*  DATA:it_docs TYPE STANDARD TABLE OF docs.
*  CALL FUNCTION 'CONVERT_OTF_2_PDF'
*    IMPORTING
*      bin_filesize   = lv_filesize
*    TABLES
*      otf            = ls_output-otfdata
*      doctab_archive = it_docs
*      lines          = lt_lines.

g_path = 'C:\temp\test2.pdf'.
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
       bin_filesize        = lv_filesize
      filename              = g_path
      "write_field_separator = cl_abap_char_utilities=>horizontal_tab
*      confirm_overwrite     = c_char_x
      filetype              = 'BIN'
      "codepage              = '8400'
    TABLES
      data_tab              = lt_lines.

Smart Forms&ScriptFrom

Smartform中多套页面之间的跳转(强制分页)

现在的SR是在当前Form上基础之上加上第三套页面,目前有两套了:

Smart Forms&ScriptFrom

每个页中都需要有Main窗体,并且每个页而中的Main窗体都是一样的(每个页中的其他页窗体可有可无,也可不同)。从上图看,虽然FIRST页里的Main窗体中有强制分页命令,但此分页命令不一定在FIRST页显示后立刻执行(多页情况下),而是要等到前面的ITEM内表显示完后才执行

整体页面走向如下:

Smart Forms&ScriptFrom

每套页面之间使用强制分页,而每套页面里是自动分页的。

表格不能再套表格,但表格中还可以套循环(列中也可以套循环,如长文本多行输出)

Smart Forms&ScriptFrom

在Samrtform中,最好不要通过拷贝的方式来创建Page、Window、Template,这里的拷贝就像程序里的引用一样,修改或删除时会影响其他

SMARTFORM中定义内表:

Smart Forms&ScriptFrom

smartform输出格式(输入类型)设置

Smart Forms&ScriptFrom

Syntax

说明

&field+<offset>&

对于字符变量设置从何位置显示数据,如果offset大于字符变量长度时,系统就不会显示任何数据

&field(<length>)&

设置输出长度.

&field(*)&

如果该字段类型是abap数据字典里定义的类型,系统将按照字典定义的长度设置输出长度

&field(S)&

禁止输出符号位

&field(<)&

符号位显示在数据的左边

&field(.<nat.number>)&

设置显示小数的位数

&field(E<nat.number>)&

设置为科学标示法

&field(T)&

禁止千分位的显示(适用于: DECCURRINTQUAN几种数据类型).

&field(Z)&

禁止数字前导0的显示

&field(I)&

禁止显示空值

&field(K)&

禁止类型系统按数据字典定义的转换函数进行输出转换

&field(R)&

右对齐(只有在定义了输出长度时才有效)

&field(F<filler>)&

用<filler>指定的字符替换左边的空格.

&field(L)&

将日期转换为本地显示格式,使用JDAT指定的格式

&field(C)&

该设置效果和ABAP的CONDENSE语句相同.

/: SET COUNTRY country_key

设置按某个国家显示小数点,千位符和日期的格式

(注:这个包括下面两个SET命令只能在ScriptForm使用)

/: SET DATE MASK = 'date_mask'

设置日期显示格式
DD 天 (two digits) 
DDD天名称(缩写)
DDDD 天名称 (全称)
MM 月 (two digits) 
MMM 日期名称 (缩写)
MMMM 日期名称 (全称)
YY 年(two digits) 
YYYY 年 (four digits) 
LD 天 (formatted as for the L option)
LM 月 (formatted as for the L option)
LY 年 (formatted as for the L option)
示例
/: SET DATE MASK = 'Foster City, MM.DD.YY' 
&DATE& -> Foster City, 03.01.97 
&DATE(Z)& -> Foster City, 3.1.97 
/: SET DATE MASK = 'MMMM DD, YYYY' 
&DATE& -> March 01, 1997
取消设置
/: SET DATE MASK = ‘’

/: SET TIME MASK = 'time_mask'

时间设置
HH hours (two digits) 
MM minutes (two digits) 
SS seconds (two digits)
假设当前时间是10:08:12. 
&TIME& -> 10:08:12 
/: SET TIME MASK = 'HH:MM' 
&TIME& -> 10:08 
/: SET TIME MASK = 'HH hours MM minutes' &TIME& -> 10 hours 08 minutes
&TIME(Z)& -> 10 hours 8 minutes
取消设置:
/: SET TIME MASK = ' '

Smart Forms&ScriptFrom

修改Smartform对象所在的包

Smart Forms&ScriptFrom

ScriptForm导出与导入、拷贝

通过系统提供的报表程序:RSTXSCRP

Smart Forms&ScriptFrom

如果是在同一机器上,直接通过拷贝比较方便:

Smart Forms&ScriptFrom

ScriptForm中调用Form

Smart Forms&ScriptFrom

) .
  DATA: l_wa LIKE LINE OF resbd_p_tab.
  READ TABLE input WITH KEY name = 'RESBD_P-POSNR'.
  l_posnr = input-value.
  READ TABLE input WITH KEY name = 'RESBD_P-MATNR'.
  l_matnr = input-value.
  READ TABLE input WITH KEY name = 'RESBD_P-RSPOS'.
  l_rspos  = input-value.

.....

READ TABLE  output  WITH KEY name = 'L_LEVEL'.
  output-value = l_level.
  MODIFY output INDEX sy-tabix.
ENDFORM.

Smart Forms&ScriptFrom

在程序中改变ScriptForm的起始页

调用START_FORM函数,通过STARTPAGE可以指定起始页,这样可以跳过SE71中设置的页面跳转流。

为ScriptForm增加后继页面

目前有这样一个需求:需要在当前已经做好的ScriptForm最后加上三个条款页面。这里我先创建三个新的页面“ZLAST1、ZLAST2、ZLAST3”,但不能简单的将NEXT页的NextPage属性修改成指向ZLAST1新增的页面,因为这里的NEXT页是用来做分来使用的,这会导致分页出问题。正确的做法参考下面:

(下图中FIRST与NEXT是修改前版本就有了的:)

Smart Forms&ScriptFrom

(MAIN窗体被各个窗体共享使用)

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

Smart Forms&ScriptFrom

(先在MAIN窗体脚本中写上跳转新增页面的脚本命令,每个新增页面都需要写)

Smart Forms&ScriptFrom

(然后在打印程序中调用这些Element,调用的地方为MAIN窗体中最后一个Element调用之后,这里为END_VALUES)

Smart Forms&ScriptFrom

ScriptForm的中英两个版本的框架是一样的,比如只要你修改某个版本的Windows尺寸,则另一个版本也会跟本改变,但窗体中的内容不会跟着变化,所以中英文的只是内容不同。

一个Form里只能有一个Main窗体,即多个Page页面只能共用一个Main窗体。

每个页面的Main窗体只需要宽度一样,高度可以设置成不一样。

语法:/: NEW-PAGE [page_name]

示例:

/: NEW-PAGE

当前页结束,接下来的文本将新起一页,并且这个页面为WRITE_FORM时指定的page

/: NEW-PAGE S1

当前页结束,接下来的文本显示在S1页面中

/: NEW-PAGE [page_name]只能写在MAIN窗体脚本中(才起作用),并且跳转的页面page_name中一定要有MAIN窗口(否则调用时出错)。

只有含有MAIN窗体的Page页面,并且在MAIN窗体脚本中使用了NEW-PAGE指令指定跳转到该页面的页面才可以正常显示出来。

Script\SmartForms使用禁用Word编辑器

This document details the procedure in using Microsoft Word as editor in SAP Script / Smart Forms.

In normal case, when you try opening the editor in Smart Forms, the following editor would appear:

Smart Forms&ScriptFrom

Click on the editor button. The following editor appears:

Smart Forms&ScriptFrom

Now to change the above editor to MS Word, do the following:

Go to transaction I18N(Internationalization).

Click on I18N Menu àI18N Customizing à I18N System Configuration (as shown in the screenshot below)

Smart Forms&ScriptFrom

The following screen appears:

Smart Forms&ScriptFrom

If you would like to use MS Word Editor in both Script and Smartforms, then check the both checkboxes as shown below:

Smart Forms&ScriptFrom

Click on Activate.

The following popup appears (related to SAPScript Editor):

Smart Forms&ScriptFrom

Click on Yes. Now the following popup appears (related to Smartforms Editor):

Smart Forms&ScriptFrom

Click on Yes to proceed.

Now the MS Word editor is available for both SAP Script and Smartforms.

Result: In the SmartForms:   

Smart Forms&ScriptFrom

In SAP Script:

Smart Forms&ScriptFrom

You can anyti me revert to old editor by deactivation MS Word editor option using the transaction I18N.

注:如果在使用I18N时,出现以下问题时:

Smart Forms&ScriptFrom

出现这种情况,大家可以在SE38中运行RSCPSETEDITOR,勾掉SMARTFORMS和SAPSCRIPT前面的勾就可以了!
激活后SMARTFORM中的文本编辑器就改为SAP默认的了!

Smart Forms&ScriptFrom