TYPES:
* ALV
BEGIN OF TS_ALV,
EBELN TYPE EKKO-EBELN, "采购凭证编号
EBELP TYPE EKPO-EBELP, "采购凭证的项目编号
MATNR TYPE EKPO-MATNR, "物料编号
MAKTX TYPE MAKT-MAKTX, "物料描述
BUKRS TYPE EKPO-BUKRS, "公司代码
WERKS TYPE EKPO-WERKS, "工厂
LGORT TYPE EKPO-LGORT, "库存地点
END OF TS_ALV,
T_ALV TYPE STANDARD TABLE OF TS_ALV,
* 采购订单信息
BEGIN OF TS_EKKO,
EBELN TYPE EKKO-EBELN, "采购凭证编号
EBELP TYPE EKPO-EBELP, "采购凭证的项目编号
MATNR TYPE EKPO-MATNR, "物料编号
BUKRS TYPE EKPO-BUKRS, "公司代码
WERKS TYPE EKPO-WERKS, "工厂
LGORT TYPE EKPO-LGORT, "库存地点
END OF TS_EKKO,
T_EKKO TYPE STANDARD TABLE OF TS_EKKO,
* 物料描述
BEGIN OF TS_MAKT,
MATNR TYPE EKPO-MATNR, "物料编号
SPRAS TYPE MAKT-SPRAS, "物料描述
MAKTX TYPE MAKT-MAKTX, "物料描述
END OF TS_MAKT,
T_MAKT TYPE STANDARD TABLE OF TS_MAKT.
*&---------------------------------------------------------------------*
*& DATA定義
*&---------------------------------------------------------------------*
DATA:
* ST_ALV TYPE T_ALV WITH HEADER LINE,
W_EBELN TYPE EKKO-EBELN.
DATA:BEGIN OF ST_ALV ,
EBELN LIKE EKKO-EBELN, "采购凭证编号
EBELP LIKE EKPO-EBELP, "采购凭证的项目编号
MATNR LIKE EKPO-MATNR, "物料编号
MAKTX LIKE MAKT-MAKTX, "物料描述
BUKRS LIKE EKPO-BUKRS, "公司代码
WERKS LIKE EKPO-WERKS, "工厂
LGORT LIKE EKPO-LGORT, "库存地点
END OF ST_ALV.
*页头
DATA: WA_HEADER TYPE SLIS_LISTHEADER,
IT_HEADER TYPE SLIS_T_LISTHEADER.
*&---------------------------------------------------------------------*
*&PARAMETERS/SELECT-OPTIONS
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK0 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:SO_EBELN FOR W_EBELN. "采购订单号
SELECTION-SCREEN END OF BLOCK BLK0.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* 主处理
PERFORM F_MAIN.
*&---------------------------------------------------------------------*
*& Form F_MAIN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_MAIN .
* 本地定义
DATA:
I_L_ALV TYPE T_ALV, " ALV数据
I_L_MAKT TYPE T_MAKT, " 物料信息
I_L_EKKO TYPE T_EKKO. " 采购订单信息
* 获取数据
PERFORM F_GET_DATA
CHANGING I_L_EKKO " 采购订单信息
I_L_MAKT. " 物料信息
* 编辑数据
PERFORM F_EDIT_DATA
USING I_L_EKKO " 采购订单信息
I_L_MAKT " 物料信息
CHANGING I_L_ALV. " alv
* 展示数据
PERFORM F_DISPLAY_DATA
USING I_L_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_GET_DATA
CHANGING C_I_EKKO TYPE T_EKKO
C_I_MAKT TYPE T_MAKT.
* 获取采购订单信息
SELECT A~EBELN, "采购凭证编号
B~EBELP, "采购凭证的项目编号
B~MATNR, "物料编号
B~BUKRS, "公司代码
B~WERKS, "工厂
B~LGORT "库存地点
INTO TABLE @C_I_EKKO
FROM EKKO AS A
INNER JOIN EKPO AS B ON A~EBELN = B~EBELN
WHERE A~EBELN IN @SO_EBELN.
* 获取物料描述
DATA(I_L_MATNR) = C_I_EKKO.
SORT I_L_MATNR BY MATNR.
DELETE ADJACENT DUPLICATES FROM I_L_MATNR
COMPARING MATNR.
IF I_L_MATNR IS NOT INITIAL.
SELECT MATNR, " 物料编号
SPRAS, " 语言代码
MAKTX " 物料描述
INTO TABLE @C_I_MAKT
FROM MAKT
FOR ALL ENTRIES IN @I_L_MATNR
WHERE MATNR = @I_L_MATNR-MATNR
AND SPRAS = 1.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_EDIT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> I_L_EKKO
*& --> I_L_MAKT
*& <-- I_L_ALV
*&---------------------------------------------------------------------*
FORM F_EDIT_DATA
USING U_I_EKKO TYPE T_EKKO
U_I_MAKT TYPE T_MAKT
CHANGING C_I_ALV TYPE T_ALV.
DATA:
LW_ALV TYPE TS_ALV.
LOOP AT U_I_EKKO ASSIGNING FIELD-SYMBOL(<FS_L_EKKO>).
* MOVE-CORRESPONDING <FS_L_EKKO> TO LW_ALV.
LW_ALV-EBELN = <FS_L_EKKO>-EBELN.
LW_ALV-EBELP = <FS_L_EKKO>-EBELP.
LW_ALV-MATNR = <FS_L_EKKO>-MATNR.
READ TABLE U_I_MAKT INTO DATA(LW_MAKT)
WITH KEY MATNR = <FS_L_EKKO>-MATNR.
IF SY-SUBRC = 0.
LW_ALV-MAKTX = LW_MAKT-MAKTX.
ENDIF.
LW_ALV-BUKRS = <FS_L_EKKO>-BUKRS.
LW_ALV-WERKS = <FS_L_EKKO>-WERKS.
LW_ALV-LGORT = <FS_L_EKKO>-LGORT.
APPEND LW_ALV TO C_I_ALV.
CLEAR LW_ALV.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> I_L_ALV
*&---------------------------------------------------------------------*
FORM F_DISPLAY_DATA
USING U_I_ALV TYPE T_ALV.
* 本地定义
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 = '/TEST02'."变式id
* 隐藏功能键示例
DATA:L_I_EXCLUDING TYPE SLIS_T_EXTAB.
L_I_EXCLUDING = VALUE #(
( FCODE = '&OUP' )"升序
( FCODE = '&ODN' )"降序
).
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 = '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输出表头设置
* I_GRID_SETTINGS = WL_LVC_S_GLAY "打印表头设置
* IT_SORT = SORTABLE[] "排序设置
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 .
"位于标题第一行
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 && '   ' && 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.
LW_FIELDCAT-COL_POS = 3."列
LW_FIELDCAT-FIELDNAME = 'MATNR'."字段名称
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 = 4."列
LW_FIELDCAT-FIELDNAME = 'MAKTX'."字段名称
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 = 5."列
LW_FIELDCAT-FIELDNAME = 'BUKRS'."字段名称
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 = 6."列
LW_FIELDCAT-FIELDNAME = 'WERKS'."字段名称
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 = 7."列
LW_FIELDCAT-FIELDNAME = 'LGORT'."字段名称
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_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.
sap 十一课 alv 函数
最新推荐文章于 2024-02-27 10:40:18 发布