不需要建结构在SMARTFORM中传值
原贴地址: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.
 
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号