REPORT传值到SMARTFORMS的四种方式

来源:互联网 发布:hp网络打印机安装 编辑:程序博客网 时间:2024/05/22 17:18
  • 方法1.

最通常的用法是通过SE11中建立STRUCTURE XXX(表则没用),在REPORT中申明此结构的数据类型,在SMARTFORMS中的FORM接口申明同样的结构后就可以传值了(itabTYPE XXX)

 

 

  • 方法2

第二种是不用建立STRUCTURE,省了一个建表的麻烦,不过还是挺麻烦的!

 

1).程序中申明一个TYPE

 

2).SMARTFORMS中在全局定义中要在三处地方进行相应的操作

 

  • 全局定义的类型中进行和REPORT中相同的类型申明

程序中:

 

DATA:BEGIN OF it_head,

       fkdat TYPE vbrk-fkdat,

       vbeln TYPE vbrk-vbeln,

     END OF it_head.

 

SMARTFORMS全局定义的类型中:

 

TYPES:BEGIN OF wy_head,

       fkdat TYPE vbrk-fkdat,

       vbeln TYPE vbrk-vbeln,

    END OF  wy_head.

 

这两个结构是要一样的,因为在传值时会把相同字段的进行传递。

  • 全局定义的全局数据中申明变量,申明的类型是在全局定义中定义的类型,若是申明一个内表,把TYPE改成TYPE TABLE OF OK了。

 

         WA_HEAD  TYPE    WY_HEAD

 

  • 全局定义的初始化中进行数据的传递操作,也就是把REPORT中的值传到SMARTFORMS

 

传递STRUCTURE

DATAfield(70TYPE c.

FIELD-SYMBOLS: <dbcnt> TYPE ANY TABLE ,

               <wa> TYPE ANY.

field = '(ZSDST0009)IT_HEAD'.       "要加程序名,不然程序无法知道该表从哪里取得

ASSIGN (fieldTO <wa>.

IF sy-subrc = 0.

  wa_head = <wa>.

ENDIF.

IF <wa> IS ASSIGNED.

  UNASSIGN <wa>.

ENDIF.

这是值的初始化也就是值传递的过程。

 

传递内表

最后在 全局定义->初始化 这个TAB页下写下面的代码:

 

DATAfield(50).

FIELD-SYMBOLS: <f> TYPE ANY.

field = '(zxxxxx)output[]'.      "zxxxxx为程序名,output为内表名

assign (fieldto <f>.

gt_table = <f>.

 

这样,SMARTFORM就取得了ZXXXXX这个程序,OUTPUT这个内表的值,并将之赋给了GT_TABLE.

特别注意 程序中的表定义和smartform类型里表定义必须一致,否则 GT_TABLE[] =<f>.错误。

 

 

  • 方法3.

若是传递一两个很单一的变量,比较简单的做法是在REPORT EXPORT这个变量,在SMARTFORMSIMPORT这个变量,两句话搞定.

   

 

  • 方法4.

还有一种方法,这种写法个人也是第一次看到,暂时还不知道优缺点点

程序中这样写:

 

TYPES buffer_id(80TYPE c.

DATA wa_indx TYPE indx.

DATA: l_detail_name(80).

*----------------------------------------------------------------------------------*

 

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.    

 

*----------------------------------------------------------------------------------*

 

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.                    "Restor_buffer\

 

*----------------------------------------------------------------------------------*

 

  CONCATENATE sy-repid 'DETAILS' sy-uname sy-uzeit INTO l_detail_name. id,用来区分DATABASE,唯一化

  savebuffer it_detail[] l_detail_name.

 

 

CALL FUNCTION lf_fm_name

       EXPORTING

.

.

.

            l_detail_name        = l_detail_name.

 

  clearbuffer l_detail_name.

 

 

SMARTFORMS TYPES与方法2相同要定义与程序中内表相同;但在INITIALIZATION中不同


 


 

INITIALIZATION中执行RESTORE_BUFFER


 

FROM ROUTINES中要定义RESTORE_BUFFER

原创粉丝点击