SAP ABAP 选择屏幕、事件流、ALV报表
- 选择屏幕
(1)PARAMETERS对象及其属性
PARAMETERS: p_id like dbtab-id,
p_checkbox AS CHECKBOX DEFAULT ‘X’,
p_radio RADIOBUTTON GROUP g1 DEFAULT ‘X’,
p_radio RADIOBUTTON GROUP g1,
p_radio RADIOBUTTON GROUP g1.
语法 |
说明 |
DEFAULT ‘A’ |
初始值 |
LENGTH N |
定义长度,只适用于C、N、X、P类型 |
DECIMALS des |
指定小数点位数 |
MEMORY ID pid |
指定SAP内存参数ID |
MATCHCODE OBJECT mobj |
设定使用的Search Help |
MODIF ID |
通过SCREEN-GROUP1为屏幕元素分组 |
NO-DISPLAY |
不显示在画面上 |
LOWER CASE |
区分大小写(默认大写) |
(2)SELECT-OPTIONS对象及其属性
SELECT-OPTIONS: so_id FOR itab-id DEFAULT 1,
so_age FOR itab-age OBLIGATORY NO INTERVALS NO-EXTENSION.
语法 |
说明 |
DEFAULT ‘A’ |
初始值 |
DEFAULT g… OPTION op… SIGN s |
初始的option和sign |
DEFAULT g TO h |
初始的low值和high值,SIGN为‘BT’ |
DEFAULT ID pid |
指定SAP内存参数ID |
MATCHCODE OBJECT mobj |
设定使用的Search Help |
OBLIGATORY |
必输项 |
VISIBLE LENGTH vlen |
显示长度 |
NO-EXTENSION |
隐藏多指输入按钮 |
NO INTERVALS |
隐藏high输入部分 |
(3)空行
SELECTION-SCREEN SKIP 2.
(4)分割线
SELECTION-SCREEN ULINE /1(30)
(5)屏幕框架
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t-001.
……
SELECTION-SCREEN END OF BLOCK b1.
- 事件流
事件流 |
说明 |
INITIALZATION |
在屏幕未显示前初始化 |
AT SELECTION-SCREEN OUTPUT |
用于对屏幕输入值的校验 |
AT SELECTION-SCREEN ON … |
屏幕输入遇错处理,检查某个具体的输入值 |
AT SELECTION-SCREEN ON VALUE REQUEST FOR { para|selcrit-low|selcrit-high } (F4) 用于实现屏幕输入域的自定义F4搜索帮助 |
|
AT SELECTION-SCREEN ON HELP REQUEST FOR { para|selcrit-low|selcrit-high } (F1) 用于实现屏幕输入域的自定义F1帮助 |
|
AT SELECTION-SCREEN ON { para|selcrit } 指定输入域输入值时触发 |
|
AT SELECTION-SCREEN ON BLOCK (block) 用于管控框架中的屏幕输入值 |
|
AT SELECTION-SCREEN ON RADIOBUTTON GROUP (radi) 用于管控单选框按钮组输入值 |
|
AT SELECTION-SCREEN ON END OF (selcrit) 用于SELECT-OPTIONS对象,在输入域进行多行数据输入时触发 |
|
AT SELECTION-SCREEN |
用于屏幕输入检查 |
START-OF-SELECTION |
在执行程序时触发 |
END-OF-SELECTION |
在START-OF-SELECTION执行后,输出屏幕还未显示前触发 |
GET… |
从逻辑数据库中得到数据 |
TOP-OF-PAGE |
设计输出单的页头 |
END-OF-PAGE |
设计输出单的页脚 |
AT USER COMMAND |
|
AT LINE SELECTION |
|
(1)报表事件的终止命令
① STOP.
结束当前事件,直接转向END-OF-SELECTION(只能用于AT SELECTION-SCREEN/START-OF-SELECTION/GET事件)
② EXIT.
离开过程块,直接转向列表输出屏幕,不执行END-OF-SELECTION
③ RETURN.
离开过程块,直接转向列表输出屏幕,不执行END-OF-SELECTION
④ CHECK <condition>.
当条件为假时,离开当前事件,并转向下一个事件
2.ALV
(1)ALV通过函数方式实现
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = gv_repid
it_fieldcat_lvc = gt_fieldcat[]
is_layout_lvc = gs_layout
i_callback_pf_status_set = 'FRM_SET_PF_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
i_save = 'A'
TABLES
t_outtab = gt_so
EXCEPTIONS
program_error = 1
OTHERS = 2.
(2)设置显示列
常用属性字段(LVC_S_FCAT)
gs_fieldcat-fieldname = &1.
gs_fieldcat-coltext =
gs_fieldcat-coltext_l =
gs_fieldcat-coltext_m =
gs_fieldcat-coltext_s =
gs_fieldcat-reptext = &2.
gs_fieldcat-key = &3.
gs_fieldcat-checkbox = &4.
gs_fieldcat-edit = &5.
gs_fieldcat-hotspot = &6.
gs_fieldcat-ref_table = &7.
gs_fieldcat-ref_field = &8.
gs_fieldcat-qfieldname =’REDDI’.
gs_fieldcat-no_zero = ‘X’.
APPEND gs_fieldcat TO gt_fieldcat.
在REUSE_ALV_GRID_DISPLAY_LVC函数中添加it_fieldcat_lvc = gt_fieldcat[]
字段 |
说明 |
FIELDNAME |
字段名称 |
SXRTEXT_L/M/S |
列标题描述 |
KEY |
是否关键字,设置’X’,位置固定 |
CHECKBOX |
是否显示复选框 |
EDIT |
是否可编辑 |
HOSTSPOT |
鼠标是否出现手型光标标识 |
REF_TABLE/REF_FIELD |
字段参考数据库表和字段 |
DO_SUM |
是否显示总计值 |
ICON |
是否显示为图标 |
(3)设置布局
常用属性字段(LVC_S_LAYO)
gs_layout-cwidth_opt = abap_true.
gs_layout-zebra = abap_true.
gs_layout-box_fname = ‘LILI’
在REUSE_ALV_GRID_DISPLAY_LVC函数中添加is_layout_lvc = gs_layout
字段 |
说明 |
ZEBRA |
ALV是否深浅颜色间隔显示 |
SMALLTITLE |
ALV小标题 |
CWIDTH_OPT |
列宽是否按照该列最长显示字段自动调整宽度 |
NO_ROWMARK |
左侧选择按钮是否显示 |
BOX_FNAME |
左侧选择按钮选中后对应的字段 |
EDIT |
ALV单元格是否可编辑 |
STYLEFNAME |
指定颜色 |
NO_TOOLBAR |
工具栏不显示 |
NO_TOTLINE |
设置不输出总计行 |
(4)设置排序参数
常用属性字段(LVC_S_SORT)
gs_sort-spos = 1.
gs_sort-fieldname = ‘ID’.
gs_sort-down = ‘X’.
gs_sort-subtot = ‘X’.
APPEND gs_sort TO gt_sort.
在REUSE_ALV_GRID_DISPLAY_LVC函数中添加it_sort_lvc = gt_sort
字段 |
说明 |
SPOS |
指定排序字段的先后顺序 |
FIELDNAME |
排序字段名称 |
UP |
按升序排列输出 |
DOWN |
按降序排序输出 |
SUBTOT |
是否执行并输出小计,此设置必须与列属性的DO_SUM一同使用 |
(5)设置自定义工具栏
FORM frm_pf_status_prt USING u_extab TYPE slis_t_extab ##CALLED.
SET PF-STATUS 'PF_STATUS_PRT' EXCLUDING u_extab.
ENDFORM.
在REUSE_ALV_GRID_DISPLAY_LVC函数中添加i_callback_pf_status_set = ‘FRM_SET_PF_STATUS’
(6)用户命令和响应
FORM frm_user_command USING uv_ucomm LIKE sy-ucomm
us_selfield TYPE slis_selfield.
CASE uv_ucomm.
WHEN 'ALL'.
PERFORM frm_sel_all.
WHEN 'SAVE'.
PERFORM frm_save_all.
ENDCASE.
ENDFORM.
在REUSE_ALV_GRID_DISPLAY_LVC函数中添加i_callback_user_command = ‘FRM_USER_COMMAND’