




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ABAP报表例程说明ABAP报表及表单程序都是对系统中数据进行加工,并输出。一般情况下,不会对数据库表数据进行写入,所以尽量避免对数据库的写入,而更多使用“查看”。下面,对报表及表单的程序结构以及输出方式进行说明。一、表单(FORM输出):需求者提出需要系统中数据并输出到一个固定格式打印,而不是输出为电子文件的情况下,我们一般用表单程序满足其需求:如下面例1:注意:*号表示注释行,而行中注释部分是放在双引号”后面*&-*& Report ZGT_R_MM_001*&*&-*& 用途: 用于在系统中打印询价单 *& 创建: 肖晶 创建时间: 200
2、5.11.7 *& 修改: 修改时间: *& 版本: 1.0 *&-*REPORT ZGT_R_MM_001 MESSAGE-ID zreport NO STANDARD PAGE HEADING LINE-SIZE 324 LINE-COUNT 35.*数据定义及声明*TABLES: ekko,ekpo,lfa1.DATA: BEGIN OF itab_result1 OCCURS 0, ebeln LIKE ekpo-ebeln, "凭证号 bstyp LIKE ekpo-bstyp, "凭证类型 ebelp LIKE ekpo-ebelp, &
3、quot;凭证项目号 matnr LIKE ekpo-matnr, "物料号 txz01 LIKE ekpo-txz01, "物料描述 bukrs LIKE ekpo-bukrs, "公司代码 matkl LIKE ekpo-matkl, "物料组 ktmng LIKE ekpo-ktmng, "数量 meins LIKE ekpo-meins, "单位 agdat LIKE ekpo-agdat, "询价截止日期 kdatb LIKE ekko-kdatb, "报价有效起始日期 kdate LIKE ekko-k
4、date, "报价约束期 lifnr LIKE ekko-lifnr, "供应商编号 END OF itab_result1.DATA: BEGIN OF itab_result OCCURS 0, ebeln LIKE ekpo-ebeln, "凭证号 bstyp LIKE ekpo-bstyp, "凭证类型 ebelp LIKE ekpo-ebelp, "凭证项目号 matnr LIKE ekpo-matnr, "物料号 txz01 LIKE ekpo-txz01, "物料描述 bukrs LIKE ekpo-bukrs
5、, "公司代码 matkl LIKE ekpo-matkl, "物料组 ktmng LIKE ekpo-ktmng, "数量 meins LIKE ekpo-meins, "单位 agdat LIKE ekpo-agdat, "询价截止日期 kdatb LIKE ekko-kdatb, "报价有效起始日期 kdate LIKE ekko-kdate, "报价约束期 lifnr LIKE ekko-lifnr, "供应商编号 name1 LIKE lfa1-name1, "供应商名称END OF itab_
6、result.data: e_ebeln1 like ekpo-ebeln.*输入字段*parameters: p_ebeln like ekko-ebeln.at selection-screen. select single ebeln from ekpo into e_ebeln1 where ekpoebeln = p_ebeln AND ekpobstyP = 'A'. if sy-subrc <> 0. message W002(zreport). exit. endif. perform selection. "调用取数子程序 perform
7、 printout. "调用打印form* 取 数 *form selection. SELECT pebeln pbstyp pebelp pmatnr ptxz01 pbukrs pmatkl pktmng pmeins pagdat kkdatb kkdate klifnr INTO CORRESPONDING FIELDS OF itab_result1 FROM ekpo AS p JOIN ekko AS k ON pebeln = kebeln WHERE kebeln = p_ebeln. MOVE-CORRESPONDING itab_result1 TO itab
8、_result.*取供应商名称* DATA: autoname LIKE lfa1-name1. SELECT SINGLE lfa1name1 INTO (autoname) FROM lfa1 WHERE lfa1lifnr = itab_result1-lifnr. itab_result-name1 = autoname. APPEND itab_result.* CLEAR itab_result. ENDSELECT.endform.*打印输出格式*form printout.DATA FORM LIKE THEAD-TDFORM VALUE 'ZFORM_MM_001
9、39;.DATA BEGIN OF OPTIONS. INCLUDE STRUCTURE ITCPO.DATA END OF OPTIONS.DATA BEGIN OF RESULT. INCLUDE STRUCTURE ITCPP.DATA END OF RESULT. CALL FUNCTION 'OPEN_FORM' EXPORTING DEVICE = 'PRINTER' DIALOG = 'X' OPTIONS = OPTIONS EXCEPTIONS CANCELED = 1 DEVICE = 2 FORM = 3 OPTIONS =
10、 4 UNCLOSED = 5 OTHERS = 6. IF SY-SUBRC <> 0.* WRITE 'Error in OPEN_FORM'(001). EXIT. ENDIF. CALL FUNCTION 'START_FORM' EXPORTING FORM = 'ZFORM_MM_001' EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0.* WRITE 'Error in START_FORM'(001). EXIT. ENDIF. LOOP AT ITAB_RE
11、SULT. CALL FUNCTION 'WRITE_FORM' EXPORTING ELEMENT = 'ITEM_LINE' EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0.* WRITE 'Fehler in Funktion X, Element ITEM_DATA'(003). EXIT. ENDIF. ENDLOOP. CALL FUNCTION 'END_FORM' EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0.* WRITE
12、'Error in END_FORM'(001). EXIT. ENDIF. CALL FUNCTION 'CLOSE_FORM' IMPORTING RESULT = RESULT EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0.* WRITE 'Fehler in Funktion X'(001). EXIT. ENDIF.endform.一个完整的ABAP程序一般分为程序头信息,数据声明及定义,数据处理和输出这四个部分。例子中“REPORT ZGT_R_MM_001 MESSAGE-ID zrep
13、ort NO STANDARD PAGE HEADING LINE-SIZE 324 LINE-COUNT 35.”为程序头REPORT ZGT_R_MM_001 为程序名MESSAGE-ID zreport 声明消息类 NO STANDARD PAGE HEADING 表示不用系统标准抬头LINE-SIZE 324 定义行宽为324个字符LINE-COUNT 35 定义分页其中行宽和分页在用WRITE语句输出的时候才有用程序中“TABLES: ekko,ekpo,lfa1.DATA: BEGIN OF itab_result1 OCCURS 0, ebeln LIKE ekpo-ebeln,
14、 "凭证号 . lifnr LIKE ekko-lifnr, "供应商编号 END OF itab_result1.DATA: BEGIN OF itab_result OCCURS 0, ebeln LIKE ekpo-ebeln, "凭证号 . . . lifnr LIKE ekko-lifnr, "供应商编号 name1 LIKE lfa1-name1, "供应商名称END OF itab_result.data: e_ebeln1 like ekpo-ebeln.parameters: p_ebeln like ekko-ebeln.“
15、一段为数据声明其中TABLES 是声明表,在定义字段的时候可能会用到一些数据库表里的标准字段,在此之前,一定要声明相关的数据库表。DATA: BEGIN OF itab_result1 OCCURS 0, ebeln LIKE ekpo-ebeln, "凭证号 . lifnr LIKE ekko-lifnr, "供应商编号 END OF itab_result1.一段为声明一个内表,ABAP中内表是一个非常重要的概念,其实质是一个内存区域,结构相当于一个系统中的透明表,也可以实际记录数据,而我们常用的思想就是把数据从系统标准表中取出来,经过处理加工后放到内表中,最后将内表输
16、出。其中itab_result1为内表名称(可以自己定义)data: e_ebeln1 like ekpo-ebeln.这段为定义普通变量,可以直接用“LIKE”将一个已知变量去赋给新变量,也可以用“TYPE”全新定义一个新变量,包括类型及长度。parameters: p_ebeln like ekko-ebeln.是定义一个选择字段,也就是取数所需要的自定义条件,如单据号,日期等。如果选择条件是一个单值,我们用PAEAMETERS命令进行定义;而如果是一个范围,则用SELECT-OPTIONS命令定义。at selection-screen. select single ebeln from
17、 ekpo into e_ebeln1 where ekpoebeln = p_ebeln AND ekpobstyP = 'A'. if sy-subrc <> 0. message W002(zreport). exit. endif.这一段已经进入程序的逻辑部分。at selection-screen. 是一个事件,表示在选择屏幕中。事件及相关信息请参看ABAP HELP文件。select single ebeln from ekpo into e_ebeln1 where ekpoebeln = p_ebelnAND ekpobstyP = 'A
18、39;.这里进行了一个选择,将EKPO表中的ebeln字段取出来,而条件就是ebeln 等于选择屏幕中所输入的p_ebeln,并且,ekpo表中bstyP字段值是A。if sy-subrc <> 0. message W002(zreport). exit. endif.这里做了一个判断。sy-subrc为系统字段(SY-XXXX都是系统字段,相关字段见表SYST),含义是返回值,如果返回值为0,表示查找到数据,“<>”符号表示不等于(同“NE”),既是没有取到数据。这里判断,如果没有取到值,则提示系统消息并退出。message W002(zreport). MESSA
19、GE表示命令; W002中的“W”表示消息类型,警告;002为消息号;每个消息号会有一个相对应的消息文本,系统调用这条消息的时候会直接显示文本信息。如这条消息号没有文本信息,可以双击消息号,系统会提示是否创建,选“是”则可以对消息号文本进行维护;(zreport)就是程序标题中所声明的消息类。为了不影响到系统中已有的消息我们一般在开发的程序中提示信息都用我们自己定义的消息类“zreport”。perform selection. "调用取数子程序perform 为调用子程序命令,selection为子程序名称。其实体子程序为form selection. SELECT pebeln
20、pbstyp pebelp pmatnr ptxz01 pbukrs pmatkl pktmng pmeins pagdat kkdatb kkdate klifnr “所取字段 INTO CORRESPONDING FIELDS OF itab_result1 “用CORRESPONDING命令放到内表itab_result1中相应的字段中 FROM ekpo AS p JOIN ekko AS k “取数所选择的数据库表示例为EKKO和EKPO两个表连接 ON pebeln = kebeln “ON后面为连接条件 WHERE kebeln = p_ebeln. “筛选条件 MOVE-COR
21、RESPONDING itab_result1 TO itab_result.”将itab_result1内表中的数据放到itab_result表中*取供应商名称* DATA: autoname LIKE lfa1-name1. SELECT SINGLE lfa1name1 INTO (autoname) FROM lfa1 WHERE lfa1lifnr = itab_result1-lifnr.*这一段是将供应商名称字段”LFA1-NAME1”取出后放到AUTONAME字段中itab_result-name1 = autoname.*将autoname字段的内容赋给itab_result
22、-name1字段 APPEND itab_result.”将表头里的信息填入表体中记录* CLEAR itab_result.”清除表头并循环选取 ENDSELECT.”选择结束endform.”选择子程序结束.在完成数据整理并记录到内表后,用perform printout.调用打印子程序实体为form printout.DATA FORM LIKE THEAD-TDFORM VALUE 'ZFORM_MM_001'.DATA BEGIN OF OPTIONS. INCLUDE STRUCTURE ITCPO.DATA END OF OPTIONS.DATA BEGIN OF
23、 RESULT. INCLUDE STRUCTURE ITCPP.DATA END OF RESULT. CALL FUNCTION 'OPEN_FORM' EXPORTING DEVICE = 'PRINTER' DIALOG = 'X' OPTIONS = OPTIONS EXCEPTIONS CANCELED = 1 DEVICE = 2 FORM = 3 OPTIONS = 4 UNCLOSED = 5 OTHERS = 6. IF SY-SUBRC <> 0.* WRITE 'Error in OPEN_FORM
24、39;(001). EXIT. ENDIF. CALL FUNCTION 'START_FORM' EXPORTING FORM = 'ZFORM_MM_001' EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0.* WRITE 'Error in START_FORM'(001). EXIT. ENDIF. LOOP AT ITAB_RESULT. CALL FUNCTION 'WRITE_FORM' EXPORTING ELEMENT = 'ITEM_LINE' EXC
25、EPTIONS OTHERS = 1. IF SY-SUBRC <> 0.* WRITE 'Fehler in Funktion X, Element ITEM_DATA'(003). EXIT. ENDIF. ENDLOOP. CALL FUNCTION 'END_FORM' EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0.* WRITE 'Error in END_FORM'(001). EXIT. ENDIF. CALL FUNCTION 'CLOSE_FORM' IM
26、PORTING RESULT = RESULT EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0.* WRITE 'Fehler in Funktion X'(001). EXIT. ENDIF.endform.这段程序用CALL FUNCTION 命令调用了5个函数”OPEN_FORM”,”START_FORM”,”WRITE_FORM”,”END_FORM”和”CLOSE_FORM”完成一个表单格式的调用.因为是标准函数调用,这段程序可以直接使用,所需要注意的只有上面用红色标注的ZFORM_MM_001和ITEM_LINE使用的时候
27、要将红色的ZFORM_MM_001换成自己用SE71制作的格式名称,而ITEM_LINE则是文本元素,名称可以自定义,但在FORM的MAIL窗口中,一定要声明这个文本元素.二、用WRITE语句直接在屏幕中以LIST格式输出如果只是要将数据取出后在屏幕中显示查看,对格式没有严格要求,我们可以在程序中直接用WRITE语句进行输出。如例2:*&-*& Report ZGT_R_MM_008*&-*& 用途: 用于在系统中打印出库单 *& 创建: 张远 创建时间: 2005.11.07 *& 修改: 修改时间: *& 版本: 1.0 *&
28、-*REPORT ZGT_R_MM_008A NO STANDARD PAGE HEADING LINE-COUNT 30 LINE-SIZE 125.top-of-page.write:/,/.TABLES: MKPF, MSEG,lfa1.* 选择条件 *SELECTION-SCREEN:BEGIN OF BLOCK XX1 WITH FRAME TITLE TEXT-001.PARAMETERS: P_MBLNR LIKE RM07M-MBLNR MATCHCODE OBJECT ZMBLNR, "OBLIGATORY. P_MJAHR LIKE RM07M-MJAHR.SEL
29、ECTION-SCREEN END OF BLOCK XX1.SELECTION-SCREEN:BEGIN OF BLOCK XX2 WITH FRAME TITLE TEXT-002.SELECT-OPTIONS: O_BUDAT FOR MKPF-BUDAT.SELECTION-SCREEN END OF BLOCK XX2.PARAMETERS: P_DIS RADIOBUTTON GROUP RDOB, p_sos RADIOBUTTON GROUP RDOB DEFAULT 'X'.data:e_danjv like mseg-ebeln.data:e_date li
30、ke mkpf-budat," e_LGOBE like T001L-LGOBE, e_aufnr like mseg-AUFNR,"生产订单号 e_rsnum like mseg-RSNUM,"预先留号 e_LGORT like mseg-LGORT."库存地DATA: BEGIN OF ITAB_MATDOC OCCURS 0, MBLNR LIKE MKPF-MBLNR, "物料凭证编号 MJAHR LIKE MKPF-MJAHR, "物料凭证年度 BUDAT LIKE MKPF-BUDAT, "凭证中的记帐日期 ZE
31、ILE LIKE MSEG-ZEILE, "物料凭证中的项目 BWART LIKE MSEG-BWART, "移动类型(库存管理) MATNR LIKE MSEG-MATNR, "物料号 MAKTX LIKE MAKT-MAKTX, "物料描述 WERKS LIKE MSEG-WERKS, "工厂 LGORT LIKE MSEG-LGORT, "库存地点 LGOBE LIKE T001L-LGOBE, "仓储地点的描述 CHARG LIKE MSEG-CHARG, "批号 SHKZG LIKE MSEG-SHKZG
32、, "借方/贷方标识 MENGE LIKE MSEG-erfmg, "数量 MEINS LIKE MSEG-erfme, "基本计量单位 erfmg like mseg-erfmg, erfme like mseg-erfme, EBELN LIKE MSEG-EBELN, "采购订单号 EBELP LIKE MSEG-EBELP, "采购凭证的项目编号 MENGE1 LIKE MSEG-MATNR, LGPBE LIKE MARD-LGPBE, "库位 sobkz like mseg-sobkz, lifnr like ekko-l
33、ifnr, name1 like lfa1-name1, rsnum like mseg-rsnum, aufnr like mseg-aufnr, danjv(40),END OF ITAB_MATDOC.DATA: BEGIN OF ITAB1 OCCURS 0, obknr like ser03-obknr, "对象清单号 mblnr like ser03-mblnr, "物料凭证号 zeile like ser03-zeile, "物料凭证项目号 matnr like objk-matnr, sernr like objk-sernr, "序列号
34、 taser like objk-taser, "序列号抬头信息表(SER03)END OF ITAB1.START-OF-SELECTION. select single budat from mkpf into e_date where mblnr = p_mblnr.* IF P_PRT = 'X'.* IF ( P_MBLNR <> '' ) AND ( P_MJAHR <> '' ).* PERFORM GETDATA_PRT.* PERFORM FORMPRINT.* ELSE.* MESSAGE S
35、001(ZREPORT) WITH '请输入物料凭证号和物料凭证年度!'.* ENDIF.* ENDIF. if p_sos = 'X'. IF ( P_MBLNR <> '' ) AND ( P_MJAHR <> '' ). PERFORM GETDATA_PRT.* PERFORM DISPLAY. ELSE. MESSAGE S001(ZREPORT) WITH '请输入物料凭证号和物料凭证年度!'. ENDIF. ENDIF. IF P_DIS = 'X'. PERF
36、ORM GETDATA_DIS. PERFORM DISPLAY_ALV.* PERFORM DISPLAY. ENDIF.*&-*& Form DISPLAY*&-* text*-* -> p1 text* <- p2 text*-*FORM DISPLAY_ALV. DATA: BEGIN OF IT_TITLES OCCURS 0, TITLE_NAME TYPE STRING, END OF IT_TITLES. TYPE-POOLS: SLIS. DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.* IT_TIT
37、LES-TITLE_NAME = '物料凭证号'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '物料凭证年度'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '记帐日期'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '物料凭证项目'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '移动类型'. APPEND IT_TITLES. IT_TITLES-TITLE_
38、NAME = '物料号'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '物料描述'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '工厂'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '库存地'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '库存地描述'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '批号'
39、;. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '借方/贷方标识'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '数量'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '单位'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '采购订单号'. APPEND IT_TITLES. IT_TITLES-TITLE_NAME = '采购凭证项目'. APPEND IT_
40、TITLES. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = 0 TEXT = '正在输出数据'. CALL FUNCTION 'Z_ALV_DISPLAY' EXPORTING I_PROGRAM_NAME = SY-CPROG I_INTERNAL_TABNAME = 'ITAB_MATDOC' TABLES IT_TITLES = IT_TITLES CHANGING IT_FIELDCATALOG = IT_FIELDCAT IT_OUTT
41、AB = ITAB_MATDOC.ENDFORM. " DISPLAY_ALVFORM GETDATA_DIS. SELECT FMBLNR FMJAHR FBUDAT GZEILE GBWART GMATNR GWERKS GLGORT GCHARG GSHKZG GMENGE GMEINS GEBELN GEBELP gsobkz FROM MKPF AS F JOIN MSEG AS G ON FMBLNR = GMBLNR AND FMJAHR = GMJAHR INTO (ITAB_MATDOC-MBLNR, ITAB_MATDOC-MJAHR, ITAB_MATDOC-B
42、UDAT, ITAB_MATDOC-ZEILE, ITAB_MATDOC-BWART, ITAB_MATDOC-MATNR, ITAB_MATDOC-WERKS, ITAB_MATDOC-LGORT, ITAB_MATDOC-CHARG, ITAB_MATDOC-SHKZG, ITAB_MATDOC-MENGE, ITAB_MATDOC-MEINS, ITAB_MATDOC-EBELN, ITAB_MATDOC-EBELP, itab_matdoc-sobkz) WHERE FBUDAT IN O_BUDAT.* AND gBWART in ('201','261'). select single ekkolifnr from ekko into itab_matdoc-lifnr where ekkoebeln = itab_matdoc-ebeln. SELECT SINGLE LGOBE FROM T001L INTO e_LGOBE WHERE LGORT = ITAB_MATDOC-LGORT. e_LGORT = ITAB_MATDOC-LGORT. SELECT SINGLE MAKTX FROM MAKT INTO ITAB_MATDOC-MAK
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备责任承包协议书
- 虚假遗产赠予协议书
- 职场订立合同协议书
- 聘用教师合同协议书
- 简单cp情侣协议书
- 美术生生安全协议书
- 自愿加入会员协议书
- 股权众筹投资协议书
- 职工安全生产协议书
- 设计成果结算协议书
- 警犬培训授课课件
- 2025年四川绵阳交通发展集团有限责任公司招聘笔试参考题库附带答案详解
- 成本控制在质量管理中的策略试题及答案
- 人工智能在药物研发中的辅助作用与潜力
- 作风建设学习教育查摆问题清单及整改措施
- 2025届河北省石家庄第一中学高三下学期二模地理试题及答案
- 2024年山东开放大学招聘考试真题
- PSP问题解决流程分析
- 语文-华大新高考联盟2025届高三3月教学质量测评试题+答案
- 劳务合同完整版(2025年版)
- 低空经济行业分析报告
评论
0/150
提交评论