注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

黑山老妖的博客

 
 
 

日志

 
 
关于我

主要用来存放收集的资料,几乎都是转贴的东西!感谢原作者!

网易考拉推荐

创建选择屏幕的详细介绍   

2008-06-16 14:50:12|  分类: ABAP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

创建选择屏幕的详细介绍

简单的屏幕编程,详细的说明,初始化,屏幕事件等

16.选择屏幕

读者从ABAP开发帮助文档能了解选择屏幕的使用,有本英文教材是<<21天学会ABAP>>,同样本书的

目的是让有一定程序基础的读者在三个月内成为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.

  评论这张
 
阅读(155)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018