Smart如何访问自定义内表?

SAP Smartform程序中,smartform访问程序中自定义内表的值一般通过se11定义structure来实现的,很不方便。

看了几篇文章的解决之道,转引如下:

===========================================================

在smartforms里动态取得程序里内表的值

http://blog.chinaunix.net/u2/68743/showart_724902.html

一般我们在做smartforms的时候都要自己建一个结构,以方便适用,但是有时候多建个结构很麻烦,我们在程序里都建了内表的结构了,其实我们可以不建这个结构的。
在smartforms的 global settings->global definitions 里有个 types 我们可以在这里定义一个和程序里内表一样的结构
 
但是,在form interface 里定义参数的时候不能刚才定义的结构,激活的时候会报错。所以我们不要再这里一定参数。我们在smartforms里直接读程序里的内表。
 
global settings->global definitions 里有个 initialization 可以在定义一个指针
DATA: field(50). FIELD-SYMBOLS: <dbcnt> type any.
field = '(ZCHINA_TEST3)ITAB[]'. ASSIGN (field) TO <dbcnt>.
GT_LABEL[] = <dbcnt>.
这样就可以把程序里的内表的值取出来了,并赋给了smartforms里的内表,然后就当GT_LABEL 就是你通过参数传进来的一样用就行了。
通过这个方法 就不用再在se11里定义结构了,调用smartforms的时候也不用传参数了。
============================================================
关于smartforms如何调用自定义内表
看了moziyou的帖子: http://www.itpub.net/thread-990949-1-2.html 原文中:2、用memory id或簇数据库。优点,不用SE11,可分别运行取数和打印过程,缺点两边都要定义相同的内表。 方法1的方法大家都清楚,对于方法二,不知道能不能给个简单的实例?最好abap的代码和smartforms的设置一起配合起来。 用方法2自己编了一个小例子,写得不好老鸟不要嘲笑。 1.程序方面: *&---------------------------------------------------------------------* *& Report  ZTEST001_ABAP08 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT  ztest001_abap08. INCLUDE zinc_sf_helper . DATA: BEGIN OF it_itab OCCURS 0,         num1 TYPE i,         num2 TYPE i,         num3 TYPE i,       END OF it_itab. START-OF-SELECTION.   PERFORM frm_get_data.   PERFORM frm_print_data. *&---------------------------------------------------------------------* *&      Form  frm_get_data *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* FORM frm_get_data.   DO 20 TIMES.     it_itab-num1 = it_itab-num1 + 1.     it_itab-num2 = it_itab-num2 + 2.     it_itab-num3 = it_itab-num3 + 3.     APPEND it_itab.   ENDDO. ENDFORM.                "frm_get_data *&---------------------------------------------------------------------* *&      Form  frm_print_data *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* FORM frm_print_data.   DATA: m_fm TYPE rs38l_fnam.   DATA: headername(22) TYPE c.   DATA: itemsname(22) TYPE c.   DATA: c_tst(22) TYPE c.   DATA: l_tst TYPE timestampl.   CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'     EXPORTING       formname           = 'ZTEST001_ABAP08'     IMPORTING       fm_name            = m_fm     EXCEPTIONS       no_form            = 1       no_function_module = 2       OTHERS             = 3.   IF sy-subrc <> 0.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.   ENDIF.   GET TIME STAMP FIELD l_tst.    "long form   MOVE l_tst TO c_tst.   CONCATENATE 'ZTEST001_ABAP08' c_tst+8(14) INTO itemsname .   savebuffer it_itab[]  itemsname .  如果要传入多个表的数据就接着savebuffer * savebuffer xxxxxxxxxxxxxxxxxx.   CALL FUNCTION m_fm     EXPORTING       ptr_items        = itemsname  "这里可以传入多个表,和方法1中的接口使用是一样 *   xxxxxxxx         = xxxxxxxxxx     EXCEPTIONS       formatting_error = 1       internal_error   = 2       send_error       = 3       user_canceled    = 4       OTHERS           = 5.   IF sy-subrc <> 0.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.   ENDIF.   clearbuffer itemsname . ENDFORM.                    "frm_print_data 2.INCLUDE部分 *&---------------------------------------------------------------------* *&  包括                ZINC_SF_HELPER *&---------------------------------------------------------------------* TYPES buffer_id(80) TYPE c. DATA wa_indx TYPE indx. DEFINE savebuffer.   perform save_to_buffer using &1 &2. END-OF-DEFINITION. DEFINE clearbuffer.   perform clear_buffer using &1. END-OF-DEFINITION. *&--------------------------------------------------------------------* *&      Form  Get_Unique_Id *&--------------------------------------------------------------------* *       text *---------------------------------------------------------------------* *      -->ID         text *---------------------------------------------------------------------* *FORM get_unique_id USING typeid TYPE c CHANGING id TYPE c. *  DATA: m_buff(32) TYPE c. *  CALL FUNCTION 'TH_GET_SESSION_ID' *   IMPORTING *     session_id       =  m_buff **     ID_LEN           = *            . *  CONCATENATE sy-repid '_' m_buff typeid INTO id. *ENDFORM.                    "Get_Unique_Id *&--------------------------------------------------------------------* *&      Form  Save_To_Buffer *&--------------------------------------------------------------------* *       text *---------------------------------------------------------------------* *      -->T          text *      -->BUFF_ID    text *---------------------------------------------------------------------* FORM save_to_buffer USING t TYPE table typeid TYPE c . wa_indx-aedat = sy-datum. wa_indx-usera = sy-uname. wa_indx-pgmid = sy-repid. *  PERFORM get_unique_id USING buff_id CHANGING buff_id.   EXPORT t TO DATABASE indx(hk) ID typeid from wa_indx. ENDFORM.                    "Save_To_Buffer *&--------------------------------------------------------------------* *&      Form  Clear_Buffer *&--------------------------------------------------------------------* *       text *---------------------------------------------------------------------* *      -->BUFF_ID    text *---------------------------------------------------------------------* FORM clear_buffer USING buffid TYPE c.   DELETE FROM DATABASE indx(hk) ID buffid. ENDFORM.                    "Clear_Buffer form Restor_buffer using typeid type c changing t type table. import t from database indx(hk) id typeid. endform. 3.smart form 方面我就截图了 全局设置->表格接口 全局定义->类型 全局定义->全局数据 全局定义->初始化 全局定义->格式化程序 点击在新窗口查看全图
CTRL+鼠标滚轮放大或缩小 [ 本帖最后由 pzqstc 于 2008-5-23 09:34 编辑 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值