本文简单介绍alv报表的开发,以及在开发过程中遇见的细节性及错误
文章目录
1.定义alv所用到的类型池
type-pools : slis
2.分为四小部
2.1引用你所用到的透明表
tables: vbak.
2.2定义你应用该表中想要的字段
TYPES: BEGIN OF gty_alv,
vkorg TYPE vbak-vkorg , "销售组织
vtweg TYPE vbak-vtweg , "分销渠道
vkgrp TYPE vbak-vkgrp , "销售组
auart TYPE vbak-auart , "订单类型
erdat TYPE vbak-erdat , "订单日期
vbeln TYPE vbak-vbeln , "订单号
END OF gty_alv.
2.3定义透明表的内表
data gt_vbak type table of gty_alv.
2.4定义透明表的工作区
data gs_vbak type gty_alv
3.定义alv所需要的对象
DATA gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA gs_fieldcat TYPE slis_fieldcat_alv.
DATA gs_layout TYPE slis_layout_alv.
*宏定义
DEFINE %%append_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-seltext_m = &2.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
4.定义选择屏幕
SELECTION-SCREEN : BEGIN OF BLOCK vie WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS s_vbeln FOR vbak-vbeln.
*单选
PARAMETERS: p_1 RADIOBUTTON GROUP grp1 DEFAULT 'X' .
PARAMETERS: p_2 RADIOBUTTON GROUP grp1 .
SELECTION-SCREEN:END OF BLOCK vie.
5.对数据进行处理(取数,显示,alv输出,layout输出)
start-of-selection.
perfoem get_data. "取数
IF gt_vbak IS NOT INITIAL.
PERFORM show_data. "显示数据
ELSE.
MESSAGE s000 WITH '没数据'.
FORM get_data . "取数
IF p_1 = 'X'.
SELECT
vkorg "销售组织
vtweg "分销渠道
vkgrp "销售组
auart "订单类型
erdat "订单日期
vbeln "订单号
FROM vbak
INTO CORRESPONDING FIELDS OF TABLE gt_vbak
WHERE vbeln IN s_vbeln.
ELSE.
MESSAGE s000 WITH '暂无'.
ENDIF.
ENDFORM.
FORM show_data . "显示数据
PERFORM bulid_fieldcat. "字段显示
PERFORM build_alv. "alv显示
PERFORM bulid_layout. "layout显示
ENDFORM.
FORM build_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_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 =
is_layout = gs_layout
it_fieldcat = gt_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_vbak
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM bulid_fieldcat .
%%append_fieldcat:
'vkorg' '销售组织',
'vtweg' '分销渠道',
'vkgrp' '销售组',
'auart' '订单类型',
'erdat' '订单日期',
'vbeln' '订单号'.
ENDFORM.
FORM bulid_layout .
gs_layout-colwidth_optimize = 'X'.
gs_layout-zebra = 'X'.
ENDFORM.
6.最终效果
7.遇到的一些错误
7.1.这个错误是"字段目录没找到"
原因:在调用"REUSE_ALV_GRID_DISPLAY"时忘记给 " it_fieldcat " 赋值
解决方案: 把字段it_fieldcat = gt_fieldcat
7.2. 第37行 append 的应该是列属性,不应该是内表
7.3. 在区间时用 in
非区间用 =
要不然会查不出数据的
7.4.这个错误算是细节"字段显示"
注意一下就行了.不然容易出错.子程序的顺序出错了,下面箭头指的的是正确的…
之前写的是build_alv在build_fieldcat前面报的就是下面的错误
欢迎补充说明.以上仅个人开发经验,仅供参考!!!