前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matinal:SAP ABAP ALV实现下拉框可编辑并实现不同颜色

matinal:SAP ABAP ALV实现下拉框可编辑并实现不同颜色

作者头像
matinal
发布2023-10-14 14:42:40
3040
发布2023-10-14 14:42:40
举报
文章被收录于专栏:SAP TechnicalSAP Technical
一:ALV 报表实现单元格编辑

ALV 报表单元格实现下拉框编辑,效果图如下

声明以下变量: DATA:gs_layout_lvc TYPE lvc_s_layo, gt_fcat_lvc TYPE lvc_t_fcat, gs_fcat_lvc TYPE lvc_s_fcat, ls_event TYPE slis_alv_event, lt_event TYPE slis_t_event.

data:lt_dropdown TYPE lvc_t_drop, ls_dropdown TYPE lvc_s_drop.

PS:一个 ALV 报表可以存在多个单元格不同数值下拉框,所以 handle 可以理解为分组,后期调用根据该值来判断是哪个下拉框。 ls_dropdown-handle = ‘1’. //值为1,2,3,4…的自然数 ls_dropdown-value = ‘女’. //下拉框值

gs_fcat_lvc-DRDN_HNDL 该值表示以上下拉框的分组。

完整代码如下

代码语言:javascript
复制
*&---------------------------------------------------------------------*
*& Report ZMMRTEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMRTEST.

*DATA: BEGIN OF srctab1 OCCURS 1,
*txt(255) TYPE c,
*END OF srctab1.
*
*PARAMETERS: rep LIKE trdir-name.
*
*AT SELECTION-SCREEN.
*
*START-OF-SELECTION.
*sy-uname = 'SAP'.
*READ REPORT rep INTO srctab1.
*EDITOR-CALL FOR srctab1.
*IF sy-subrc = 0.
*INSERT REPORT rep FROM srctab1.
*ENDIF.


*----------------------------------------------------------------------*
* Type-pools/定义类型池
*----------------------------------------------------------------------*
TYPE-POOLS: slis.

*----------------------------------------------------------------------*
* Tables/声明数据库表
*----------------------------------------------------------------------*
TABLES:ZMMTEST.

*----------------------------------------------------------------------*
* Type/自定义类型
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_alv,
        id   type zmmtest-id,
        name type zmmtest-name,
        age  type zmmtest-age,
        sex  type zmmtest-sex,
        hobby type zmmtest-hobby,
  END OF ty_alv.

DATA:gt_alv      TYPE STANDARD TABLE OF ty_alv,
     gs_alv      TYPE ty_alv.


*-------------------------------------*
* Define the Macros/定义
*----------------------------------------------------------------------*
DEFINE set_fieldcat.
  CLEAR gs_fcat_lvc .
  gs_fcat_lvc-fieldname = &1."内表的字段
  gs_fcat_lvc-outputlen = &2."输出长度
  gs_fcat_lvc-scrtext_l = &3."在ALV里面显示的名字
  gs_fcat_lvc-just      = &4."水平对齐方式,L左对齐,R右对齐。
  gs_fcat_lvc-no_zero   = &5."去除前导零
  gs_fcat_lvc-edit   = &6."当前列可编辑
  gs_fcat_lvc-ref_table   = &7."该字段的参考表
  gs_fcat_lvc-ref_field   = &8."该字段的参考字段
  gs_fcat_lvc-DRDN_HNDL   = &9."选择框
  APPEND gs_fcat_lvc TO gt_fcat_lvc .
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* 声明ALV对象
*----------------------------------------------------------------------*
DATA:gs_layout_lvc TYPE lvc_s_layo,
     gt_fcat_lvc   TYPE lvc_t_fcat,
     gs_fcat_lvc   TYPE lvc_s_fcat,
     ls_event    TYPE slis_alv_event,
     lt_event    TYPE slis_t_event.

data:lt_dropdown TYPE lvc_t_drop,
     ls_dropdown TYPE lvc_s_drop.

DATA:GS_STYLE TYPE LVC_S_STYL,
     GT_STYLE TYPE LVC_T_STYL.

*----------------------------------------------------------------------*
* Internal table and work area/定义内表和工作区
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Selection  screen/定义屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN FUNCTION KEY: 1 .
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-t01.
    SELECT-OPTIONS: s_id FOR zmmtest-id,
                    s_name FOR zmmtest-name,
                    s_age FOR zmmtest-age,
                    s_sex FOR zmmtest-sex,
                    s_hobby FOR zmmtest-hobby.
SELECTION-SCREEN END OF BLOCK block1.
*----------------------------------------------------------------------*
* Initialization/初始事件
*----------------------------------------------------------------------*
INITIALIZATION.

*----------------------------------------------------------------------*
* At selection-screen/屏幕事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*----------------------------------------------------------------------*
* Start-of-selection/开始选择事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
*取数据
  PERFORM frm_get_data.
*ALV展示
  PERFORM frm_display_alv.
*----------------------------------------------------------------------*
* End-of-selection/结束选择事件
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_get_data .
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE gt_alv
    from zmmtest
    where id in s_id
       AND name in s_name
       AND age  in s_age
       AND sex  in s_sex
       AND hobby in s_hobby.

*      GS_STYLE-FIELDNAME = 'SEX'.
*      GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED."设置为不可编辑
*      INSERT GS_STYLE INTO TABLE GT_STYLE.
*
*      INSERT LINES OF GT_STYLE INTO TABLE gt_alv.
endform.

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
  set_fieldcat:'ID'  '' '学号' '' '' '' '' '' '',
               'NAME' '' '学生姓名' '' '' '' '' '' '',
               'AGE' '' '年龄' '' '' 'X' 'ZMMTEST' 'AGE' '2',
               'SEX' '' '性别' '' '' 'X' 'ZMMTEST' 'HOBBY' '1',
               'HOBBY' '' '兴趣爱好' '' '' '' '' '' ''.
               "'STYLE' '' '编辑' '' ''.
  CLEAR:gs_layout_lvc.
  gs_layout_lvc-zebra     = 'X'.
  gs_layout_lvc-cwidth_opt   = 'X'.

  PERFORM creat_dropdown_values.
  PERFORM create_event.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      is_layout_lvc      = gs_layout_lvc
      it_fieldcat_lvc    = gt_fcat_lvc
      i_save             = 'A'
      it_events          = lt_event
    TABLES
      t_outtab           = gt_alv
    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.
ENDFORM.

FORM creat_dropdown_values.

  ls_dropdown-handle = '1'.
  ls_dropdown-value = '男'.
  APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '1'.
  ls_dropdown-value = '女'.
  APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '2'.
  ls_dropdown-value = '18'.
  APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '2'.
  ls_dropdown-value = '19'.
  APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '2'.
  ls_dropdown-value = '20'.
  APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '2'.
  ls_dropdown-value = '21'.
  APPEND ls_dropdown TO lt_dropdown.


ENDFORM.

FORM create_event.
  ls_event-name = 'CALLER_EXIT'.
  ls_event-form = 'CALLER_EXIT'.
  APPEND ls_event TO lt_event.
ENDFORM.

FORM caller_exit USING r_grid TYPE slis_data_caller_exit.
  DATA:l_ref_alv TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = l_ref_alv.

  CALL METHOD l_ref_alv->set_drop_down_table
    EXPORTING
      it_drop_down = lt_dropdown.
ENDFORM.
二:ALV 报表实现列表颜色

1.效果如下:实现性别为“女”的行标红显示。

 效果如下:

源码如下:

  • 定义 alv 内表结构体的颜色字段 color(4)
  • 布局设定中指定该列为颜色列:gs_layout_lvc-info_fname = ‘COLOR’. " 行颜色字段 gs_layout_lvc-cwidth_opt = ‘X’.
  • 符合条件的行该字段设置对应颜色代码
代码语言:javascript
复制
TYPES:BEGIN OF ty_alv,
        sel type char1,     
        id   type zmmtest-id,
        name type zmmtest-name,
        age  type zmmtest-age,
        sex  type zmmtest-sex,
        hobby type zmmtest-hobby,
        color(4),   //定义
  END OF ty_alv.

  LOOP at gt_alv into gs_alv.
    IF gs_alv-sex = '女'.
      gs_alv-color = 'C610'.   //设置颜色
    ENDIF.
    modify gt_alv FROM gs_alv.

  ENDLOOP.

  gs_layout_lvc-info_fname = 'COLOR'. " 行颜色字段
  gs_layout_lvc-cwidth_opt = 'X'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      i_callback_pf_status_set = 'FRM_PF_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout_lvc      = gs_layout_lvc
      it_fieldcat_lvc    = gt_fcat_lvc
      i_save             = 'A'
    TABLES
      t_outtab           = gt_alv
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:ALV 报表实现单元格编辑
  • 二:ALV 报表实现列表颜色
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档