ALV的知识点

1、在ALV中添加表头

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM          = SY-REPID
      IS_LAYOUT_LVC               = GS_LAYOUT_LVC
      IT_FIELDCAT_LVC             = GT_FIELDCAT_LVC
      I_CALLBACK_PF_STATUS_SET    = 'FRM_SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND     = 'FRM_USER_COMMAND'  "用于自己想添加新的控件
      **I_CALLBACK_HTML_TOP_OF_PAGE = 'FRM_TOP_OF_PAGE'**
      I_HTML_HEIGHT_TOP           = 19
      I_SAVE                      = 'A'
      IT_EVENTS                   = GT_EVENTS[]
    TABLES
      T_OUTTAB                    = GT_OUTPUT
    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.

代码部分:

*&---------------------------------------------------------------------*
*& Form frm_top_of_page
*&---------------------------------------------------------------------*
*& text:表头信息
*&---------------------------------------------------------------------*
FORM FRM_TOP_OF_PAGE USING DOCUMENT TYPE REF TO CL_DD_DOCUMENT.
 DATA: LV_TEXT TYPE SDYDO_TEXT_ELEMENT.
 DATA: LV_P      TYPE I,
        LV_BUFFER TYPE STRING.
 DATA: LV_BUTXT TYPE CHAR20.
 DATA AREA1 TYPE REF TO CL_DD_AREA.
 DATA AREA2 TYPE REF TO CL_DD_AREA.
*----------------------------------------------------------------------*
 SELECT SINGLE BUTXT   "公司代码或者公司名称
   FROM T001
   INTO  @LV_BUTXT
   WHERE BUKRS EQ @P_BUKRS.
 CONCATENATE  '<HTML><CENTER><H1>' '销售费用明细表' '</H1></CENTER></HTML>' INTO LV_BUFFER.  " 居中  <H1>设置字体格式
 CALL METHOD DOCUMENT->HTML_INSERT
   EXPORTING
      CONTENTS = LV_BUFFER
   CHANGING
     POSITION = LV_P.
  LV_TEXT = LV_BUTXT.
*“输出公司名称
 CALL METHOD DOCUMENT->ADD_TEXT EXPORTING TEXT = '单位名称:' && LV_TEXT.
*”把区域一分为二
 CALL METHOD DOCUMENT->VERTICAL_SPLIT
   EXPORTING
      SPLIT_AREA  = DOCUMENT
      SPLIT_WIDTH = '50%'
   IMPORTING
      RIGHT_AREA  = AREA2.
*“在区域2中输出文本:日期、单位
 CONCATENATE '<P ALIGN = centre >' P_GJAHR '年'  P_MONAT '月 '     INTO LV_BUFFER .
 CALL METHOD AREA2->HTML_INSERT
   EXPORTING
      CONTENTS = LV_BUFFER
   CHANGING
     POSITION = LV_P.
 CONCATENATE '<P ALIGN = right >' '   '   '   金额单位:   人民币' INTO LV_BUFFER .
 CALL METHOD AREA2->HTML_INSERT
   EXPORTING
      CONTENTS = LV_BUFFER
   CHANGING
     POSITION = LV_P.
ENDFORM.   

2、创建动态的ALV的基础语法

*取移动类型配置表(针对给了具体的配置表并且要将配置表中的数据全部显示到ALV界面上)
PERFORM GET_GR_NUMBER.
*构建 动态字段
PERFORM BUILD_DYN_FIELD.
*创建动态内表

 PERFORM CREATE_DYN_TABLE.
*&---------------------------------------------------------------------*
*& Form GET_GR_NUMBER
*&---------------------------------------------------------------------*
*& text  取移动类型配置表
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*

FORM GET_GR_NUMBER .
 SELECT *
    FROM  ZMMT0056
    INTO  TABLE GT_ZMMT0056.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_DYN_FIELD
*&---------------------------------------------------------------------*
*& text  构建 动态字段
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*

FORM BUILD_DYN_FIELD .
 SELECT * INTO TABLE @DATA(LT_ZMMT0056)
     FROM ZMMT0056.
 SORT LT_ZMMT0056 BY ZZYWLX.
 DELETE ADJACENT DUPLICATES FROM LT_ZMMT0056 COMPARING ZZYWLX."查一下,去重
 REFRESH LT_FIELDCAT.
  LS_FIELDCAT-COLTEXT = '工厂'.
  LS_FIELDCAT-FIELDNAME = 'WERKS'.
  LS_FIELDCAT-DATATYPE  = 'CHAR'.
  LS_FIELDCAT-INTLEN    = '4'.
 APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR LS_FIELDCAT (在ALV中必须要加上这一句,要不然以后显示的小数的话,就可能不显示小数点前面的那个0)
 LS_FIELDCAT-COLTEXT = '工厂描述'.
  LS_FIELDCAT-FIELDNAME = 'NAME1'.
  LS_FIELDCAT-DATATYPE  = 'CHAR'.
  LS_FIELDCAT-INTLEN    = '30'.
  APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR LS_FIELDCAT
  LS_FIELDCAT-COLTEXT = '库存地点'.
  LS_FIELDCAT-FIELDNAME = 'LGORT'.
  LS_FIELDCAT-DATATYPE  = 'CHAR'.
  LS_FIELDCAT-INTLEN    = '4'.
  APPEND LS_FIELDCAT TO LT_FIELDCAT.


.
.
.
.
.
*本期收入
 DATA LV_FIELDNAME TYPE CHAR40.
 DATA LV_COLTEXT TYPE CHAR40.
*  CLEAR: GS_ZMMT0056.
 LOOP AT LT_ZMMT0056 INTO GS_ZMMT0056 WHERE ZZYWLX+0(1) = 'A'.
* 本期收入数量
    LS_FIELDCAT-COLTEXT = GS_ZMMT0056-ZZYWLXMS.
    LS_FIELDCAT-FIELDNAME = GS_ZMMT0056-ZZYWLX.
    LS_FIELDCAT-DATATYPE  = 'QUAN'.
    LS_FIELDCAT-INTLEN    = '13'.
    LS_FIELDCAT-DECIMALS = '3'.
    LS_FIELDCAT-NO_ZERO = 'X'.
   APPEND LS_FIELDCAT TO LT_FIELDCAT.
*本期收入金额
    LS_FIELDCAT-COLTEXT = GS_ZMMT0056-ZZYWLXMS && '金额'.
    LS_FIELDCAT-FIELDNAME = GS_ZMMT0056-ZZYWLX && '_JE'.
    LS_FIELDCAT-DATATYPE  = 'CURR'.
    LS_FIELDCAT-INTLEN    = '16'.
    LS_FIELDCAT-DECIMALS = '2'.
    LS_FIELDCAT-NO_ZERO = 'X'.
   APPEND LS_FIELDCAT TO LT_FIELDCAT.
 ENDLOOP.
* 收入合计
  LS_FIELDCAT-COLTEXT = '收入合计'.
  LS_FIELDCAT-FIELDNAME = 'ZZSRHJ'.
  LS_FIELDCAT-DATATYPE  = 'QUAN'.
  LS_FIELDCAT-INTLEN    = '13'.
  LS_FIELDCAT-DECIMALS = '2'.
  LS_FIELDCAT-NO_ZERO = 'X'.
 APPEND LS_FIELDCAT TO LT_FIELDCAT.
ENDFORM.
&---------------------------------------------------------------------*
*& Form CREATE_DYN_TABLE
*&---------------------------------------------------------------------*
*& text 创建动态内表
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*

FORM CREATE_DYN_TABLE .
 CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
   EXPORTING
      IT_FIELDCATALOG = LT_FIELDCAT
   IMPORTING
      EP_TABLE        = DY_TABLE.
 ASSIGN DY_TABLE->* TO <DYN_TABLE>.
 CREATE DATA DY_WA LIKE LINE OF <DYN_TABLE>.
 ASSIGN DY_WA->* TO <DYN_WA>.
 ASSIGN DY_WA->* TO <DYN_EMPTY>.
ENDFORM.

3、创建ALV的步骤

*----------------------------------------------------------------------*
* layout的定义
*----------------------------------------------------------------------*


DATA:GS_LAYOUT   TYPE LVC_S_LAYO,
     GT_FIELDCAT TYPE LVC_T_FCAT,
     GS_VARIANT  TYPE DISVARIANT,
     GS_FIELDCAT LIKE LINE OF GT_FIELDCAT,
     GV_REPID    TYPE SYREPID.
* 给layout赋值
  GS_LAYOUT-CWIDTH_OPT = 'X'.
  GS_LAYOUT-ZEBRA      = 'X'.
  GV_REPID = SY-REPID.
* 载入需要显示的列
  PERFORM FRM_APPEND_COL.
*ALV显示
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM = GV_REPID
*     i_callback_pf_status_set    = 'FRM_SET_STATUS'   "用于自己想添加新的控件
*     i_callback_user_command     = 'FRM_USER_COMMAND'
      IS_LAYOUT_LVC      = GS_LAYOUT
      IT_FIELDCAT_LVC    = GT_FIELDCAT
      I_SAVE             = 'A'
    TABLES
      T_OUTTAB           = GT_OUTPUT
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.
*&---------------------------------------------------------------------*
*& Form frm_append_col
*&---------------------------------------------------------------------*
*& text 载入需要显示的列
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*


FORM FRM_APPEND_COL .
*设计需要显示的列
  CLEAR GT_FIELDCAT[].
  DEFINE MCR_FIELDCAT.
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname  = &1.  "字段名
    gs_fieldcat-reptext    = &2.  "字段标签
    gs_fieldcat-key        = &3.
    gs_fieldcat-no_zero    = &4. "去掉前导0
    APPEND gs_fieldcat TO gt_fieldcat.
  END-OF-DEFINITION.
  MCR_FIELDCAT 'EKORG'        '采购组织'         '' ''.
  MCR_FIELDCAT 'EKOTX'        '采购组织描述'     '' ''.
  MCR_FIELDCAT 'EKGRP'        '采购组'           '' ''.
  MCR_FIELDCAT 'EKNAM'        '采购组描述'       '' ''.
  MCR_FIELDCAT 'LIFNR'        '供应商'           '' 'X'.
  MCR_FIELDCAT 'NAME1_GYS'    '供应商名称'       '' ''.
 
ENDFORM.

4、在ALV界面显示的小数不显示小数点前面的0的问题

出错的原因:没加这句代码CLEAR LS_FIELDCAT,就是没清空FIELDCAT的工作区

5、ALV中去除前导0

(1)在ALV中直接添加一列就可以了

DEFINE MCR_FIELDCAT.
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname  = &1.
    gs_fieldcat-reptext    = &2.
    gs_fieldcat-key        = &3.
    gs_fieldcat-no_zero    = &4.  这一列就是表示去除前导0
    APPEND gs_fieldcat TO gt_fieldcat.
  END-OF-DEFINITION.

6、ALV界面的复选框变成不可选

(1)首先在要输出的ALV的内表的定义里面添加一个字段 style type lvc_t_styl, " 为内表添加设置编辑状态所需的字段
在这里插入图片描述
(2)定义一个内表
data:gs_edit type lvc_s_styl,
gt_edit type lvc_t_styl.
在这里插入图片描述
(3)然后给layout赋值的时候,对layout的stylefname进行赋值。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值