ALV开发.docx
- 文档编号:4910641
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:23
- 大小:22.50KB
ALV开发.docx
《ALV开发.docx》由会员分享,可在线阅读,更多相关《ALV开发.docx(23页珍藏版)》请在冰点文库上搜索。
ALV开发
ALV相关概念
ALV是系统的一种网格的显示方式,这种方式带有汇总\排序\筛选等功能,ALV格式的数据是以单元格为单位显示,不象一般的写屏方式拷出来或是
导出成文件不同列的内容粘在一块,这种方式便于数据导出来放在电子表格里进行加工。
ALV即能显示简单表单(SIMPLELIST)又能显示有序表单(SEQUENTIALLIST):
ALV实现方式:
ALV可以通过两种方式实现:
TwoApproaches
Conventional(UsingSAPStandardFunctionModules).
ObjectOriented(UsingSAPStandardClassesandMethods).
以下我们要讲的为FunctionModules方式。
来源:
(-ABAP-ALV报表开发之一_编程浪子_新浪博客
ALV实现流程:
第一步:
定义将要用到的表,即TALBES定义部分,然后定义TYPE-POOLS:
SLIS.
第二步:
定义数据类型或者内表的实体对象.
第三步:
定义一些需要用到的变量.
第四步:
定义自己的选择屏幕.
第五步:
start-of-selection部分.
1)用一个子函数完成对ALV表单标题区域的赋值(i_list_comments).
2)用一个子函数完成自己所需要数据的抓取.
3)用一个子函数完成要显示列表的列名行(第一行)的相关赋值(i_fieldcat_alv)以及设置.
4)用一个子函数完成输出格式的设置(i_layout),比如双击一条记录是否弹出对话框啊?
是用哪个功能键触发等等.
5)用一个子函数FORMDISPLAY_DATA来显示上面我们已经分别封装好的数据,需要调用两个常用的FUNCTIONMODULE.
下面根据一个普通的例子(purchaseorder)来具体解释各步骤:
*第一步:
TABLES:
EKKO,EKPO,T001,LFA1.
TYPE-POOLSSLIS."有时可以还要包含
*第二步:
TYPES:
BEGINOFTYP_PURORDER, "TYPEOFPurchaseOrderInformation
AEDAT TYPEEKKO-AEDAT, "DateonWhichRecordWasCreated
EBELN TYPEEKKO-EBELN, "PurchasingDocumentNumber
MATNR TYPEEKPO-MATNR, "MaterialNumber
TXZ01 TYPEEKPO-TXZ01,
MENGE TYPEEKPO-MENGE, "PurchaseOrderQuantity
MEINS TYPEEKPO-MEINS, "PurchaseOrderUnitofMeasure
NETPR TYPEEKPO-NETPR, "NetPriceinPurchasingDocument
WAERS TYPEEKKO-WAERS, "CurrencyKey
NETWR TYPEEKPO-NETWR, "NetOrderValueinPOCurrency
ENDOFTYP_PURORDER.
DATA:
ST_PURORDERTYPETYP_PURORDER, "MAINSTRUCTER
TD_PURORDERTYPESTANDARDTABLEOFTYP_PURORDER. "MAINTABLE
*第三步:
*----------------------------------------------------------------------*
* COUNTERDEF
*----------------------------------------------------------------------*
DATA:
W_BUKRS TYPET001-BUKRS, "用于公司代码的检索
W_LIFNR TYPELFA1-LIFNR, "用于购买者代码的检索
W_DATUM TYPEEKKO-AEDAT,
W_DATE(10)TYPEC.
*----------------------------------------------------------------------*
* FORALVDEF
*----------------------------------------------------------------------*
DATA:
ST_LAYO TYPESLIS_LAYOUT_ALV, "ALVLAYOUTSTR
TD_EVENT TYPESLIS_T_EVENT, "ALVEVENTTAB
ST_EVENT TYPESLIS_ALV_EVENT, "ALVEVENTSTR
TD_COMMENT TYPESLIS_T_LISTHEADER, "SETHEADERTAB
ST_COMMENT LIKELINEOFTD_COMMENT, "SETHEADERSTR
ST_FIELDCATTYPESLIS_FIELDCAT_ALV, "ALVFIELDCATSTR
TD_FIELDCATTYPESLIS_T_FIELDCAT_ALV, "ALVFIELDCATTAB
ST_SORT TYPESLIS_SORTINFO_ALV, "ALVSORTSTR
TD_SORT TYPESLIS_T_SORTINFO_ALV. "ALVSORTTAB
*1)SLIS_LAYOUT_ALV是一个类型,它用来定义ALV报表的整体属性例如:
*ST_LAYO-ZEBRA='X'.“显示成斑马纹样式
*ST_LAYO-DETAIL_POPUP='X'.“是否弹出详细信息窗口
*ST_LAYO-F2CODE='&ETA'.“设置触发弹出详细信息窗口的功能码,这里是双击
*ST_LAYO-COLWIDTH_OPTIMIZE='X'.“优化列宽选项是否设置
*ST_LAYO-DETAIL_INITIAL_LINES ='X'.
*ST_LAYO-no_vline='X'.“这个用来设置列间隔线
*ST_LAYO-detail_titlebar='详细内容'.“设置弹出窗口的标题栏
*2)SLIS_T_EVENT是一个取得事件的内表,通过函数REUSE_ALV_EVENTS_GET取得多个事件(包括操作页眉页脚的事件).
*3)SLIS_T_LISTHEADER操作页眉页脚的内表.
*4)SLIS_T_FIELDCAT_ALV操作ALV报表列的内表.
*5)SLIS_T_SORTINFO_ALV对显示数据排序的内表。
*第四步:
*----------------------------------------------------------------------*
* PARAMTERDEF(SELECT-OPTIONetc.)
*----------------------------------------------------------------------*
*vieworpostingselectionscreen
PARAMETERS:
P_BUKRSTYPET001-BUKRSDEFAULTTEXT-001OBLIGATORY."CompanyCode
PARAMETERS:
P_LIFNRTYPELFA1-LIFNROBLIGATORY."VendorCode
SELECT-OPTIONS:
S_DAT FOR W_DATUM. "PODate
*----------------------------------------------------------------------*
* ATSELECTION-SCREEN
*----------------------------------------------------------------------*
ATSELECTION-SCREEN.
*CheckAirlineCarrierID
PERFORMPRM_CHECK_SCDATA.
来源:
(-ABAP-ALV报表开发之一_编程浪子_新浪博客*第五步:
START-OF-SELECTION.
PERFORMPRM_GET_DATA.
PERFORMFRM_SET_LAYOUT.
PERFORMFRM_SET_EVENT. "SetALVEVENT
PERFORMFRM_SET_FIELDCAT."SetALVFIELDCAT用来定义表单中的各个列的相关信息,比如列名等
PERFORMFRM_SORT_TAB.
PERFORMFRM_DISPLAY_ALV."OUTDATAFROMALV
"判断录入参数的合法性
FORMPRM_CHECK_SCDATA.
SELECTSINGLEBUKRS
FROMT001
INTOW_BUKRS
WHEREBUKRS=P_BUKRS.
IFSY-SUBRC<>0.
MESSAGEE003WITHP_BUKRS.
LEAVETOLIST-PROCESSING.
ENDIF.
SELECTSINGLELIFNR
FROMLFA1
INTOW_LIFNR
WHERELIFNR=P_LIFNR.
IFSY-SUBRC<>0.
MESSAGEE003WITHP_LIFNR.
LEAVETOLIST-PROCESSING.
ENDIF.
ENDFORM.
"SetALVLAYOUT用于定义ALV表单的相关格式、属性
FORMFRM_SET_LAYOUT.
CLEARST_LAYO.
ST_LAYO-ZEBRA ='X'.
ST_LAYO-DETAIL_POPUP ='X'.
ST_LAYO-F2CODE ='&ETA'.
ST_LAYO-COLWIDTH_OPTIMIZE ='X'.
ST_LAYO-DETAIL_INITIAL_LINES ='X'.
ENDFORM. "FRM_SET_LAYOUT
"取数据到内表中
FORMPRM_GET_DATA.
SELECT
EKKO~AEDAT "DateonWhichRecordWasCreated
EKKO~EBELN "PurchasingDocumentNumber
EKPO~MATNR "MaterialNumber
EKPO~TXZ01
EKPO~MENGE "PurchaseOrderQuantity
EKPO~MEINS "PurchaseOrderUnitofMeasure
EKPO~NETPR "NetPriceinPurchasingDocument
EKKO~WAERS "CurrencyKey
EKPO~NETWR "NetOrderValueinPOCurrency
INTOTABLETD_PURORDER
FROMEKKOINNERJOINEKPO
ON(EKKO~EBELN=EKPO~EBELN)
WHEREEKKO~BUKRS=P_BUKRS
ANDEKKO~LIFNR=P_LIFNR
ANDEKKO~AEDATINS_DAT.
IFSY-SUBRC<>0.
MESSAGEE002.
LEAVELIST-PROCESSING.
ENDIF.
* SORTTD_PURORDERBYAEDATEBELNMATNR.
ENDFORM. "GET_DATA
"取全部的事件,并且更改处理页眉页脚的事件的FORM的值
FORMFRM_SET_EVENT.
CALLFUNCTION'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE =0
IMPORTING
ET_EVENTS =TD_EVENT
EXCEPTIONS
LIST_TYPE_WRONG=1
OTHERS =2.
IFSY-SUBRC<>0.
MESSAGEIDSY-MSGIDTYPESY-MSGTYNUMBERSY-MSGNO
WITHSY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4.
LEAVETOLIST-PROCESSING.
ENDIF.
READTABLETD_EVENT
WITHKEYNAME=SLIS_EV_END_OF_LIST
INTOST_EVENT.
IFSY-SUBRC=0.
ST_EVENT-FORM='ALV_END_OF_LIST'."将页尾子程名称赋值给ST_EVENT-FORM
MODIFYTD_EVENTFROMST_EVENTINDEXSY-TABIX.
ENDIF.
READTABLETD_EVENT
WITHKEYNAME=SLIS_EV_TOP_OF_PAGE
INTOST_EVENT.
IFSY-SUBRC=0.
ST_EVENT-FORM='ALV_TOP_OF_PAGE'."将页眉子程名称赋值给ST_EVENT-FORM
MODIFYTD_EVENTFROMST_EVENTINDEXSY-TABIX.
ENDIF.
ENDFORM. "FRM_SET_EVENT
"页眉处理子程
FORMALV_TOP_OF_PAGE.
REFRESHTD_COMMENT.
CLEARST_COMMENT.
ST_COMMENT-TYP ='H'."H=Header,S=Selection,A=Action供选择
ST_COMMENT-KEY =SPACE.
ST_COMMENT-INFO=TEXT-024.
APPENDST_COMMENTTOTD_COMMENT.
CLEARST_COMMENT.
ST_COMMENT-TYP ='A'.
ST_COMMENT-KEY =TEXT-020.
ST_COMMENT-INFO=P_BUKRS.
APPENDST_COMMENTTOTD_COMMENT.
CLEARST_COMMENT.
ST_COMMENT-TYP ='S'.
ST_COMMENT-KEY =TEXT-023.
ST_COMMENT-INFO=P_LIFNR.
APPENDST_COMMENTTOTD_COMMENT.
CALLFUNCTION'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY =TD_COMMENT
I_LOGO ='ENJOYSAP_LOGO'."输出图标
IFSY-SUBRC<>0.
MESSAGEIDSY-MSGIDTYPESY-MSGTYNUMBERSY-MSGNO
WITHSY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4.
LEAVETOLIST-PROCESSING.
ENDIF.
ENDFORM. "ALV_TOP_OF_PAGE
"页脚处理子程
FORMALV_END_OF_LIST.
REFRESHTD_COMMENT.
CLEARST_COMMENT.
ST_COMMENT-TYP ='S'.
ST_COMMENT-KEY =TEXT-022.
ST_COMMENT-INFO=SY-UNAME.
APPENDST_COMMENTTOTD_COMMENT.
CONCATENATESY-DATUM+0(4)
SY-DATUM+4
(2)
SY-DATUM+6
(2)
INTOW_DATE
SEPARATEDBY'/'."时间字符串的连接
CLEARST_COMMENT.
ST_COMMENT-TYP ='S'.
ST_COMMENT-KEY =TEXT-021.
ST_COMMENT-INFO=W_DATE.
APPENDST_COMMENTTOTD_COMMENT.
CALLFUNCTION'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY =TD_COMMENT
I_END_OF_LIST_GRID ='X'.
来源:
(-ABAP-ALV报表开发之二_编程浪子_新浪博客
ENDFORM.
"指定ALV报表列属性
FORMFRM_SET_FIELDCAT.
REFRESHTD_FIELDCAT.
CLEARST_FIELDCAT.
ST_FIELDCAT-COL_POS =0. "第一列
ST_FIELDCAT-FIELDNAME =TEXT-002. "绑定的内表列名称
* ST_FIELDCAT-ref_tabname ='EKKO'. "录入时,帮助制作时指定表名称
ST_FIELDCAT-REF_FIELDNAME=TEXT-002. "录入时,帮助制作时指定表中参考列名称
ST_FIELDCAT-SELTEXT_M =TEXT-003.
*ST_FIELDCAT-SELTEXT_L ='zzz'. "M,L,S这三个给一个就行
*ST_FIELDCAT-SELTEXT_S ='AAA'. "如果都给,它只用L中的值
ST_FIELDCAT-EDIT ='X'. "是否可编辑
APPENDST_FIELDCATTOTD_FIELDCAT.
CLEARST_FIELDCAT.
ST_FIELDCAT-COL_POS =1.
ST_FIELDCAT-FIELDNAME =TEXT-004.
ST_FIELDCAT-REF_FIELDNAME=TEXT-004.
ST_FIELDCAT-SELTEXT_M =TEXT-005.
ST_FIELDCAT-EDIT ='X'.
APPENDST_FIELDCATTOTD_FIELDCAT.
CLEARST_FIELDCAT.
ST_FIELDCAT-COL_POS =2.
ST_FIELDCAT-FIELDNAME =TEXT-006.
ST_FIELDCAT-ref_tabname ='EKPO'.
ST_FIELDCAT-REF_FIELDNAME=TEXT-006.
ST_FIELDCAT-SELTEXT_M =TEXT-007.
ST_FIELDCAT-EDIT =SPACE.
APPENDST_FIELDCATTOTD_FIELDCAT.
CLEARST_FIELDCAT.
ST_FIELDCAT-COL_POS =3.
ST_FIELDCAT-FIELDNAME =TEXT-008.
ST_FIELDCAT-REF_FIELDNAME=TEXT-008.
ST_FIELDCAT-SELTEXT_M =TE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ALV 开发