SAP报表开发.docx

上传人:b****0 文档编号:18343072 上传时间:2023-08-15 格式:DOCX 页数:13 大小:63.37KB
下载 相关 举报
SAP报表开发.docx_第1页
第1页 / 共13页
SAP报表开发.docx_第2页
第2页 / 共13页
SAP报表开发.docx_第3页
第3页 / 共13页
SAP报表开发.docx_第4页
第4页 / 共13页
SAP报表开发.docx_第5页
第5页 / 共13页
SAP报表开发.docx_第6页
第6页 / 共13页
SAP报表开发.docx_第7页
第7页 / 共13页
SAP报表开发.docx_第8页
第8页 / 共13页
SAP报表开发.docx_第9页
第9页 / 共13页
SAP报表开发.docx_第10页
第10页 / 共13页
SAP报表开发.docx_第11页
第11页 / 共13页
SAP报表开发.docx_第12页
第12页 / 共13页
SAP报表开发.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

SAP报表开发.docx

《SAP报表开发.docx》由会员分享,可在线阅读,更多相关《SAP报表开发.docx(13页珍藏版)》请在冰点文库上搜索。

SAP报表开发.docx

SAP报表开发

SAP报表开发概述

报表开发是指无屏幕的纯报表开发。

一、报表事件

对于纯报表程序,SAP预定义了一系列的报表事件,包括:

INITIALZATION

初始化事件。

常用来填充选择屏幕的默认值。

ATSELECTION-SCREENOUTPUT

选择屏幕的PBO事件。

显示选择屏幕之前触发。

ATSELECTION-SCREEN

选择屏幕的PAI事件。

用户在选择屏幕中执行某些功能后触发。

通常用来接收用户输入,并给用户出错提示。

START-OF-SELECTION

选择开始事件。

选择屏幕处理结束后触发(即点击“Execute”按钮之后)。

END-OF-SELECTION

选择结束时间。

通常在该事件中输出报表。

AT-LINE-SELECTION

交互式报表中,用户选择某行时触发。

AT-USER-COMMAND

交互式报表中,用户选择某个功能时触发。

TOP-OF-PAGE

页眉控制,每个新页面开始时触发。

通常输出页眉、报表标题行。

END-OF-PAGE

页脚控制,在当前页结束前触发。

二、事件处理顺序

下面是事件处理次序:

一个事件的ABAP代码,开始于事件关键字,结束于下一个事件关键字。

三、报表的通常格式

通常,一个报表程序包含如下几部分:

1、程序说明。

包括:

程序名称、作者、日期等信息。

2、关键字Report。

3、数据定义。

内表、参数都在这里定义。

4、Include部分。

指定包含文件。

5、定义选择屏幕。

利用SELECT-OPTIONS和PARAMETERS声明多个选择参数,系统会自动产生一个屏幕号为1000的选择屏幕。

6、INITIALIZATION事件。

完成对选择屏幕参数的默认值填充。

7、ATSELECTION-SCREEN事件。

对用户的输入参数作校验。

8、START-OF-SELECTION事件。

在这里完成数据处理。

9、END-OF-SELECTION事件。

在这里定义报表的输出。

10、如果不是采用ALV的方式输出报表,而是采用WRITE语句输出,则还有TOP-OF-PAGE和END-OF-PAGE事件。

四、关于选择屏幕

定义选择屏幕的常用关键字:

1、PARAMETERS….

用来定义单值参数。

2、SELECT-OPTIONS。

用来定义单值、多值、范围参数。

3、SELECTION-SCREEN。

用来格式化选择屏幕。

定义选择屏幕时,我们会用到SELECT-OPTIONS这个关键字,该参数能够接受单值、多值、范围,实际上,该参数是一个内表,其结构如下:

DATA:

BeginofseltabOCCURS0,

SIGN

(1),OPTION

(2),LOWLIKEf,HIGHLIKEf,

ENDOFseltab.

Seltab-SIGN:

可选值为I和E。

I表示包含(Include),E表示排除(Exclude)。

Seltab-OPTION:

可选值为EQ、NE、GT、LE、LT、BT、NB。

EQ表示等于,NE表示不等于,GT表示大于,LE表示小于或等于,LT表示小于,BT表示在..之间,NB表示不在…之间。

SELECT-OPTIONS定义的选择参数能够直接用在OPENSQL语句中,例如:

WherefINseltab。

大家想想,一条这样的WHERE语句,如果用T-SQL需要多少个AND和OR?

这可是个好东西呀。

为了利用OPEN-SQL的这个特性,有时候,我们会自己定义这样的内表,自己填充数据,然后在OPEN-SQL语句中使用,即使我们不需要定义选择屏幕。

我们常用的屏幕格式化语句有:

1、在选择屏幕上产生空行:

SELECTION-SCREENSKIP.

2、定义屏幕块。

SELECTION-SCREENBEGINOFBLOCKblk0WITHFRAMETITLEtext-010.

SELECTION-SCREENENDOFBLOCKblk0.

如果大家对这个屏幕格式还是不满意,那么,请利用屏幕制作器,尽情地修改屏幕1000吧。

五、选择屏幕上的文本

定义完选择屏幕后,测试运行程序。

此时,我们看到的只是各个参数的名称,通常我们要用文本来替换裸露显示的参数名。

点击菜单“转到->文本元素->选择文本”,屏幕如下:

在Text栏中输入我们希望显示的选择文本。

如果参数定义来源于数据字典元素或数据元素,选中“Dictionaryref.”,则Text栏自动显示数据字典中定义的文本。

下面是“Textsymbols”屏幕,它在程序中通过text-010调用该文本符号(例如:

Writetext-010)。

如果开发多语言程序,这些textsymbols就必不可少了。

报表实例

财务部在实际业务处理时,有时候需要将会计凭证导出到Excel,而SAP提供的行项目显示在格式方面不能满足要求,在这一章中,我会将这一简单需求作为例子说明报表的写法。

第一步:

运用SE38或SE80创建一个报表,报表名称Z_FI_16(其实以Y或Z开头的名称都可以啦)。

第二步:

写代码,本程序代码如下:

=============================================================

REPORTz_fi_16.

*&---------------------------------------------------------------------*

*声明全局变量

*&---------------------------------------------------------------------*

DATA:

BEGINOFitabOCCURS0,

ndLIKEbkpf-gjahr,qjLIKEbkpf-monat,pzbhLIKEbkpf-belnr,

pzlxLIKEbkpf-blart,jzrqLIKEbkpf-budat,czLIKEbkpf-xblnr,

hbLIKEbkpf-waers,hlLIKEbkpf-kursf,ttwbLIKEbkpf-bktxt,

yhmLIKEbkpf-usnam,hxmLIKEbseg-buzei,jzdmLIKEbseg-bschl,

zhlxLIKEbseg-koart,tbzzLIKEbseg-umskz,jfdfLIKEbseg-shkzg,

jeLIKEbseg-wrbtr,bwbjeLIKEbseg-dmbtr,zzkmLIKEbseg-hkont,

kmmc(50)TYPEc,khLIKEbseg-kunnr,khmc(40)TYPEc,

gysLIKEbseg-lifnr,gysmc(40)TYPEc,cbzxLIKEbseg-kostl,

cbzxmc(20)TYPEc,xmwbLIKEbseg-sgtxt,

ENDOFitab.

DATA:

BEGINOFipzbhOCCURS0,

sign

(1)TYPEc,

option

(2)TYPEc,

low(10)TYPEc,

high(10)TYPEc,

ENDOFipzbh.

DATA:

i_countTYPEi,

c_tmp(50)TYPEc,

i_tmpTYPEi.

TABLES:

bkpf,bseg.

INCLUDEzincform.

*&---------------------------------------------------------------------*

*选择屏幕

*&---------------------------------------------------------------------*

SELECTION-SCREENBEGINOFBLOCKblk0WITHFRAMETITLEtext-010.

SELECTION-SCREENSKIP.

SELECT-OPTIONSp_yearFORbkpf-gjahr.

SELECT-OPTIONSp_periodFORbkpf-monat.

SELECT-OPTIONSp_pzbhFORbkpf-belnr.

SELECT-OPTIONSp_pzlxFORbkpf-blart.

SELECT-OPTIONSp_jzrqFORbkpf-budat.

SELECT-OPTIONSp_hbFORbkpf-waers.

SELECT-OPTIONSp_yhmFORbkpf-usnam.

SELECTION-SCREENSKIP.

SELECTION-SCREENENDOFBLOCKblk0.

SELECTION-SCREENBEGINOFBLOCKblk1WITHFRAMETITLEtext-020.

SELECTION-SCREENSKIP.

SELECT-OPTIONSp_jzdmFORbseg-bschl.

SELECT-OPTIONSp_zhlxFORbseg-koart.

SELECT-OPTIONSp_zzkmFORbseg-hkont.

SELECT-OPTIONSp_khFORbseg-kunnr.

SELECT-OPTIONSp_gysFORbseg-lifnr.

SELECTION-SCREENSKIP.

SELECTION-SCREENENDOFBLOCKblk1.

*&---------------------------------------------------------------------*

*初始化选择屏上的变量

*&---------------------------------------------------------------------*

INITIALIZATION.

*&---------------------------------------------------------------------*

*初始化全局变量,检查用户的输入

*&---------------------------------------------------------------------*

ATSELECTION-SCREEN.

REFRESHipzbh.

SELECTbelnrASlow

INTOCORRESPONDINGFIELDSOFTABLEipzbh

FROMbkpf

WHEREgjahrINp_yearANDmonatINp_period

ANDbelnrINp_pzbhANDblartINp_pzlx

ANDbudatINp_jzrqANDwaersINp_hbANDusnamINp_yhm.

IFsy-dbcnt=0.

MESSAGEe846(so)WITH'没有符合条件的会计凭证!

'.

ENDIF.

IFsy-dbcnt>2000.

MESSAGEe846(so)WITH'超过2000条会计凭证分录,请缩小查寻范围'.

ENDIF.

LOOPATipzbh.

ipzbh-sign='I'.

ipzbh-option='EQ'.

MODIFYipzbh.

ENDLOOP.

*&---------------------------------------------------------------------*

*主要数据处理逻辑

*&---------------------------------------------------------------------*

START-OF-SELECTION.

SELECTgjahrASndbelnrASpzbhbuzeiAShxmbschlASjzdm

koartASzhlxumskzAStbzzshkzgASjfdfwrbtrASje

dmbtrASbwbjehkontASzzkmkunnrASkhlifnrASgys

kostlAScbzxsgtxtASxmwb

INTOCORRESPONDINGFIELDSOFTABLEitab

FROMbseg

WHEREbelnrINipzbhANDgjahrINp_yearANDbschlINp_jzdm

ANDkoartINp_zhlxANDhkontINp_zzkmANDkunnrINp_kh

ANDlifnrINp_gys.

LOOPATitab.

SELECTSINGLEmonatblartbudatxblnrwaerskursfbktxtusnamINTO(itab-qj,

itab-pzlx,itab-jzrq,itab-cz,itab-hb,itab-hl,itab-ttwb,itab-yhm)

FROMbkpf

WHEREgjahr=itab-ndANDbelnr=itab-pzbh.

*下面几个Perform分别用来获得帐户描述、客户描述、供应商描述、成本中心描述

PERFORMget_acctnameUSINGitab-zzkmCHANGINGitab-kmmc.

PERFORMget_custnameUSINGitab-khCHANGINGitab-khmc.

PERFORMget_supplynameUSINGitab-gysCHANGINGitab-gysmc.

PERFORMget_ccnameUSINGitab-cbzxCHANGINGitab-cbzxmc.

MODIFYitab.

ENDLOOP.

PERFORMdisplay_data.

*&---------------------------------------------------------------------*

*行选择时的处理

*&---------------------------------------------------------------------*

ATLINE-SELECTION.

*&---------------------------------------------------------------------*

*用自定义命令按钮时的处理

*&---------------------------------------------------------------------*

ATUSER-COMMAND.

*&---------------------------------------------------------------------*

*页眉

*&---------------------------------------------------------------------*

TOP-OF-PAGE.

LOAD-OF-PROGRAM

*&---------------------------------------------------------------------*

*页脚

*&---------------------------------------------------------------------*

END-OF-PAGE.

*&---------------------------------------------------------------------*

*&显示数据

*&---------------------------------------------------------------------*

FORMdisplay_data.

TYPE-POOLSslis.

DATA:

ws_fieldcatTYPEslis_t_fieldcat_alvWITHHEADERLINE,

ws_fieldgroups_tabTYPEslis_t_sp_group_alv,

ws_layoutTYPEslis_layout_alv,

ws_sortfields_tabTYPEslis_t_sortinfo_alvWITHHEADERLINE,

ws_eventsTYPEslis_t_event.

DATA:

nnTYPEiVALUE0.

DEFINEhout.

nn=nn+1.

ws_fieldcat-tabname='itab'.

ws_fieldcat-fieldname='&1'.

ws_fieldcat-seltext_m=&2.

ws_fieldcat-col_pos=nn.

ws_fieldcat-outputlen=&3.

ws_fieldcat-datatype='&4'.

ws_fieldcat-do_sum='&5'.

ws_fieldcat-lzero='X'.

ws_fieldcat-no_zero='X'.

appendws_fieldcat.

clearws_fieldcat.

END-OF-DEFINITION.

CALLFUNCTION'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

percentage=100

text='正在进行数据处理,请稍等...'.

houtnd'年度'4numc''.houtqj'期间'2numc''.

houtjzrq'记帐日期'10dats''.houtxmwb'项目文本'20char''.

houtkh'客户'10char''.houtkhmc'客户名称'40char''.

houtgys'供应商'10char''.houtgysmc'供应商名称'40char''.

houtcbzx'成本中心'10char''.houtcbzxmc'成本中心名称'20char''.

houtpzlx'凭证类型'2char''.houtpzbh'凭证编号'10char''.

houthxm'行项目'6numc''.houtzzkm'总账科目'10char''.

houtkmmc'科目名称'50char''.houthb'货币'5char''.

houthl'汇率'8numc''.houtjfdf'借方/贷方'5char''.

houtje'金额'11curr''.houtbwbje'本位币金额'11curr''.

houtcz'参照'10char''.houtyhm'用户名'10char''.

houtjzdm'记帐代码'5char''.houtzhlx'帐户类型'5char''.

houttbzz'特别总账标识'5char''.houtttwb'抬头文本'20char''.

ws_layout-zebra='X'.

ws_layout-get_selinfos='X'.

ws_layout-colwidth_optimize='X'.

ws_layout-detail_popup='X'.

ws_layout-no_keyfix='X'.

ws_layout-no_totalline='X'.

CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'

EXPORTING

is_layout=ws_layout

it_fieldcat=ws_fieldcat[]

it_special_groups=ws_fieldgroups_tab[]

it_sort=ws_sortfields_tab[]

it_events=ws_events[]

i_grid_title=''

TABLES

t_outtab=itab

EXCEPTIONS

program_error=1

OTHERS=2.

ENDFORM."display_data

=============================================================

第三步:

定义选择屏幕文本。

ABAP编辑器菜单:

转到文本->元素->选择文本。

第四步:

分配事务代码和自定义菜单。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2