为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

SAPABAP实用培训教程

2019-05-18 30页 ppt 1MB 1阅读

用户头像

is_997338

暂无简介

举报
SAPABAP实用培训教程SAP基本知识培训-ABAP培训内容ABAP简介1ABAP基础2ALV报表3Function4Smartforms5Enhancement6BDC7ABAP简介ABAP程序的流程系统架构和ABAP程序系统的三层架构:表现层,应用服务器层,数据库层.ABAP程序从数据库提取数据展示给用户程序运行流程程序开始系统读取上下文运行时系统发送选择屏幕输入的值被放入数据对象程序从数据库请求数据记录数据库把数据记录返回给程序ABAP简介ABAP工作台简介知识库和对象浏览器知识库包含了所有系统开发对象—程序、函数模块、数据库表定义等等除知识库...
SAPABAP实用培训教程
SAP基本知识培训-ABAP培训ABAP简介1ABAP基础2ALV报表3Function4Smartforms5Enhancement6BDC7ABAP简介ABAP程序的流程系统架构和ABAP程序系统的三层架构:表现层,应用服务器层,数据库层.ABAP程序从数据库提取数据展示给用户程序运行流程程序开始系统读取上下文运行时系统发送选择屏幕输入的值被放入数据对象程序从数据库请求数据记录数据库把数据记录返回给程序ABAP简介ABAP工作台简介知识库和对象浏览器知识库包含了所有系统开发对象—程序、函数模块、数据库表定义等等除知识库外,数据库还包含应用和定制表,这些表是客户端相关的,都有一个客户端列。知识库结构根据应用组件进行划分,创建一个知识库对象时,必须指定一个包。知识库信息系统(SE80)。通过应用层次功能显示按层级组织的知识库对象(SE81)。ABAP工作台工具,ABAP编辑器、ABAP字典、屏幕制作器、菜单制作器、函数制作器、类制作器。对象浏览器,左面是导航区,右面是工具区。ABAP简介ABAP工作台简介开发程序和组织开发组织开发(SE01,SE09,SE10)。创建包,Package、短文本、Appl.Component、SoftwareComponent、TransportLayer、PackageType。传输路径(STMS)。创建请求号。ABAP编程语言简介。创建ABAP程序(SE38)。创建事务码(SE93)。ABAP简介谢谢!Q&AABAP基础数据字典ABAP字典中的基本对象ABAP字典中的基本对象为:表、数据元素、Domain。表是数据库中实际存放数据的结构,由行(记录)和列(字段)组成。表中的字段通过数据元素和domain来定义。一个domain指定字段的属性及允许的值。字段通过数据元素和domain相联系,一般不建议把domain直接赋给字段。这是SAP和其它系统的重要区别,在其它系统中,字段仅通过数据类型(字符、数字等)和长度来定义。在SAP中,字段通过一个数据元素来定义,而每个数据元素又通过一个domain定义。数据元素的优点是可以重复使用。例如,有多个表包括字段FIELD,你可以将各个表中的FIELD分配给同一个数据元素,而不需要去在每个表中定义。另外,若要对字段的属性修改,只需要修改数据元素,所有指向该数据元素的字段会自动使用新的值。创建表、数据元素、Domain(SE11)。ABAP基础表,数据元素和domain的关系如下图所示ABAP基础基本对象的关系图操作实践:实际建立一张表单表单格式要求.表单名称为ZTEST20130801,具体格式如下客户端物料工厂调度员操作人日期MANDTMATNRWERKSFEVOR自定义BLDATABAP基础ABAP基础谢谢!Q&AABAP基础数据定义数据类型  16进位数 X'00'1-65535Byte1X时间数据,格式为HHMMSS '000000' 6Byte6TPacked数,用在小数点数 0 1-16Byte8P 数值 '00…0'1-65535Byte1N  整数 0-2^31至2^31-14I  浮点数 0 8Byte8F日期数据,格式为YYYYMMDD'00000000' 8Byte8D字符串数据,如'Program' Space1-65535Byte1C DescriptionInitialValue RangeLengthTypeABAP基础名称作用SPACE空白字符串SY-SUBRC系统执行返回值,0表示执行成功SY-UNAME登陆帐号名称SY-DATUM系统日期SY-UZEIT系统时间SY-TCODE目前的事务代码数据定义系统定义的数据SYSTABAP基础数据定义变量定义DATA语法:DATA<f>[<length>]<type>[<value>][<decimals>]<f>:变量名称,最长30个字符,不可含有+.,:()等字符.<length><type>:数据类型及长度,如LINE(20)TYPEC.亦如MYNAMELIKESY-UNAME。<value>:初值。<decimals>:小数位数。ABAP基础数据定义常量定义常数定义使用CONSTANTS指令,如定义PI是一个有5位小数的数值3.14159。ABAP基础TYPE指令,TYPE用来指定数据类型。TYPES指令,只能设定类型,被别的变量引用,不能保存值.TYPES用来自定义数据类型。LIKE指令,LIKE也用来指定数据类型,使用格式与TYPE相同,LIKE与TYPE的区别是LIKE用在已有值的数据项,如系统变量,而TYPE叙述则是用在指定数据类型。STATICS指令,STATICS用来定义变量,使用格式与DATA相同。与DATA的区别是STATICS只能在子程序中使用,DATA可以在子程序外进行定义.语法:STATICS<c>[<length>]<type>[<value>][<decimals>]TABLES指令,TABLES语句用来创建称为表工作区的数据对象。表工作区是参考ABAP/4词典对象的字段串。语法:TABLES<dbtab>.其中<dbtab>是ABAP/4词典对象的名称,同时也是创建的表工作区的名称。表工作区组件的顺序和名称与在ABAP/4词典中声明的对象相同。数据定义指令ABAP基础谢谢!Q&AABAP基础语法:MOVE<F1>TO<F2>将F1的值存至变数F2中,也可写成F2=F1实例:M_NAME='CHER'.数据运算指令赋值ABAP基础语法:MOVE<F1>[+<O1>]TO<F2>[+<O2>]实例:DATA:F1(10)TYPECVALUE'ABCDEFGHIJ'.F2(5)TYPEC.F2=F1+3(5).*自第4个位置开始取出5个字符(MOVEF1+3(5)TOF2)F2的内容会变成DEFGH数据运算指令截取字符串赋值ABAP基础数据运算指令在变量的使用上,可以使用类似CallByValue的语法:WRITE(<f>)TO<g>实例:DATA:NAME(20)TYPECVALUE'SOURCE',SOURCE(10)TYPECVALUE'LILY',TARGET(10)TYPEC.WRITE(NAME)TOTARGET.WRITE/TARGET.执行结果:LILY变量CALLBYVALUE的使用ABAP基础语法:MOVE–CORRESPONDING<Strings1>TO<Strings2>.实例:DATA:BEGINOFADDRESS,FIRSTNAME(10)TYPECVALUE'LULU',LASTNAME(10)TYPECVALUE'CHOU',TEL(12)TYPECVALUE'4660570',ENDOFADDRESS.DATA:BEGINOFNAME,FIRSTNAME(10)TYPEC,LASTNAME(10)TYPEC,E_MAIL(30)TYPEC,ENDOFNAME.MOVE-CORRESPONDINGADDRESSTONAME.NAME-FIRSTNAME变成‘LULU’,NAME-LASTNAME变成‘CHOU’,而NAME-E_MAIL则不变。数据运算指令数组值的复制ABAP基础数据运算指令语法:CLEAR<f>清除变量现在内容实例:DATANTYPEIVALUE100.CLEARN.WRITEN.执行结果:0.清除变量内容ABAP基础数据运算指令算术符号符号功能**乘幂*乘/除+加-减DIV整数除法MOD余数除法ABAP基础数据运算指令数值函数ABS(N):取数值N的绝对值SIGN(N):1(N>0),0(N=0),-1(N<0).CEIL(N):传回大于数值N的最小整数.FLOOR(N):传回小于数值N的最大整数.TRUNC(N):传回数值N的整数部分.FRAC(N):传回数值N的小数部分.COS(A),SIN(A),TAN(A):传回三角函数cosA,sinA,tanA的值,A为弪度量EXP(N):传回e^N值LOG(N):传回logeN值SQRT(N):传回N的平方根值ABAP基础数据运算指令日期数据的运算,日期数据可以直接运算,如加法与减法的运算.时间数据的运算,时间格式为‘hhmmss’,如‘212030’表’21:20:30’.日期与时间运算ABAP基础数据运算指令字符串移位语法:SHIFT<c>[BY<n>PLACES][<modes>][CIRCULAR][BY<n>PLACES]:表示移动的位数,没有此参数默认移动一位。[<modes>]:移动的方向,没有此参数默认向左移动.(1).LEFT,字符串往左移n位(2).RIGHT,字符串往右移n位[CIRCULAR]:字符串以环状方式移位取代字符串内容语法:REPLACE<string1>WITH<string2>INTO<c>将字符串<c>中的<string1>以<string2>来取代大小写的转换语法:TRANSLATE<c>TOUPPERCASE.*转成大写TRANSLATE<c>TOLOWERCASE.*转成小写在字符串中寻找部分字符串语法:SEARCH<c>FOR<str>.从字符串<c>查询字符串<str>。执行结果存至两个变数,SY-SUBRC和SY-FDPOS,若找到则SY-SUBRC为0,SY-FDPOS存开始位迭(从0开始计)。字符串长度,语法:STRLEN(<c>).取部分字符串,语法:<f>[+<o>][<l>].字符串连接,语法:CONCATENATE <string1> <string2> INTO <string3>.字符串分割,语法:SPLIT <string1> AT<c> INTO <string2><string2>..字符串数据处理ABAP基础数据运算指令批量重复操作的时候,可以定义sap宏来进行操作语法:DEFINE<name>.  ...&1...&9...END-OF-DEFINITION.例子:DATA:xTYPEi,yTYPEi,lTYPEi.DEFINEwrite_frame.  x=sy-colno.y=sy-linno.  WRITE:'|'NO-GAP,&1NO-GAP,'|'NO-GAP.  l=sy-colno-x.  y=y-1.SKIPTOLINEy.POSITIONx.  ULINEATx(l).  y=y+2.SKIPTOLINEy.POSITIONx.  ULINEATx(l).  y=y-1.x=sy-colno.SKIPTOLINEy.POSITIONx.END-OF-DEFINITION.SKIP.write_frame'Inaframe!'.宏谢谢!Q&A结语ABAP基础语法:PARAMETERS<p>[DEFAULT<f>][LOWERCASE][OBLIGATORY][ASCHECKBOX][RADIOBUTTONGROUP<rad>]实例:PARAMETERS:NAME(8),AGETYPEI,BIRTHTYPED.OBLIGATORY:强制要求输入,屏幕上会出現一个“√”,使用者必须要输入才可。ASCHECKBOX:输入CHECKBOX的格式。实例:PARAMETERS:TAXASCHECKBOXDEFAULT‘X’,NTDASCHECKBOX.RADIOBUTTONGROUP<rad>:输入RADIOBUTTONGROUP的方式。实例:PARAMETERS:BOYRADIOBUTTONGROUPSEXDEFAULT‘X’,GIRLRADIOBUTTONGROUPSEX.屏幕输入指令PARAMETERS指令ABAP基础语法:SELECT-OPTIONS<check-option>FOR<table-field>[DEFAULT<begin>TO<end>][NO-EXTENSION][NOINTERVALS][OBLIGATORY]实例:TABLESSPFLI.AIRLINEFORSPFLI-CONNID.*将条件的输入值存放入AIRLINE,筛选对象为SPFLI中的CONNID栏位。DEFAULT<begin>TO<end>:设定开始结束范围输入默认值实例:SELECT-OPTIONSAIRLINEFORSPFLI-CONNIDDEFAULT'2042'TO'4555'.NO-EXTENSION:设定不要多值输入画面NOINTERVALS:设定不要区间范围输入画面OBLIGATORY:强制要求输入屏幕输入指令SELECTION-OPTIONSABAP基础使用WHERE<条件式>实例:SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.SELECT*FROMSPFLIWHERECONNIDINAIRLINE.WRITE:/SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.ENDSELECT.使用CHECK参数实例:SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.SELECT*FROMSPFLI.CHECKAIRLINE.WRITE:/SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.ENDSELECT.使用IF…IN叙述实例:SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.SELECT*FROMSPFLI.IFSPFLI-CONNIDINAIRLINE.WRITE:/SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.ENDIF.ENDSELECT.屏幕输入指令配合SELECT命令ABAP基础产生空白列语法:SELECTION-SCREENSKIP[<n>]产生底线语法:SELECTION-SCREENULINE/<pos>(length)印出备注说明语法:SELECTION-SCREENCOMMENT/<pos>(length)<name>同一行中输入数个数据项语法:SELECTION-SCREENBEGINOFLINE.……SELECTION-SCREENENDOFLINE.屏幕输入指令SELECTION-SCREENABAP基础语法:SELECTION-SCREENBEGINOFBLOCK<name>WITHFRAMETITLE<TEXT-001>.……SELECTION-SCREENENDOFBLOCK<name>.实例:SELECTION-SCREENBEGINOFBLOCKB1WITHFRAME.SELECTION-SCREENSKIP1.*空一行PARAMETERS:P_WERKSLIKEEBAN-WERKSOBLIGATORY.SELECT-OPTIONS:S_MATNRFOREKPO-MATNR,"物料号码S_MATKLFOREBAN-MATKL."物料组SELECTION-SCREENENDOFBLOCKB1.屏幕输入指令绘出BLOCKPANELABAP基础ABAP/4用来在屏幕上输出数据的指令是Write指令语法:Write资料项资料项可以是常数或变量。指定屏幕位置显示语法:WriteAT[/][<pos>][(<len>)]资料项/:先往下一列pos:屏幕X轴坐标(len):显示资料的长度屏幕输出指令Write指令ABAP基础语法:WRITE资料项<显示格式参数>显示格式参数:LEFT-JUSTIFIED资料靠左显示CENTERED资料靠中间显示RIGHT-JUSTIFIED资料靠右显示UNDER<g>在资料项<g>的X轴开始坐标显示NO-GAP紧接着显示,不留空格USINGEDITMASK<m>使用内嵌字符显示,如11:20:30USINGNOEDITMASK不使用内嵌字符NO-ZERO数字前面0的部分不显示NO-SIGN不显示正负号DECIMALS<d>显示d位小数字数EXPONENT<e>F(浮点数)的科学计数法表示ROUND<r>四舍五入至小数位数下r位CURRENCY<c>币别显示DD/MM/YY日期显示格式……屏幕输出指令指定显示格式ABAP基础产生n个空白列语法:SKIP[<n>]跳至指定列坐标将坐标跳至指定的Y轴列坐标语法:SKIPTOLINE[<n>]屏幕输出指令产生空白列ABAP基础可以显示R/3系统所提供的符号或图标语法:WRITE<symbol-name>ASSYMBOLWRITE<icon-name>ASICON实例:INCLUDE<SYMBOL>.INCLUDE<ICON>.WRITE:/‘PhoneSymbol:’,SYM_PHONEASSYMBOL.WRITE:/‘AlarmIcon:’,ICON_ALARMASICON."名称可以在ICON中找到屏幕输出指令显示图示ABAP基础语法:WRITE<资料项>ASCHECKBOX.实例:DATA:FLAG1VALUE''.FLAG2VALUE'X'.WRITE:/'CHECKFLAG1:',FLAG1ASCHECKBOX.WRITE:/'CHECKFLAG2:',FLAG2ASCHECKBOX.屏幕输出指令显示CHECKBOX谢谢!Q&A结语ABAP基础用自定义的表类型来定义内表实例:TYPES:BEGINOFLINE,*定义数组类型COL1TYPEI,COL2TYPEI,ENDOFLINE.*TYPES:ITABTTYPELINEOCCURS10.老式写法TYPES:ITABT TYPE STANDARD TABLE  OF LINE .*定义表类型DATA:MYITABTYPEITABTWITHHEADERLINE.*定义带工作区的内表,工作区名称与内表名称相同:MYITAB用DATA直接定义内表实例:OCCURS表示内表,如果没有OCCURS表示是数组(0表示不限制要申请行数)DATA:BEGINOFMYITABOCCURS0,”老式写法*自带工作区的内表,工作区名称与内表名称相同:MYITABCOL1TYPEI,COL2TYPEI,ENDOFMYITAB.内表定义内表ABAP基础把内表工作区内容追加到内表中.把相同结构数组变量内容追加到内表中(也可以把LINE看作ITAB不同名的工作区)语法:APPEND<wa>TO<itab>将一个内表中数据追加到另一个内表中语法:APPENDLINESOF<itab1>[FROM<n1>][TO<n2>]TO<itab2>即将<itab1>中自<n1>至<n2>范围的数据加入到<itab2>中。内表APPEND指令ABAP基础使用COLLECT指令向内表添加数据时将有相同standardkey(非数值字段)的数据的数值字段进行汇总。语法:COLLECT[<wa>]INTO<itab>实例:DATA:BEGINOFITABOCCURS3,COL1(3)TYPEC,COL2TYPEI,ENDOFITAB.ITAB-COL1=‘ABC’.ITAB–COL2=10.COLLECTITAB.ITAB-COL1=‘XYZ’.ITAB-COL2=20.COLLECTITAB.ITAB-COL1=‘ABC’.ITAB-COL2=30.COLLECTITAB.“汇总COL2至COL1=ABC的元素上LOOPATITAB.WRITE:/ITAB-COL1,ITAB-COL2.ENDLOOP.执行结果:ABC40XYZ20内表COLLECT指令ABAP基础InsertLine在指定的内表位置之前插入新数据语法:INSERT[<wa>INTO][INITIALLINEINTO]<itab>[INDEX<idx>]插入另一InternalTable元素语法:INSERTLINESOF<itab1>[FROM<n1>TO<n2>]INTO<itab2>INDEX<idx>将<itab1>中自<n1>至<n2>的范围的数据插入至<itab2>中,位置在<idx>之前。内表INSERT指令ABAP基础循环读取InternalTable元素数据语法:LOOPAT<itab>[INTO<wa>][FROM<n1>TO<n2>][WHERE<condition>]<loopexpression>ENDLOOP.根据设定的范围选取数据,读完后自动移往下一笔。读取InternalTable指定位置的元素语法:READTABLE<itab>[INTO<wa>]INDEX<idx>自指定位置<idx>读取元素数据。根据字段内容寻找语法:READTABLE<itab>INTO<wa>COMPARING<field>.内表读取内表数据ABAP基础更新数据内容语法:MODIFY<itab>[FROM<wa>][INDEX<idx>][TRANSPORTING<f1>…<f2>][WHERE<condition>]TRANSPORTING<f1>..<f2>:指定更新的字段名称。DeleteLines删除InternalTable的数据语法:DELETE<itab>INDEX<idx>加上删除条件:DELETE<itab>[FROM<n1>TO<n2>][WHERE<condition>]内表修改内表数据ABAP基础内表数据排序语法:SORT<itab>[<order>][BY<f1>]….[<order>]:可分成递减(DESCENDING)和递增(ASCENDING)。<f1>:为指定的字段。计算数值字段总和语法:SUMSUM只能在LOOP中使用,计算所得总和存在工作区中。REFRESH<itab>使用在有HEADERLINE的InternalTable中,清除所有元素CLEAR<itab>[]使用在没有HEADERLINE的InternalTable中,清除所有元素FREE<itab>释放(Release)InternalTable所占的内存空间,用在REFRESH和CLEAR指令之后内表内表操作谢谢!Q&A结语ABAP基础自数据库读取记录语法:SELECT[DISTINCT]<result>FROM<source>[INTO<target>][WHERE<condition>][GROUPBY<fields>][ORDERBY<sortorder>]加上[DISTINCT]会自动去除重复的记录。以循环方式读取所有记录(这种方法效率不高,不建议使用)语法:SELECT*……ENDSELECT.读取单笔记录语法:SELECTSINGLE*FROM…WHERE….将读取的记录存放至指定的工作区语法:SELECT…INTO<wa>WHERE…将读取的数据写入内表中m语法:SELECT…INTOTABLE<itab>WHERE…语法:SELECT…INTOTABLE<itab>PACKAGESIZE<n>SELECTUPTO<n>ROWS…INTOTABLE<itab>一次读取<n>笔记录至<itab>中数据库指令SELECT指令ABAP基础条件叙述语法:WHERE<condition>(1).BETWEEN<g1>AND<g2>在<g1>至<g2>之间的条件范围(2).LIKE<g>表示条件包含的字符串<1>_:表示一个字符<2>%:表示一个字符串(3).IN(<g1>….<g2>)包含在<g1>…<g2>的条件ORDERBY叙述根据关键字排序(1)...ORDERBYPRIMARYKEY.根据指定的字段顺序排序(2)…ORDERBY<f1>[DESCENDING]<f2>[DESCENDING]/不建议用ORDER语句句关联多个表查询数据语法:SELECTA~AF1A~AF2B~BF1B~BF2C~CF1C~CF2INTOCORRESPONDINGFIELDSOFTABLEITAB_NAME(INTOCORRESPONDINGFIELDSOFTABLEITAB_NAME表示按匹配数据字段保存进去)FROMTABLE1ASAINNERJOINTABLE2ASBONA~AF1=B~BF1ANDA~AF2=B~BF2INNERJOINTABLE3数据库指令SELECT指令ABAP基础自工作区加入一笔记录至数据库语法:INSERTINTO<database>VALUES<wa>自内表加入一笔记录至数据库语法:INSERT<database>FROMTABLE<itab>[ACCEPTINGDUPLICATEKEY]将<itab>中非NULL的数据加入<database>中。[ACCEPTINGDUPLICATEKEY]检查是否有关键字重复的记录,若有则此关键字重复的记录不插入。数据库指令INSERT指令ABAP基础使用PrimaryKey更新已存在的记录内容语法:UPDATE<database>FROM<wa>使用条件式更新已存在的记录内容语法:UPDATE<database>SET<f1>=<values>…WHERE<condition>根据条件式更新符合条件式的记录数据库指令UPDATE指令ABAP基础根据PrimaryKey寻找数据文件中符合的记录,若找到则更新,若找不到则新增记录语法:MODIFY<database>FROM<wa>Example:WA-NO='34051920'.WA-COMPANY='DELTA'.MODIFYSPFLIFROMWA.数据库指令MODIFY指令ABAP基础删除数据文件的记录使用PrimaryKey语法:DELETE<database>FROM<wa>使用条件式语法:DELETEFROM<database>WHERE<condition>根据条件式删除符合条件式的记录数据库指令DELETE指令ABAP基础要确定数据成功写入数据库,可使用COMMITWORK指令,如:COMMITWORK.相反的,如果反悔要复原,可使用ROLLBACKWORK,可复原在上个COMMITWORK指令之后更新的数据,如:ROLLBACKWORK.数据库指令COMMITWORK与ROLLBACKWORK谢谢!Q&A结语ABAP基础=或EQ等于<>或><或NE不等于<或LT小于<=或LE小于等于>或GT大于>=或GE大于等于AND且OR或NOT非逻辑控制指令比较符号ABAP基础IF叙述语法:IF<Condition1>.<Statement1>ELSEIF<Condition2>.<Statement2>ELSEIF<Condition3>.<Stetement3>….ELSE.<elseStatement>ENDIF.(1).在每个判断叙述之后要加上. 。(2).在巢状循环之中无法使用ELSE叙述,ELSE叙述属IF叙述CASE叙述语法:CASE<变数f>.WHEN<Value1>.<Statement1>WHEN<Value2>.<Statement2>….WHENOTHERS.<othersStatement>ENDCASE.逻辑控制指令条件叙述ABAP基础计次循环语法:DO...VARYINGdobjFROMdobj1NEXTdobj2[RANGErange].  [statement_block]ENDDO.条件循环语法:WHILE<Condition>.<StatementBlock>ENDWHILE逻辑控制指令循环叙述ABAP基础CONTINUE:跳至循环的下一次CHECK<Condition>CHECK之后条件成立才继续往下执行循环,否则调到下一次循环中。EXIT:结束循环叙述无穷循环。DO.<StatementBlock>ENDDO.无穷循环必须配合EXIT叙述来执行。逻辑控制指令循环控制叙述ABAP基础在ABAP/4中可以使用Include加载另一个程序,通常用于共享数据项的定义,与C中Includeheaderfile的做法很类似。语法:INCLUDE<includeprogramfile>Global变量定义应用。语法:DATA:BEGINOFCOMMONPART[<name>],<data定义>ENDOFCOMMONPART[<name>].此常使用在Include的档案中程序模块简介IncludeProgramABAP基础在ABAP/4中子程序的调用可分成内部调用和外部调用,前者编写在程序中,后者存在另一程序中,通常为专存放子程序的公用程序集,可提供结不同的子程序调用。Subroutine的定义FORM<subr>.<subroutinestatementblock>ENDFORM.程序模块简介SubroutineProcedureABAP基础CallByReference:(引用调用传参数时将数据的存放地址传至参数中,也就是子程序中的参数变量与外部实际变量共享地址内的值,又称为CallByAddress,若在子程序中地址中的值改变了,外部实际变量的值也会跟着改变。语法:FORM<subr>[USING<f1><f2>…][CHANGING<f1>…]PERFORM<subr>[USING<f1><f2>…][CHANGING<f1>…]Using之后接在子程序中不会改变的变量,CHANGING接会改变值的变量但实际上USING之后的参数在子程序中也可将值改变。CallByValue(值调用传参数时将数据的值复制一份至另一地址中,所以在子程序中参数变量值改变,并不会影响外部实际变数的值.语法:FORM<subr>USINGVALUE(<f1>…)CHANGING…使用VALUE(<f1>)表示只使用<f1>的值但不改变<f1>的值PERFORM<subr>USING<f1>CallByValueandReturnResult传入参数值的方式同CallByValue相同,但在子程序结束执行时会将传入的参数值复制一份传回给外部实际变数。语法:FORM…CHANGINGVALUE(<f1>)PERFORM…CHANGING…<f1>程序模块简介参数值的传递ABAP基础CHECK<Condition>CHECK之后条件成立才继续向下执行子程序EXIT强迫结束子程序执行,返回上一层程序叙述。程序模块简介Subroutine的控制ABAP基础INITIALIZATION在选择屏幕出现之前执行,在这里可以给选择屏幕中的字段和备注中的字段赋值.ATSELECTION-SCREEN在这个事件里响应的是屏幕上选择条件中的事件.START-OF-SELECTION报表程序必须执行的事件,在进入第二屏幕之前触发。END-OF-SELECTION选择屏幕结束处理。事件介绍谢谢!Q&A结语ALV什么是ALV在R/34.6C之前ALV列表全称为ABAPListViewer,在其后的版本中,已经更名为SAPListViewer。简单来说就是一种SAP列表输出的方式。在SAP系统中,ALV是以表格控件的形式出现在用户屏幕中实现的,具体还有两种情况:①作为整个屏幕输出,是唯一的屏幕元素。②作为屏幕元素之一与其他屏幕元素结合出现。ALV的特点ALV列表是SAP系统中新的列表,可以在ABAP程序或者SAPQuery等报表中输出,除了传统列表输出时可以显示数据和少量的交互功能(退出,下翻页等)之外,还提供了大量的其他交互功能,包括排序,汇总等。相对于SAP的传统列表输出形式,ALV列表有以下优点:①ALV是独立的二进制软件元素。②安装在系统的前台(即SAPGUI中),将列表处理功能从应用服务器移至显示层,因而提高了相应速度。③可以通过ABAPObjects中的系统全局类实现。ALV列表概述ALV目前为止,最常用的ALV有以下两种类型:LIST型与GRID型LIST型ALV列表 LIST型的ALV列表与传统WRITE输出的列表样式更为相近,只是除标准菜单栏之外,在工具栏上还有许多功能按钮。GRID型ALV列表 GRID型ALV列表比较类似EXCEL的样子,与LIST一致的是它也有很多功能按钮。两种简单的ALV列表类型ALVALV列表可以比较自由的调整栏位的宽度,直接通过拖拽来调整栏位的顺序,通过使用Optimumwidth功能自动优化栏位宽度为最优宽度这些基本功能.ALV列表最常用的功能显示明细排序筛选列汇总列打印列表使用EXCEL打开使用WORD打开下载至文件使用SAP邮寄图表和ABC表改变布局最终用户文档ALVLIST列表型显示函数 REUSE_ALV_LIST_DISPLAY:输出LIST型列表 REUSE_ALV_POPUP_TO_SELECT:在弹出的对话框中显示LIST列表GRID列表型显示函数 REUSE_ALV_GRID_DISPLAY:输出GRID型列表ALV常用函数介绍ALV调用ALV的函数,除了输出使用的内表是之外,还有两个部分是必需确认的列栏位属性和布局属性。顾名思义列栏位属性就是设置输出中列的位置,列的参照,列的标题等信息;同样布局属性是设置输出ALV列表的整体布局的属性。之前的示例中,没有调用列栏位属性是因为输出表是某个系统结构表,直接输入系统结构名函数可参照此结构创建列属性,从而输出。没有调用布局属性时,系统按默认布局输出,不做任何调整。针对这两个属性对应的输入,下面分别对IT_FIELDCAT与IT_LAYOUT的参数值做简单介绍,学员可据此进行练习。IT_FIELDCAT中常用参数,函数中,IT_FIELDCAT参照SLIS_T_FIELDCAT_ALV,IT_LAYOUT常用参数,函数中IT_LAYOUT参照  SLIS_LAYOUT_ALV,ALV常用参数ALVALV列表包含一些预定义的功能,之前讲过的筛选,汇总等都是ALV列表设置好的标准功能。ALV列表如果需要打印表头是否能处理呢?如果需要在标准的ALV中增加功能是否能处理呢?答案当然是可以的。ALV输出标题函数,REUSE_ALV_COMMENTARY_WRITE:是在ALV中输出表头的函数,应在ALV的TOP-OP-PAGE事件中调用。ALV事件谢谢!Q&A结语FunctionFunction中文翻译为功能模块是存储在中央库内的特殊外部子程序.R/3系统提供大量预定义的功能模块,可以从ABAP/4程序中进行调用,而且可以创建自己的功能模块。每个功能模块都有其独立的功能,调用功能模块时通过输入输出参数进行数据的传递实现其本身的功能.Function的基本组件Function输入参数:用于将数据从调用程序传递到功能模块;输出参数:用于将数据从功能模块传递回调用程序;更改参数:既是输入参数又是输出参数,更改传递给功能模块的值,并将其返回给调用程序;表格参数:是通过内表进行参数传递,处理方式与更改参数一样;例外:用于处理功能模块中可能发生错误的情况,调用程序检查是否发生了错误,然后采取相应的措施.Function简介Function使用语句: CALLFUNCTION<Funcitonname> [EXPORTINGf1=a1....fn=an] [IMPORTINGf1=a1....fn=an] [CHANGINGf1=a1....fn=an] [TABLESf1=a1....fn=an] [EXCEPTIONSe1=r1....en=rn[OTHERS=ro]].Function的调用使用TCODE:SE37 Function的创建创建实例:创建一个取物料描述的function。输入物料代码,输出物料描述,最后写report调用。需要支持批量查询。PS:物料表MARA,物料描述表MAKT。 Function的创建谢谢!Q&A结语SMARTFORM当需要从系统中打印出一张单据的时候,需要用到form这种开发工具。例如:系统中针对某一笔交易开了发票,那客户付款后也应该收到一张收款证明,写明购买的商品信息以及价格信息,购买日期等,这样双方都对这笔交易的历史保留了一定的依据,那这张给客户的纸制发票就是取了系统中的交易数据打印出来的发票.Smartform简介SMARTFORMSmartform界面SMARTFORM制作Smartform时是在form编辑器里面设置,我们在编辑器里用到的工具分为三部分: 最左边是导航树:导航树里面包含了smartform时用到的所有元素,包括页,窗口,文本等;中间是主屏幕,在这个屏幕里,被选中的元素都会有对应的几个页面去设置元素的属性,例如可以设置窗口的宽度/高度等; 最右边是form画板,在这里一般都会设置页面的布局,如窗口的位置大小等,可以通过单击工具栏的表格绘制器按钮,设置form画板的显示/不显示状态;  如果需要设置某个元素的属性,可以在左边的导航树中选中该元素双击,中间的主屏幕中会出现该元素的属性设置页面; Form编辑器的组成SMARTFORMSmartform中所有的元素都在左边的导航树中以节点的形式表示;子节点继承上层节点的属性,例如格式.如果一个节点没有被执行,那么它下面所有的子节点将都不被执行.但是子节点是独立的,它在父节点执行完之后开始执行;如果一个节点包含有子节点,可以在左边导航树单击三角形符号展开它的结构看到子节点;在最上层的节点中,有两个默认存在的节点:全局设置;页和窗口. 导航树SMARTFORM菜单:工具-打印表格-SMRTFORMS-智能表格;(T-CODE:SMARTFORMS)双击进入表格绘制器输入事务代码:SMARTFORMS,点执行按钮进入表格绘制器;输入一个名称,此名称必须以Z/Y开头,点创建按钮进入开发界面;输入一个短描述;表格属性-输出选项:这里设置全局的表格属性,例如纸张大小,默认页面的行间距,字间距等;表格接口是用来定义输入输出参数的;系统会自动创建一个PAGE,为这个PAGE修改容易识别的短描述;一般属性中设置PAGE的属性;在PAGE下面,系统自动创建了一个MAINWINDOW;如需创建其他窗口,可将光标定位在PAGE上,右键-创建-窗口. 创建SMARTFORMS步骤SMARTFORM在窗口的输出选项中可以设置窗口的一些属性,如边距,高度,宽度等;单击工具栏中的按钮’表格绘制器’,可以在弹出的窗口中,使用鼠标拖动窗口,设置窗口布局,再次单击按钮’表格绘制器’,可将绘制窗口暂时关闭,进行其他设置;在窗口下面创建一个模板:选中窗口,右键-创建-模板;为模板输入一个短描述;单击编辑按钮,可以为行绘制列,需要几列就绘制几列;要添加行,点’细节’按钮,插入一行,这里也可以设置列宽;模板下面创建一个文本,用来输出内容;文本的输出选项中,可以设置此文本的内容是在表格的第几行、第几列中输出文本的一般属性中可以输入要输入的内容,如果是变量,可以在工具栏选择按钮,在左下角弹出的对话框中有所有的数据来源,选择所要输出的变量名,拖到文本中的相应位置(变量输出时要放在两个&符号之间).SMARTFORMS操作SMARTFORM选中样式按钮输入一个以Z/Y开头的程序名称,单击创建按钮;进入Style编辑器,选中段落格式-右键-创建节点;在弹出的对话框中输入段落格式名,如P1,点确定;给段落格式输入一个短描述,然后就可以设置段落格式的属性了;在表头数据标准设置选项页的标准设置选择一个已设置好的段落格式作为标准段落格式,该格式在SMARTFORMS中是被默认引用的.即SMARTFORMS的表格属性中选择该样式,则文本中的字体默认使用样式中的标准格式.设置好之后保存并激活,此格式便可在Form中被调用;字符格式的创建方法同段落格式.SMARTFORMS样式SMARTFORM这个Function主要是用来取你要调用的Smartform对应的FunctionModule的名字然后赋值给FM_NAME,因为SMARTFORM对应的FunctionModule名字很长,并且难以记忆;可以通过Callfunction‘SSF_FUNCTION_MODULE_NAME’获取.获取完后同样以CallFunction的方式调用已经设计好的Smartform.Smartforms同FunctionModule一样有输入参数,输出参数,更改参数,表格参数,异常等支持同其它程序的交互.调用SMARTFORMS谢谢!Q&A结语Enhancement增强(enhancement)的概念其实很广,SAP标准系统之上的所有二次开发,我们都可以理解为增强,做增强的目的就是标准的sap正常的业务系统不能满足实际需求,所以我们在标准的系统基础进行增加不同的功能来达到不同企业的要求,换句话说我们今天开发过程中所有的ADD-ON都可以说是增强开发。但作为开发人员所说的增强主要是标准系统事先预留好的接口,根据不同业务需求,进行开发,我们称为增强,又叫出口。Enhancement介绍Enhancement出口就是一段程序执行到最后必经的一段程序。正常的业务系统不能满足实际需求,这时可以在出口中增加一些功能,来达到要求,这也就是为什么它还叫增强。在Sap中出口就是标准程序最后要调用的一个函数或者功能模块,这个函数或功能模块的输入已经由Sap定义好。SAP目前有四种增强方式1、UserExit;2、Ehancementexits;3、BADI;4、EnhancementImplementation。Exits简介EnhancementUserExit(基于源代码的增强)是sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码,它们在发布的时候都是空的,集中在一些文件名倒数第二个字符为Z的包含程序中,由于在标准程序中,所以所有程序的全局数据都可以使用,但同时系统升级时会被新版本覆盖;这种源代码增强和屏幕增强的说明可以从事务码spro后台配置中相关模块的路径里面找到;一般是以UserExit_打头的子模块。找到所要增强的的程序,查找UserExit关键字。UserExitEnhancementEhancementexits(基于函数模块的增强),用SMOD和CMOD维护;在SAP发布的版本中,使用Callcustomer-function‘xxx’调用函数模块的,所以你可以通过在程序中收cusomer-function来查找第二代增强,第二代增强函数名构成:Exit_程序名_’xxx(3digitalnumber)’,这样你就可以找到对应的增强函数模块了,它们在发布的时候只有一句代码include‘xxxxxxx’,修改时无需像第一代增强一样需要ACCESSkey,直接双击回车就可以了,但同时这种增强以及后面几代的增强都不能像第一代一样随便使用程序的全局数据,只能使用接口中传递进来的参数。第二代增强中主要有3类:1)E.Ehancementexits:这些出口Exit_打头,你可以到SE37中查看,也可以在数据字典中TFDIR(函数表)中查询Exit_打头的函数。2)C.GUIcodes,(GUI增强)3)S.Subscreens(屏幕增强)。4)T.includestructure增强EhancementexitsEnhancementBADI(基于面向对象概念的增强BADI(businessadd-in)),源代码发布以接口的方式,通过接口的方法调用来实现使用的。用户增强实际上是实现一个或多个基于这个接口的实现类,因为接口类实际上是一个抽象类,所以对同一个增强会出现不同的源代码,这些不同的源代码是通过过滤器(adapter)来区别用于不同的业务场景的。这种增强是用SE18SE19来实现的。BADIEnhancementEnhancementImplementation是BADI的加强switchFramework当sap进入newweaver7.0以后推出的新增强体系,将BADI进行了改进,叫新BADI了。还新增EnhancementSpot和EnhancementSection以及隐式增强点的概念,基本可以在面向对象的程序里实现处处皆可增强的最高境界。EnhancementImplementation谢谢!Q&A结语BDCBDCProgram(BatchDataCommunicationProgram)是ABAP/4用来加载数据异动SAP数据库的方法,先将要输入的数据存在BDCTable中,使用CALLTRANSACTION指令呼叫R/3输入画面,将输入所需数据项自BDCTable中依序放入,最后送出按键句柄,如/11表按下<F11>存盘,此方法用在自不同系统转入R/3系统之数据转换,(DataMigrarion),或者也可使用在Drill-Down报表的撰写方式中BDC简介BDCBDC操作TCODE:SHDB
/
本文档为【SAPABAP实用培训教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索