注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

原来为了你

我的人生就是要一次次的超越

 
 
 

日志

 
 
 
 

[转]动态生成内表  

2011-10-18 10:40:51|  分类: ABAP基础知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

*-------------------------------- 例一 ----------------------------------
type-pools:abap.

parameters p_name type tabname.

data lt_table type table of dfies"字段结构表
data ls_table type dfies.

data lr_struc type ref to cl_abap_structdescr.
data lr_table type ref to cl_abap_tabledescr.

data lr_type type ref to cl_abap_typedescr.
data lr_data type ref to cl_abap_datadescr.

data lt_comp type abap_component_tab.
data ls_comp like line of lt_comp.

data dyn_wa type ref to data.
data dyn_table type ref to data.

data l_string type string.

field-symbols<dyn_table> type standard table,
<dyn_wa> 
type any.

*1.获取表中的字段结构
call function 'DDIF_NAMETAB_GET'
  
exporting
    tabname   
p_name
  
tables
    dfies_tab 
lt_table
  
exceptions
    not_found 
1
    
others    2.
if sy-subrc <> 0.
  
message id sy-msgid type sy-msgty number sy-msgno
  
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.

loop at lt_table into ls_table.

  
concatenate ls_table-tabname '-' ls_table-fieldname into l_string.

  ls_comp
-name ls_table-fieldname.
*读取字段类型
  
call method cl_abap_datadescr=>describe_by_name
    
exporting
      p_name         
l_string
    receiving
      p_descr_ref    
lr_type
    
exceptions
      type_not_found 
1
      
others         2.
  
if sy-subrc <> 0.
    
message id sy-msgid type sy-msgty number sy-msgno
    
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
endif.

  ls_comp
-type ?= lr_type.
  
append ls_comp to lt_comp.
  
clear ls_comp.
endloop.

*根据字段目录创建动态结构类型
call method cl_abap_structdescr=>create
  
exporting
    p_components 
lt_comp
  receiving
    p_result     
lr_struc.

*根据动态结构创建动态内表类型
call method cl_abap_tabledescr=>create
  
exporting
    p_line_type 
lr_struc
  receiving
    p_result    
lr_table.

*参照动态结构类型和动态内表类型创建内表与工作区
create data dyn_wa type handle lr_struc.
create data dyn_table type handle lr_table.

*指定内表与工作区到字段符号
assign dyn_wa->to <dyn_wa>.
assign dyn_table->to <dyn_table>.

*从动态表中取数到动态内表中
select into corresponding fields of table <dyn_table> up to 100 rows from (p_name).

*显示内表中的数据
call function 'REUSE_ALV_GRID_DISPLAY'
  
exporting
    i_structure_name 
p_name
  
tables
    t_outtab         
<dyn_table>
  
exceptions
    program_error    
1
    
others           2.
if sy-subrc <> 0.
  
message id sy-msgid type sy-msgty number sy-msgno
  
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.

*-------------------------------- 例二 ----------------------------------
type-pools:abap.

parameters p_name type tabname.

datad_ref type ref to data,
lt_alv_cat 
type table of lvc_s_fcat,
ls_alv_cat 
like line of lt_alv_cat.

datalt_table like table of dntab.
datals_table type dntab.

field-symbols <dyn_table> type table,
<dyn_wa> 
type any,
<dyn_field> 
type any.

*取出表结构的字段目录
call function 'NAMETAB_GET'
  
exporting
    langu          
sy-langu
    tabname        
p_name
  
tables
    nametab        
lt_table
  
exceptions
    no_texts_found 
1.

*根据取出的字段目录生成参考字段目录
loop at lt_table into ls_table.
  ls_alv_cat
-fieldname ls_table-fieldname.
  ls_alv_cat
-ref_table p_name.
  ls_alv_cat
-ref_field ls_table-fieldname.
  
append ls_alv_cat to lt_alv_cat.
  
clear ls_alv_cat.
endloop.

*内表创建
call method cl_alv_table_create=>create_dynamic_table
  
exporting
    it_fieldcatalog 
lt_alv_cat
  
importing
    ep_table        
d_ref.

*指定生成的内表到字段符号
assign d_ref->to <dyn_table>.

*从动态表中取数到动态内表中
select into corresponding fields of table <dyn_table> up to 100 rows from (p_name).

*显示内表中的数据
call function 'REUSE_ALV_GRID_DISPLAY'
  
exporting
    i_structure_name 
p_name
  
tables
    t_outtab         
<dyn_table>
  
exceptions
    program_error    
1
    
others           2.
if sy-subrc <> 0.
  
message id sy-msgid type sy-msgty number sy-msgno
  
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.


*-------------------------------- 例三----------------------------------
parameters p_name type tabname.

datadyn_table type ref to data.
datadyn_wa type ref to data.

field-symbols<dyn_table> type table,
<dyn_wa> 
type any.

*创建动态表结构
create data dyn_table type table of (p_name).

*创建动态内表
assign dyn_table->to <dyn_table>.

*创建动态工作区结构
create data dyn_wa like line of <dyn_table>.

*创建动态工作区
assign dyn_wa->to <dyn_wa>.

*从动态表中取数到动态内表中
select into corresponding fields of table <dyn_table> up to 100 rows from (p_name).

*对取出数据进行处理
loop at <dyn_table> assigning <dyn_wa>.
  
"内表数据处理
endloop.

*显示内表中的数据
call function 'REUSE_ALV_GRID_DISPLAY'
  
exporting
    i_structure_name 
p_name
  
tables
    t_outtab         
<dyn_table>
  
exceptions
    program_error    
1
    
others           2.
if sy-subrc <> 0.
  
message id sy-msgid type sy-msgty number sy-msgno
  
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.

  评论这张
 
阅读(282)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017