【无标题】ALV1


*页头
DATA: WA_HEADER TYPE SLIS_LISTHEADER,
      IT_HEADER TYPE SLIS_T_LISTHEADER.

  DATA:
    LW_LAYOUT   TYPE  LVC_S_LAYO,                "LAYOUT
    LT_FIELDCAT TYPE  LVC_T_FCAT.                "FIELDCAT

* LAYOUT设定
  LW_LAYOUT-ZEBRA      = ABAP_TRUE.              "斑马线
  LW_LAYOUT-CWIDTH_OPT = ABAP_TRUE.              "优化列宽

* FIELDCAT设定(方法1:手动创建)
*  PERFORM F_SET_FIELDCAT1
*    CHANGING LT_FIELDCAT.
* FIELDCAT设定(方法2:自动创建)
  PERFORM F_SET_FIELDCAT2
    CHANGING LT_FIELDCAT.

* 总结:推荐使用方法2函数,
* FIELDCAT中的REF_TABLE ,REF_FIELD 字段关联数据字典,
* 以便ALV字段与数据字典关联, 启用数据字典提供的基本功能
*(F1帮助,F4帮助,数据校验等)

* 变式示例
  DATA:L_ST_VARIANT LIKE  DISVARIANT.
  L_ST_VARIANT-REPORT = SY-CPROG."程序名
  L_ST_VARIANT-VARIANT = '/TEST03'."变式id

* 隐藏功能键示例
  DATA:L_I_EXCLUDING TYPE  SLIS_T_EXTAB.

  L_I_EXCLUDING = VALUE #(
  ( FCODE = '&OUP' )"升序
  ( FCODE = '&ODN' )"降序
  ).

  CONSTANTS C_A TYPE CHAR1 VALUE 'A'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM          = SY-CPROG              "当前程序名
      IS_LAYOUT_LVC               = LW_LAYOUT             "输出样式
      IT_FIELDCAT_LVC             = LT_FIELDCAT          "字段定义描述表
*      IS_VARIANT                  = L_ST_VARIANT   "决定布局显示的变式
      I_SAVE                      = C_A
      "决定用户是否可以保存变式:'X' 只能保存全局变式,
*     'U' 只能保存特定变式,'A' 都可以保存,SPACE 不可以保存变式
*      I_DEFAULT                   = ''          "是否可以定义默认的布局
      IT_EXCLUDING                = L_I_EXCLUDING
      "需要隐藏的标准的按钮的内表
      I_CALLBACK_TOP_OF_PAGE      = 'ALV_TOP_OF_PAGE' "ALV输出表头设置
*     I_CALLBACK_HTML_TOP_OF_PAGE = 'HTML_TOP_OF_PAGE1' "ALV输出表头设置
*      I_CALLBACK_HTML_TOP_OF_PAGE = 'HTML_TOP_OF_PAGE2' "ALV输出表头设置
    TABLES
      T_OUTTAB                    = U_I_ALV
    EXCEPTIONS
      PROGRAM_ERROR               = 1
      OTHERS                      = 2.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*       ALV_TOP_OF_PAGE
*----------------------------------------------------------------------*
FORM ALV_TOP_OF_PAGE.

  "定义登录用户的描述
  DATA: L_NAME TYPE STRING VALUE '张三',
        L_DATE TYPE STRING.

  "拼接制表日期
  CONCATENATE SY-DATUM+0(4) '.' SY-DATUM+4(2) '.' SY-DATUM+6(2)
  INTO L_DATE.
  CONCATENATE '制表人:' L_NAME INTO L_NAME .
  CONCATENATE '制表日期:' L_DATE INTO L_DATE .
  CONCATENATE L_NAME L_DATE INTO L_DATE SEPARATED BY '' .

  "位于标题第一行
  WA_HEADER-TYP = 'H'.
  WA_HEADER-INFO = 'ALV DEMO' .
  APPEND WA_HEADER TO IT_HEADER .

  CLEAR WA_HEADER .

  "相关内容信息,这里用于显示登录用户信息描述
  WA_HEADER-TYP = 'S'.
*  WA_HEADER-KEY = L_NAME .
  WA_HEADER-INFO = L_DATE .

  APPEND WA_HEADER TO IT_HEADER .
  CLEAR WA_HEADER .
  "相关内容信息,这里用于显示登录用户信息描述
  WA_HEADER-TYP = 'S'.
*  WA_HEADER-KEY = L_NAME .
*  WA_HEADER-INFO = L_DATE .

  APPEND WA_HEADER TO IT_HEADER .
  CLEAR WA_HEADER .

* 将输入信息输出到ALV
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = IT_HEADER.
*      I_ALV_FORM         = 'X'. "是否用于 ALV 的FORM中,默认为:Space
  "参数IT_LIST_COMMENTARY,显示文字内容
  "参数I_LOGO ,显示图片id,使用OAER上传图片
  "参数I_END_OF_LIST_GRID,页脚信息
  "参数I_ALV_FORM,是否用于alv form中

ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*&      Form  html_top_of_page
*&---------------------------------------------------------------------*
FORM HTML_TOP_OF_PAGE1
  USING DOCUMENT TYPE REF TO CL_DD_DOCUMENT.

  DATA: TEXT TYPE SDYDO_TEXT_ELEMENT.
  DATA: L_NAME TYPE SDYDO_TEXT_ELEMENT VALUE '张三',
        L_DATE TYPE SDYDO_TEXT_ELEMENT.

  "拼接制表日期
  CONCATENATE SY-DATUM+0(4) '.' SY-DATUM+4(2) '.' SY-DATUM+6(2)
  INTO L_DATE.
  CONCATENATE '制表人:' L_NAME INTO L_NAME .
  CONCATENATE '制表日期:' L_DATE INTO L_DATE .

  TEXT = 'ALV DEMO'.
  CALL METHOD DOCUMENT->ADD_TEXT_AS_HEADING
    EXPORTING
      TEXT          = TEXT "内容
      HEADING_LEVEL = '3'. "级别1~6

  CALL METHOD DOCUMENT->UNDERLINE. "绘制底线

  CALL METHOD DOCUMENT->ADD_TEXT
    EXPORTING
      TEXT = L_NAME.

* 间隙宽度
  CALL METHOD DOCUMENT->ADD_GAP
    EXPORTING
      WIDTH = 2.

  CALL METHOD DOCUMENT->ADD_TEXT
    EXPORTING
      TEXT = L_DATE.

ENDFORM.                    "HTML_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*       top_of_page
*----------------------------------------------------------------------*
FORM HTML_TOP_OF_PAGE2
  USING W_DOC TYPE REF TO CL_DD_DOCUMENT.
  DATA: LT_HTML_TABLE    TYPE SDYDO_HTML_LINE OCCURS 0.
  DATA: LS_HTMLTAB       LIKE LINE OF LT_HTML_TABLE.
  DATA: L_NAME TYPE SDYDO_TEXT_ELEMENT VALUE '张三',
        L_DATE TYPE SDYDO_TEXT_ELEMENT.

  "拼接制表日期
  CONCATENATE SY-DATUM+0(4) '.' SY-DATUM+4(2) '.' SY-DATUM+6(2)
  INTO L_DATE.
  CONCATENATE '制表人:' L_NAME INTO L_NAME .
  CONCATENATE '制表日期:' L_DATE INTO L_DATE .

  CLEAR W_DOC->HTML_TABLE.

  LS_HTMLTAB-LINE =
   '<HTML><BODY bottommargin="0" background=" ">' &
  '<SPAN Style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: Arial; ">'
  & '<br /><B>' && 'ALV DEMO'  && '</B> <BR></SPAN>'.
  APPEND LS_HTMLTAB TO W_DOC->HTML_TABLE.
  CLEAR LS_HTMLTAB.

  LS_HTMLTAB-LINE =
 '<SPAN Style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; ">' &
 '<br />' && L_NAME  && '&nbsp&nbsp&nbsp' && L_DATE && ' </<BR></SPAN>'.
  APPEND LS_HTMLTAB TO W_DOC->HTML_TABLE.
  CLEAR LS_HTMLTAB.

  LS_HTMLTAB-LINE = '</BODY></HTML>'.
  APPEND LS_HTMLTAB TO W_DOC->HTML_TABLE.

ENDFORM.                    "top_of_page
*&---------------------------------------------------------------------*
*& Form F_SET_FIELDCAT1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LT_FIELDCAT
*&---------------------------------------------------------------------*
FORM F_SET_FIELDCAT1
  CHANGING C_T_FIELDCAT TYPE  LVC_T_FCAT.

  DATA:
    LW_FIELDCAT TYPE  LVC_S_FCAT.

  LW_FIELDCAT-COL_POS = 1."列
  LW_FIELDCAT-FIELDNAME = 'EBELN'."字段名称
  LW_FIELDCAT-COLTEXT   = '采购凭证编号'."列描述
  LW_FIELDCAT-SCRTEXT_L = '采购凭证编号'."长字段标签
  LW_FIELDCAT-SCRTEXT_M = '采购凭证编号'."中字段标签
  LW_FIELDCAT-SCRTEXT_S = '采购凭证编号'."短字段标签
  APPEND LW_FIELDCAT TO C_T_FIELDCAT.
  CLEAR LW_FIELDCAT.
  LW_FIELDCAT-COL_POS = 2."列
  LW_FIELDCAT-FIELDNAME = 'EBELP'."字段名称
  LW_FIELDCAT-COLTEXT   = '项目编号'."列描述
  LW_FIELDCAT-SCRTEXT_L = '项目编号'."长字段标签
  LW_FIELDCAT-SCRTEXT_M = '项目编号'."中字段标签
  LW_FIELDCAT-SCRTEXT_S = '项目编号'."短字段标签
  APPEND LW_FIELDCAT TO C_T_FIELDCAT.
  CLEAR LW_FIELDCAT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_SET_FIELDCAT2
*&---------------------------------------------------------------------*
*& 使用MERGE获取FIELDCAT
*& LVC_FIELDCATALOG_MERGE/REUSE_ALV_FIELDCATALOG_MERGE
*&---------------------------------------------------------------------*
*&      <-- LT_FIELDCAT
*&---------------------------------------------------------------------*
FORM F_SET_FIELDCAT2
  CHANGING C_T_FIELDCAT TYPE  LVC_T_FCAT.

* 获取ALV的FIELDCATA
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      I_STRUCTURE_NAME       = 'ZFIELDCAT_WMQ01'
*      "结构名称(结构、表、视图)
*     I_INTERNAL_TABNAME     = 'ST_ALV' "内表名称,不能用
    CHANGING
      CT_FIELDCAT            = C_T_FIELDCAT
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

* 可以直接参考内表结构获取FIELDCATA:定义必须要用LIKE,必须指定程序名
  DATA CT_FIELDCAT TYPE  SLIS_T_FIELDCAT_ALV.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME         = SY-CPROG
*      I_STRUCTURE_NAME       = 'ZFIELDCAT_WMQ01'
      I_INTERNAL_TABNAME     = 'ST_ALV'
      I_INCLNAME             = SY-CPROG
    CHANGING
      CT_FIELDCAT            = CT_FIELDCAT
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值