ABAP开发_第1页
ABAP开发_第2页
ABAP开发_第3页
ABAP开发_第4页
ABAP开发_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SAP ECC6.0- ABAP2018年2月5日,一个简单的例子ABAP基础内表的应用select数据选取数据库表查询输入输出销售订单report,最简单的Report(1),一个经典的入门例子,通常在程序执行前,需要做以下三件事:1、对所写的代码进行语法检查,避免明显的语法错误。2、保存程序;在程序激活过程中,SAP也会自动对程序进行保存3、激活程序;在SAP中没有激活的程序是不能进行最终使用的。上例最终运行结果如下:,最简单的Report(2),report 在ABAP程序中,以report或者program指令开头的程序才能直接运行;其他指令的程序均不可以直接运行。,Report程序里,程序的属性类型那需选择“可执行程序”,一个简单的例子ABAP基础内表的应用select数据选取数据库表查询输入输出销售订单report,基本数据类型,在ABAP中,基本的数据类型有八种字符型:C(文本字符)N(数字文本字符)T(时间类型)D(日期类型)数字类型:I(整数类型)F(浮点类型)P(压缩数)X(十六进制)另,ABAP还提供对字符串的支持,数据类型为string。,基本数据类型列表,定义变量(1),定义字段 DATA COL TYPE C.定义行(工作区) DATA:BEGIN OF WA, COL TYPE C, END OF WA.定义内表 DATA:BEGIN OF ITAB OCCURS 0, COL TYPE C, END OF ITAB.,定义变量(2),ABAP中对变量的定义有两种方式:DATA根据内置类型声明基本类型数据对象。TYPES根据内置类型自定义基本数据类型。,定义变量(3),TYPESnum TYPEi.DATA num1TYPEnum.,算术运算,ABAP中,基本的算术运算有这么几种。(+、-、*、/、DIV、MOD、*) 前四种运算意义明确,不再做过多累述。 现在,来看看后三种运算。 DIV整除除法时,如果除不尽,只取商的整数部分。 MOD取余除法时,如果除不尽,只取商的余数部分。 *乘方*是做乘法运算;*则是乘方(即幂运算)。 例: 6 DIV 4 = 1; 6 MOD 4 = 2. 1 * 2 = 2; 1 * 2 = 1.,字符数据处理(1),1) concatenate 将两个字符串合并成一个字符串。2) split 将一个字符串拆分成多个字符串。3) search 在字符内查找指定字符串4) replace 用其他字符串在字符内替换指定字符串。5) strlen 用于确定字符实际长度。6) condense 用于清除字符内多余的空格。,PS:字符串string也是字符的一种。和其他字符类型的区别在于,string在定义时,不需要指定字符长度,其字符长度会随着存放数据长度的增加自动扩展。,字符数据处理(2),结构语句,分支控制IF ELSEIFELSEENDIFCASE fWHEN f1WHEN f2ENDCASE循环控制DO n TIMESENDDOWHILE ENDWHILE,一个简单的例子ABAP基础内表的应用select数据选取数据库表查询输入输出销售订单report,内表(1),除了数据库表格,还可以创建仅在程序运行时间内存在的内表。ABAP/4提供了针对内表的不同操作。例如,可以搜索、附加、插入或删除行。内表中的行数并不固定。根据需求,系统可实时增加内表的大小。例如,如果想将某个数据库表格读入内表,不必事先知道数据库表格的大小。,内表(2),内表的另一种用处是根据程序需要重新组织数据库表格的内容。例如,可以从一个或多个大客户表格特定的数据中将与创建电话清单有关的数据读入内表中。然后可在程序运行期间直接访问该清单,而不用每次调用时都执行耗时的数据库查询。,内表的操作:插入,APPEND DATA:BEGIN OF ITAB OCCURS 0, COL1 TYPE I, COL2 TYPE I, END OF ITAB. ITAB-COL1 = 1. ITAB-COL2 = 2. APPEND ITAB.INSERTDATA LINE LIKE ITAB.LINE-COL1 = 3. LINE-COL2 = 4.INSERT LINE INTO ITAB INDEX 1.,数据只能附于内表最后一行,数据可以插入内表任意位置,内表的操作:修改,MODIFYLOOP AT ITAB WHERE COL1 = 1. ITAB-COL1 = 5. MODIFY ITAB.ENDLOOP.,MODIFY前,MODIFY后,内表的操作:循环读取,LOOP使用LOOP语句逐行读取内表。要将内表逐行读入工作区域,可以使用LOOP语句编一个循环。语法如下所示:LOOP AT INTO FROM TO WHERE . .ENDLOOP.,内表的操作:删除,DELETEDELETEitabWHEREcol1=1.,删除前,删除后,内表的操作:COLLECT,COLLECT 聚集附加 操作时,系统将检查工作区中的标准关键字段值与已存在于内表中的数据行是否相(所有非数字字段)。如果不同,COLLECT语句的作用与APPEND语句相似,将新行附加至内表末尾;如果存在相同表关键字值的行,COLLECT语句不附加新行,而是将工作区中数字字段的内容累加到已有数据行中。,CARR CONN UMSATZ,CARR CONN UMSATZ,APPEND TO ,COLLECT TO ,9.6,内表的操作:SUM,SUM该语句只能在LOOP/ENDLOOP块内部使用。如果在AT/ENDAT块中使用SUM,则系统计算当前行组内部所有行的数字字段之和并将其写入目标区域中相应的字段;如果在AT/ENDAT块之外使用SUM语句,则系统计算所有循环过程中(已循环和将要循环的)内表行的数字字段之和并将其写入工作区域中相应的字段。所以,在AT/ENDAT块之外使用SUM语句一般是无意义的。,内表的操作:AT,AT level ENDAT. 该语句只能在LOOP语句内使用,其中行条件level有下列选项: FIRST 当前循环为内表的第一行,即当第一次循环操作时,系统会执行控制块语句 LAST 当循环为内表最后一行。 NEW f 行组的开头,行组指的是字段f和f前面(即左边)的全部字段,如果行组中的内容不同于上一行,执行语句块中的内容。 END OF f 行组的结尾,如果下一行行组中的任何字段内容不同于上一行,执行语句块中的内容。,一个简单的例子ABAP基础内表的应用select数据选取数据库表查询输入输出销售订单report,Select语句,SELECTSELECT result FROM source INTO|APPENDING target FOR ALL ENTRIES IN itab WHERE sql_cond GROUP BY group HAVING group_cond ORDER BY sort_key.,数据选取(1),SELECTcarridconnidseatsoccFROMsflight INTOCORRESPONDINGFIELDSOFTABLEseatsWHEREcarridBETWEENAAANDDLGROUPBYconnidcarridseatsoccHAVINGcarridBETWEENAAANDDLORDERBYseatsocc.,数据选取字段,数据库表,内表或工作区,数据选取范围及输出格式,数据选取(2),SELECTcarridconnidseatsoccFROMsflight INTOTABLEseats,SELECTcarridconnidseatsoccFROMsflight INTOCORRESPONDINGFIELDSOFTABLEseats,数据库表,内表,select single的使用,TABLE,select single 选择第一个满足条件的值select single col2 into WA from TABLE where col1 = A.结果:COL2 值为 1。,表关联,JOIN 如果要选取相关联的两个或以上的表内的数据,则需要使用到JOIN。 SELECTaaufnrbdfrei INTOCORRESPONDINGFIELDSOFTABLEitab FROMafkoASa JOINafpoASb ONaaufnr=baufnr.,selectendselect,SELECTcarridconnidseatsoccFROMsflightINTOCORRESPONDINGFIELDSOFTABLEseatsWHEREcarridBETWEENAAANDDLGROUPBYconnidcarridseatsoccHAVINGcarridBETWEENAAANDDLORDERBYseatsocc.,SELECTcarridconnidseatsocc FROMsflight INTOCORRESPONDINGFIELDSOFseats WHEREcarridBETWEENAAANDDL GROUPBYconnidcarridseatsocc HAVINGcarridBETWEENAAANDDL ORDERBYseatsocc. APPENDseats.ENDSELECT.,一个简单的例子ABAP基础内表的应用select数据选取数据库表查询输入输出销售订单report,字段查询(转账表)1,事务代码:QS24显示主检验特性场景:需要用到字段主检验特性,却不知道主检验特性数据的存放处。,字段查询(转账表)2,在主检验特性栏位按下F1,字段查询(转账表)3,QPMK是转账表,技术信息里表名和字段名称组合起来就是主文件检验特性的存储位置。,字段查询(转账表)4,字段查询(结构)1,这是通过QA33查询到的一笔检验批结果记录。假设,现在需要字段“检验的”的数据。,字段查询(结构)2,虽然,在技术信息的表名上写着QAQEE,实际上,QAQEE是一个结构。,字段查询(结构)3,如何确定结构中的字段存储的表? 可以通过该字段的数据元素引用处来进行查询。,字段查询(结构)4,通过所用处清单来查找出现过数据元素QANZWERTG4的全部转账表。,字段查询(结构)5,通过所用处清单,还可以查找数据元素在更广泛的范围内的应用。,字段查询(结构)6,查找结果,数据元素QANZWERTG4在两个表内有被引用。,字段查询(结构)7,可以看到QAMR是转账表,一个简单的例子ABAP基础内表的应用select数据选取数据库表查询输入输出销售订单report,输出控制:WRITE,WRITE语句在屏幕上输出数据的基本ABAP语句是WRITE。在屏幕上,输出通常是左对齐的。如果使用几个WRITE语句,输出字段就一个接一个显示,输出之间由列分开(如一个空格)。如果当前行没有足够空间,则开始新行。,对齐格式(1),输出屏幕上的数据字段格式,依赖数据类型。预定义数据类型的输出格式数据类型输出长度定位C字段长度左对齐D8左对齐F22右对齐I11右对齐N字段长度左对齐P2*字段长度(1)右对齐T6左对齐X2*字段长度左对齐数字数据类型F、I和P是右对齐的,左边用空格填充。如果有足够的空间,也输出千位分隔符。如果类型P字段包含小数位,则默认输出长度增加一位。对数据类型D,日期的内部格式与输出格式不同。当输出数据使用WRITE语句时,系统自动以用户主记录中指定的格式(例如,DD/MM/YYYY),输出数据类型D。,对齐格式(2),REPORT SAPMTEST.DATA NUMBER TYPE P VALUE -1234567.89 DECIMALS 2.WRITE: Number, NUMBER, is packed.输出如下:Number 1,234,567.89- is packed 字段NUMBER总长为13,即,9位数字(包括小数点)、前导负号和作为分隔符的两个逗号。因为类型P字段的字段长度为8,所以NUMBER字段的输出长度为2*8+1=17。剩余的位置用四个空格填充。这意味着,在文字Number和数字自身之间有五个空格。,定位输出:列,在屏幕上定位WRITE输出如下所示,通过制定字段名称前面的格式规范,可以在屏幕上定位WRITE语句的输出:语法WRITE AT /() .此处斜线/表示新的一行是最长为三位数字的数字或变量,表示在屏幕上的位置是最长为三位数字的数字或变量,表示输出长度如果格式规范只包含直接值(即,不是变量),可以忽略关键字AT,定位输出:行,SKIP语法SKIP n | TO LINE line . SKIP N 以当前行为基,向下跳转N行。若N无指定,则默认值为1。SKIP TO LINE line 跳转至指定行。,格式化选项,对 WRITE 语句,可以 使用不同的 格式化选项 。语法WRITE . .所有数据类 型的格式化 选项选项用途LEFT-JUSTIFIED输 出左对齐。CENTERED输 出居中。RIGHT-JUSTIFIED输 出右对齐。UNDER 输出 直接开始于 字段 下。NO-GAP忽 略字段 后的空格。USING EDIT MASK 指定 格式模板 。USING NO EDIT MASK撤 消对 ABAP/4 词典中指定 的格式模板 的激活。NO-ZERO如 果字段仅包 含零,则用 空格代替它 们。对类型 C 和 N 字段,将自 动代替前导 零。COLOR 输出字段填充颜色。,ABAP屏幕输出,DATA: G(5) VALUE Hello, F(5) VALUE Dolly. WRITE: G, F.Hello Dolly WRITE: /10 G, Hello / F UNDER G. DollyWRITE: / G NO-GAP, F.HelloDollyDATA TIME TYPE T VALUE 154633.WRITE: TIME,154633/(8) TIME USING EDIT MASK _:_:_.15:46:33WRITE: 000123,000123 / 000123 NO-ZERO.123DATA FLOAT TYPE F VALUE 123456789.0.WRITE FLOAT EXPONENT 3.1.23E+08DATA PACK TYPE P VALUE 123.456 DECIMALS 3.WRITE PACK DECIMALS 2.123.46 WRITE: / PACK ROUND -2,12,345.60 / PACK ROUND -1,1,234.56 / PACK ROUND 1,12.346 / PACK ROUND 2.1.235WRITE: SY-DATUM,06/27/1995 / SY-DATUM YYMMDD.950627,初始化数据,语法CLEAR .该语句将数据对象的内容初始化,可以用CLEAR语句重置任何数据对象值。REFRESH itab.该语句将内表中的数据重置为初始值。,选择屏幕的制作,PARAMETERSCOL(11)TYPECdefaultHelloWorld.WRITE:10 输出:, 16 COL.,选择屏幕(1),选择屏幕的制作,有两种方式parameters select-optionsparameters : 输入的参数值是单值select-options :输入的参数值是多值,也可以是一 个范围,选择屏幕(2),TABLESafko.PARAMETERSaufnr2LIKEafko-aufnr.SELECT-OPTIONSaufnr1FORafko-aufnr.,一个简单的例子ABAP基础内表的应用select数据选取数据库表查询输入输出销售订单report,输入屏幕,TABLES:vbak.PARAMETERSvbelnLIKEvbak-vbeln.,定义变量,定义表头DATA:BEGINOFwa_head,vbelnLIKEvbak-vbeln,audatLIKEvbak-audat,kunnrLIKEvbak-kunnr,name1LIKEkna1-name1,ENDOFwa_head.定义行项目DATA:BEGINOFit_itemOCCURS0,vbelnLIKEvbap-vbeln,posnrLIKEvbap-posnr,matnrLIKEvbap-matnr,arktxLIKEvbap-arktx,kwmengLIKEvbap-kwmeng,meinsLIKEvbap-meins,netwrLIKEvbap-netwr,waerkLIKEvbap-waerk,ENDOFit_item.定义行数计数器DATAlineTYPEi.,数据选取,选取表头数据SELECTSINGLEvbelnaudatkunnrINTO(wa_head-vbeln,wa_head-audat,wa_head-kunnr)FROMvbakWHEREvbeln=vbeln.SELECTSINGLEnam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论