ABAP 动态创建内表
2015-11-25 13:12
253 查看
REPORT ZLC_TEST09 .
TYPE-POOLS:abap.
PARAMETERS p_name TYPE tabname.
DATA: d_ref TYPE REF TO data,
lt_alv_cat TYPE TABLE OF lvc_s_fcat,
ls_alv_cat LIKE LINE OF lt_alv_cat.
DATA: lt_table LIKE TABLE OF dntab.
DATA: ls_table TYPE dntab.
DATA: dyn_table TYPE REF TO data.
DATA: dyn_wa TYPE REF TO data.
FIELD-SYMBOLS :
<dyn_table> TYPE table,
<dyn_wa> TYPE ANY,
<dyn_field> TYPE ANY,
<FS_STR> 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>.
*创建动态工作区结构
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).
*******************动态编辑数据********************************
IF P_NAME = 'T001'."这里以公司代码表为例
ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <dyn_wa> TO <FS_STR>.
<FS_STR> = '9998'.
append <dyn_wa> to <dyn_table>.
<FS_STR> = <FS_STR> + 1.
append <dyn_wa> to <dyn_table>.
ENDIF.
*******************动态编辑数据********************************
*显示内表中的数据
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.
DATA: d_ref TYPE REF TO data,
lt_alv_cat TYPE TABLE OF lvc_s_fcat,
ls_alv_cat LIKE LINE OF lt_alv_cat.
DATA: lt_table LIKE TABLE OF dntab.
DATA: ls_table TYPE dntab.
DATA: dyn_table TYPE REF TO data.
DATA: dyn_wa TYPE REF TO data.
FIELD-SYMBOLS :
<dyn_table> TYPE table,
<dyn_wa> TYPE ANY,
<dyn_field> TYPE ANY,
<FS_STR> 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>.
*创建动态工作区结构
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).
*******************动态编辑数据********************************
IF P_NAME = 'T001'."这里以公司代码表为例
ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <dyn_wa> TO <FS_STR>.
<FS_STR> = '9998'.
append <dyn_wa> to <dyn_table>.
<FS_STR> = <FS_STR> + 1.
append <dyn_wa> to <dyn_table>.
ENDIF.
*******************动态编辑数据********************************
*显示内表中的数据
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.
相关文章推荐
- 神奇的SSH tunnel
- UIView中间透明周围半透明(四种方法)
- 南大软院大神养成计划--day10
- Android AsyncTask完全解析,带你从源码的角度彻底理解
- 黑马程序员 JavaSE-11 IO流
- get real ip
- iOS导航标题不居中显示问题
- Makefile实现子目录编译
- CMSIS标准
- 判断当前线程是否是在主线程中
- Python数据分析扩展库
- ABAP 动态查询条件
- RW-50004 While Running adrunfmw during EBS 12.2 Installation
- DataSet 转换成 List
- Android 开发 ContentProvider 获取歌曲列表和联系人的例子
- 记录——《C Primer Plus (第五版)》第十一章编程练习第一题
- POJ 2431 Expedition(优先队列)
- iOS 计算代码块执行时间
- 【灌水】第一篇博客
- const 与指针