提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
report
内表
创建内表
1、第一种方式
先定义types ,然后再type table of 定义内表
types : begin of <typ_name>,
end of <typ_name>.
dara : <itab> type table of <typ_name>.
4、第四种方法
引用标准表创建内表
data : <i_tab> type table of mara .
5、第五种方法,
引用标准表并且添加自定义字段创建内表
data : begin of <itab>,
include structure mara.
data : clr type char4,
end of <itab>.
获取内表行数
通过describe获得内表行数。
describe table <itab> line n.
不用modify直接更新内表
LOOP AT ASSIGNING FIELD SYMBOL
loop at gt_alv assigning field-symbol(<fs_output>).
fs_output-waers = ls_prcd_elements-waers.
endloop.
选择屏幕
屏幕元素创建
1、select-options
对象名称for参考对象,定义范围选择条件
select-options : s_bukrs for bukrs.
生成一个含有4个字段的内表: sign option low high
ranges : s_bukrs for bukrs.
sign : 标志位 值为I或者E 意义为option运算符是否取反,I表示包含,E表示排除
option: 运算符 如果high不为空,这可以使用bt(between and) 或者nb(not between)。
2、parameters
对象名称 type/ like 对象名称,定义单选条件。
屏幕输入域显示参数控制
obligatory : 必输
no-display: 显示控制
no-extension : 多行输入控制
as CheckBox : 创建复选框
visible length vlen : 显示控制长度
parameters 对象名 as listbox visible length vlen 创建下拉列表
3、输入值的控制
default : 默认值
lower case 允许输入小写字母(sap 屏幕会默认把输入后的字母转换为大写)
matchcode object search_help : 为屏幕对象加上指定的F4帮助对象. se11 定义搜索帮助对象
memory id : 定义select-option 内存参数,可以讲屏幕对象输入的值保存到指定的内在参数中,通过get parameter 方法直接从内存读取该对象的值。
4、选择屏幕事件流
load-of-program 程序执行时,自动触发该事件
initialization 该事件在屏幕未显示前执行,初始化程序
at selection-screen output 选择屏幕PBO事件,显示选择屏幕之前触发
at selection-screen 选择屏幕PAI事件,在选择屏幕上点击执行后触发。
start-of-selection 数据选择行开始
end-of-selection数据选择行结束
top-of-page 页眉控制
end-of-page 页脚控制
at line-selection 行选择控制,用户选择或者双击某行是触发
at user-command 用户交互控制,用户选择某个GUI功能是触发
5、选择屏幕动态展示
拿冲销和过账举例子
先设置过账和冲销两个单选按钮 RADIOBUTTON r1 / r2 按钮需要分配user-command 属性
然后给需要动态显示的项设置不同的组 MODIF ID md1/md2
在选择屏幕的pbo事件中 判断screen-group1 = ‘md1’ screen-active = ‘0’. 就把md1下所有项都隐藏掉了
IF r_cancel = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'MD1'.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF r_run = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'MD2' .
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
6、选择屏幕两个按钮同一行显示
comment xx(Y): 、 这条语句的作用是讲该语句后面的第一个screen element 定位在这一行的XX位置,长度为y
selection-screen begin of line.
selection-screen comment(10) for field but1.
selection-screen comment(15) for field but1.
selection-screen end of line。
opensql
inner 和left,right 是且与或的关系
1、不要使用select * ,会占用大量abap 内存
2、 不要使用select distinct 使用 sort + delete adjacent duplicates
3、不要使用嵌套select 。。。 endselect。
4、确定只查询一条数据时,应用select single
5、需要统计时,可以使用sql+聚合函数
6、尽可能的使用abap sort 排序 不使用order by
7、使用二分法查询内表数据速度
read table it