wordpress虚拟卡密武汉建站优化厂家
动态内表1-通过系统表LVC_T_FCAT类型定义内表
如果对你有帮助,点个关注收藏吧~
做BW做久了,突然对abap有了探索欲,开始进一步学习abap了,以后这个系列会逐步更新,欢迎小伙伴点个关注一起学习,我学习的方法一般是通过自己写代码加注释理解,也会以这种方式做一个笔记。
知识点:
1.LVC_T_FCAT表类型
今天开始练习动态内表,今天的方法是通过系统表类型LVC_T_FCAT,LVC_T_FCAT是一个用于定义ALV网格控制字段属性的表类型,会作为定义内表很常用的一个类型。他的原理我理解就是有很多字段相关的属性,我们通过给这些属性赋值生产我们的表字段,通过定义不同的表自动来生成内表。
当然字段也可以通过变量赋值,把它们放在do loop循环,就可以结合变量动态生成内表了
以下是常用的属性:
- FIELDNAME:字段名称,对应于ALV输出内表中的字段名。
- TABNAME:LVC标签名称,即内表名。
- COL_POS:字段的位置,即在输出中是第几列。
- OUTPUTLEN:列的字符宽度。
- INTTYPE:ABAP数据类型(如C, D, N等)。
- INTLEN:以字节计的内部长度内容的长度。
- SCRTEXT_S/M/L:字段的文本描述,分别对应短描述、中描述和长描述。
- KEY:字段是否为关键字,关键字字段在ALV中会显示为蓝色。
- ICON:作为图标输出,字段内容必须是有效的图标名称。
- HOTSPOT:设置为热点字段,字段显示有下划线响应单击。
- CHECKBOX:作为复选框输出。
- JUST:对齐方式,可以是R(右对齐)、L(左对齐)或C(居中)。
- LZERO:输出前导零,仅对NUMC类型字段有效。
- NO_SIGN:输出时不显示正负号。
- NO_ZERO:如果值为零,则不显示零。
- DO_SUM:对当前列输出时自动求和。
- NO_OUT:当前列隐藏输出。
- TECH:技术字段,设置为'X'后,该字段不会显示也不能输出。
- 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> ).
输出结果: