ABAP选择屏幕的例子
下面是一个典型的选择屏幕的典型例子.
1.设置选择屏幕参数.
***begin(end) of block使用屏幕元素逻辑块.
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TITLE1.
***定义选择标准,比如那些屏幕子段使用范围,设置为必选或使用内存ID等.
SELECT-OPTIONS <seltab> FOR <f> DEFAULT│NO INTERVALS│OBLIGATORY│NO-DISPLAY│MEMORY
ID...
***要在选择屏幕上书写文本使用屏幕注释并在屏幕初始化时赋值.
SELECTION-SCREEN COMMENT ...
***在屏幕上画线.
SELECTION-SCREEN ULINE ...
***Begind(end)of line包含的屏幕参数将在同一条直线上.
SELECTION-SCREEN BEGIN OF LINE...
SELECTION-SCREEN END OF LINE...
***设置屏幕位置.
SELECTION-SCREEN POSITION...
***在应用工具条上创建按钮响应事件
SELECTION-SCREEN FUNCTION KEY...
***在屏幕上创建按钮.
SELECTION SCREEN PUSHBUTTON ...
SELECTION-SCREEN END OF BLOCK BK1.
INITIALIZATION.
***初始化屏幕参数,类似VB的Form_load事件***
AT SELECTION-SCREEN <on help(value)-request for field│>.
***系统选择屏幕时的过程处理,比如需要判断一些屏幕字段的条件限制如为某些值则***显示
error message,程序没有必要浪费时间继续执行下去.
***on help-request 可为屏幕字段显示自定义帮助
***on value-request可显示建议列表值
***可这样理解AT selection-screen相当于 PBO.
***PERFORM sub_validate_FieldXXX .
***选屏后按Enter或F8运行时都会执行.
START-OF-SELECTION .
***设置内表值,处理没有附加关键字的所有语句.
***通常包含在此的Form是在按F8后才开始执行.
END-OF_SELECTION .
AT USER-COMMAND.
***处理用户请求事件,如报表使用ALV格式,通常在call function exporting
*** I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
***再建立一个子程序form USER_COMMAND USING UCOMM LIKE SY-UCOMM
AT LINE-SELECTION.
***通常此事件在报表显示后用户在列表中在选择行时触发.如报表使用的是write
***就可使用此事件.
*** SET PARAMETER ID 'XXX' FIELD XXX.
*** call transACtion 'XXX' AND SKIP FIRST SCREEN.
TOP-OF-PAGE.
*** 显示数据,使用TOP-OF-PAGE是在分页时可将定义的页头页尾在每页显示.
*** PERFORM write_page_header(page header在每页都显示).
*** PERFORM DISPLAY_ALV_DATA.
END-OF-PAGE.
下面一个简单的会计凭证显示的实例说明选择屏幕的使用.
***这程序只是做演示用,但是包含了常用的选择屏幕技术.
将下面的程序copy就可跑.
REPORT ZSELECTION NO STANDARD PAGE HEADING
MESSAGE-ID zFIMSG "MEssage Class
LINE-SIZE 255
LINE-COUNT 32(3).
tables :BKPF,BSEG,S070.
DATA:ZBKPF like bkpf occurs 0 ,
zwa_bkpf like bkpf.
CONSTANTS:P_variant(2) TYPE c VALUE 'WL'.
***下面这些屏幕参数和事件没有关系,只是参数集而已.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE Cond1.
SELECT-OPTIONS S_bukrs FOR bkpf-bukrs MEMORY ID BUK.
SELECT-OPTIONS S_blart FOR bkpf-blart NO INTERVALS .
SELECT-OPTIONS S_belnr FOR bkpf-belnr .
SELECT-OPTIONS S_budat FOR bkpf-budat DEFAULT sy-datum.
SELECT-OPTIONS S_bldat FOR bkpf-bldat NO INTERVALS NO-EXTENSION.
SELECT-OPTIONS S_gjahr FOR bkpf-gjahr MEMORY ID GJR DEFAULT sy-datum(4).
SELECT-OPTIONS weekran for s070-SPBUP NO-EXTENSION .
SELECTION-SCREEN END OF BLOCK bk1.
SELECTION-SCREEN BEGIN OF BLOCK bk2 WITH FRAME TITLE Cond2.
SELECTION-SCREEN COMMENT /1(30) COMM1 . "使用屏幕注释
SELECTION-SCREEN BEGIN OF LINE ."两单选框将在同一条线上.
PARAMETERS pnor RADIOBUTTON GROUP grp1 DEFAULT 'X'."Print normal doc
PARAMETERS ppark RADIOBUTTON GROUP grp1. "Print parked doc
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN END OF BLOCK bk2.
***1 初始化参数.
INITIALIZATION.
Cond1 = '【Condition】'.
Cond2 = '【Normal Doc│Parked Doc】'.
COMM1 = 'Choose Doc. Type:'. "注释赋初值.
***初始公司值,这在有些需要后台跑的程序非常有用,除了使用variant外,在此也可赋初
***下面的例子在初始化后公司代码选择了1000和3000排除了2000
S_bukrs-low = '1000'.
S_bukrs-sign = 'I'. "I->包含,E->排除
S_bukrs-option = 'EQ'. "NE
APPEND S_bukrs.
S_bukrs-low = '2000'.
S_bukrs-sign = 'E'.
S_bukrs-option = 'EQ'.
APPEND S_bukrs.
S_bukrs-low = '3000'.
S_bukrs-sign = 'E'.
S_bukrs-option = 'EQ'.
APPEND S_bukrs.
***初始化doc range 从0100000000到1000000000
s_belnr-low = '0100000000'.
s_belnr-high = '1000000000'.
s_belnr-sign = 'I' .
s_belnr-option = 'BT'.
append s_belnr.
***2 使用sug_get_week后得到所选日期的当前周数,在选择weekrag字段时才触发.
***当你选择weekran字段时.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR weekran-low.
PERFORM sub_get_week CHANGING weekran-low.
AT SELECTION-SCREEN.
***判断所选择的公司代码是否有效,通常并不是必须的.
***当然你也可将此步省略,直接在START-OF-SELECTION判断.
***根据需要可做很多vaid字段的判断.
PERFORM SUB_VALIDATE_COMP.
***3开始选屏
START-OF-SELECTION.
Perform SUB_GET_DOC.
PERFORM SUB_WRT_DOC.
END-OF-SELECTION.
***4.分页时显示page header或page footer.
TOP-OF-PAGE.
perform sub_WRT_HEADER.
end-of-page.
***5.当点击行并且是点到Document NO.CAll FB03.
AT line-selection.
Perform sub_line_response.
form sub_line_response.
Data: ZFLDNAME like DD01L-DOMNAME,
ZFLDVALUE like TTREET-TEXT,
zwa_bkpf like bkpf.
GET CURSOR FIELD ZFLDNAME VALUE ZFLDVALUE .
if ZFLDNAME = 'ZWA_BKPF-BELNR' .
* READ TABLE Zbkpf into zwa_bkpf WITH KEY BELNR = ZFLDVALUE.
* SET PARAMETER ID 'BUK' FIELD zwa_bkpf-BUKRS.
* SET PARAMETER ID 'GJR' FIELD zwa_bkpf-GJAHR.
* SET PARAMETER ID 'BLN' FIELD zwa_bkpf-BELNR.
SET PARAMETER ID 'BLN' FIELD ZFLDVALUE .
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
endif.
endform .
FORM SUB_GET_DOC.
refresh zbkpf .
SELECT * FROM bkpf into table Zbkpf
WHERE bukrs IN s_bukrs
AND belnr IN s_belnr
AND gjahr IN s_gjahr
AND budat IN s_budat.
endform.
form sub_wrt_header.
FORMAT INTENSIFIED COLOR = 6.
WRITE AT: /01 'Finaincial Document List:'(h07).
FORMAT COLOR COL_NORMAL ON.
FORMAT COLOR COL_HEADING ON.
WRITE AT:/01(48) sy-uline.
FORMAT COLOR COL_HEADING OFF.
FORMAT COLOR OFF.
endform.
form sub_wrt_doc.
uline /1(41).
loop at zbkpf into zwa_bkpf.
write:/ '│',zwa_bkpf-bukrs,'│',zwa_bkpf-belnr,'│',zwa_bkpf-gjahr,'│',zwa_bkpf-
budat,'│'.
uline /1(41).
endloop.
endform.
FORM SUB_VALIDATE_COMP.
data itab_bukrs like bkpf-bukrs occurs 0 .
select bukrs into table itab_bukrs
from T001
where BUKRS in S_bukrs .
if itab_bukrs IS INITIAL.
Message e002(00) .
endif.
endform.
FORM sub_get_week CHANGING wkran LIKE s070-SPBUP.
DATA: l_date LIKE workflds-gkday,
l_period LIKE t009b-poper,
l_year LIKE t009b-bdatj.
***根据选择日期得到当前周数
CALL FUNCTION 'F4_DATE'
EXPORTING
date_for_first_month = sy-datum
display = ''
IMPORTING
select_date = l_date
EXCEPTIONS
calendar_buffer_not_loadable = 1
date_after_range = 2
date_before_range = 3
date_invalid = 4
factory_calendar_not_found = 5
holiday_calendar_not_found = 6
parameter_conflict = 7
OTHERS = 8.
CALL FUNCTION 'G_PERIOD_GET'
EXPORTING
date = l_date
***使用WL variant得到的period是周/年,空则是期间/年.
***在CO-PA或做计划时,通常是以周做period的.
variant = P_variant "'WL'
IMPORTING
period = l_period
year = l_year
EXCEPTIONS
ledger_not_assigned_to_company = 1
period_not_defined = 2
variant_not_defined = 3
OTHERS = 4.
weekran-sign = 'I'.
weekran-option = 'EQ'.
CONCATENATE l_year l_period+1(2) INTO wkran.
endform.
ABAP选择屏幕的例子相关推荐
- ABAP选择屏幕建议
选择屏幕是用户使用报表等大多数程序的第一步,选择屏幕的显示.操作非常丰富,看似简单,但是若不加以统一,一个项目中的程序将会是五花八门.为了改进用户体验,我在写程序的第一部,规范了选择屏幕的定义,设想如 ...
- ABAP 选择屏幕标题和ALV标题的修改
1.Selection Screen(选择屏幕)标题的修改. 然后生成选屏界面的标题,如图: 若是需要修改该标题,可按以下两步进行操作: (1)在ABAP编辑器页面,选择"转到"- ...
- abap选择屏幕上的button
1.背景:近期在看sap的一些abapDemo,看了一个比較好用的功能.分享一下.希望对用到的兄弟有帮助,主要功能是:在选择屏幕上弹出一个小窗体.放一些button在上面,触发不同button,会处理 ...
- ABAP 选择屏幕上添加按钮,按钮上添加文字和图片
TABLES: sscrfields. TYPE-POOLS:slis,ole2. TYPE-POOLS icon. * 选择屏幕 SELECTION-SCREEN SKIP 1. SELECTION ...
- abap 选择屏幕事件AT SELECTION-SCREEN
AT SELECTION-SCREEN (1).其实就像一个FORM,所以在这个事件里声明的变量都是局部变量. (2).根据SY-UCOMM这个系统变量可以判断用户的命令 (3).在这个事件里响应的是 ...
- ABAP选择屏幕下拉框
导语:好久没有写选择屏幕了,下面分享一个选择屏幕下拉框的实现,用户认为在选择屏幕上的搜索帮助不太友好,希望做一个下拉框来选. 一.直接引用标准值 第一种是最基础的,直接依靠表字段的搜索帮助等系统自带的 ...
- abap选择屏幕工具栏按钮问题
选择屏幕的工具栏按钮?听上去好像就是SE80创建report的时候,新增加一个GUI状态嘛,对不对?其实不是的. 我们先看一个普通的report程序 不就是这样嘛? 我们运行这个report看看 点击 ...
- ABAP选择屏幕:动态选择屏幕
导语:在做ALV报表的时候,碰见过用 RADIOBUTTON区分不同页签,或者是区分不同的选择屏幕字段的需求,这里简单的说一下,如何通过RADIOBUTTON来实现动态选择屏幕. 关键元素: 1. M ...
- ABAP选择屏幕权限控制
输入选择条件,回车进行权限的检查. AT SELECTION-SCREEN. IF SY -UCOMM = 'ONLI' . PERFORM AUTHORITY_CHECK . ENDI ...
最新文章
- SQL与NoSQL区别-存储方式
- java使用ireport生成报表_JasperReport(3)——Java简单使用IReport生成的文件建立报表...
- Android Studio(十二):打包多个发布渠道的apk文件
- 安装apache的mod_rewrite模块
- SIGIR 2019 开源论文 | 基于图神经网络的协同过滤算法
- 【Python】远离 Python 最差实践,避免挖坑
- 如何从需求文档中辨认客户(一)
- 彻底学会Spring事务——概念+具体实现
- 基于Spring Security的认证方式_实现认证功能_Spring Security OAuth2.0认证授权---springcloud工作笔记120
- 数据库周刊30丨数据安全法草案将亮相;2020数据库产业报告;云南电网上线达梦;达梦7误删Redo Log;Oracle存储过程性能瓶颈;易鲸捷实践案例……
- lpop 原子_全国中考化学易错知识点——微粒构成的物质分子原子离子
- 8421 5421 2421 余3码
- 大数据实时处理第三周课
- 电影《肖申克的救赎》给你最深的感受是什么?
- JS逆向hook通用脚本合集
- EasyUI的datagrid删除后一页所有数据不自动显示前页数据
- javaspringboot面试题,java面试问职业规划
- 数据库面试题——索引(一)
- 20201225英语单词学习(仅供自己记录)
- 2020年第28周(7.6~7.12)计划
热门文章
- TP5_接口开发之全局异常控制
- 让pt-slave-restart支持MariaDB
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)解决方法
- (翻译) MongoDB(2) 数据库和集合
- 有点小激动-Index Condition Pushdown Optimization
- Runtime(动态添加属性)
- 解决Eclipse中文乱码的方法
- Spring学习资料之 依赖注入(二)
- CCNA第十一章学习笔记OSPF简介
- BAT教程 :第六节(if命令讲解)