350 likes | 817 Views
ABAP 培训. 祝汉武 2006-10-12. 欢迎和简介. 欢迎大家参与本培训单元。 本次培训主要涉及一些 ABAP 的基本知识。. 目标. 基础目标 读懂 ABAP 程序 简单的 Report 程序设计 我们希望的进一步目标 Batch Input 程序设计 创建、维护 ABAP/4 Dictionary 对象. 培训课程计划. 第一天 语言基础 数据定义 基本数据操作 控制结构 字符处理 动态数据 模块化技术 练习. 培训课程计划. 第二天 内表概念 内表定义 内表使用 数据库基础 提取数据( OPEN SQL )
E N D
ABAP培训 祝汉武 2006-10-12
欢迎和简介 • 欢迎大家参与本培训单元。 • 本次培训主要涉及一些ABAP的基本知识。
目标 • 基础目标 • 读懂ABAP程序 • 简单的Report程序设计 • 我们希望的进一步目标 • Batch Input程序设计 • 创建、维护ABAP/4 Dictionary对象
培训课程计划 • 第一天 • 语言基础 • 数据定义 • 基本数据操作 • 控制结构 • 字符处理 • 动态数据 • 模块化技术 • 练习
培训课程计划 • 第二天 • 内表概念 • 内表定义 • 内表使用 • 数据库基础 • 提取数据(OPEN SQL) • 练习
培训课程计划 • 第三天 • 报表基础 • 报表事件 • 选择屏幕 • 格式化输出 • 练习
培训课程计划 • 第四天 • Batch Input程序设计 • ABAP程序开发规范 • ABAP程序的主体结构标准 • 练习
培训课程计划 • 第五天 • 权限问题 • 传输请求 • 区域菜单 • 事务码设定 • 长文本的读取和存储 • 练习
培训课程计划 • 第六天 • 开发相关类和组创建 • 打印配置 • 程序优化 • 练习
ABAP语言基础 • 什么是ABAP/4? • ABAP/4是英文Advanced Business Application Programming的缩写,是SAP R/3商用系统的应用程序开发工具
ABAP语言基础 • 为什么学习ABAP/4? • ABAP/4是所有SAP R/3应用的基础,也是进行SAP R/3二次开发的最主要的工具,是我们对SAP R/3系统进行应用分析、二次开发的主要工具、必经之路
数据定义 • 基本数据类型 数据类型 默 认大小 有效 大小 初始值 C 1 1 - 65535 SPACE D 8 8 '00000000' F 8 8 0 I 4 4 0 N 1 1 - 65535 '00...0' P 8 1 - 16 0 T 6 6 '000000' X 1 1 - 65535 X'00'
数据定义 • TYPES语句(创建用户定义的基本数据类型和结构化数据类型) • 语法 • TYPES <t>[<length>] <type> <decimals>]. 例子:TYPES: SURNAME(20) TYPE C, PHONE(20) TYPE N, DATE LIKE SY-DATUM.
数据定义 • 用TYPES定义结构化数据类型 • 语法: TYPES: BEGIN OF <fstring>, <component eclaration>, .............. END OF <fstring>. • 例子: TYPES: BEGIN OF ADDRESS, NAME TYPE SURNAME, CODE(10) TYPE N, TOWN(20) TYPE C, STR(30) TYPE C, END OF ADDRESS.
数据定义 • DATA语句(定义局部或全局变量) • 定义一个简单类型的变量 • 定义一个结构化的数据对象 • 定义一个内表
数据定义 • 简单变量申明 • DATA:〈VAR〉LIKE 〈DICTIONARY TYPE〉 • DATA:〈VAR〉TYPE [C,P,I,STRING等] • 例子 DATA: S1 TYPE I, SUM TYPE I. DATA : t_pspnr like prps-pspnr.
数据定义 • 结构化的数据对象 • DATA: BEGIN OF <fstring>, <component declaration>, .............. END OF <fstring>. • 例:DATA: BEGIN OF ADDRESS1, NAME(20) TYPE C, STREET(20) TYPE C, NUMBER TYPE P, END OF ADDRESS1. 也可以从已经定义的结构化数据类型定义数据对象 DATA: D_ADDRESS TYPE ADDRESS, d_temp like address1.
基本数据操作 • 数据赋值 • 数值运算 • 逻辑表达式
基本数据操作 • 数据赋值 • MOVE语句(作用和“=”一样) move data1 to data2. data2 = data1. • 注意:源变量和目标变量的类型要一样或者可以进行类型转换,要是两者不兼容也不能类型转换,则上述语句不能成功执行。 • ClEAR语句:把变量恢复到初始状态(空值)。
基本数据操作 • 基本算术运算 运算 用数学表达式的语句 用关键字的语句 加法 <p> = <n> + <m>. ADD <n> TO <m>. 减 法 <p> = <m> - <n>. SUBTRACT <n> FROM <m>. 乘 法 <p> = <m> * <n>. MULTIPLY <m> BY <n>. 除 法 <p> = <m> / <n>. DIVIDE <m> BY <n>. 整 除 <p> = <m> DIV <n>. --- 除 法余数 <p> = <m> MOD <n>. --- 求 幂 <p> = <m> ** <n>. ---
基本数据操作 • 处理日期和时间字段 日期和时间字段数据类型不是数值 型。但是可以采用类似于数值型字段的处理方法,处理日期和时间字段。 • 例: DATA: ULTIMO TYPE D. ULTIMO = SY-DATUM. ULTIMO+6(2) = '01'. ULTIMO = ULTIMO - 1.
控制结构 • 分支控制 • 循环控制
控制结构 • 分支控制 • IF 〈EXPRESSION〉. …… ELSE. …… ENDIF. • CASE 〈VAR〉. WHEN [VALUE1]. …… WHEN [VALUE2]. …… ENDCASE.
控制结构 • 例: DATA: TEXT1 VALUE 'X', TEXT2 VALUE 'Y', TEXT3 VALUE 'Z', STRING VALUE 'A'. CASE STRING. WHEN TEXT1. WRITE: / 'String is', TEXT1. WHEN TEXT2. WRITE: / 'String is', TEXT2. WHEN TEXT3. WRITE: / 'String is', TEXT3. WHEN OTHERS. WRITE: / 'String is not', TEXT1, TEXT2, TEXT3. ENDCASE.
控制结构 • 无条件循环 DO [N TIMES]. <STATEMENT BLOCK>. ENDDO. • 条件循环 WHILE <CONDITION>. <STATEMENT BLOCK>. WNDWHILE. • 可以用STOP,EXIT,REJECT等语句中止循环。
控制结构 • 例: DO 4 TIMES. IF SY-INDEX = 3. EXIT. ENDIF. WRITE SY-INDEX. ENDDO. 产生如下输 出: 1 2
字符处理 • 连接字符串 • CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>]. DATA: C1(10) VALUE 'Sum', C2(3) VALUE 'mer', C3(5) VALUE 'holi ', C4(10) VALUE 'day', C5(30), SEP(3) VALUE ' - '. CONCATENATE C1 C2 C3 C4 INTO C5. WRITE C5. CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY SEP. WRITE / C5. 该过程的输 出如下: Summerholiday Sum - mer - holi - day
字符处理 • 除了合并字符串外,还提供如下一些字符串操作: • SPLIT 拆分 • SEARCH 查找 • REPLACE 替换 • STRLEN 确定长度 • SHIFT 移动字符串内容 • CONDENSE 删除多余的空格 • OVERLAY 用一个字符串覆盖另外一个字符串
字符处理 • 定位操作子串 语法:S[+N1][(N2)] 意思是对字段s从N1+1位开始且长度为N2的部分进行处理 DATA: S1(10) VALUE ‘ABCDEFGHIJ’. S1+2(4) = ‘FEDC’. WRITE:S1. 其结果是:ABFEDCGHIJ.
模块化技术 • 作用:使程序结构清晰,易读,易于维护,同时可以达到代码复用的目的。 • 在实际开发中应用的比较多的模块技术包括子程序和功能模块。
模块化技术 • 子程序(程序内部的模块化实现),可以理解为函数 • 语法: 定义:FORM subr [using …[value() p1[]] [type t|likes f]…] [changing…[value()pn[]] [type t|likes f]…]. <subr codes> Endform. 调用:PERFORM subr [using …p1…] [changing …pn…].
模块化技术 • 子程序例子: form check_matnr using p_matnr changing p_return. p_return = 1. select single * from marc into marc where matnr = p_matnr and werks = ‘sbsx’ and lvorm eq space. check sy-subrc eq 0. p_return = 0. endform. matnr1 = ‘6554332321’. perform check_matnr using matnr1 changing return.
模块化技术 • 功能模块:与子程序相似,是独立的R/3对象,在sap里面很常用的复用组件。 • 创建工具(se37) • 调用方式 CALL FUNCTION .
模块化技术 • 功能模块例子 call function 'CONVERSION_EXIT_ABPSN_INPUT' exporting input = p_pspid importing output = pspid.