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

ABAP基础开发

2012-05-23 50页 ppt 4MB 45阅读

用户头像

is_301076

暂无简介

举报
ABAP基础开发nullnullSAP ECC6.0 - ABAP *null一个简单的例子 ABAP基础 内表的应用 select数据选取 数据库表查询 输入输出 销售订单report最简单的Report(1)最简单的Report(1)通常在程序执行前,需要做以下三件事: 1、对所写的代码进行语法检查,避免明显的语法错误。 2、保存程序;在程序激活过程中,SAP也会自动对程序进行保存 3、激活程序;在SAP中没有激活的程序是不能进行最终使用的。 上例最终运行结果如下: ...
ABAP基础开发
nullnullSAP ECC6.0 - ABAP *null一个简单的例子 ABAP基础 内表的应用 select数据选取 数据库表查询 输入输出 销售订单report最简单的Report(1)最简单的Report(1)通常在程序执行前,需要做以下三件事: 1、对所写的代码进行语法检查,避免明显的语法错误。 2、保存程序;在程序激活过程中,SAP也会自动对程序进行保存 3、激活程序;在SAP中没有激活的程序是不能进行最终使用的。 上例最终运行结果如下: 最简单的Report(2)最简单的Report(2)report 在ABAP程序中,以report或者program指令开头的程序才 能直接运行;其他指令的程序均不可以直接运行。 Report程序里,程序的属性类型那需选择“可执行程序”null一个简单的例子 ABAP基础 内表的应用 select数据选取 数据库表查询 输入输出 销售订单report基本数据类型基本数据类型在ABAP中,基本的数据类型有八种 字符型: C(文本字符) N(数字文本字符) T(时间类型) D(日期类型) 数字类型: I(整数类型) F(浮点类型) P(压缩数) X(十六进制) 另,ABAP还提供对字符串的支持,数据类型为string。基本数据类型列表基本数据类型列表定义变量(1)定义变量(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)定义变量(2)ABAP中对变量的定义有两种方式: DATA 根据内置类型声明基本类型数据对象。 TYPES 根据内置类型自定义基本数据类型。定义变量(3)定义变量(3)TYPES num  TYPE i. DATA  num1 TYPE num.算术运算算术运算ABAP中,基本的算术运算有这么几种。(+、-、*、/、DIV、MOD、**) 前四种运算意义明确,不再做过多累述。 现在,来看看后三种运算。 DIV 整除 除法时,如果除不尽,只取商的整数部分。 MOD 取余 除法时,如果除不尽,只取商的余数部分。 ** 乘方 *是做乘法运算;**则是乘方(即幂运算)。 例: 6 DIV 4 = 1; 6 MOD 4 = 2. 1 * 2 = 2; 1 ** 2 = 1. 字符数据处理(1)字符数据处理(1)1) concatenate 将两个字符串合并成一个字符串。 2) split 将一个字符串拆分成多个字符串。 3) search 在字符内查找指定字符串 4) replace 用其他字符串在字符内替换指定字符串。 5) strlen 用于确定字符实际长度。 6) condense 用于清除字符内多余的空格。 PS:字符串string也是字符的一种。和其他字符类型的区别在于,string在定义时,不需要指定字符长度 ,其字符长度会随着存放数据长度的增加自动扩展。字符数据处理(2)字符数据处理(2)结构语句结构语句分支控制 IF …… ELSEIF……ELSE……ENDIF CASE f WHEN f1……WHEN f2…… ENDCASE 循环控制 DO [n TIMES]……ENDDO WHILE ……ENDWHILEnull一个简单的例子 ABAP基础 内表的应用 select数据选取 数据库表查询 输入输出 销售订单report内表(1)内表(1)除了数据库表格,还可以创建仅在程序运行时间内存在的内表。ABAP/4提供了针对内表的不同操作。例如,可以搜索、附加、插入或删除行。 内表中的行数并不固定。根据需求,系统可实时增加内表的大小。例如,如果想将某个数据库表格读入内表,不必事先知道数据库表格的大小。内表(2)内表(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. INSERT DATA LINE LIKE ITAB. LINE-COL1 = 3. LINE-COL2 = 4. INSERT LINE INTO ITAB INDEX 1.数据只能附于内表最后一行数据可以插入内表任意位置内表的操作:修改内表的操作:修改MODIFY LOOP AT ITAB WHERE COL1 = 1. ITAB-COL1 = 5. MODIFY ITAB. ENDLOOP.MODIFY前MODIFY后内表的操作:循环读取内表的操作:循环读取LOOP 使用LOOP语句逐行读取内表。 要将内表逐行读入工作区域,可以使用LOOP语句编一个循环。语法如下所示: LOOP AT [INTO ] [FROM ] [TO ] [WHERE ]. ..... ENDLOOP. 内表的操作:删除内表的操作:删除DELETE DELETE itab WHERE col1 = 1. 删除前删除后内表的操作:COLLECT内表的操作:COLLECTCOLLECT 聚集附加 操作时,系统将检查工作区中的标准关键字段值与已存在于内表中的数据行是否相( 所有非数字字段)。如果不同,COLLECT语句的作用与APPEND语句相似,将新行附加至 内表末尾;如果存在相同表关键字值的行,COLLECT语句不附加新行,而是将工作区中数 字字段的内容累加到已有数据行中。 CARR CONN UMSATZ CARR CONN UMSATZAPPEND TO COLLECT TO 9.6内表的操作:SUM内表的操作:SUMSUM 该语句只能在LOOP/ENDLOOP块内部使用。如果在AT/ENDAT块中使用SUM,则系统计算当前行组内部所有行的数字字段之和并将其写入目标区域中相应的字段;如果在AT/ENDAT块之外使用SUM语句,则系统计算所有循环过程中(已循环和将要循环的)内表行的数字字段之和并将其写入工作区域中相应的字段。所以,在AT/ENDAT块之外使用SUM语句一般是无意义的。内表的操作:AT内表的操作:ATAT level ENDAT. 该语句只能在LOOP语句内使用,其中行条件level有下列选项: FIRST 当前循环为内表的第一行,即当第一次循环操作时,系统会执行控制块语句 LAST 当循环为内表最后一行。 NEW f 行组的开头,行组指的是字段f和f前面(即左边)的全部字段,如果行组中的内容不同于上一行,执行语句块中的内容。 END OF f 行组的结尾,如果下一行行组中的任何字段内容不同于上一行,执行语句块中的内容。null一个简单的例子 ABAP基础 内表的应用 select数据选取 数据库表查询 输入输出 销售订单reportSelect语句Select语句SELECT SELECT 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)数据选取(1) SELECT carrid connid seatsocc        FROM sflight        INTO CORRESPONDING FIELDS OF TABLE seats        WHERE carrid BETWEEN 'AA' AND 'DL'        GROUP BY connid carrid seatsocc        HAVING carrid BETWEEN 'AA' AND 'DL'        ORDER BY seatsocc. 数据选取字段数据库表内表或工作区数据选取范围及输出格式数据选取(2)数据选取(2)SELECT carrid connid seatsocc        FROM sflight   INTO TABLE seatsSELECT carrid connid seatsocc        FROM sflight   INTO CORRESPONDING FIELDS OF TABLE seats数据库表内表select single的使用select single的使用TABLEselect single 选择第一个满足条件的值 select single col2 into WA from TABLE where col1 = ‘A’. 结果:COL2 值为 1。表关联表关联JOIN 如果要选取相关联的两个或以上的表内的数据,则需要使用到JOIN。 SELECT a~aufnr b~dfrei      INTO CORRESPONDING FIELDS OF TABLE itab      FROM afko AS a      JOIN afpo AS b       ON a~aufnr = b~aufnr. select……endselect select……endselect SELECT carrid connid seatsocc        FROM sflight        INTO CORRESPONDING FIELDS OF TABLE seats        WHERE carrid BETWEEN 'AA' AND 'DL'        GROUP BY connid carrid seatsocc        HAVING carrid BETWEEN 'AA' AND 'DL'        ORDER BY seatsocc. SELECT carrid connid seatsocc         FROM sflight        INTO CORRESPONDING FIELDS OF seats         WHERE carrid BETWEEN 'AA' AND 'DL'         GROUP BY connid carrid seatsocc          HAVING carrid BETWEEN 'AA' AND 'DL'         ORDER BY seatsocc.    APPEND seats. ENDSELECT. null一个简单的例子 ABAP基础 内表的应用 select数据选取 数据库表查询 输入输出 销售订单report字段查询(转账表)1字段查询(转账表)1事务代码:QS24 显示主检验特性 场景: 需要用到字段主检验特性,却不知道主检验特性数据的存放处。字段查询(转账表)2字段查询(转账表)2在主检验特性栏位按下F1字段查询(转账表)3字段查询(转账表)3 QPMK是转账表,技术信息里表名和字段名称组合起来就是主文件检验特性的存储位置。字段查询(转账表)4字段查询(转账表)4字段查询(结构)1字段查询(结构)1这是通过QA33查询到的一笔检验批结果。 假设,现在需要字段“检验的”的数据。字段查询(结构)2字段查询(结构)2 虽然,在技术信息的表名上写着QAQEE,实际上,QAQEE是一个结构。字段查询(结构)3字段查询(结构)3 如何确定结构中的字段存储的表? 可以通过该字段的数据元素引用处来进行查询。字段查询(结构)4字段查询(结构)4 通过所用处清单来查找出现过数据元素QANZWERTG4的全部转账表。字段查询(结构)5字段查询(结构)5 通过所用处清单,还 可以查找数据元素在更 广泛的范围内的应用。字段查询(结构)6字段查询(结构)6 查找结果,数据元素QANZWERTG4在两个表内有被引用。字段查询(结构)7字段查询(结构)7可以看到QAMR是转账表null一个简单的例子 ABAP基础 内表的应用 select数据选取 数据库表查询 输入输出 销售订单report输出控制:WRITE输出控制:WRITEWRITE语句 在屏幕上输出数据的基本ABAP语句是WRITE。 在屏幕上,输出通常是左对齐的。如果使用几个WRITE语句,输出字段就一个接一个显示,输出之间由列分开(如一个空格)。如果当前行没有足够空间,则开始新行。对齐格式(1)对齐格式(1)输出屏幕上的数据字段格式,依赖数据类型。 预定义数据类型的输出格式 数据类型 输出长度 定位 C 字段长度 左对齐 D 8 左对齐 F 22 右对齐 I 11 右对齐 N 字段长度 左对齐 P 2*字段长度(+1) 右对齐 T 6 左对齐 X 2*字段长度 左对齐 数字数据类型F、I和P是右对齐的,左边用空格填充。如果有足够的空间,也输出千位分隔符。如果类型P字段包含小数位,则默认输出长度增加一位。 对数据类型D,日期的内部格式与输出格式不同。当输出数据使用WRITE语句时,系统自动以用户主记录中指定的格式(例如,DD/MM/YYYY),输出数据类型D。对齐格式(2)对齐格式(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屏幕输出ABAP屏幕输出DATA: G(5) VALUE 'Hello', F(5) VALUE 'Dolly'. WRITE: G, F. Hello Dolly WRITE: /10 G, Hello / F UNDER G. Dolly WRITE: / G NO-GAP, F. HelloDolly DATA TIME TYPE T VALUE '154633'. WRITE: TIME, 154633 /(8) TIME USING EDIT MASK '__:__:__'. 15:46:33 WRITE: '000123', 000123 / '000123' NO-ZERO. 123 DATA FLOAT TYPE F VALUE '123456789.0'. WRITE FLOAT EXPONENT 3. 1.23E+08 DATA 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.235 WRITE: SY-DATUM, 06/27/1995 / SY-DATUM YYMMDD. 950627 初始化数据初始化数据语法 CLEAR . 该语句将数据对象的内容初始化,可以用CLEAR语句重置任何数据对象值。 REFRESH itab. 该语句将内表中的数据重置为初始值。选择屏幕的制作选择屏幕的制作PARAMETERS COL(11) TYPE C default 'Hello World‘. WRITE : 10  '输出:',          16  COL. 选择屏幕(1)选择屏幕(1)选择屏幕的制作,有两种方式 parameters select-options parameters : 输入的参数值是单值 select-options :输入的参数值是多值,也可以是一 个范围选择屏幕(2)选择屏幕(2) TABLES afko. PARAMETERS aufnr2 LIKE afko-aufnr. SELECT-OPTIONS aufnr1 FOR afko-aufnr. null一个简单的例子 ABAP基础 内表的应用 select数据选取 数据库表查询 输入输出 销售订单report输入屏幕输入屏幕TABLES : vbak. PARAMETERS vbeln LIKE vbak-vbeln. 定义变量定义变量定义表头 DATA : BEGIN OF wa_head,        vbeln LIKE vbak-vbeln,        audat LIKE vbak-audat,        kunnr LIKE vbak-kunnr,        name1 LIKE kna1-name1,        END OF wa_head. 定义行项目 DATA : BEGIN OF it_item OCCURS 0,        vbeln  LIKE vbap-vbeln,        posnr  LIKE vbap-posnr,        matnr  LIKE vbap-matnr,        arktx  LIKE vbap-arktx,        kwmeng LIKE vbap-kwmeng,        meins  LIKE vbap-meins,        netwr  LIKE vbap-netwr,        waerk  LIKE vbap-waerk,        END OF it_item. 定义行数计数器 DATA line TYPE i. 数据选取数据选取选取表头数据   SELECT SINGLE vbeln audat kunnr     INTO (wa_head-vbeln, wa_head-audat, wa_head-kunnr)     FROM vbak     WHERE vbeln = vbeln.   SELECT SINGLE name1     INTO wa_head-name1     FROM kna1     WHERE kunnr = wa_head-kunnr. 选取行项目数据   SELECT vbeln posnr matnr arktx kwmeng meins netwr waerk     INTO CORRESPONDING FIELDS OF TABLE it_item     FROM vbap     WHERE vbeln = vbeln. 屏幕输出屏幕输出DESCRIBE TABLE it_item LINES line. "获取内表行数,设置行计数器    输出表头 WRITE 66 '销售订单' CENTERED.   WRITE : /30 '┌──────────────────────────────────────┐'.   WRITE : /30 '│',32 '销售凭证号:', 44 wa_head-vbeln NO-ZERO, 88 '凭证日期:', 98 wa_head-audat, 108 '│'.   WRITE : /30 '├──────────────────────────────────────┤'.   WRITE : /30 '│',32 '售达方:', 40 wa_head-kunnr RIGHT-JUSTIFIED NO-ZERO, 50 wa_head-name1, 108 '│'.   WRITE : /30 '└──────────────────────────────────────┘'. 输出行项目   SKIP 2.   WRITE : /8 '┌────┬─────────┬────────────────────┬─────────┬──┬──────────┬──┐'.   WRITE : /8 '│',10 '行项目', 18 '│',20 '物料号', 38 '│', 40 '物料描述', 80 '│',96 '数量',              100 '│', 102 '单位', 106 '│', 122 '净价' , 128 '│', 130 '币制', 134 '│'.   LOOP AT it_item WHERE vbeln = wa_head-vbeln.     IF line > 0.       WRITE : /8 '├────┼─────────┼────────────────────┼─────────┼──┼──────────┼──┤'.       line = line - 1.     ENDIF.     WRITE : /8 '│',10 it_item-posnr NO-ZERO, 18 '│',20 it_item-matnr, 38 '│', 40 it_item-arktx(20), 80 '│',82 it_item-kwmeng DECIMALS 2,              100 '│', 102 it_item-meins, 106 '│', 108 it_item-netwr DECIMALS 2 , 128 '│', 130 it_item-waerk, 134 '│'.   ENDLOOP.   WRITE : /8 '└────┴─────────┴────────────────────┴─────────┴──┴──────────┴──┘'. 销售表单销售表单
/
本文档为【ABAP基础开发】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索