当前位置: 首页 > news >正文

ABAP进阶学习1:动态内表1-通过系统表LVC_T_FCAT类型定义内表

动态内表1-通过系统表LVC_T_FCAT类型定义内表

如果对你有帮助,点个关注收藏吧~

做BW做久了,突然对abap有了探索欲,开始进一步学习abap了,以后这个系列会逐步更新,欢迎小伙伴点个关注一起学习,我学习的方法一般是通过自己写代码加注释理解,也会以这种方式做一个笔记。

知识点:

1.LVC_T_FCAT表类型

今天开始练习动态内表,今天的方法是通过系统表类型LVC_T_FCAT,LVC_T_FCAT是一个用于定义ALV网格控制字段属性的表类型,会作为定义内表很常用的一个类型。他的原理我理解就是有很多字段相关的属性,我们通过给这些属性赋值生产我们的表字段,通过定义不同的表自动来生成内表。

当然字段也可以通过变量赋值,把它们放在do loop循环,就可以结合变量动态生成内表了

以下是常用的属性:

  1. FIELDNAME:字段名称,对应于ALV输出内表中的字段名。
  2. TABNAME:LVC标签名称,即内表名。
  3. COL_POS:字段的位置,即在输出中是第几列。
  4. OUTPUTLEN:列的字符宽度。
  5. INTTYPE:ABAP数据类型(如C, D, N等)。
  6. INTLEN:以字节计的内部长度内容的长度。
  7. SCRTEXT_S/M/L:字段的文本描述,分别对应短描述、中描述和长描述。
  8. KEY:字段是否为关键字,关键字字段在ALV中会显示为蓝色。
  9. ICON:作为图标输出,字段内容必须是有效的图标名称。
  10. HOTSPOT:设置为热点字段,字段显示有下划线响应单击。
  11. CHECKBOX:作为复选框输出。
  12. JUST:对齐方式,可以是R(右对齐)、L(左对齐)或C(居中)。
  13. LZERO:输出前导零,仅对NUMC类型字段有效。
  14. NO_SIGN:输出时不显示正负号。
  15. NO_ZERO:如果值为零,则不显示零。
  16. DO_SUM:对当前列输出时自动求和。
  17. NO_OUT:当前列隐藏输出。
  18. TECH:技术字段,设置为'X'后,该字段不会显示也不能输出。
  19. CURRENCY:货币单位。

2.CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE

定义好表结构后通过标准类输入表类型,输出我们想生成的内表。下面的代码会有具体写法

3.代码案例

话不多说上代码,注释里是我的笔记,代码里还涉及到一些动态指针的分配,这个我之前写过,写的比较粗浅,后面这个系列还会更新

*&---------------------------------------------------------------------*
*& Report ZBW_IDAN_TEST_DTNB
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZBW_IDAN_TEST_DTNB.
"分配内表
field-symbols: <ft_vb>     type standard table,<fs_vb>     type any,<dyn_field> type any.
data : gt_fieldcat  type lvc_t_fcat,"系统表gs_fieldcat  type lvc_s_fcat."系统结构
"在ABAP中,LVC_T_FCAT 是一个用于定义ALV网格控制字段属性的表类型" 定义字段目录条目
gs_fieldcat-fieldname = 'COLUMN1'.
gs_fieldcat-datatype = 'CHAR'.
gs_fieldcat-outputlen = 8." 将字段目录条目添加到表中
APPEND gs_fieldcat TO gt_fieldcat." 定义字段目录条目
gs_fieldcat-fieldname = 'COLUMN2'.
gs_fieldcat-datatype = 'DATS'.
gs_fieldcat-outputlen = 8.
" 将字段目录条目添加到表中
APPEND gs_fieldcat TO gt_fieldcat.
DATA: lt_new_table TYPE REF TO data ,ls_new_line  TYPE REF TO data .CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = gt_fieldcatIMPORTINGep_table        = lt_new_table.ASSIGN lt_new_table->* TO <ft_vb>.CREATE DATA ls_new_line LIKE LINE OF <ft_vb>.ASSIGN ls_new_line->* TO <fs_vb>."内表赋值"LOOP AT <ft_vb> ASSIGNING  <fs_vb>.APPEND INITIAL LINE TO  <ft_vb> ASSIGNING <fs_vb>..ASSIGN COMPONENT 'COLUMN1' OF STRUCTURE <fs_vb> TO FIELD-SYMBOL(<FS_fieldname1>).IF <FS_fieldname1> IS ASSIGNED.<FS_fieldname1> = 'TEST1'.ENDIF.ASSIGN COMPONENT 'COLUMN2' OF STRUCTURE <fs_vb> TO FIELD-SYMBOL(<FS_fieldname2>).IF <FS_fieldname2> IS ASSIGNED.<FS_fieldname2> = '20240101'.ENDIF."ENDLOOP.cl_demo_output=>display_data( <ft_vb> ).

输出结果:

http://www.lryc.cn/news/473429.html

相关文章:

  • 【Vispy库】一个用于高性能交互式2D/3D数据可视化库 Python库
  • 为什么 C 语言数组是从 0 开始计数的?
  • matlab线性度计算程序
  • 为什么NMOS管比PMOS管更受欢迎?
  • 【论文复现】短期电力负荷
  • pytest脚本常用的执行命令
  • OpenCv入门
  • 超详细的flex教程(面试必考)
  • C++的输入与输出
  • 上海剧某文化传播有限公司与喜某(上海)网络科技有限公司、上海喜某科技有限公司侵害著作权及不正当竞争纠纷案
  • 【c++篇】:模拟实现string类--探索字符串操作的底层逻辑
  • springboot配置logback.xml遇到的几个问题
  • MySQL 5.7与MySQL 8.0对比
  • 【代码随想录Day55】图论Part07
  • 软考在即!这些注意事项你提前了解!
  • CMake知识点
  • git ls-remote
  • 低代码平台如何通过AI赋能,实现更智能的业务自动化?
  • 计算疫情扩散时间
  • 【Windows11】24H2 内存占用高(截至10月31日)
  • 题目:多个字符从两端移动,向中间汇聚
  • 前端如何安全存储密钥,防止信息泄露
  • 银行电子户分账解决电商行业哪些问题
  • Web音乐库:SpringBoot实现的音乐网站
  • Rust: 加密算法库 ring 如何用于 RSA 数字签名?
  • Matplotlib 网格线
  • 钉钉机器人禅道消息通知@指派人
  • 我的新书出版啦!和大家聊聊写书的酸甜苦辣
  • 【福建医科大学附属第一医院-注册安全分析报告】
  • 第二届新生程序设计竞赛热身赛(C语言)