文章 - 106 评论 - 14 收藏 - 1 粉丝 - 0 访问量 - 96318
smartform是ABAP设计单据打印的常用工具,在单据开发过程中经常用到。smartform可以根据需要调整字体的大小、字体、颜色等。它的表格可以通过表格绘制器绘画,绘图方便灵活,表格可以直观地显示出来。

smartform原理:定义内表后,在程序中通过SQL查询将需要的数据放入内表,然后通过函数调用SMARTFORM。在执行SMARTFORM时把内表中的数据填充到所画的表格当中,并显示出来。

我的理解:写一个smartform包括两个部分,程序和smartform表,分别通过SE38和smartforms这两个TCODE进入相应的编辑界面。一个程序使用的smartform的名字可以与程序名不同,命名是任意的,但相同的命名比较好。

数据的流向:DB-->程序中的内表-->smartform表格-->打印输出。

DB-->程序中的内表:这个过程通过SQL查询来实现。

程序中的内表-->smartform表格:这个过程要求在程序和对应的smartform中定义完全一样的数据结构和数据类型。

下面以一个简单的例子来说明smartform程序的一般结构。我的开发平台是IDES,ECC6.0。

*&---------------------------------------------------------------------*
*& Report  Z080718
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z080718.

TABLES: VBAK.                                " 定义我所使用的表

DATA fm_name TYPE rs38l_fnam.           " 这是后面会用到的一个参数

DATA: IT_VBAK LIKE VBAK OCCURS 0 WITH HEADER LINE.   " 定义内表,用来传数据

Select-OPTIONS: s_VBELN FOR VBAK-VBELN .        " 条件输入界面

START-OF-SelectION.

PERFORM. get_data_smart.                                  " 通过SQL查询得到需要的数据

END-OF-SelectION.


PERFORM. trans_data_smart.                               " 将数据传给smartform

FORM. get_data_smart.
    Select  *
    INTO TABLE IT_VBAK
    FROM VBAK
    Where VBELN IN s_VBELN.
ENDFORM.


FORM. trans_data_smart.
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = 'Z080718'                          " smartform表格的名字
    IMPORTING
      fm_name            = fm_name                         " 开头定义的参数,用于SAP生成function_module name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      others             = 3.

  CALL FUNCTION fm_name
    "EXPORTING
      "control_parameters = tmp_control_parameters
    TABLES
      "IT_VBAK1 = IT_VBAK                                " 由于我在smartform表格中定义的form interface 是I_VBAK LIKE VBAK,所以这里不能用IT_VBAK1,必须用I_VBAK
      I_VBAK = IT_VBAK
    EXCEPTIONS
      formatting_error = 1
      internal_error   = 2
      send_error       = 3
      user_canceled    = 4.

ENDFORM.

发表于: 2009-07-29 14:34 hanhe 阅读(2515) 评论(0) 收藏 好文推荐

发表评论(网友发言只代表个人观点,不代表本网站观点或立场。)

您尚未登录,请先【登录或注册