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)所有的叶子结点中包含了全部关键字的信息, ...
随机推荐
- java springboot项目树结构递归查询
记录工作 本文记录树结构递归查询,像菜单栏和部门 首先需要一张表 CREATE TABLE `sys_dict` ( `id` int NOT NULL AUTO_INCREMENT, `parent ...
- Veeva_001常见问题总结
1.时间互动轴:其他代表与该医生的互动记录 2.Call的拜访流程 : 用户在Ipad端先制定计划拜访(已计划:青色)后,需手动同步到服务器上: 进入拜访详细,选择联系人和产品及相关拜访信息等,并'保 ...
- Angular JS入门 (一)事件监听(二)多控制器思想与模块化编程(三)路由router
Angular JS入门 ️将流式结构--->模块化 一.事件监听 1.事件监听 前言 NG框架中通过对元素标签添加[ng-事件名] 指令,来对元素添加事件监听 而事件监听的回调函数需要在con ...
- IDEA隐藏.idea
- CentOS 7--Nginx安装
1.安装依赖 yum install -y gcc-c++pcre pcre-develzlib zlib-developenssl openssl-devel 2.下载Nginx wget http ...
- pycharm字体大小设置
首先有两个方法 一个是滚轮放大缩小,一个是固定的字体大小. 调为固定的字体大小: 菜单栏:file--setting--editor--font--size 修改为需要大小字号,例如20,点击ok 滚 ...
- 教你如何自己搭环境部署华为FusionCompute虚拟化系统
https://www.bilibili.com/video/BV1iy4y177f4?p=10 实用的干货快先码起来,说不定以后会用到哟
- Blockchain for Edge of Things: Applications, Opportunities, and Challenges
物联网:物联网设备,如传感器和手机,负责从物理环境中生成或收集数据,然后通过接入点或基站传输到附近的边缘服务器(ES).具有某些资源的物联网设备(例如,智能手机和笔记本电脑)可以充当移动区块链实体进行 ...
- nginx 同一个域名根据后缀不同访问不同的项目
server { listen 80; server_name bcgx.work; location / { index login.html login.htm index.php; root / ...
- 第十章用Python获取sqlite、MySQL、Excel、csv、json中的数据
目录 获取sqlite3中的数据 sqlite3库获取sqlite数据 pandas库获取sqlite数据 获取MySQL中的数据 pymsql库获取MySQL数据 pandas库获取mysql数据 ...