原贴地址:http://scnblogs.techweb.com.cn/songxianl/archives/11.html
以前写 SMARTFORMS, 传内表数据的时候总要 先到 SE11 建立一个结构 , 很是麻烦 .
下面主要描述一下 SMARTFORM 是怎么从调用它的程序取相应内表的值 .
首先在 SMARTFORM 全局定义 -> 类型 这个 TAB 页下定义个 TYPES, 结构跟要取的内表的结构一致 .
如 :types:BEGIN OF MY_TYPE,
lgnum type ltak-lgnum,
TANUM TYPE LTAK-TANUM,
LGTOR TYPE LTAK-LGTOR,
BNAME TYPE LTAK-BNAME,
…
end of my_type.
然后在 全局 定义 -> 全局数据 这 个 TAB 页下定义一个内表和工作区 , 如 :
GT_TABLE TYPE TABLE OF MY_TYPE
WA TYPE MY_TYPE
内表的 TYPE ASSIGNMENT 这一列 , 手动输入 TYPE TABLE OF , 这个很关 键 .
最后在 全局 定义 -> 初始化 这 个 TAB 页下写下面的代码 :
DATA: FIELD(50).
FIELD-SYMBOLS: <f> TYPE ANY.
FIELD = ‘(ZXXXXX)OUTPUT[]‘. ”ZXXXXX 为程序名 ,OUTPUT 为内表名
ASSIGN (FIELD) TO <f>.
GT_TABLE[] = <f>.
这样 ,SMARTFORM 就 取得了 ZXXXXX 这个程序 ,OUTPUT 这个内表的值,并将之赋给了 GT_TABLE.
ZXXXXX 程 序那边不用传参数了 .
DATA:SMARTFORM(30) TYPE C,
FM_NAME TYPE RS38L_FNAM.
SMARTFORM = ‘ZXXXXX’.
CALL FUNCTION ‘SSF_FUNCTION_MODULE_NAME’
EXPORTING
FORMNAME = SMARTFORM
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
WAIT UP TO 1 SECONDS.
CALL FUNCTION FM_NAME
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
example:
1.
2.
3.