SMARTFORM

 
                     SMARTFORM 知识
 
一、 SMARTFORM 的特征
SMARTFORM 是在 SAPScript 的基础之上产生的一种新的 FORM 制作方式,它完全兼容 SAPScript 。在做 SMARTFORM 的过程中基本上不需要多少编程知识,它有一个图形界面来帮助我们完成工作。这个图形界面由三个部分组成,它们分别是: Form Painter PC Editer Table Painter
启动 SMARTFORM 设计的事务代码: SMARTFORMS ,进入的界面如下:
输入你要创建的 SMARTFORM 的名称,然后点击“创建”,进入下面的 Form Builder 界面:
注:上面另外两个选项 Style Text module 分别是用来定义 FORM 的样式和文本模块的。
上面的屏幕分为三个部分:
Form Painter 主要用来设计 SMARTFORM 输出页面的格式,可以在页面上包含窗口和图(最右边)     形,还可以指定它们在页面上的位置以及它们的大小等。在图片左上角的工      
              具栏有一个按钮 可以用来显示和隐藏这个窗口。
PC Editer 主要用来初始化文本( TEXT )和域( FIELD ),它包含的功能主要有以下几个方(中间)    面, 1 )输入、删除、选择、
 
Navigating in the SAP Form Builder 它主要用来显示一个 SMARTFORM 的层次结构。
(最左边)    当你在层次结构中选择了一个 NODE (结点)后,在上面截屏的中间部分会显示这个 NODE MAINTENANCE 屏幕。
 
 
二、 在做 FORM 前要了解的几个概念
1、 FORM 的结构:一个 FORM 往往是由页面 (PAGES) 、输出区域 (OUTPUT AREAS WINDOWS) 、地址栏 (ADRESS) 、图形( GRAPHICS ,比如公司 LOGO )、数据 (DATA) 、以及文本内容 (TEXT) 组成。
2、 主窗体和子窗体:( MAIN WINDOWSAND SUBWINDOWS )这是页面上两个不同的输出区域,用来输出数据,文本等内容。对于主窗体,你在一个 FORM 中只能定义一个窗体作为主窗体;不同 PAGE 上的主窗体必须宽度相同,但是高度可以不同;一个没有主窗体的 PAGE 指向的下一个页面不能为它自己。对于子窗体,它也可以在多个页面上面显示,但是那些不匹配 SUBWINDOWS 的值,子窗体不会将它们显示出来。
 
 
 
 
 
 
 
三、 一个小的 SMARTFORM 实例
   
 
首先给要创建的 SMARTFORM 取名为 ZTEST_HXG_F3 ,点击“创建”按钮,进入下面的页面:
 
首先看一下这个截图的左上角:
FORM ATTRIBUTES :主要是这个窗体的一般属性和输出选择。
FORM INTERFACE :这个属性很重要!它主要用来描述这个 SMARTFORM 的接口属性,比如 IMPORT EXPORT TABLES EXCEPTION 。当我们做好了一个 SMARTFORM 以后,如果想从 ABAP 程序中调用这个 FORM 的话,就会用到这些接口来传递参数,这个将在下面详细说明。
GLOBAL DEFINITIONS :主要用来定义一些全局的数据,还有 FIELD SYMBOLS 、初始化等。
 
 
 
 
  当我们创建了 ZTEST_HXG_F3 的时候,系统会默认的建立一个页面(也就是刚开始在 PAGES AND WINDOWS 下面的 %PAGE ,它下面是一个 MAIN WINDOWS )。现在我将它的名字改为 FIRST , 描述改为“第一页“。然后在 MAIN WINDOW 上点击右键,如上图创建一个 TABLE
 
看上图:这就是刚才我们定义的 TABLE MAINTENANCE 屏幕。我们在这个屏幕上可以定义很多的内容,看到 了吗?它是 SMARTFORM 中一个很重要的组成部分哦,我们将要在 FORM 中显示的表格,都是在这里定义的。
我们可以定义的内容有: TABLE 的宽度,水平线对齐方式。
上面这个图用来定义 TABLE 的输出格式,比如现在我们定义了 LINE1 ,我们定义了三个列,三个列的宽度分别都是 4CM 。但是请注意,当你制定这些列的宽度的时候,它们三个的列的和不能大于表格的宽度 ,否则系统会报错。当然这里我只定义了一个 LINE TYPE ,你还可以在下面定义很多的 LINE TYPE 。做完了这一步以后我们可以点击 进入这个屏幕看一下我们定义的表格的效果。
 
看到了吗?我们定义的三列清楚的在上面显示出来了。上图中的 LINE1 表示我们用的是 LINE1 的输出格式(主要是指输出列的宽度和长度)。
 
我们在屏幕上输出报表的时候,画表格,一般的表格都是由表头,还有内表的填充数据来组成,这里也不例外,比如我们就可以把我们定义的 TABLE 和内表联系起来,只需点击上面的“ TABLE “边上的” DATA “选项卡,进去设置一下就可以了,取内表名为 ITAB 。具体设置如下图所示:
首先我们来定义表头 HEADER ,也就是各个列的列名:
首先选中上面这些内容,这样在就会在 TABLE 下面多处一个 HEADER 事件,如图所示:
这样我们就可以在 HEADER 下面定义各个列的名称了。这里我们以固定列(即三列)来演示!
 
在它下面首先要建立一个 FOLER 。你必须得为每一列都定义一个 FOLDER ,这里有三列,我们就在 HEADER 下面创建三个 FOLDER FOLDER 结点的作用是用来合并一些相关结点的,并且它帮助我们很好的区分各个层次。建立好 FOLDER 之后,在每个 FOLDER 下面再创建一个 TEXT
这样就形成了这样一个层次结构。
要想显示成下面这个样子:
 
 
我们还得设置一两个地方:如图所示
选中第一个 FOLDER ,双击它,在右边的窗口中选中如图上面标记的内容,这样做的目的是, NEW LINE 表示我们开始一个新的行,这个行是从 FOLDER1 开始的, LINE TYPE 选择 LINE1 的意思是说,我们这个行的输出格式是以 LINE1 为参照的!那么接下来的两个 FOLDER 的要这样设置,如下图:
表示接下来的两个 FOLDER 中的内容是和第一个 FOLDER 同处一行,但是是不同的 CELL
 
接下来的事情就是设置每一列的列名了,注意这里的列名是静态的文本。我以第一列为例子来介绍,其他两列类似,选中 FOLDER1 下的 TEXT1 ,如下图:
在椭圆选中的地方输入你想要取的列名,比如我这里就是取为:第一列。其他两列的列名类似,这里就不再赘述了。
 
 
  在前面我们已经把这个 SMARTFORM 和内表 ITAB 连接起来了。接下来就看看通过 SMARTFORM 显示动态内容的情况!
 
首先我们在 FORM INTERFACE 中定义这个表的名字和其他参数,如下图:
 
然后点击左上角椭圆选中的那个按钮,这样在左下角就会出现这个 SMARTFORM FIELD LIST
 
注意:这里定义的 ITAB 只有三个字段,刚好跟我们定义的 TABLE 吻合,当然你也可以定义自己的内表。
 
 
做完了这以步后测试一下,如果没有问题,就进行下一步:
 
   同在 TABLE HEADER 中定义一样,我们还要定义三个 FOLDER 和三个 TEXT ,定义好了图如下:
 
这几个 FOLDER 的设置和上面 HEADER 一样,唯一不同的就是这里每个 FOLDER 下面的 TEXT 的内容不是我们自己在上面输入“第一列“、”第二列“、”第三列“。而是如上图的箭头所示,从左边那个地方用鼠标按住以后拖到右边的箭头所指的那个地方。这样我们这列对应的数据就会是”动态“的。
 
   做好了这一切以后,测试,没有错误,那么基本上一个简单的 SMARTFORM 就完成了。当一个 SMARTFORM 激活以后,系统就会自动给它分配一个 FUNCTION MODULE 。我们只需要点击“ F8 “直接运行这个 SMARTFORM ,就会进入这个界面:
 
上面这个 FUNCTION MODULE 就是我们做完了的 SMARTFORM 所对应。你可以在程序中调用这个 SMARTFORM 。下面就介绍一下在程序中如何写代码:
 
report z_hxg_007 .
data: itab like alsmex_tabline occurs 0 with header line.
data fm_name type rs38l_fnam.
data: num1 type i,
      num2 type i,
      num3 type i.
 
 
call function 'SSF_FUNCTION_MODULE_NAME'    “这个FUNCTION主要是用来取你要调用的
     exporting                               SMARTFORM 对应的FUNCTION MODULE的
          formname    = 'ZTEST_HXG_F3'      名字然后赋值给FM_NAME,因为SMARTFORM
     importing                               对应的FUNCTION MODULE名字很长,并且
          fm_name           = fm_name        难以记忆
     exceptions
          no_form            = 1
          no_function_module = 2
          others             = 3.
num1 = 1.
num2 = 2.
num3 = 3.
do 20 times.
 itab-row = num1.
  itab-col = num2.
 itab-value = num3.
 append itab.
 clear itab.
 num1 = num1 + 1.
 num2 = num2 + 1.
 num3 = num3 + 1.
enddo.
 
 
 
call function fm_name                    “调用SMARTFORM,很显然这里是以FUNCTION  
* EXPORTING                               MOUDULE 的方式和SMARTFORM交互
*   ARCHIVE_INDEX =
*   ARCHIVE_PARAMETERS =
*   CONTROL_PARAMETERS =
*   MAIL_APPL_OBJ =
*   MAIL_RECIPIENT =
*   MAIL_SENDER =
*   OUTPUT_OPTIONS =
*   USER_SETTINGS = 'X'
*    G_CARRID = <variable>
*    G_CONNID = <variable>
*    G_FLDATE = <variable>
* IMPORTING
*   DOCUMENT_OUTPUT_INFO =
*   JOB_OUTPUT_INFO =
*   JOB_OUTPUT_OPTIONS =
 tables
    itab = itab                   “把ITAB内表的内容传递到SMARTFORM中去
 exceptions
    formatting_error = 1
    internal_error = 2
    send_error = 3
    user_canceled = 4.
*    others = 5.
 
运行程序,到达这个屏幕:
 
 
系统会提示你输入一个“输出设备”,随便输入一个,然后点击下面的“ PRING PREVIEW ”。
你就会看到最后的结果!如下图
 
  基本上就介绍这么多,其实 SMARTFORM 可以把 FORM 做的非常好看,我们还可以插入图形, ADRESS 等等很多元素,因为自己还用的不是很熟,也就只能分享这点成果。后续我会关注的问题就是复杂的 SMARTFORM 的建立,以及我们在打印的过程中如何控制 SMARTFORM 的换页等,希望有机会跟你探讨!呵呵 ^_^
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值