ABAP开发培训SAPABAP顾问余裕辉2007年10月22日SAPAG2002,TitleofPresentation,SpeakerName2ABAP开发培训目标让开发人员对SAPABAP的开发流程、ABAP语法及开发的基本技术有深入的了解和认识SAPAG2002,TitleofPresentation,SpeakerName3培训方式知识讲解实例演示练习&QASAPAG2002,TitleofPresentation,SpeakerName4培训内容ABAP开发过程中常用的TCODEABAP开发的简要流程ABAP报表开发Query的使用SAPAG2002,TitleofPresentation,SpeakerName5ABAP开发过程中常用的TCODESE80ABAP开发平台SE11数据字典SE16查看表数据SE38程序编辑器SE37函数编辑器ST05执行跟踪SE10传输组织器SE93事务码维护SE30ABAP运行时间分析ABAPDOCUABAP文档SHDB屏幕录制SMARTFORMS表单维护SAPAG2002,TitleofPresentation,SpeakerName6ABAP开发的简要流程Keyuser提出需求Add-on与keyuser商讨需求Add-on开发程序Keyuser测试传输Add-on修改程序FunctionalSpec(书面&电子)UAT(书面&电子)TransportrequestModifySpecSAPAG2002,TitleofPresentation,SpeakerName7ABAP开发的简要流程1.创建程序(SE80)2.编写代码(SE80)3.激活程序(SE80)4.创建事务码(SE93)5.维护Requestnumber(SE10)SAPAG2002,TitleofPresentation,SpeakerName8练习一练习create程序和requestnumber.(5’)SAPAG2002,TitleofPresentation,SpeakerName9报表程序分类普通报表程序输出结果格式固定,不能对其进行交互式操作;交互式报表程序通过特定的触发事件,比如双击、菜单、按钮和功能键等,可以对报表结果进行操作;SAPAG2002,TitleofPresentation,SpeakerName10报表程序结构SAPAG2002,TitleofPresentation,SpeakerName11处理块的类型SAPAG2002,TitleofPresentation,SpeakerName12事件块组成报表程序的基本单位;原则上每个事件块由各自的关键字为起始,不同的事件块执行不同的任务;事件块由ABAP运行时环境调用,其调用顺序固定,与程序编码顺序无关;缺省的事件块START-OF-SELECTIONSAPAG2002,TitleofPresentation,SpeakerName13事件块INITIALIZATIONATSELECTION-SCREENSTART-OF-SELECTIONGETEND-OF-SELECTIONTOP-OF-PAGEEND-OF-PAGESAPAG2002,TitleofPresentation,SpeakerName14事件块详细讲解事件块的简单处理过程:ABAP程序运行的时候,INITIALIZATION首先被调用;经过初始化的输入屏幕会显示在表示服务器;用户离开输入屏幕的时候,START-OF-SELCTION事件会被自动调用;结果数据会以列表的形式显示在第二个屏幕上;SAPAG2002,TitleofPresentation,SpeakerName15事件块的语法源代码中的事件块顺序不影响它们的执行顺序SAPAG2002,TitleofPresentation,SpeakerName16事件块编码规则(1)INITIALIZATION通常在此事件块中设定输入屏幕字段的初始值例如:INITIALIZATION.P_DATE=‘20030201’.效果:输入屏幕的日期字段初始显示值为2003年2月1日SAPAG2002,TitleofPresentation,SpeakerName17事件块编码规则(2)ATSELECTION-SCREEN通常在此事件块中进行用户输入数据的合法性检查,发现错误则以消息的形式给出警示,直到用户输入正确的数值例如:ATSELECTION-SCREEN.IFP_DATE=SPACE.MESSAGEE001.ENDIF.效果:如果字段P_DATE为空,则程序会用消息001“日期字段不能为空!”来提示用户必须输入一个日期。而且输入屏幕会等待用户输入,知道该字段数值合法SAPAG2002,TitleofPresentation,SpeakerName18事件块编码规则(3)START-OF-SELCTION通常在此事件中针对业务需求进行系统数据的查询例如:start-of-selection.performget_data_for_oil.效果:在输入屏幕用户按下执行按钮后,子程序get_data_for_oil被执行,在其中获得业务相关的数据存放到内表或者其它变量,这些数据在END-OF-SELECTION事件块中被输出SAPAG2002,TitleofPresentation,SpeakerName19事件块编码规则(4)END-OF-SELCTION通常在此事件中进行结果清单的输出例如:end-of-selection.write:23(1)sy-vline,24(20)tab-gas_planright-justified,效果:数据以清单的形式输出SAPAG2002,TitleofPresentation,SpeakerName20事件块编码规则(5)GET从逻辑数据库中得到数据(较少用)TOP-OF-PAGE在此事件块中设计输出清单的页头例如:TOP-OF-PAGEwrite:/1(240)'汽柴油日出厂情况表'centered.write:/20(8)'日期:',29(10)s_date,180(6)'单位:',190(10)'吨'.SAPAG2002,TitleofPresentation,SpeakerName21事件块编码规则(6)END-OF-PAGE在此事件中设定输出清单的页脚报表编程模板:例如:END-OF-PAGE.Write:‘制作人’,p_name.SAPAG2002,TitleofPresentation,SpeakerName22练习二建立报表程序事件块(5’)SAPAG2002,TitleofPresentation,SpeakerName23程序名REPORTrep.Additions:1....NOSTANDARDPAGEHEADING2....LINE-SIZEcol3....LINE-COUNTn(m)表单输出每页由n行,其中的m行作为页脚;4....MESSAGE-IDmid消息对象5....DEFININGDATABASEldb使用逻辑数据库,自动产生SAPAG2002,TitleofPresentation,SpeakerName24Tables语句基本格式TABLESdbtab.Dbtab是指ABAP字典的一个数据库对象,可以是透明表格、视图和结构;该语句的作用是声明了一个表工作区,类似于C语言里面的STRUCTURE和PASCAL语言里面的RECORD;这个表工作区由多个字段组成,其名称、类型和dbtab的字段完全相同;ABAP字典对象中字段的类型自动的转换为ABAP程序的类型;表工作区通常是一个全局变量。SAPAG2002,TitleofPresentation,SpeakerName25ABAP数据类型SAPAG2002,TitleofPresentation,SpeakerName26Types语句定义自定义数据类型语法:typesf[length]type.定义简单数据类型:TYPESname(10)typec.SAPAG2002,TitleofPresentation,SpeakerName27DATA语句定义数据变量语法:DATAf[length]type[value][decimals]定义一个简单类型的变量DATA:COUNTERTYPEIVALUE1,FLAGTYPEClength10,Flag(10),WEIGHTTYPEPDECIMALS2VALUE‘1.25’.DATANAMELIKEFLAG.SAPAG2002,TitleofPresentation,SpeakerName28InternalTable内表ABAP中的内表相当于其他语言中的矩阵,在操作上有复制、删除、插入、修改等功能,分为标准表、排序表和哈希表三种类型。使用DATA定義若使用DATA來定義InternalTable,可分成要不要有HEADERLINE,HEADERLINE就是所謂的WORKAREA,用在數據的存取上.語法:DATAftypeOCCURSn[WITHHEADERLINE]Example:DATAVECTORTYPEIOCCURS10WITHHEADERLINE.DATA:beginofwaoccurs0,col1(10),col2typeI,endofwa.DATAitabliketableofwawithheaderline.SAPAG2002,TitleofPresentation,SpeakerName29定义输入屏幕用SELECTION-SCREEN语句来定义输入屏幕SAPAG2002,TitleofPresentation,SpeakerName30SELECTION-SCREEN语法特殊效果SAPAG2002,TitleofPresentation,SpeakerName31输入字段设计PARAMETERS语句SELECT-OPTIONS语句SAPAG2002,TitleofPresentation,SpeakerName32PARAMETERS语法SAPAG2002,TitleofPresentation,SpeakerName33Select-options语法SAPAG2002,TitleofPresentation,SpeakerName34WRITE语句按照指定的格式把变量里面的数据输出到屏幕语法:SAPAG2002,TitleofPresentation,SpeakerName35WRITE语句的选项根据选项的不同,WRITE语句可以输出到屏幕、输出到变量、以复选框的形式输出、以图标的格式输出SAPAG2002,TitleofPresentation,SpeakerName36练习三编写一支简单的报表程序,选择屏幕上创建一parameters,并设置必须输入,之后将输入的值赋给已定义好的字符变量,最后输出该变量的值,同时换行输出自己的姓名(20’)SAPAG2002,TitleofPresentation,SpeakerName37OPENSQL语法R/3對於存放在RelationDatabase的資料可使用SQL指令讀取或處理,指令種類可分成DDL(DataDefinitionLanguage)指令,如CREATE,及DML(DataManipulationLanguage),如SELECT及INSERT等。處理方式分成OPENSQL及NATIVESQL,前者在處理時,Database與CommandInterpreter間有一Buffer區,如SELECT*FROM…,後者則直接處理資料庫,如EXCESQLSELECT…等。兩個重要的系統變數:SY-SUBRC:傳回0表成功執行指令,4表未找到符合條件資料SY-DBCNT:正處理的資料筆數SAPAG2002,TitleofPresentatio