系统默认类型为表格,在文本框中键入ZTESTtFM_DHW_001,然后单击创建,即打开表格设计器,初始功能为表格属性设置,下图即为主界面,修改描述为“课堂练习-航班计划表”。
表格设计器左侧为导航树,右侧为属性维护区,点击右侧维护区的【输出选项】选项卡,可以看到表格的默认输出页格式为DINA4,即为A4纸张幅面输出,如果需要修改,可单击右侧按钮在弹出框中选择其他幅面格式,本练习中页格式采用默认的DINA4即可;
。字符串变量field的取值,需要注意,括号内为要调用当前表格的报表程序名称,后边紧跟着的就是该报表程序中存放待输出数据的内表对象名称,如果该内表带有表投行,那么必须增加[]显式区别要访问的是内表。
比如本练习中“(ZTEST_XXX_ALV_01)GT_OUT[]”
5、窗口输出设置
单击左侧导航树页面和窗口—>新页面节点前的小箭头
,可以展开页面下级节点,默认已经有一个主窗口节点,双击该节点,单击右侧【输出选项】选项卡,修改左边距为1CM,宽度为19CM.,然后保存。
注意:
此处的左边距与宽度之和不得大于表格属性中选择的页格式定义的宽度,
上边距与高度之和也不能大于表格属性中页格式定义的高度。
6、新建表节点
在左侧的导航树中选中主窗口节点后单击鼠标右键,选择创建—>表,窗口节点下会自动出现一个新表1节点,如图
修改表节点名称和描述如下图,表节点下自行创建了表头、主要区域和脚标三个输出区域。
7、表绘制器和行类型
在导航树中双击刚刚创建的表节点,单击右侧【表】选项卡,可以看到右侧的表绘制器中已经有一个名称为%LTYPE1的行类型,鼠标移动在表格行上单击右键选择重命名,修改行类型名称为LTYPE_TITLE,点击
确定修改。
表绘制器的使用
鼠标选中表绘制器上
按钮,切换鼠标到绘制行列状态,然后按下鼠标后横向移动即可看到绘制区会出现横向分割线,松开鼠标左键后即可创建新的行类型;垂直拖拽鼠标则出现竖向分割线,松开鼠标后即可创建新的单元格,而拖动竖向分割线还可以调整单元格的宽度。
行类型细节编辑
也可以点击表绘制器右上方的细节按钮
,切换到细节编辑界面直接输入行类型及列数,并可以精确指定单元格宽度,如下图。
表宽度不得大于窗口属性中设定的宽度,各行类型的单元格宽度之和必须等于表宽度。
总共创建四个行类型,分别划出若干单元格,其详细信息如下:
行类型
表格线
单元格数
单元格宽度(CM)
LTYPE_TITLE
无
1
19
LTYPE_HERDER
无
2
4
15
LTYPE_DATA
有
6
2,80
3,23
3,25
3,46
4
2,26
LTYPE_BOTTOM
无
2
9
10
表格框线的设置
点击表绘制器按钮
,可以切换回图形编辑界面,单击工具栏上
行列绘制按钮,将鼠标切换到选择状态;然后按住键盘上SHIFT键的同时,单击鼠标左键选中LTYPE_DATA行,然后先后点击外部框架
和内部框架
两个按钮,即为LTYPE_DATA行类型增加表格框线。
最终效果如下图:
8、在表节点中创建表行
在导航树中选中表节点下表头节点,然后单击鼠标右键,选择创建—>表行,系统自动在表头区节点下增加表行节点,我们修改其名称和描述为ROW_TITLE和“标题”,并在右侧属性区中指定行类型为LTYPE_TITLE后,可以看到系统自动在当前行节点下增加一个单元列节点,同样修改节点名称和描述为CELL_TITLE和“标题”。
按照同样方法,在标题行节点后依次创建抬头行ROW_TABLEHEADER和列头行ROW_LISTHEADER,行类型分别为LTYPE_HERDER和LTYPE_DATA。
在主要区域节点下创建表格数据行ROW_DATA,行类型为LTYPE_DATA。
在脚标节点下创建页码行ROW_BOTTOM,行类型为LTYPE_BOTTOM,如下图:
9、创建标题文本及抬头文本
选中导航树中CELL_TITLE节点,单击鼠标右键选择创建—>文本,系统自动在选中节点下增加一个文本节点,我们修改节点名称和描述为TEXT_TITLE和“标题”。
然后单击表格设计器上方的
按钮,打开左下侧的字段列表,展开导入接口,可以看到之前在表格接口中自定义的参数列表,用鼠标左键点击选中G_TITLE并拖拽到右侧的文本输入区中,并选择段落格式为C7,即指定标题显示格式为宋体三号居中。
用同样方法,在抬头行ROW_TABLEHEADER的第二个单元格节点下创建文本节点,将导入接口中的变量G_AUDAT拖入文本输入区内,选择段落格式为RB,即指定统计周期显示为宋体五号居右。
10、创建表格列头行文本及相应静态内容设置
用同样方法,在表头节点表头行ROW_LISTHEADER的第一个单元格节点下创建文本节点,将其文本输入区内直接输入内容:
航线承运人ID,选择段落格式为CB,即指定统计周期显示为宋体五号居中。
在表头行ROW_LISTHEADER的第二个单元格节点下创建文本节点,将其文本输入区内直接输入内容:
航班连接ID,选择段落格式为CB。
在表头行ROW_LISTHEADER的第三个单元格节点下创建文本节点,将其文本输入区内直接输入内容:
航班日期,选择段落格式为CB。
在表头行ROW_LISTHEADER的第四个单元格节点下创建文本节点,将其文本输入区内直接输入内容:
航空运费,选择段落格式为CB。
在表头行ROW_LISTHEADER的第五个单元格节点下创建文本节点,将其文本输入区内直接输入内容:
飞机类型,选择段落格式为CB。
在表头行ROW_LISTHEADER的第六个单元格节点下创建文本节点,将其文本输入区内直接输入内容:
最大容量,选择段落格式为CB。
11、创建表格数据行文本及相应动态数据设置
采用相同方法,在主要区域节点下表格数据行ROW_DATA的第一个单元格节点下创建文本节点,修改其节点名称和描述为:
CELL_CARRID和航班承运人ID;然后在字段列表中展开全局数据后,打开工作区变量GS_OUT,选中CARRID字段拖入右侧文本输入区,然后选择段落格式为
。
在表头行表格数据行ROW_DATA的第二个单元格节点下创建文本节点,修改相应节点名称和描述,然后从字段列表将GS_OUT-CONNID字段拖入右侧文本输入区,然后选择段落格式为CB。
在表头行表格数据行ROW_DATA的第三个单元格节点下创建文本节点,修改相应节点名称和描述,然后从字段列表将GS_OUT-FLDATE字段拖入右侧文本输入区,然后选择段落格式为CB。
在表头行表格数据行ROW_DATA的第四个单元格节点下创建文本节点,修改相应节点名称和描述,然后从字段列表将GS_OUT-PLANETYPE字段拖入右侧文本输入区,然后选择段落格式为RB。
在表头行表格数据行ROW_DATA的第五个单元格节点下创建文本节点,修改相应节点名称和描述,然后从字段列表将GS_OUT-PRICE字段拖入右侧文本输入区,然后选择段落格式为CB。
在表头行表格数据行ROW_DATA的第六个单元格节点下创建文本节点,修改相应节点名称和描述,然后从字段列表将GS_OUT-SEATSMAX字段拖入右侧文本输入区,然后选择段落格式为CB。
12、创建页码文本及系统字段设置
依然采用同样方法,在脚标区页码行ROW_PAGE的第二个单元格点下创建文本节点,修改其节点名称和描述为:
DATA_PAGE和页码;然后在字段列表中展开系统字段后,打开系统对象SFSY,选中PAGE字段拖入右侧文本输入区,然后选择段落格式为LB,即指定页码显示为宋体五号居左。
13、激活SMARTFORMS
保存并激活SMARTFORMS,这个过程中系统会自动进行语法检查,倘若表格设计过程有问题,会给出提示要求进行修改,如果没有问题即完成表格设计。
第二部分:
集成到报表程序
1、调出原有报表程序
打开SE38编辑器,输入原订货明细报表程序名称ZTEST_XXX_ALV_01,然后点击修改按钮,在程序中增加打印事件处理完成打印调用
2、定义自定义工具条并绑定到ALV控件中
在程序中创建状态条对象:
STANDARD
点击工具条上按钮
打开左侧对象清单列表,选中报表程序名称根节点,然后单击鼠标右键,选择创建—>GUISTATUS,在弹出窗口中状态名称输入STANDARD,短文本描述输入工具条,然后确定即可打开状态条编辑界面。
状态条编辑界面如下图
展开应用工具条,可以看到全是空白的,选其中一个单元格,输入字符串PRT,并双击该字符串,弹出如下窗口:
默认为静态文本,无需改动,直接点击
确认创建函数文本
完成以下输入,函数文本:
打印,图标:
ICON_PRINT,信息文本:
打印当前报表;然后点击确认,在下图中分配一个功能键给当前按钮
确定功能键分配后在后续弹出的窗口,可以输入快捷键P
然后点击确认,即完成自定义工具条和打印按钮的创建,如下图
我们通常采用相同的方法将ALV控件内置的系统功能按钮分别创建到自定义工具条中,如下图,最后会附上其相应的功能码一览表供开发时候参考。
状态条中应用工具条的自定义已经创建完成,接下来需要对系统工具条的默认功能键创建到自定义的状态条中;展开功能键列表,可以看到标准工具条中有所有图标,但功能码均为空,所以,在相应的图标上填入对应的预置功能码即可。
至此,自定义状态条的设计完成,保存并激活,然后在程序运行中的最终结果即如下图:
ALV控件内置功能码一览表
功能代码:
函数文本:
图标名称:
&ETA
细节
ICON_SELECT_DETAIL
&EB9
调用报告...
ICON_TABLE_SETTINGS
&REFRESH
刷新
ICON_REFRESH
&ALL
全部选择
ICON_SELECT_ALL
&SAL
取消全选
ICON_DESELECT_ALL
&OUP
按升序排列
ICON_SORT_UP
&ODN
按降序排列
ICON_SORT_DOWN
&ILT
设置过滤器
ICON_FILTER
&UMC
总计
ICON_SUM
&SUM
小计...
ICON_INTERMEDIATE_SUM
&RNT_PREV
打印预览
ICON_LAYOUT_CONTROL
&VEXCEL
MicrosoftExcel
ICON_XLS
&AQW
字处理...
ICON_WORD_PROCESSING
%PC
本地文件...
ICON_EXPORT
%SL
邮件收件人
ICON_MAIL
&ABC
ABC分析
ICON_ABC
&GRAPH
图形
ICON_GRAPHICS
&OL0
更改布局...
ICON_ALV_VARIANTS
&OAD
选择格式...
ICON_ALV_VARIANT_CHOOSE
&AVE
保存格式...
ICON_ALV_VARIANT_SAVE
&INFO
信息
ICON_INFORMATION
在报表程序中定义菜单处理子程序FRM_SET_MENU
在报表程序中增加如下代码段,完成菜单处理子程序的创建
*&-------------------------------------------------------------*
*&Formfrm_set_menu
*&-------------------------------------------------------------*
*实现ALV自定义状态条的绑定处理
*--------------------------------------------------------------*
formFRM_SET_MENUusingrt_extabtypeslis_t_extab.
setpf-status'STANDARD'."引号内字符串为状态条对象的名称
endform."FRM_SET_MENU
在调用函数模块进行ALV报表显示时增加相应参数调用
修改报表程序中关于ALV报表显示的原有代码段,增加菜单处理参数
callfunction'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program=g_repid
it_fieldcat=it_field
is_layout=gs_layout
it_events=e03_lt_events[]
i_callback_pf_status_set='FRM_SET_MENU'"参数内容必须为大写
……
3、定义用户命令处理子程序并绑定到ALV事件响应处理中
定义用户命令处理子程序FRM_USER_COMMAND
在报表程序中增加如下代码段,完成用户命令处理子程序的创建
*&----------------------------------------------------------------*
*&Formfrm_user_command
*&----------------------------------------------------------------*
*实现对用户命令的响应
*-----------------------------------------------------------------*
*-->R_UCOMMtext
*-->RS_SELFIELDslis_selfield
*-----------------------------------------------------------------*
formFRM_USER_COMMANDusingp_ucommlikesy-ucommselfieldtypeslis_selfield.
casep_ucomm.
when'PRT'."响应自定义工具条中的自定义按钮事件
ifnotgt_out[]isinitial.
performfrm_print_selected."调用打印输出子程序
else.
messagee888with'没有可打印的数据!
'.
endif.
when'BACK'."返回
leaveprogram.
endcase.
endform."frm_user_command
在调用函数模块进行ALV报表显示时增加相应参数调用
修改报表程序中关于ALV报表显示的原有代码段,增加用户命令处理参数
callfunction'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program=g_repid
it_fieldcat=it_field
is_layout=gs_layout
it_events=e03_lt_events[]
i_callback_pf_status_set='FRM_SET_MENU'
i_callback_user_command='FRM_USER_COMMAND'
……
4、定义打印输出子程序
在报表程序中增加如下代码段,完成打印处理子程序的创建
*&-----------------------------------------------------------------*
*&Formfrm_print_selected
*&-----------------------------------------------------------------*
*实现对SmartForm的调用
*------------------------------------------------------------------*
*-->p1text
*<--p2text
*------------------------------------------------------------------*
formfrm_print_selected.
data:
fm_nametypers38l_fnam.
callfunction'SSF_FUNCTION_MODULE_NAME'
exporting
formname='ZTESTFM_DHW_001'"参数传值为要调用的Form名称
importing
fm_name=fm_name.
ifsy-subrc<>0.
messageidsy-msgidtypesy-msgtynumbersy-msgno
withsy-msgv1sy-msgv2sy-msgv3sy-msgv4.
endif.
callfunctionfm_name"参数列表与Form中定义的接口对象需完全一致
exporting
g_title=g_title
g_audat=g_audat
exceptions
formatting_error=1
internal_error=2
send_error=3
user_canceled=4
others=5.
ifsy-subrc<>0.
ifsy-subrc<>4.
messageidsy-msgidtypesy-msgtynumbersy-msgno
withsy-msgv1sy-msgv2sy-msgv3sy-msgv4.
endif.
endif.
endform."frm_print_selected
五、打印预览效果图:
*&---------------------------------------------------------------------*
*&ReportZTEST_DHW_ALV_001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORTZTEST_DHW_ALV_001.
TABLES:
SFLIGHT.
TYPE-POOLS:
SLIS.
TYPES:
BEGINOFTYP_OUT,
CARRIDLIKESFLIGHT-CARRID,
CONNIDLIKESFLIGHT-CONNID,
FLDATELIKESFLIGHT-FLDATE,
PLANETYPELIKESFLIGHT-PLANETYPE,
PRICELIKESFLIGHT-PRICE,
SEATSMAXLIKESFLIGHT-SEATSMAX,
ENDOFTYP_OUT.
DATA:
G_AUDATTYPESTRING,
G_TITLETYPESTRING,
TD_FIELDCATTYPESLIS_T_FIELDCAT_ALV,
TH_FIELDCATTYPESLIS_FIELDCAT_ALV,
TD_SFLIGHTTYPETABLEOFTYP_OUT,
TH_SFLIGHTTYPETYP_OUT.
PARAMETERS:
P_PRICETYPESFLIGHT-PRICEDEFAULT'500'.
SELECT-OPTIONS:
S_FLDATEFORSFLIGHT-FLDATE.
INITIALIZATION.
S_FLDATE-SIGN='I'.
S_FLDATE-OPTION='BT'.
S_FLDATE-LOW='20070601'.
S_FLDATE-HIGH='20070630'.
APPENDS_FLDATE.
START-OF-SELECTION.
PERFORMFRM_GET_HEAD_RTN.
PERFORMFRM_GET_DATA.
IFTD_SFLIGHTISINITIAL.
MESSAGES888(SABAPDOCU)DISPLAYLIKE'E'WITH'没有符合条件数据!
'.
LEAVELIST-PROCESSING.
ELSE.
PERFORMFRM_DISPLAY_A
展开阅读全文
相关搜索