zl程序教程

您现在的位置是:首页 >  其它

当前栏目

ABAP 之LT_FIELDCAT的拼接写法

ABAP lt 拼接 写法 FIELDCAT
2023-06-13 09:15:59 时间

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

HELLO,这里是百里,一个学习中的ABAPER,我们在工作中会经常写ALV报表,那么什么东西是让你最痛苦的呢. 针对百里而言,我觉得有几点. 第一就是数据定义,第二取数,第三就是写FIELDCAT 的时候. 这东西毫无技术含量不说又非常的占位置.你要写一堆一堆一堆的. 今天百里看代码时候发现了一个小功能.就是LT_FIELDCAT的拼接写法.

什么是LT_FIELDCAT的拼接写法

其实这个名字我也想了一下.其实我不确定这个是不是该这么取名字,但是确实是拼接了FIELDCAT的字段内容.总体作用就是可以减少我们在工作中针对自定义表 的部分可以不用手写,而直接通过代码生成.

使用方法

主要是调用函数LVC_FIELDCATALOG_MERGE 该函数可以将自检表(标准表) 中的字段对应带到FIELDCAT中. 这样我们就可以少写很多的字段 .这里推荐 自检表这么干,因为标准表的文本真的有点反人类. 哈哈哈...

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'  
    EXPORTING  
      i_structure_name = '自检表'  
    CHANGING  
      ct_fieldcat      = lt_fieldcat.

实例

本次实例讲的是自建表结合自定义的两个字段直接简单方便的输出ALV对应内容

数据准备

TYPES:BEGIN OF ty_data.  
        INCLUDE STRUCTURE zsdt0003A.  
  
TYPES:  slbox TYPE char1,  
        zmsg TYPE char20.  
  
  
  
TYPES:END OF ty_data.  
  
DATA:gt_data TYPE TABLE OF ty_data.  
  
  
  
  DATA:lt_fieldcat TYPE lvc_t_fcat,  
       ls_fieldcat TYPE lvc_s_fcat,  
       ls_layo     TYPE lvc_s_layo.  
  DATA:ls_glay TYPE  lvc_s_glay.  
  ls_layo-cwidth_opt = 'X'.  
data :numc TYPE p .

注意这里要用一个继承,当然不用继承也可以,只要你不嫌弃着累就行 . 用了继承可以更方便的输出ALV必须的字段.

获取数据

select * from  ZSDT0003A as a into TABLE gt_data .  
LOOP AT gt_data into data(gs_DAta).  
  
numc = numc + 1 .  
  
gs_data-zmsg = numc .  
  
modify  gt_data FROM gs_data .  
  
ENDLOOP.

定义子例程

DEFINE add_col.  
  
*    ADD 1 TO pos.  
*    lw_fieldcat-col_pos = pos.  
    ls_fieldcat-fieldname = &1.  
    ls_fieldcat-ref_field = &2.  
    ls_fieldcat-ref_table = &3.  
    ls_fieldcat-scrtext_l = &4.  
    ls_fieldcat-outputlen = &5.  
    ls_fieldcat-no_zero = &6.  
    ls_fieldcat-edit = &7.  
    ls_fieldcat-edit_mask = &8.  
    ls_fieldcat-key = &9.  
  
  
   CASE  ls_fieldcat-fieldname.  
      WHEN 'SLBOX'.  
 ls_fieldcat-checkbox = 'X' .  
 ls_fieldcat-edit = 'X' .  
  ls_fieldcat-edit_mask = 'X'.  
"   WHEN 'VBELN' .  
" ls_fieldcat-HOTSPOT = 'X' .  
" WHEN 'KBETR'.  
"   ls_fieldcat-decimals_o = 2 .  
"   WHEN 'FKIMG' .  
"     ls_fieldcat-decimals_o = 0 .  
  
  
      WHEN OTHERS.  
ENDCASE .  
  
    APPEND ls_fieldcat TO lt_fieldcat.  
  
  CLEAR : ls_fieldcat.  
  END-OF-DEFINITION.  
  REFRESH: lt_fieldcat.

调用函数及展示ALV

add_col 'SLBOX'     space space '选项'           space space space space space.  
  add_col 'zmsg'     space space '序号'           space space space space space.  
  
  
"* 获取ALV固定结构  
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'  
    EXPORTING  
      i_structure_name = 'ZSDT0003A'  
    CHANGING  
      ct_fieldcat      = lt_fieldcat.  
  
  DELETE lt_fieldcat WHERE fieldname = 'MANDT'."不显示客户端字段  
  
  ls_glay-edt_cll_cb = abap_true.  
 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'  
    EXPORTING  
      i_callback_program       = sy-repid  
*     is_variant               = is_variant  
      i_callback_pf_status_set = 'PF_STATUS_SET'  
      i_callback_user_command  = 'USER_COMMAND'  
      i_grid_settings          = ls_glay  
      is_layout_lvc            = ls_layo  
      it_fieldcat_lvc          = lt_fieldcat  
      i_save                   = 'A'  
    "  it_events                = lt_event  
    TABLES  
      t_outtab                 = gt_data  
    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.

结果展示

我们很明显看到我们自己手写的其实只用'SLBOX' 和'ZMEG' 字段 ,剩下的字段都是由函数帮我们写入进来的.

这样可以减少我们很多的时间 .

技术总结

今天讲的是针对自建立表时,如何更节省时间的生成对应ALV 的办法,可以减少我们非常多的时间,去做更多的事情,这种写法与自己写入的方式一样,可以在后续通过操作内表LT_FIELDCAT 的字段内容进行其他操作,如颜色,单元格,自动列宽等等都可以的.

百里鸡汤

及时当勉励,岁月不待人。劝君吸取少年时,劝君莫惜金缕衣。桐花万里丹山路,雏凤清于老凤声

这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.