ABAP 动态内表 实例展示以及代码Demo
因根据查询条件展示的报表列数不一定一致,因此采用动态内表的方式进行处理
这里写了一个简单的Demo记录一下
效果如下图:
一般来说通过选择屏幕来控制列的,我这里就简单处理,直接对内表赋予相关值,包括相关指标的数据,都是手动赋值的,大部分需求中都是通过数据库表取值在赋值的,这里根据业务情况的不同需要做出改变,代码相关如下:
REPORT y_test_demo01.
TYPES: BEGIN OF ty_alv,
item TYPE char6,
target TYPE char30,
END OF ty_alv.
TYPES: BEGIN OF ty_item,
item TYPE char6,
ittxt TYPE char20,
END OF ty_item.
DATA: gt_item TYPE STANDARD TABLE OF ty_item,
gt_alv TYPE STANDARD TABLE OF ty_alv,
ls_item TYPE ty_item,
ls_alv TYPE ty_alv.
*&---Field-symbols
FIELD-SYMBOLS: <dyn_alv> TYPE STANDARD TABLE.
*&---ALV Object
DATA: gt_fieldcat TYPE lvc_t_fcat,
gs_layout TYPE lvc_s_layo.
*&---------------------------------------------------------------------*
*& INITIALIZATION/选择屏幕前初始化(选择屏幕展示之前执行)
*&---------------------------------------------------------------------*
INITIALIZATION .
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN OUTPUT/选择屏幕控制(第二屏输出)
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT .
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN/选择屏幕执行(参数输入检查)
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN .
*&---------------------------------------------------------------------*
*& START-OF-SELECTION/开始选择屏幕(点击执行按钮之后执行的语块)
*&---------------------------------------------------------------------*
START-OF-SELECTION .
PERFORM frm_deal_data. " 处理数据
*&---------------------------------------------------------------------*
*& END-OF-SELECTION/结束选择屏幕(程序结束处理,输出等)
*&---------------------------------------------------------------------*
END-OF-SELECTION .
PERFORM frm_display_alv. " 展示报表
*&---------------------------------------------------------------------*
*& Form frm_deal_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_deal_data .
" 主数据填值
ls_alv-item = '010'.
ls_alv-target = '十'.
APPEND ls_alv TO gt_alv.
ls_alv-item = '020'.
ls_alv-target = '二十'.
APPEND ls_alv TO gt_alv.
ls_alv-item = '030'.
ls_alv-target = '三十'.
APPEND ls_alv TO gt_alv.
ls_alv-item = '040'.
ls_alv-target = '四十'.
APPEND ls_alv TO gt_alv.
ls_alv-item = '050'.
ls_alv-target = '五十'.
APPEND ls_alv TO gt_alv.
"填值 限定展示列的 内表 通过对这张表的 控制 来决定列的数量
ls_item-item = '010'.
ls_item-ittxt = '表头一'.
APPEND ls_item TO gt_item.
* ls_item-item = '020'.
* ls_item-ittxt = '表头二'.
* APPEND ls_item TO gt_item.
ls_item-item = '030'.
ls_item-ittxt = '表头三'.
APPEND ls_item TO gt_item.
* ls_item-item = '040'.
* ls_item-ittxt = '表头四'.
* APPEND ls_item TO gt_item.
ls_item-item = '050'.
ls_item-ittxt = '表头五'.
APPEND ls_item TO gt_item.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
PERFORM frm_set_dynamic_table. " 设置动态内表
PERFORM frm_fill_dyntab. " 填充动态内表
PERFORM frm_set_layout. "设置ALV输出格式
PERFORM frm_call_alv TABLES <dyn_alv>. "调用ALV函数
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_dynamic_table
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_dynamic_table .
DEFINE _set_fieldcat.
APPEND VALUE #(
fieldname = &1
ref_table = &2
ref_field = &3
coltext = &4
scrtext_l = &4
scrtext_m = &4
scrtext_s = &4
) TO gt_fieldcat.
END-OF-DEFINITION.
_set_fieldcat 'TARGET' '' '' '指标'. "
LOOP AT gt_item INTO DATA(ls_item).
_set_fieldcat ls_item-item '' '' ls_item-ittxt.
ENDLOOP.
" 根据字段目录创建动态内表
DATA: dyn_table TYPE REF TO data. " 指向任意类型
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat
IMPORTING
ep_table = dyn_table.
" 创建动态内表
ASSIGN dyn_table->* TO <dyn_alv>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_fill_dyntab
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_fill_dyntab .
DATA: lv_num TYPE i,
lv_sum TYPE i.
LOOP AT gt_alv INTO DATA(ls_alv).
DEFINE _set_value.
IF sy-subrc EQ 0 AND <fs_value> IS ASSIGNED.
<fs_value> = &1.
UNASSIGN <fs_value>.
ENDIF.
END-OF-DEFINITION.
APPEND INITIAL LINE TO <dyn_alv> ASSIGNING FIELD-SYMBOL(<fs_alv>).
" 固定列 填值
ASSIGN COMPONENT 'TARGET' OF STRUCTURE <fs_alv> TO FIELD-SYMBOL(<fs_value>).
_set_value: ls_alv-target.
" 动态列 填值
LOOP AT gt_item INTO DATA(ls_item).
lv_num = lv_num + 1.
lv_sum = lv_num * 10.
ASSIGN COMPONENT ls_item-item OF STRUCTURE <fs_alv> TO <fs_value>.
_set_value: lv_sum.
ENDLOOP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_layout .
gs_layout = VALUE #( zebra = abap_on
cwidth_opt = abap_on ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_call_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> <DYN_ALV>
*&---------------------------------------------------------------------*
FORM frm_call_alv
TABLES
pt_outtab TYPE table.
IF pt_outtab[] IS INITIAL.
MESSAGE s373(g0) DISPLAY LIKE 'E'. " 无数据记录存在
LEAVE LIST-PROCESSING.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* i_callback_user_command = 'USER_COMMAND'
* i_callback_pf_status_set = 'SET_PF_STATUS'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
i_save = 'A'
TABLES
t_outtab = pt_outtab[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
ABAP 动态内表 实例展示以及代码Demo的更多相关文章
- ABAP 动态内表添加单元格颜色字段
*动态内表alv显示时要求某些单元格显示颜色 *wa_fldcat-datatype不能添加LVC_T_SCOL类型,在创建好内表之后,再添加颜色列. DATA: wa_fldcat TYPE lvc ...
- 转载: ABAP动态内表操作
顾名思义,动态表的列是可以根据数据的变化而变化的,会使报表显示更简洁漂亮. 以下是实现方法. ------------------------------------------- 1, 创建动态内表 ...
- ABAP 动态内表 动态ALV
DATA: DY_TABLE TYPE REF TO DATA, DY_WA TYPE REF TO DATA. FIELD-SYMBOLS: <DYN_TABLE> TYPE TABLE ...
- 转ABAP将内表行列转换实例(动态内表) .
把内表的行列转换,网上的例子很多,但是新人想看懂,几乎很难,所以总结下我是怎么完成的. 比如:你的内表如图: 你想让内表最后展示成这样:如图: 那么完成之后会是这样: 完成这个过程,得用到动态内表.看 ...
- ABAP 动态内标排序
动态内表怎样排序动态内表怎样排序 动态内表要排序时,因为不知道内表中的字段名字,所以不能直接用SORT table BY field1 field2... 可以使用下面的方法来实现:SORT tab ...
- 动态ALV表实例-移动类型汇总
TABLES:MSEG,MAKT. "定义结构 TYPES:BEGIN OF TY_DATA, MJAHR LIKE MSEG-MJAHR, "物料凭证的年份 MBLNR LIKE ...
- SAP ABAP: 把内表数据以excel或csv格式,通过前台或者后台的方式上传至FTP服务器
今天接到一个FTP的需求,就是每天晚上把当天某个报表的数据自动保存excel上传到FTP服务器. SAP已经有现成的FTP函数使用,可以通过函数的方式来实现,实现前先准备一些数据: User:登录FT ...
- SAP ABAP ALV构建动态输出列与构建动态内表(包留备用),包含操作abap元类型表及类
https://blog.csdn.net/zhongguomao/article/details/51095946
- 查找->动态查找表->键树(无代码)
文字描述 键树定义 键树又叫数字查找树,它是一棵度大于或等于2的树,树中的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号.例如,若关键字是数值,则结点中只包含一个数位:若关键字是单词, ...
- 查找->动态查找表->B+树(无代码)
文字描述 B+树定义 B+树是应文件系统所需而出的一种B-树的变型树.一棵m阶的B+树和m阶的B-树的差异在于: (1)有n棵子树的结点中含有n个关键字 (2)所有的叶子结点中包含了全部关键字的信息, ...
随机推荐
- Centos.JAVA 环境安装
JAVA 环境安装 0x00.环境准备 OS CentOS JDK1.8 安装包 jdk-8u131-linux-x64.tar.gz 0x01.卸载自带的open jdk 执行rpm -qa | g ...
- 创建一个spring项目
- scp 和 rsync
scp 和 rsync指令的区别 相同点两者都可以被用来进行数据同步 不同点 : 对于scp来讲 是全量复制 以当前主机为准 将相同的文件拷贝到另一台机器上 rsync 可以识别增量的内容,可以仅仅对 ...
- [转载]Linux关于磁盘操作命令
一.查看篇 1.1.du : 查看文件和 目录的使用空间 语法: du [参数] [文件或目录] 参数 说明 -a 列出所有的文件与目录容量. -h 以G.M.K为单位,返回容量. -s 列出总量. ...
- Web框架-inoic
ionic 下载ionic 使用命令行安装npm 1.安装node.js 最后安装的目录在D:\2019-10-14\2019-11-04-2 检测nodejs安装成功? node -v 如果报错,是 ...
- C语言源文件如何编译为exe
先观看https://blog.csdn.net/u014772182/article/details/43348465来配置gcc环境随后在cmd中cd到目标文件夹gcc main.c -o ste ...
- bootstrap table表格按钮
1 <body> 2 3 <form action="" method="POST" class="form-horizontal& ...
- oracle数据库安装出现的问题
根据相关安装教程,安装好oracle后,使用plsql连接时,不能成功连接时: 1.检查相关的环境变量等是否配置正确 2.认真看清楚 oracle客户端的相关配置 3.出现这个问题(我的是没有选择当前 ...
- 杂:pthread_cond_timedwait导致死锁
地球人都知道1:pthread_cond_timedwait使用时,需要对[条件]加锁.[条件]也是一种线程共享资源. 地球人都知道2:1个互斥锁不应该管理2类及以上的多线程共享资源 1+2=下面这样 ...
- nanoPi R1 资料
eflasher脱机烧写 在命令行终端中通过执行下列命令进行烧写: $ su root $ eflasher root 用户的密码是 fa. 串口登录 控制台波特率 115200