ABAP ALV 动态显示列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP ALV 动态显示列相关的知识,希望对你有一定的参考价值。

ALV已能显示一个内表数据,根据用户选择的条件不同,现ALV表格中有的整列内容为0或为空,如何在程序中动态地设置显示或隐藏这些列?即整列为0时,这一列不显示.注意:条件不同时这一列可能又不为0. 则要显示.
read table gt_tab with key 列4 = 0 BINARY SEARCH. 这个好像不起作用呀,如果这一列中有的值为0,有的不是0,那么能搜索到, SY-SUBRC=0,则这一列就不显示了,我要的是只要有一个值不为0,那到这一列就要显示,只有整列为0,就不显示.

参考技术A PERFORM F_INPUT_FIELDCAT USING:
'A' '列1',
'B' '列2',
'C' '列3'.

*如果不等于0就输出列4
sort gt_tab by 列4.
read table gt_tab with key 列4 = 0 BINARY SEARCH.
IF sy-subrc <> 0.
PERFORM F_INPUT_FIELDCAT USING 'D' '列4'.
endif.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = WS_LAYOUT
IT_FIELDCAT_LVC = WS_FIELDCAT
TABLES
T_OUTTAB = GT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.

*&---------------------------------------------------------------------*
*& Form F_INPUT_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(P_FIELD) text
* -->VALUE(P_NAME) text
*----------------------------------------------------------------------*
FORM F_INPUT_FIELDCAT USING VALUE(P_FIELD)
VALUE(P_NAME).
DATA: ST_FIELDCAT TYPE LVC_S_FCAT.
ST_FIELDCAT-FIELDNAME = P_FIELD.
ST_FIELDCAT-SCRTEXT_M = P_NAME.
APPEND ST_FIELDCAT TO WS_FIELDCAT.
CLEAR ST_FIELDCAT.
ENDFORM. "F_INPUT_FIELDCAT本回答被提问者和网友采纳

abap简单报表,alv显示,按钮事件

tables:itab.
TYPE-POOLS: slis"alv
"ALV显示标准定义
DATA: g_repid     LIKE sy-repid,
      it_fieldcat TYPE lvc_t_fcat WITH HEADER LINE,
      is_layout   TYPE lvc_s_layo.
DATA: gwk_grid_setting LIKE lvc_s_glay.    "标记选中列
CONSTANTS  pf_status TYPE slis_formname VALUE ‘ALV_PF_STATUS‘"定义状态
CONSTANTS user_command TYPE slis_formname VALUE ‘ALV_USER_COMMAND‘"定义按钮
"以上的都是标准的定义,直接复制。


"定义内表
DATA BEGIN OF wa_itab,
         "alv显示字段
         matnr TYPE zewmt026-matnr,
       END OF wa_itab.
DATA lt_itab LIKE TABLE OF wa_itab.

"可以自己定义一个小的屏幕,也可以不需要 ,看自己需不需要
SELECTION-SCREENBEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-901.
SELECTION-SCREEN FUNCTION KEY 1.
PARAMETERS : p1 TYPE char1 RADIOBUTTON GROUP g1 .
SELECT-OPTIONS:
     s_a FOR table-a ,
     s_b FOR table-b .
PARAMETERS : p2 TYPE char1 RADIOBUTTON GROUP g1.
SELECTION-SCREENEND OF BLOCK b1.


"判断自己是否需要选择屏幕,根据选择条件显示的内容
PARAMETERS d LIKE table-d.
SELECT-OPTIONS:
     a FOR table-a,
     b FOR table-b.


INITIALIZATION"加载前的事件,不一定会有。



"用FORM的形式可以避免整个程序出错,还可以更快找到不正确的地方。
START-OF-SELECTION.
  PERFORM get_data.               "获取数据
  PERFORM alv_layout_build.       "alv格式设置
  PERFORM alv_fieldcat.           "样式
  PERFORM alv_show.               "ALV显示
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data ." 获取需要显示的数据
  SELECT *
    FROM table
    INTO CORRESPONDING FIELDS OF TABLE lt_itab
    WHERE a IN a
      AND b IN b.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ALV_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_layout_build ."自己可以添加需要的设置
  is_layout-zebra      ‘X‘.   "明亮显示
  is_layout-box_fname  ‘SEL‘"可选
  is_layout-cwidth_opt ‘X‘.   "自动宽度
  gwk_grid_setting-edt_cll_cb ‘X‘."刷新
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ALV_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_fieldcat .
  CLEAR it_fieldcat.REFRESH it_fieldcat.
  DEFINE lit_fieldcat.       "自己可以添加需要的设置
    it_fieldcat-tabname   ‘IT_OUT‘.
    it_fieldcat-fieldname = &1.     "字段名字
    it_fieldcat-coltext   = &2.     "字段描述
    it_fieldcat-just      = &3.     "对齐
    it_fieldcat-edit      = &4.     "可以更改
"  ls_fieldcat-decimals_out = &5.  "去掉小数点后面的零填0
       .
       .
       .
       .
    APPEND  it_fieldcat.
    CLEAR   it_fieldcat.
  END-OF-DEFINITION.   "lit_fieldcat
  lit_fieldcat :
   ‘MATNR‘  ‘物料编码‘  ‘L‘     ‘‘,
   ‘ZBTYPE‘ ‘箱型‘      ‘L‘     ‘‘,
   ‘ZCDATE‘ ‘创建日期‘  ‘L‘     ‘‘,
   ‘ZCTIME‘ ‘创建时间‘  ‘L‘     ‘‘,
   ‘ZCUSER‘ ‘创建用户‘  ‘L‘     ‘‘,
   ‘ZQTY‘   ‘申请数量‘  ‘L‘    ‘X‘,
   ‘MEINS‘  ‘ 单位‘     ‘L‘    ‘X‘.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_show .  " 选择自己需要显示的内容。
  g_repid = sy-repid.
  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC‘
    EXPORTING
*     I_INTERFACE_CHECK        = ‘ ‘
*     I_BYPASSING_BUFFER       =
*     I_BUFFER_ACTIVE          =
      i_callback_program       = g_repid    "本程序
      i_callback_pf_status_set = pf_status
      i_callback_user_command  = user_command
*     I_CALLBACK_TOP_OF_PAGE   = ‘ ‘
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ‘ ‘
*     I_CALLBACK_HTML_END_OF_LIST       = ‘ ‘
*     I_STRUCTURE_NAME         =
*     I_BACKGROUND_ID          = ‘ ‘
*     I_GRID_TITLE             =
      i_grid_settings          = gwk_grid_setting  "按钮后刷新
      is_layout_lvc            = is_layout
      it_fieldcat_lvc          = it_fieldcat[]
*     IT_EXCLUDING             =
*     IT_SPECIAL_GROUPS_LVC    =
*     IT_SORT_LVC              =
*     IT_FILTER_LVC            =
*     IT_HYPERLINK             =
*     IS_SEL_HIDE              =
*     I_DEFAULT                = ‘X‘
      i_save                   ‘A‘
*     IS_VARIANT               =
*     IT_EVENTS                =
*     IT_EVENT_EXIT            =
*     IS_PRINT_LVC             =
*     IS_REPREP_ID_LVC         =
*     I_SCREEN_START_COLUMN    = 0
*     I_SCREEN_START_LINE      = 0
*     I_SCREEN_END_COLUMN      = 0
*     I_SCREEN_END_LINE        = 0
*     I_HTML_HEIGHT_TOP        =
*     I_HTML_HEIGHT_END        =
*     IT_ALV_GRAPHICS          =
*     IT_EXCEPT_QINFO_LVC      =
*     IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER  =
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 = lt_itab  "数据存放表
    EXCEPTIONS
      program_error            1         "异常
      OTHERS                   2.
  IF sy-subrc <> 0.       "异常
* Implement suitable error handling here
  ENDIF.
ENDFORM.


FORM alv_pf_status USING rt_extab TYPE  slis_t_extab.
  SET PF-STATUS‘、状态名、‘ EXCLUDING rt_extab.     "用自己的GUI状态,不用的话就把关于他的都删掉,用标准的
ENDFORM.


FORM alv_user_command USING r_ucomm LIKE sy-ucomm
                  rs_selfield TYPE slis_selfield.
  CASE r_ucomm.

    WHEN ‘XX‘ .

    WHEN  ‘YY‘.

    WHEN OTHERS.

  ENDCASE.
  rs_selfield-refresh ‘X‘.    " REFESH ALV ,ALV被修改时会自动刷新,没有修改不进行刷新
ENDFORM.

 

以上是关于ABAP ALV 动态显示列的主要内容,如果未能解决你的问题,请参考以下文章

abap语言的alv程序中,如何控制单元格的零显示空

ABAP-动态ALV

在SAP abap中。从第一个ALV显示根据筛选条件搜索出第二个ALV的显示数据(内表不一样)点击返回一直转圈

abap开发中,在屏幕上怎样显示alv

ABAP学习(11):ALV显示之OO ALV使用示例

ABAP ALV 怎么用?