Smart如何访问自定义内表?

来源:互联网 发布:传奇续章挂机软件 编辑:程序博客网 时间:2024/04/28 21:42

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如何调用自定义内表
http://www.itpub.net/viewthread.php?tid=993316
看了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_data2.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_Bufferform 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 编辑 ]
原创粉丝点击