备战ABAP考试认证笔记
sapabap面试题目及答案(3篇)
第1篇一、基础知识1. 请简述SAP ABAP开发环境的组成。
答案:SAP ABAP开发环境主要包括以下组成部分:(1)SAP GUI:用于与SAP系统交互的图形用户界面。
(2)SAP SE38/SE80:用于编写、调试和测试ABAP代码的编辑器。
(3)SAP SScr:用于开发SAP Screen Painter屏幕画家的工具。
(4)SAP ADT:用于开发SAP Advanced Business Application Programming技术的工具。
(5)SAP NetWeaver:SAP的集成平台,提供各种开发、运行和管理工具。
2. 请解释SAP ABAP中的数据类型。
答案:SAP ABAP中的数据类型分为以下几类:(1)基本数据类型:包括整型(INTEGER)、浮点型(FLOAT)、字符型(CHAR)、日期型(DATETIME)等。
(2)结构化数据类型:包括结构(STRUCTURE)、表(TABLE)、内表(INTERNAL TABLE)等。
(3)用户定义数据类型:包括类(CLASS)、接口(INTERFACE)等。
3. 请简述SAP ABAP中的模块化编程。
答案:SAP ABAP中的模块化编程是指将程序划分为多个模块,每个模块负责特定的功能。
模块化编程的优点如下:(1)提高代码的可读性和可维护性。
(2)方便代码的重用。
(3)便于调试和测试。
4. 请解释SAP ABAP中的异常处理。
答案:SAP ABAP中的异常处理是指程序在运行过程中遇到错误时,能够及时捕获并处理这些错误。
异常处理的基本步骤如下:(1)声明异常:在程序中声明可能发生的异常。
(2)抛出异常:当程序遇到错误时,抛出异常。
(3)捕获异常:在程序中捕获并处理异常。
二、高级应用1. 请解释SAP ABAP中的内表(Internal Table)。
答案:SAP ABAP中的内表是一种临时存储数据的结构,类似于C语言中的数组。
ABAP基础重要知识学习点
ABAP基础重要知识学习点ABAP(Advanced Business Application Programming)是一种高级商务应用程序编程语言,主要用于SAP软件的开发和定制。
在学习ABAP的过程中,有一些基础的重要知识点需要掌握。
1. ABAP语法:了解ABAP语言的基本语法规则是学习ABAP的第一步。
学习如何声明变量、定义函数和方法、控制语句以及数据类型等基础知识,能够帮助开发人员编写有效的ABAP代码。
2. ABAP数据字典:ABAP数据字典是用于管理数据和定义数据库对象的工具。
掌握如何创建表格、视图、数据元素和数据类型等数据字典对象,能够帮助开发人员有效地存储和管理数据。
3. ABAP程序设计:学习如何设计和编写ABAP程序是成为一名合格ABAP开发人员的关键。
了解程序的模块化设计和封装原则,掌握ABAP的面向对象编程概念,能够开发出可重用和可维护的ABAP程序。
4. ABAP调试和错误处理:调试是开发中解决问题的重要工具。
学习如何使用ABAP调试器来跟踪代码的执行,并通过断点和监视表达式来诊断问题。
同时,掌握如何处理ABAP程序中的错误和异常情况,能够提高程序的可靠性和稳定性。
5. ABAP性能优化:在开发过程中,优化ABAP程序的性能是一个重要的考虑因素。
学习如何使用ABAP运行时分析工具来分析程序的性能瓶颈,并针对性地进行性能优化,能够提高程序的执行效率和响应速度。
6. ABAP Web Dynpro:ABAP Web Dynpro是一种用于开发SAP Web应用程序的框架。
学习如何使用ABAP Web Dynpro来设计和开发用户友好的Web界面,包括表格、输入字段和按钮等交互元素,能够满足用户对于功能和界面的需求。
总的来说,掌握ABAP的基础重要知识点是成为一名合格的ABAP开发人员的基础。
通过系统地学习和实践,可以逐步提升自己的编程能力,并为SAP软件的开发和定制提供有力的支持。
ABAP 资料总结汇总
ABAP 学习总结1.创建IDOC:第一步:WE31 创建IDOC所包含的字段.第二步:WE30 创建IDOC 把Segment分配给IDOC第三步:WE81 创建信息类型第四步:WE82 把IDOC类型与信息类型对应.第五步:WE57 Assign Message & Idoc Type to a Function Module for Data Process第六步:SM59 Define a RFC connection for Idoc transfer第七步:WE21 Define a Port ( Assign a RFC destination which created in SM59 )第八步:WE41/42 Creat Process Code第九步:WE20 Define a Partner Profiles( Also creat a Outbound parameters with Port, or Inbound parameters with Process code )管理IDOC:WE02 显示IDOC,可以根据时间,IDOC类型查找IDOC,查看成功,出错信息。
WE46 IDOC管理(出\入)WE60 IDOC类型文档(可以查看IDOC结构,和每个字段的描述.WE19 根据IDOC号进行IDOC处理,可以修改IDOC值进行补发动作,处理分为内向和外向。
消息配置:WE20 配置伙伴消息进和出IDOC类型WE21 配置伙伴。
2.引用类型z_ref数据对象myref在程序中的声明方式:DATA myref TYPE z_ref.CREATE DA TA myref TYPE z_ref.3.参照数据字典中的表类型生成内表对象或结构体:DATA mytable TYPE z_table,”数据字典表类型,声明内表.myline TYPE LINE OF z_table.”表类型的行结构,声明结构体.4.取系统日期:SY-DATUM,5.取系统时间:SY-UZEIT.06.系统字段定位:SY-FDPOS.字符比较结果为真时,此字段将给出偏移量信息.7.系统字段SY-FDPOS给出字符的位置信息.(P109)8.系统字段SY-INDEX记录循环语句中的循环次数9.操作内表行结束后系统字段SY-TABIX返回该行索引.对于所有行操作,如果操作成功,系统变量SY-SUBRC返回0,否则返回非0值.10.系统用户名:SY-UNAME.11.SY-HOST?屏幕序号:sy-dynnr.12.OK代码:SY-UCOMM或SYST-UCOMM13.屏幕组ID:SY-DYNGR.14.常量声明:CONSTANT const(len) TYPE type|LIKE dobj [DECIMALS dec][V ALUE val].15.确定数据对象属性:DESCRIBE FIELD f [LENGTH l] [TYPE t [CONPONENTSn]] [OUTPUT-LENGTH o] [DECIMALS d] [EDIT MASK m] [HELP-ID h].16.数据赋值:MOVE source TO destination.或destination = source.17.设定初始值:CLEAR F.18.检查字段是否为初始值:f IS INITIAL….19.检查字段是否被分配:fs IS AS SIGNED…..20.检查过程中的参数是否被实参填充:p IS [SUPPLIED|REQUESTED]….21.检查数据对象的值是否属于某范围之间:f1 BETWEEN f2 AND f3…..22.检查数据对象f的内容是否遵从某个选择表的逻辑条件:f in seltab….23.WRITE: /10 g,”在10个空格后输出变量g/(8) time using edit mask ‘__:__:__’.”输出的变量time保持8位的长度.24.将光标移动到下一行:SKIP.25.强制结束循环:EXIT,STOP或REJECT.26.循环的中止:CONTINUE无条件中止当前循环并开始下一轮循环,CHECK条件为真时循环,为假时结束本次循环并开始下一轮循环,EXIT无条件中止并退出整个循环.27.将字符串左移:SHIFT string.28.连接字符串:CONCATENA TE s1 s2 …..sn INTO s_dest [SEPARATED BY sep].如果结果出现被截断的情况,将SY-SUBRC返回4,否则返回0.符号&用于在字字符串换行时的连接.29.根据分隔符sep拆分字符串:SPLIT s_source AT sep INTO s1 s2 ……sn.使用内表操作可以避免被截断的情况:SPLIT s_source A T sep INTO TABLE itab.此语句根据子串数目生成n行的内表.30.循环输出内表的每一行数据:LOOP A T itab INTO text.ENDLOOP.31.替换字段内容:REPLACE str1 WITH str2 INTO s_dest [LENGTH len]. 字段SY-SUBRC的返回值为0时表示己成功替换.32.确定字段长度:[COMPUTE] n = STRLEN( str ).33.删除字符串中的多余空格:CONDENSE34.字符转换,如将ABC转换为abc:TRANSLA TE35.创建一个可以排序的格式:CONVERT TEXT.36.用一个字符串覆盖另一个字符串:OVERLAY37.WRITE TO赋值时将忽略数据对象的类型,而将其视为字符类型数据.38.字符串比较中的换码字符:#,用于转换比较时使用的通配符:*或+.及进行区分大小写,空格的比较,如#A表示比较大写的A.39.定位操作子串:strName[+0][(1)].40.字段符号,数据引用:动态数据对象.41.子过程定义:FORM subroutine_name USING parameters1parameters2…. ….ENDFORM.42.子程序调用:PERFORM subroutine_name USING actual_parameters1 p2…. (其中USING可换成CHANGING)43.ULINE.输出下划线.44.错误查看:ST2245.程序打包release:SE01:找到对应的程序,点开后点上面小汽车,再选中上面的后再点小汽车.点check.程序修改后需要重新打包.46.制作T-CODE:SE93,TCODE应按顺序编号:ZMF+流水号,我的程序名47.创建table:t-code:se11,attributes:Delivery class:C.开发类别:ZFI,当自定义Fieldtype时,名称需为Z+…..格式.->设置技术属性(Technical Setting):Logicalstorage parameters中Data class:APPL1,Size category:4 创建functiongroup:SE80,创建好后将创建的TABLE挂接到function grouph上去:用se11查出table,点utilites->table maintenance generator:Authorizationgroups:&NC&,Function group中填刚才创建的功能组名称->onestep->overview screen中必须填未使用的number,此处screen number与table 是一一对应的关系,也可让点系统上面的按钮:find screen number来自动搜索适合的scr. Number.->create,成功后,找到对应的function group中的screen number双击即可看到生成的代码.需要修改字段名称可在function group中的element list或layout中.-->se93创建t-code,start object选transaction withparameters(parameter transaction)->default valuesfor->transantion:SM30->Default V alues->name of screenfield:viewname\update,value:table name\X.48.field-sign:,field—option:,field-low:表示选择条件中起始值49.在where子句中如果只有一个表的话,可以不用指定表名.50.获取用户IP地址及用户名:call function 'TH_USER_INFO' " Get user IP,hostnameimportinghostaddr = iporg”转化前的IP地址terminal = host”计算机名exceptionsothers = 1."Conv.IP addr to format 'xxx.xxx.xxx.xxx'call function 'ZGJ_IPADR2STRING' "Conv.IP addrexportingipadr = iporg”转化前的IP地址importingstring = ipdec.”转化后的最终需要的IP地址51.删除内表中数据完全相同的行,只保留一行: delete adjacent duplicatesfrom itab1 COMPARING <f1> <f2> / COMPARING ALL FIELDS.52.spro:后台设定53.输出选择框write:/ itab1-flag as checkbox第四章ABAP基础4.1.5 程序运行例:REPORT z_calling_program.START-OF-PROGRAM.WRITE ‘This program calls another program.’.”此内容在输出界面看不到SUBMIT z_simple_program.”上面的输出被此程序覆盖.如果改用SUBMIT AND RETURN来调用则可以输出以上内容.2.结束程序:LEA VE PROGRAM.可在任意点强制结束当前运行的程序.4.1.6 内存管理SAP程序同一个用户和系统可进行最多6个SAPGUI主会话.4.2.1 数据定义TYPES:BEGIN OF t_staff,S_no(3) type n,Name(20),END OF t_staff.DATA staff TYPE t_staff.上例中定义了一个结构类型t_staff,并根据其声明了一个结构体对象staff.数据类型中的扁平结构与纵深结构:扁平类型:运行时长度固定的类型.纵深类型:运行时长度可峦的类型.注意:1.其中C,N,T,D,I,F,P,X为定长类型,即在运行期间长度不能改变.2.类型T,D,I,F的数据存储长度是固定的,不能指定参照其生成的数据对象占用的内存字节数.3.基于类型C,N,P,X生成的数据对象需要在声明时指定其长度.否则取默认值.4.如果在声明一个数据对象时未指明其数据类型,则该数据默认为C类型.5.类型I的数值范围:-231到231-1的整数.如果运算时出现非整型结果则进行四舍五入取值.而不是截断小数.6.类型P用于声明小数字固定的压缩数,其占据内存字节数和数值范围取决于定义时指定的整个数据的大小和小数点后位数,如果不指定小数字,则将其视为I类型数据.有效大小可以是从1~16字节的任意值,小数点后最多允许14个数字. 7,类型F为浮点数,浮点意思是数字在内存中以字节形式表示,数值范围:1*10-307到1*10308,因系统将F类型转换为二进制数,所以可能出现舍入误差,若用户要求较高精度且数值较大时,应使用P类型数据.8.长度可峦的内置类型String, XString是通过引用实际动态的数据对象的固定内存地址来操作.4.2.3 程序内部数据定义参照自定义类型或内置类型生成数据的语法格式:TYP ES|DATA …TYPE l_type…参照程序中已经声明的数据对象生成新数据语法:TYPES|DATA …LIKE dobj…3.结构类型和结构体参照结构类型生成的数据对象称为结构体.TYPES|DATA:BEGIN OF structure.k1[TYPE type |LIKE dobj]…,k2[TYPE type |LIKE dobj]…,…k n[TYPE type |LIKE dobj]…,END OF structure.参照生成:参照结构生成:TYPES|DA TA structure TYPE str_type |LIKE str_dobj...参照数据库表生成:TYPES|DA TA structure TYPE dbtab.4.表类型和内表表类型的对象称为内表.4.2.4 数据字典中的类型●数据元素(Data elements),相当于ABAP中的基本类型和引用类型.●结构(Structures),由数据元素字段构成,对应ABAP中的结构类型.表类型(Table types),对应ABAP中的表类型.数据字典中的数据类型与ABAP中的中数据类型对应关系:4.2.5 程序中的数据对象1.文字对象当字符文字长度超过编辑器的一行时,可以使用”&”进行连接,避免因换行而产生的多余空格,如:long = ‘This is ‘&‘a long sentence’.如果需要输出“’”,则需要在前面多加一个“’”转回愿意.2.有名称的数据对象常量声明:CONSTANT: const(len) TYPE|LIKE dobj [DECIMALS dec] V ALUE val.结构体常量声明(每个组件必须指定初始值):CONSTANT:BEGIN OF structure,str1 TYPE|LIKE dobj [DECIMALS dec] V ALUE val,str2 TYPE|LIKE dobj [DECIMALS dec] V ALUE val,...,strn TYPE|LIKE dobj [DECIMALS dec] V ALUE val,END OF structure.3.系统数据对象(见附表)4.查明数据对象属性DESCRIBE FIELD f LENGTH len.此语句将字段f的长度写入变量len.●LENGTH:确定数据对象长度.●TYPE: 确定数据对象类型.●OUTPUT-LENGTH:确定实际输出长度.●DECIMALS:确定P类型小数位长.●EDIT MASK:确定在数据字典中定义转换例程.●HELP-ID:确定在数据字典中定义的F1帮助信息.4.3 基本数据操作4.3.1数据赋值●MOVE source TO incept.等介于:incept = source.●CLEAR dobj.将数据对象dobj还原为初始值.●结构体间赋值:struct2 = struct1.(组件结构相同).●MOVE-CORRESPONDING struct1 TO struct2.(部分组件结构相同).4.3.2类型转换(见附表).4.3.3数值运算两个结构体的同名字段之间可以整体进行算术运算:ADD-CORRESPONDING struct1 TO struct2.SUBTRACT-CORRESPONDING struct1 FROM struct2.MULTIPLY-CORRESPONDING struct2 BY struct1.DIVIDE-CORRESPONDING struct2 BY struct1.以上将对两个结构体中的同名字段进行相应运算(非数值类型数据会引起错误).2.数学函数任意类型参数的函数列表:注意:函数名与左括号间不能有空格,括号与参数间必须有空格.4.3.4数据输出输出格式化选项:注:用户主记录System->User profile->Own data(SU01).4.3.5逻辑表达式通用逻辑表达式列表:3.IS操作符●...f IS INITIAL...:检查字段f是否为初始值.●...fs IS ASSIGNED...:检查字段符号是否被分配.●...p IS [SUPPLIED|REQUESTED]...:检查过程中的参数是否被实参填充.4.BETWEEN操作符●...f1 BETWEEN f2 AND f3...:检查数据对象的值是否属于特定范围之间.5.IN操作符(P110)●...f IN seltab...:检查一个数据对象的内容是否遵从某个选择表的逻辑条件.6.组合逻辑表达式●AND:与.●OR:或.●NOT:非.注:括号与操作数间至少要有一个空格,如:IF ( c > n ) AND ( c < f ).4.4结构控制程序代码分三种结构:●顺序结构:语句逐行执行.●分支结构:根据不同的条件执行不同语句块.●循环结构:反复执行某个语句.4.4.1分支控制1.IF/ENDIF结构:IF <condition1>.<statement block>ELSEIF <condition2>.<statement block>......ELSE.<statement block>ENDIF.注:可嵌套.2.CASE/ENDCASE结构:CASE f.WHEN f11 [OR f12 OR ...].<statement block>......[WHEN OTHERS.]<statement block>ENDCASE.其中,f为变量,f ij可以是变量或者固定值.4.4.2循环控制1.无条件循环DO [n TIMES].<statement block>ENDDO.说明:n为循环次数,可以是文字或变量,如果没有限定n值,则必须用EXIT,STOP 或REJECT等语句强制结束循环.DO循环可嵌套,SY-INDEX为当前循环次数.2.条件循环WHILE <condition>.<statement block>ENDWHILE.注:可嵌套,其它同上.3.循环中止●CONTINUE:无条件中止当前本轮循环,开始下一轮循环.●CHECK:条件中止当前本轮循环(条件为假时), 开始下一轮循环.●EXIT:无条件完全中止当前循环,继续循环结束语句(ENDDO,ENDWHILE等)后面的代码,如果在嵌套循环中,系统仅退出当前循环.4.5处理字符数据4.5.1字符数据1.连接字符串CONCA TENATE s1 s2 ... sn INTO s_dest [SEPARATED BY sep].注:所有字符串操作将忽略s1....sn中的尾部空格(如需保留空格,可使用指定偏移量).如果出现截断情况,将SY-SUBRC设为4,否则返回0.2.拆分字符串SPLIT s_source AT sep INTO s1 s2 ... sn.如果所有子串足够长且不必截断任何部分,则将SY-SUBRC设为0,否则返回4, 如果源字符串能够拆分的子串多过指定的数目,则源子串最后的剩余部分包括其后的分隔符都将写入最后一个子串,要避免这种情况,需要使用内表进行操作: SPLIT s_source AT sep INTO TABLE itab.在该形式中,根据子串数目生成n行的内表.例如:DATA:text type string,itab TYPE TABLE OF string.text = ‘ABAP is a programming language’.SPLIT text AT space INTO TABLE itab.LOOP AT itab INTO text.WRITE / text.ENDLOOP.3.查找子串模式SEARCH c FOR str.在字段c中查找字符串str.如果找到,则将SY-SUBRC返回0,SY-FDPOS返回字段c中该字符串的位置(从左算起的字节偏移量),否则SY-SUBRC返回4,查找模式有以下几种:●str 搜索str并忽略尾部空格.●.str. 搜索str,但不忽略尾部空格.●*str 搜索以str结尾的单词.●str* 搜索以str开始的单词.REPORT z_string_search.DATA string(30) TYPE c VALUE 'This is a testing sentence.'. WRITE: / 'searched','sy-subrc','sy-fdpos'.SEARCH string FOR 'X'.WRITE: / 'X', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER'sy-fdpos'.SEARCH string FOR 'itt '.WRITE: / 'itt ', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER'sy-fdpos'.SEARCH string FOR '.e .'.WRITE: / '.e .', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER'sy-fdpos'.SEARCH string FOR '*e '.WRITE: / '*e ', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER'sy-fdpos'.SEARCH string FOR 's* '.WRITE: / 's* ', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER'sy-fdpos'.输出结果如下:searched sy-subrc sy-fdposX 4 0itt 4 0.e . 4 0*e 0 18s* 0 184.替换字段内容.REPLACE str1 WITH str2 INTO s_dest [LENGTH len].搜索s_dest中前len个字符中的子串str1,用str2来替换它,如果成功,SY-SUBRC返回0,否则还回非0值. REPORT z_replace.DATA name TYPE string.name = 'Michael-Cheong'.WHILE sy-subrc = 0.REPLACE '-' WITH ' ' INTO name.ENDWHILE.WRITE / name.输出结果: Michael Cheong5.确定字段长度n = STRLEN( str ).函数将str作为字符数据类型处理,不考虑其实际类型,也不进行转换.计算其首字符到最后一个非空字符的长度,不包括结尾空格.6.其它操作语句●SHIT:将字符串整体或子串进行位移.●CONDENSE:删除字符串中的多余空格.●TRANSLATE:字符转换,如将ABC转换为abc.●CONVERT TEXT:创建一个可以排序的格式.●OVERLAY:用一个字符串覆盖另一个字符串.注:CO,CN,CA,NA比较时区分大小写,且尾部空格也在比较范围之内,CS,NS,CP,NP比较时忽略尾部空格且不区分大小写,比较结束后,如果结果为真,SY-FDPOS将给出s2在s1中的偏移量信息.模式表示可以使用通配符,”*”用于替代任何字符串,”+”用于替代单个字符.换码字符使用:●指定大小写(如#A,#b).●通配符”*”(输入#*),将其转回原义.●通配符”+”(输入#+),将其转回原义.●换码符本身”#”(输入##),将其转回原义.●字符串结尾空格(输入#__),指定比较结尾空格.4.5.3定位操作子串str[+position][(len)].从字符串str中的position位开始取出长度为len的子串.可动态指定偏移量及长度的情况(即position及len可为变量):●用MOVE语句或赋值运算符给字段赋值时.●用WRITE TO语句向字段写入值时.●用ASSIGN将字段分配给字段符号时.●用PERFORM将数据传送给子程序时.off = 6.len = 2.date+off(len) = ‘01’.4.6使用内表types定义的并不是结构体对象,只是结构类型,不能作为工作区,当定义的内表没有表头行(工作区)时,必须为其定义一个结构体作为工作区,否则无法使用此内表.如果没有给内表定义工作区,则在定义内表时必须声明表头行(with header line). DATA:BEGIN OF line, "work area(structure)结构类型且结构体对象num TYPE i,sqr TYPE i,END OF line,"无表头行内表,内表定义都使用data关键词.itab TYPE(LIKE) STANDARD TABLE OF line WITH KEY table_line. DATA DIRTAB LIKE CDIR OCCURS 10 WITH HEADER LINE.定义标准内表DO 5 TIMES.line-num = sy-index.line-sqr = sy-index ** 2.APPEND line TO itab.ENDDO.LOOP AT itab INTO line.WRITE:/ line-num,line-sqr.ENDLOOP.CLEAR itab.注:1.TYPES与DATA区别:TYPES是用来定义某种类(型)的,需(用DATA语句)实例化以后才可以使用,而DATA是用来定义数据对象(实例变量)的,对于用DA TA直接定义的结构体对象(不参照其它结构类型),其同时也是一个结构类型.2.TYPE与LIKE区别:TYPE后面跟随的只能是某种类(型),而LIKE后面可以跟随类型或实例对象,参照结构体对象生成内表时只能用LIKE,不能用TYPE,因为结构体对象不是类型,只是一种实例对象,参照结构类型生成内表时可以用LIKE也可以用TYPE.其中通过LIKE定义的内表直接拥有参照结构类型的元素结构,而通过TYPE定义的内表只能间接拥有被参照结构类型的元素结构,结构类型不能作为内表的工作区,只有结构体对象才可以.内表定义语法:1.标准表:可指定或不指定关键词,可重复.逻辑索引,操作数据时数据内存位置不峦,系统只重排数据行的索引值.DATA itab TYPE|LIKE [STANDARD] TABLE OF structure [WITH KEY comp1 ... compn(DEFAULT KEY) WITH HEADER LINE INITIAL SIZE n].2.排序表:可指定唯一或不唯一的关键词,也可不指定,逻辑索引,按关键词升序存储.DATA itab TYPE|LIKE SORTED TABLE OF structure [WITHNON-UNIQUE(UNIQUE) KEY comp1 ... compn(DEFAULT KEY) WITH HEADER LINE INITIAL SIZE n].3.哈希表:必须指定唯一关键词.无索引DATA itab TYPE|LIKE HASHED TABLE OF structure WITH UNIQUE KEY comp1 ... compn(DEFAULT KEY) [WITH HEADER LINE INITIAL SIZE n].注:如果n值为0或不指定的话,程序会为内表对象分配8KB大小内存,所以,如果内表比较小,不要把该值设为0,以避免内存浪费.旧版标准表定义语法:DATA itab TYPE|LIKE [STANDARD] TABLE OF structure OCCURS n.或者DATA:BEGIN OF itab OCCURS n,...,fi...,END OF itab.动态创建内表:REPORT zmaschl_create_data_dynamic .TYPE-POOLS: slis.DATA: it_fcat TYPE slis_t_fieldcat_alv,is_fcat LIKE LINE OF it_fcat.DATA: it_fieldcat TYPE lvc_t_fcat,is_fieldcat LIKE LINE OF it_fieldcat.DATA: new_table TYPE REF TO data.DATA: new_line TYPE REF TO data.FIELD-SYMBOLS: <l_table> TYPE ANY TABLE,<l_line> TYPE ANY,<l_field> TYPE ANY.* Build fieldcatCALL FUNCTION 'REUSE_ALV_FIELDCA TALOG_MERGE' EXPORTINGi_structure_name = 'SYST'CHANGINGct_fieldcat = it_fcat[].LOOP AT it_fcat INTO is_fcat WHERE NOT reptext_ddic IS initial.MOVE-CORRESPONDING is_fcat TO is_fieldcat.is_fieldcat-fieldname = is_fcat-fieldname.is_fieldcat-ref_field = is_fcat-fieldname.is_fieldcat-ref_table = is_fcat-ref_tabname.APPEND is_fieldcat TO it_fieldcat.ENDLOOP.* Create a new TableCALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTINGit_fieldcatalog = it_fieldcatIMPORTINGep_table = new_table.* Create a new Line with the same structure of the table.ASSIGN new_table->* TO <l_table>.CREATE DA TA new_line LIKE LINE OF <l_table>.ASSIGN new_line->* TO <l_line>.* Test it...DO 30 TIMES.ASSIGN COMPONENT 'SUBRC' OF STRUCTURE <l_line> TO <l_field>.<l_field> = sy-index.INSERT <l_line> INTO TABLE <l_table>.ENDDO.LOOP AT <l_table> ASSIGNING <l_line>.ASSIGN COMPONENT 'SUBRC' OF STRUCTURE <l_line> TO <l_field>.WRITE <l_field>.ENDLOOP.注:CLEAR itab[].表示操作的是内表对象.而CLEAR itab.当itab有表头行时表示操作表头行,如无表头行时表示操作内表对象.当一个操作语句结束后,SY-TABIX返回该行的索引值,对于所有行操作,如果访问成功,SY-SUBRC返回0,否则返回非0值.4.插入行—INSERT●INSERT structure INTO itab INDEX idx.无表头行索引表,itab的行数应大于或等于idx-1.否则失败●INSERT itab INDEX idx.有表头行索引表.●对于哈希表,系统按关键词将新行插入特定位置.●INSERT structure INTO|INITIAL LINE INTO TABLE itab.此语句对于标准表来说与append效果相同,对于排序表来说,插入的行不可以打乱按照关键词排序的顺序,否则插入不成功,对于哈希表来说,插入过程中系统按照关键词对行进行定位.INITIAL关键词是用于向内表中插入结构中各类型的初始值的.●INSERT LINES OF itab1 [FROM n1] [TO n2] INTO [TABLE] itab2 [INDEXidx].将内表中部分或全部数据行整体插入到另一内表中,指定行数时itab1,itab2必须为索引表,指定TABLE关键词时,itab2可以是任意内表.此方式比其它方式快20倍左右.5.附加行—APPEND(只能操作索引表)APPEND [structure TO|INITIAL LINE TO] itab.APPEND LINES OF itab1 [FORM n1] [TO n2] TO itab2.6.聚集附加—COLLECTCOLLECT line INTO itab.对于需要附加的数据,如果在内表中存在关键词内容与其相同的数据行,则此语句将需要附加的数据累加到内表中的这一行上,而不会另外再添加一行,操作成功后,SY-TABIX返回被处理过的行的索引.注:关键词以外的所有字段必须是数字类型7.读取行—READ(可用于任何类型内表)●READ TABLE itab [INTO wa|ASSIGNING <fs>] INDEX idx.通过索引读取内表中的单行数据. ASSIGNING表表示指派给字段符号.●READ TABLE itab FROM structure [INTO wa|ASSIGNING <fs>].读取与结构相同的工作区中的关键词内容全部相同的内表数据.●READ TABLE itab WITH TABLE KEY field1 = v1 ... field2 = v2 [INTOwa|ASSIGNING <fs>].指定所有关键词值,并读取相等时内表行.●READ TABLE itab WITH KEY field1 = v1 ... field2 = v2 [INTOwa|ASSIGNING <fs>].读取内表中字段fieldn(不一定是表关键词段)与值vn 相同时的内表行.8.修改行—MODIFY●MODIFY itab [FROM wa] [INDEX idx] [TRANSPORTING f1 f2 ...].如果内表包含的行数少于idx,则不更改任何行.●MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2 ...].根据工作区wa中关键词修改内表行, TRANSPORTING表示修改指定字段值.●MODIFY itab FROM wa TRANSPORTING f1 f2 ... WHERE condition.修改符合WHERE子句中条件的内表中的指定字段值.9.删除行—DELETE●DELETE itab INDEX idx.根据索引删除内表行.●DELETE TABLE itab FROM wa.根据工作区关键词删除行.●DELETE TABLE itab WITH TABLE KEY field1 = v1 ... field2 = v2.根据指定关键词值删除行.●DELETE itab [FROM n1] [TO n2] [WHERE <condition>].10.循环处理--LOOPLOOP AT itab [INTO wa] [FROM n1] [TO n2] [WHERE condition].<statement block>.ENDLOOP.4.6.3操作整个内表1.排序SORT itab [ASCENDING|DESCENDING] [AS TEXT] [STABLE][BY f1 [ASCENDING|DESCENDING] [AS TEXT]......f1 [ASCENDING|DESCENDING] [AS TEXT]]说明:●ASCENDING|DESCENDING:升序或降序.默认升序.●AS TEXT:根据当前语言按字母顺序排序字符字段,否则按字符平台相关内部编码进行排序.●STABLE:保持排序前后不需要改变的数据行的相对顺序.2.控制级操作(用于总计,缩进,格式控制等)A T FIRST|LAST|NEW f|END OF f.<statement block>ENDA T.说明:●FIRST:当循环为内表的第一行时,执行语句块中语句.在工作区中,系统用*填充所有关键词内容.●LAST: 当循环为内表的最后一行时,执行语句块中语句. 在工作区中,系统用*填充所有关键词内容.●NEW f:字段f前面(即左边)的全部字段内容之一不同于上一行时, 执行语句块中语句.在工作区中,系统用*填充f后面所有关键词内容.●END OF f:如果下一行行组中的任何字段内容不同于上一行, 执行语句块中语句.在工作区中,系统用*填充f后面所有关键词内容.注:在控制级操作期间,在工作区中,对于非标准关键词段,将全部进行初始化,在执行完控制操作后(即ENDAT语句后)工作区中的数据将全部还原到进入控制级操作语句前(即进入AT前)状态.3.初始化内表●CLEAR itab.:带表头行时只清空表头行,不带表头行时清空整个内表.●CLEAR itab[].:只清空整个内表对象数据.不清空表头行.●REFRESH itab或REFRESH itab[].:只清空整个内表对象数据.不清空表头行.●FREE itab.或FREE itab[].:只清空整个内表对象数据.不清空表头行,同时释放内存.●......itab IS INITIAL....:检查内表是否为空.4.整体复制内表●MOVE itab1 TO itab2.:如果两表都存在表头行,则此语句只复制了表头行.●MOVE itab1[] TO itab2[].:指定表体复制.●MOVE itab1[] TO itab2.:表itab2无表头行时才成立.●itab2 = itab1.同上1●itab2[] = itab1[].同上2●itab2 = itab1[].同上35.比较内表大小... itab1 <operator> itab2...:其中<operator>可以为=,<>,><,>=,<=,>,<等.4.6.4Extract Datasets●FIELD-GROUP fg.行结构分配.●INSERT f1 f2 ... INTO fg.生成字段组fg的具体字段结构.●EXTRACT fg.将字段组填充给EXTRACT.●SORT.排序.●LOOP. <statement block> ENDLOOP.循环输出EXTRACT.4.7动态数据对象4.7.1字段符号●FIELD-SYMBOLS <fs> [TYPE type|LIKE dobj].声明字段符号.●ASSIGN f TO <fs>.静态分配数据对象给字段符号.●ASSIGN f[+i] [(j)] TO <fs>.指定偏移量和长度.●ASSIGN (f) TO <fs>.动态分配,先找到字段f的内容,然后将该内容分配给<fs>.4.7.2数据引用TYPES t_dref TYPE REF TO DATA.DATA dref TYPE REF TO DATA.4.8模块化技术4.8.2子程序1.定义:FORM subr [[USING [VALUE(p1)]... ] [TYPE t|LIKE f]...] [TYPE ANY][CHANGING [V ALUE(p1)] ... ] [TYPE t|LIKE f]...] [TYPE ANY].<subr codes>ENDFORM.注:●V ALUE参数表未示值传递,此方式在子程序调用后实参的值不会被改变.●无V ALUE参数时表示引用传递,会改变实参的值.●USING与CHANGING无任何区别.●位于两个子程序间的代码不属于任何事件块.●参数传递时不存在类型转换,要求必须兼容.2.调用:PERFORM subr [USING p1 ... pn] [CHANGING pi ... pj].4.8.3功能模块(p153)4.8.5源代码复用1.包含程序包含程序是单纯的代码复用,不是可执行程序,不能单独运行,必须被其它程序调用,包含程序不能调用自身.INCLUDE incl.包含程序调用,此语句必须独占一行.2.宏:(语句块中最多只能包含9个占位符&1...&9).例:DATA:result TYPE i,int1 TYPE i VALUE 1,int2 TYPE i VALUE 2.DEFINE operation.result = &1 &2 &3.output &1 &2 &3 result.END-OF-DEFINITION.DEFINE output.write: / 'The result of &1 &2 &3 is',&4.END-OF-DEFINITION.operation 1 + 2.operation int2 - int1.4.9.1静态错误检查1.语法检查:用Check键.2.扩展语法检查(SLIN):在ABAP初台界面输出程序名后,选择Program->Check->Extended Syntax Check. Standard.4.9.2运行时错误控制1.可捕捉的错误CA TCH SYSTEM-EXCEPTIONS exc1 = rc1 ... excn = rcn....ENDCATCH.其中exci表示一个单一可捕捉错误或者一个ERROR类,rci则代表一个数字.如果其中错误之一在CA TCH和ENDCATCH语句之间出现,程序就不会中止,而是直接跳至ENDCATCH后,把系统指定的错误代码rci赋给字段SY-SUBRC.此语句可嵌套.例如:DATA:result1 TYPE p DECIMALS 3,number TYPE i VALUE 11.CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.DO.number = number - 1.result1 = 1 / number.WRITE: / number,result1.ENDDO.ENDCATCH.IF sy-subrc = 5.WRITE / 'division by zero!'.ENDIF.2.不可捕捉的错误(通过ST22查看,在SAP系统中保存14天,可通过Keep功能保存更长时间).第六章数据库操作6.2.1表字段在数据字典中,每创建一个数据库表后,都将同时生成一个同名的结构化数据类型.6.2.2外部关键词外部关键词内容必须在其对应的约束表(check table)中存在,否则无法插入.6.2.3技术设定1.数据类型(data class):●APPL0(Master data),较少需要被修改的系统数据表,如员工个人信息.●APPL1(Transaction data),需要经常被修改的数据表,如产品库存量表.●APPL2(Organization and customizing),系统定制数据表,在系统安装后很少需要修改,如国家代码等.2.数量级别:0 0 to 6,6001 6,600 to 26,0002 26,000 to 100,0003 100,000 to 420,0004 420,000 to 34,000,0003.缓冲(Buffering)机制如果在缓冲设定中选择了Buffering switched on项,则需要设定其缓冲类型(有Full,Single-record和Generic三种).缓冲机制的意义在于首次查询时将数据表中的数据放入应用服务器缓冲区,以提高后续查询效率,要注意最好不要对经常需要的数据库表设置该机制,对于经常读取但很少更新或者通常只有在60秒后才可能被其它应用服务器程序修改的数据库表,开启缓冲机制可以上百倍地提高效率.4.Log data changes用于设定表中的数据修改时是否在系统日志中记录.6.2.4索引一个数据库表可以包含一个主索引(Primary Index)和多个附属索引(Secondary Indexes).主索引只包含表关键词和指向整个数据条目的指针,由系统自动生成并在添加数据库条目时进行维护.索引中的数据已经排序.6.3.1SELECT语句SELECT <result> FROM <source> INTO <target>[WHERE <condition>] [GROUP BY <fields>][HAVING <cond>] [ORDER BY <fields>].●HAVING子句用于限定ORDER BY子句中数据条目组的选择条件1.选择单行数据:●SELECT SINGLE * FROM tab INTO wa_tab WHERE <condition>.选择单行全部数据.。
ABAP入门知识最全总结新人小白必备学习资料
SAP系统与ABAP关系
01
SAP系统是一款广泛应用于企业 资源计划(ERP)、供应链管理 (SCM)、客户关系管理 (CRM)等领域的软件产品。
02
ABAP是SAP系统的开发语言, 用于编写SAP系统中的业务逻辑、 数据处理和报表生成等功能。
调试日志
在调试过程中,可以开启调试日 志功能,记录程序执行过程中的 详细信息和操作步骤。这对于复 杂问题的排查和分析非常有帮助。
08
实战案例分析与经验分 享
案例一:简单报表开发实例
报表需求分析与设计
明确报表目的、数据源和输出格式,设计报 表布局和字段。
ABAP报表开发流程
创建报表程序,定义数据源和选择条件,编 写报表逻辑和输出处理。
根据实际需求设置报表的输出格式, 如PDF、Excel、Word等。
格式调整
调整报表的页面设置、边距、字体、 颜色等,确保报表输出的美观和易读 性。
报表性能优化策略
数据源优化
优化数据库查询语句,减少数据冗余和提高查询 效率。
报表缓存
合理利用报表缓存机制,减少重复计算和数据库 访问次数。
分页处理
对于大量数据的报表,采用分页处理技术,提高 报表加载速度和用户体验。
Eclipse与SAP系统连接
配置Eclipse连接参数,连接到SAP系统,实现ABAP代码的上传、下载和执行等操作。
其他辅助工具推荐
SAP Notepad
一款轻量级的文本编辑器,支持ABAP语法高亮显示和代 码折叠等功能,适合编写简单的ABAP程序。
ABAP Doc
SAPABAP笔记:OOALV学习分享
SAPABAP笔记:OOALV学习分享ALV GRID CONTROL实例ALV GRID实例的定义,参照CL_GUI_ALV_GRID类data ALV_GRID1 type refto cl_gui_alv_grid.ALV GRID继承结构:ALV GRID相关的⼏个控制结构1.字段⽬录 [Field catalog]字段⽬录是⽤来控制ALV显⽰的⽹格中每个字段的属性的,⽐如字段的顺序,对齐⽅式,可编辑状态,颜⾊,等等.常⽤的控制字段如下:(下⾯的⽰例将说明这些字段的使⽤,参考STRUCTURE LVC_S_FCAT)2.布局控制[layout]布局是⽤来控制整个ALV的⼀个布局,⽐如ALV的标题,是否可编辑,⾏颜⾊,列颜⾊.参照ALV的控制结构[LVC_S_LAYO],以后的例⼦我将详细介绍如何设置⾏颜⾊和列颜⾊.详细的结构说明3.打印和排序,过滤控制打印的参数控制请参考结构 [LVC_S_PRNT]排序的参数控制请参考结构[LVC_S_SORT]过滤的参数控制请参考结构[LVC_S_FILT]这⾥不再⼀⼀解释,进⼊中⽂版本,⾥⾯应该也有解释的,虽然⼀些不是很清楚.五.编写简单的ALV程序.⾸先这⾥就不详细介绍DIALOG的⽤法了.OO的ALV GRID必须存在于⼀个容器当中,就是FUNCTION的ALV,其实也是⼀样的,底层也是使⽤CL_GUI_ALV_GRID这个类的.⾸先ALV的显⽰需要有⼏个先决条件.1,字段⽬录,这个是必须的,如果没有这个参数,参考⼀个数据字典也是可以的,就是参数I_STRUCTURE_NAME.2.存放数据的内表,最好内表的结构和字段⽬录是⼀致的,否则可能会出现⼀些⽆法预知的错误,当然你说我⾮要不⼀样,那也不⼀定会出现错误.我建议是最好⼀样的.这2个是必须的,布局的话,应该是可以不设置的,使⽤默认的就可以了.第⼀步:创建个SCREEN,在屏幕上创建个容器,.定义变量.DATA: WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,WCL_ALV TYPE REF TO CL_GUI_ALV_GRID.*--- 存放字段⽬录的内表DATA gt_fieldcat TYPE lvc_t_fcat . *--- 布局结构DATA gs_layout TYPE lvc_s_layo .*----声明需要显⽰的内表(以SFLIGHT为例)DATA BEGIN OF gt_list OCCURS 0 .INCLUDE STRUCTURE SFLIGHT .DATA END OF gt_list .第⼆步: 创建ALV这个对象,它的⽗组件是那个容器.在PBO中写⼊如下代码:PROCESS BEFOREOUTPUT . MODULE display_alv .创建DISPLAY_ALV的MODULE后,写下如下代码:MODULE display_alv OUTPUT . PERFORM display_alv . ENDMODULE .在FORM DISPLAY_ALV中,判断ALV实例是否存在,如果不存在,则创建:IF WCL_ALV IS INITIAL .CREATE OBJECT: WCL_CONTAINEREXPORTINGCONTAINER_NAME = 'ALV_CON'.CREATE OBJECT WCL_ALVEXPORTINGI_PARENT = WCL_CONTAINER.*-----准备获取字段⽬录PERFORM prepare_field_catalog CHANGINGgt_fieldcat .*-----设置布局PERFORM prepare_layout CHANGING gs_layout .*-----显⽰ALVCALL METHODgr_alvgrid->set_table_for_first_display EXPORTING* I_BUFFER_ACTIVE =* I_CONSISTENCY_CHECK =* I_STRUCTURE_NAME =* IS_VARIANT =* I_SAVE =* I_DEFAULT = 'X'is_layout = gs_layout* IS_PRINT =* IT_SPECIAL_GROUPS =* IT_TOOLBAR_EXCLUDING =* IT_HYPERLINK =CHANGINGit_outtab = gt_list[]it_fieldcatalog = gt_fieldcat* IT_SORT =* IT_FILTER =EXCEPTIONSinvalid_parameter_combination = 1program_error = 2too_many_lines = 3OTHERS = 4 .ELSE .*----刷新ALVCALL METHODgr_alvgrid->refresh_table_display * EXPORTING * IS_STABLE = *I_SOFT_REFRESH =EXCEPTIONSfinished = 1OTHERS = 2 .IF sy-subrc <> 0. *--异常处理 ENDIF.ENDIF .下⾯是⼀段⽰例代码:FORM handle_data_changed USINGir_data_changedTYPE REF TO cl_alv_changed_data_protocol. DATA: ls_mod_cell TYPE lvc_s_modi,Lv_value TYPE lvc_value.SORT ir_data_changed->mt_mod_cellsBY row_id.LOOP ATir_data_changed->mt_mod_cellsINTO ls_mod_cellWHERE fieldname = 'SEATSMAX'. CALLMETHOD ir_data_changed->get_cell_valueEXPORTING i_row_id = ls_mod_cell-row_idI_fieldname = 'CARRID'IMPORTING e_value = lv_value.IFlv_value = 'THY' AND ls_mod_cell-value > '500'.CALL METHOD ir_data_changed->add_protocol_entryEXPORTINGI_msgid = 'SU'I_msgno = '000'I_msgty = 'E'I_msgv1 = 'This number can not exceed 500 for 'I_msgv2 = lv_valueI_msgv3 = 'The value is et to ''500'''I_fieldname = ls_mod_cell-fieldnameI_row_id = ls_mod_cell-rowid.CALL METHOD ir_data_changed->modify_cellEXPORTING i_row_id = ls_mod_cell-row_idI_fieldname = ls_mod_cell-fieldnameI_value = '500'.ENDIF.ENDLOOP.ENDFORM.附录:ABAP颜⾊代码ABAP中的颜⾊代码是由4位字都组成的CxyzC:color的简写,颜⾊代码均以C开头x:标准⾊代码,SAP中⼀共有7个标准⾊y:反转颜⾊启⽤/关闭 1/0z:增强颜⾊启⽤/关闭 1/0注意:颜⾊设置中有优先级顺序,他们是单元格--->⾏--->列.。
ABAP学习笔记
ABAP学习笔记一、ABAP语法简介:ABAP(Advanced business application program),是一种高级企业应用编程语言,它支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。
它适合生成报表,支持对数据库的操作,如:Sqlserver,Oracle,DB2等主流数据库系统。
主要的语法有:数据类型、控制流程、文本摘要、输出格式、程序调试1、数据类型:(八种基本数据类型)D :日期类型,格式为YYYYMMDD,长度为8T :时间类型,格式为HHMMSS,长度为6I :整数类型,默认长度为4,初始值为0F :浮点类型,默认长度为8,初始值为0,常用于计算C :字符串类型,定义变量时指定字符个数N :数字字符串类型,定义变量时指定数值字符个数X :字节序列类型,定义变量时指定字节数P(压缩号) :允许的长度为1 到16 个字节,系统会指定默认值8 个字节(也就是15 位数字)和0 个小数位常用:大小,长度,重量,货币等单位的场合.2、输出格式:WRITE 'First line.'.WRITE 'Still first line.'WRITE / 'Second line.'WRITE /13 'Third line’.3、控制流程:使用IF的条件分支IF <条件表达式1>.< statement block >ELSEIF <条件表达式2>.< statement block >ELSEIF <条件表达式3>.< statement block >.....ELSE.< statement block >ENDIF.使用CASE的条件分支CASE <f>.WHEN <F1>.<statement block>WHEN <F2>.<statement block>WHEN <F3>.<statement block>WHEN .........WHEN OTHERS.<statement block>ENDCASE.二、ABAP的语法特点:1、由各自独立的语句构成。
sap abap 学习笔记总结
目录基本语法 (4)定义数据和类型 (4)运算符控制流语句 (5)字符串操作 (7)字符串连接 (7)字符串拆分 (7)字符串查找 (7)字符串替换 (8)字符串长度 (8)定位操作字符串 (9)子程序 (9)无参数 (9)带参数 (9)参数传值和传地址对比 (10)创建功能模块FUNCTION (10)包含程序 (11)静态变量 (11)内表操作 (11)1.定义基本内表 (11)2复杂内表. (12)示例一 (12)示例二 (15)示例三 (16)示例四 (17)数据库建表 (21)数据库查询 (21)(一)单表查询 (21)(二)多表联合查询 (25)1.嵌套查询 (25)2.FOR ALL ENTRIES (26)3多表结合查询 (27)结果放入变量 (27)查询单行,结果放入结构体对象(工作区)中 (27)查询多行,结果放入内表中 (27)数据库操作查询学生班级表。
(29)单表查询 (29)单行部分字段 (30)多表联合查询 (30)单行所有字段 (31)单行部分字段 (32)添加数据 (33)添加一条 (33)插入多行数据 (33)修改记录 (34)使用变量修改 (34)使用工作区修改 (34)使用内表修改多条数据 (34)修改或保存 (35)使用工作区修改或保存 (35)使用内表修改或保存 (35)删除 (36)使用工作区删除 (36)使用内表删除 (36)案例:查询数据库数据至内表修改内容并且更新到数据库 (36)报表设计 (37)选择屏幕 (37)选择屏幕参数 (37)格式化屏幕参数 (38)复杂选择标准 (38)ALV报表 (40)示例一 (40)参数说明 (43)w_fcat TYPE slis_fieldcat_alv, (43)用到属性: (44)其他属性: (44)w_layo TYPE slis_layout_alv, (46)使用属性: (46)其他属性 (46)i_fcat TYPE slis_t_fieldcat_alv. (49)示例二: (52)屏幕编程 (55)重要概念: (55)创建: (55)举例:用户输入学号返回姓名等信息 (57)由数据字典生成屏幕 (58)根据定义的结构生成屏幕 (58)单选、复选钮用法 (58)P OV(F4帮助)添加 (59)屏幕间跳转 (59)添加table control 字段 (63)设置某列为不可编辑 (64)设置下拉列表框 (64)从数据库取值加入列表 (65)下拉列表取值 (66)Screen上后添加数据库字段 (67)T ABLE CONTROL (67)Screen layout (67)Screen 100中代码 (68)Programe中代码 (69)SARTFORM (71)简单示例 (71)程序部分 (71)Smartform配置 (72)Template (72)Table做法: (75)样式设置 (77)基本语法定义数据和类型REPORT ZWANGZHENG2.*定义数据txt1 类型 C 长度15 初始值HELLO WORLD DATA txt1(15) TYPE c VALUE 'HELLO WORLD'. *定义类型t_txtTYPES t_txt(15) TYPE c .*定义数据txt2 类型为:t_txtDATA txt2 TYPE t_txt VALUE 'first'.*定义类型为N的数据及类型。
abap开发知识点
ABAP开发知识点ABAP(Advanced Business Application Programming)是SAP系统中的编程语言,主要用于开发和定制SAP应用程序。
在本文中,我们将介绍ABAP开发的一些重要知识点。
一、ABAP语言基础1.数据类型:ABAP支持多种数据类型,包括整数、浮点数、字符型、日期型等。
了解不同数据类型的使用方法和限制是编写高效代码的关键。
2.变量和常量:在ABAP中,我们可以使用DATA语句定义变量,并使用CONSTANTS语句定义常量。
熟悉变量和常量的使用方式可以提高代码的可读性和维护性。
3.控制结构:ABAP提供了多种控制结构,如IF语句、CASE语句和循环语句等。
掌握这些控制结构的使用方法可以实现条件判断和循环操作。
二、ABAP面向对象编程1.类和对象:ABAP支持面向对象编程,可以定义类和对象。
了解类的概念和对象的创建方式可以提高代码的可重用性和可维护性。
2.成员方法和属性:在ABAP类中,我们可以定义成员方法和属性。
掌握这些概念的使用方法可以实现类的封装和功能扩展。
3.继承和多态:ABAP支持继承和多态的特性。
熟悉这些特性的使用方式可以简化代码的编写,提高代码的可扩展性。
三、ABAP数据库访问1.数据库表的定义和操作:ABAP可以创建和操作数据库表。
了解数据库表的定义和操作方式可以实现数据的存储和检索。
2.SQL语句的使用:在ABAP中,我们可以使用SQL语句进行数据库操作。
熟悉SQL语句的使用方式可以实现复杂的数据查询和更新。
3.事务处理:ABAP支持事务处理的机制,可以保证对数据库的操作的一致性和完整性。
了解事务处理的使用方式可以避免数据错误和数据丢失。
四、ABAP调试和错误处理1.调试技巧:ABAP提供了调试工具,可以帮助我们查找和修复代码中的错误。
掌握调试技巧可以快速定位问题,并提高代码的质量。
2.异常处理:在ABAP中,我们可以使用TRY…CATCH语句来处理异常。
abap 主要知识点
abap 主要知识点ABAP(Advanced Business Application Programming)是一种用于开发企业级业务应用程序的编程语言,主要应用于SAP业务软件系统中。
ABAP主要用于实现和定制SAP ERP、SAP S/4HANA等企业资源规划系统。
以下是ABAP主要知识点:1.基本语法:ABAP的基本语法包括数据类型、变量、常量、运算符、流程控制、函数、过程、模块等。
2.数据结构:ABAP中常用的数据结构有数组、表格、链表、树形结构等。
3.界面设计:ABAP可用于设计用户界面,包括对话框、菜单、报表等。
4.数据库操作:ABAP支持对数据库的CRUD(创建、读取、更新、删除)操作,主要包括SQL语句、数据定义、数据存取等。
5.报表设计:ABAP具有强大的报表设计功能,可以创建各种复杂程度的报表,如分组报表、多级报表、交叉报表等。
6.常用ABAP组件:ABAP中有一些常用的组件,如逻辑块(ALV)、数据字典(DDIC)、报表框架(BDC)、界面事件(BEL)、用户自定义函数(FC)等。
7.企业对象组件(EPC):EPC是ABAP的一种企业级组件,用于实现业务过程的自动化。
8.工作流:ABAP支持工作流编程,可以实现业务流程的建模、调度和监控。
9.对象化编程:ABAP支持面向对象的编程,可以实现代码的复用和模块化。
10.接口技术:ABAP接口用于实现与其他系统(如HR、CRM等)的集成。
主要包括BAPI、BDC、IDoc等。
11.性能优化:ABAP程序的性能优化是开发者关注的重要议题,包括SQL优化、代码优化、内存管理等。
12.ABAP开发工具:常用的ABAP开发工具包括ABAP Workbench、SE80/SE81、SAP NetWeaver Developer Studio 等。
13.脚本语言:ABAP脚本语言(Scripting)用于实现与ABAP程序的交互和自动化。
ABAP笔记
ABAP笔记工作进程分类Dialog Work Process ,Update Work Process,Background Work Process,Enqueue Work Process,Spool Work ProcessR/3 application programs run within the R/3 Basis system on the work processes of application servers.work process containsABAP contains a special set of commands called OPEN SQL. This allowsyou to read from and write to the database regardless of the database you are using.每个屏幕都有一个mask,可以自己设置。
屏幕有两类事件:the Process Before Output (PBO) event is processed. When the user interacts with the screen, the Process After Input (PAI) event is processed. Each screen is linked to a single PBO processing block and a single PAI processing block. The PAI of a screen and the PBO of the subsequent screen together form a dialog step in the application program.The screen language is a special subset of ABAP, and contains only a few keywords.The most importantscreen keywords are MODULE, FIELD, CHAIN, and LOOP.Their only funciton is to link theprocessing logic to the flow logic, that is, to call modules in the processing logic, and control datatransfer between the screen and the ABAP program, for example, by checking fields.Each ABAP program consists of the following two parts:Declaration Part for Global Data, Classes and Selection ScreensThe following program types are relevant to application programming:Type 1we refer to type 1 programs asexecutable programs.Type Mit can only be controlled usingscreen flow logic. You must start them using a transaction code,You can start type J programs using a transaction codeABAP programs with type M contain the dialog modules belonging to the various screens. Type FType F programs are containers for function modules, and cannot be started using a transaction code or by entering their name directly.Type F programs are known as function groups.Type KThey are containers for global classes in ABAP ObjectsType K programs are known as classdefinitions.Type JThey are containers for global interface in ABAP ObjectsType J programs are known asinterface definitions.Type SType S programs are known as subroutine pools.Type IType I programs - called includesProcessing Blocks in ABAP ProgramsDialog ModulesYou call dialog modules from the screen flow logic (screen command MODULE).You can write a dialog module in an ABAP program for each state (PBO, PAI; user input) of any of the screens belonging to it. The interaction between the flow logic and the screen is controlled by a dialog processor.ABAP StatementsThe source code of an ABAP program consists of comments and ABAP statements. ABAP statements use ABAP data types and objects.The different statement categories are as follows:Declarative StatementsExamples of declarative keywords:TYPES, DATA, TABLESModularization StatementsThese statements define the processing blocks in an ABAP program.The modularization keywords can be further divided into:Event KeywordsAT SELECTION SCREEN, START-OF-SELECTION, AT USER-COMMANDDefining keywordsFORM ..... ENDFORM, FUNCTION ... ENDFUNCTION,MODULE ... ENDMODULEControl StatementsYou use these statements to control the flow of an ABAP program within a processing block according to certain conditions.IF, WHILE, CASECall StatementsPERFORM, CALL, SET USER-COMMAND, SUBMIT, LEAVE TOOperational StatementsWRITE, MOVE, ADDDatabase StatementsThese statements use the database interface to access the tables in the central database system. There are two kinds of database statement in ABAP: Open SQL and Native SQL. Open SQLOpen SQL is a subset of the standard SQL92 language. It contains only Data Manipulation Language (DML) statements,Open SQL contains all of the DMLfunctions from SQL92 that are common to all of the database systems supported by SAP. It alsocontains a few SAP-specific functions.Native SQLIt allows you to take advantage of all of your database’s characteristics inyour programs.Data Types and ObjectsABAP statements access these contents by addressing the name of the data object.Each ABAP data object has a set of technical attributes, The technical attributes of a data object are: Data type, field length, and number of decimal places.P57。
abap 开发知识点
abap 开发知识点ABAP 开发知识点ABAP (Advanced Business Application Programming) 是SAP 公司开发的一种高级业务应用编程语言,主要用于 SAP 系统的开发和定制。
在ABAP 开发中,有一些重要的知识点需要掌握,下面将会分别介绍。
1. 数据类型在ABAP 中,有许多不同的数据类型,包括整型、浮点型、字符型、日期型等。
在声明变量时,需要指定变量的数据类型,以确保变量能够存储正确的数据。
例如,声明一个整型变量可以使用以下代码:DATA: lv_num TYPE i.其中,lv_num 是变量名称,TYPE i 表示变量的数据类型为整型。
2. 数据对象在ABAP 中,数据对象是指在程序中使用的数据元素,包括变量、常量、字段符号等。
可以通过DATA 关键字声明变量,在程序中使用。
在ABAP 中,还有一种特殊的数据对象叫做内部表。
内部表类似于数据库中的表格,可以存储多行数据。
在ABAP 中,可以通过以下方式定义一个内部表:DATA: lt_data TYPE TABLE OF ty_data.其中,lt_data 是内部表名称,ty_data 是内部表的行结构。
3. 函数和方法在ABAP 中,函数和方法都是用于执行特定任务的代码块。
函数是独立的代码块,可以在程序中任何地方调用;而方法是与对象相关联的代码块,必须通过对象调用。
在 ABAP 中,可以通过 FUNCTION 和 METHOD 关键字定义函数和方法,例如:FUNCTION z_test_function.* 函数代码ENDFUNCTION.METHOD z_test_method.* 方法代码ENDMETHOD.4. ABAP 程序结构在ABAP 中,程序结构包括了程序头、变量定义、主体代码和结束语句。
程序头包括了程序名称、类型和描述等信息;变量定义用于声明程序中使用的变量;主体代码包含了程序的主要逻辑;结束语句用于结束程序的执行。
abap笔记
1.Object Navigator是ABAP工作平台上众中开发工具的中心入口,事务代码为:se80,其中还有几个经常会用到的T-CODE: SE38, SE24, SE37.2.在ABAP Editor中有一个Excute with variant 按钮,代表通过变量运行(变式与选择屏幕相关).3.Editor Pretty Printer ON/OFF的设置: 菜单项: Utilites->settings有相关项,选中Indent,Convert upper/lowercase同Keyword Uppercase.4.ABAP有三种类型的处理块:Event blocks, Dialog Modules,Procedures只有后一种可拥有自己的局部变量,而且程序语句是内部调用,前两者处理块之间实行外部调用.5.应用程序类型, 可执行的:以Report关键字引导,不能定义功能模块但可以调用.模块池的:以Program关键字引导,必须通过事务代码运行.6.语句链 Write: text1, text2. 等同于: Write text1. Write text2.7,在一个Program中,处于Form和Endform之间的是Subroutines. 该程序由Program引导,不能直接运行,需被调用,不能包含自定义的用户屏幕.8.数据内部定义: types type(len) Type type [decimal dec]data data(len) Type type [decimal dec] [value var]Decimal 附加项只适用于指定P类型的小数位.9.两个结构体进行赋值操作,如果 Source与Destination的组件结构不完全相同,则用Move-corresponding, eg: move-corresponding source-data todestination-data.10.在ABAP数据表达式中,关键字前后必须有空格,eg: Fault: (a=b+c) true:: a = b + c .11.在用户主记录里可以设置日期的显示分隔符,小数点字符和千位分隔符,在system->userprofile->owndata 或T-code: su01.12.内表是一种大批量数据管理形式,用于在程序运行期间存储多行结构相同的数据,程序对内表的行操作不能直接进行,必须通过一种接口来传输,这个接口就是工作区.13.ABAP的两种动态数据对象: Field symbols 与 Data reference.14.内表有三种形式: standard table , sorted table , hashed table后一种不能进行索引查找,只能通过关键字搜索.15.子程序的定义和调用分别用Form/Endform和perform来实现,如果想生成子程序的代码框架,则在prefom add处双击即可.16.package的命名规则: begin with A-S or U-X是SAP standard object, begin with Y or Z are customer objects, begin with T are private test package, begin with $ are local package.17.在数据字典中,每创建一个TABLE,都将生成一个同名的结构化数据类型,其中的组件字段与实际物理数据库表完全一致.18.在select查询中如果要指定多个数据对象,则需要将这些对象放在括号内,并用逗号隔开,eg: select * from spfli into (a, b).19.Function Module是最为常用的复用组件,它是独立的R/3仓库对象,也是一种过程模块,在不同的系统间可以通过RFC(Remote function call)技术进行功能模块的调用.20.几个有用的系统函数: sy-uname, sy-host, sy-datum, sy-uzedit, sy-subrc, sy-bdcnt,sy-index, sy-tabix,sy-dynnr.21.可用于交互式报表的列表事件有: at line-selection, at user-command 前者为选择某行时触发,后者由某个GUI触发.22.在可执行程序中,只要在程序代码中使用parametes或select-options语句,则在程序运行后就会产生用户的选择屏幕.23.LDB(逻辑库)节点在程序访问之前需用Nodes语句声明,在旧版本中则使用Tables声明. 两种中止语句 Reject与check(有条件中止).24.由系统自动调用的子程序称回调线程,-----call back routine,利用此程序可以实现许多高级屏幕功能.25.在OO设计中对象的识别和寻址是通过对象引用来实现的.26.在二种对象运算访问符中->与=>,对于类中的静态组件是通过类名称加=>直接对类进行操作的.eg: class=>comp.27.对象的自身引用可使用变量ME,是一个局部变量来的.28.Append与Insert r的区别: append wa to itab; insert wa into table itab前者不能用于Hashed表, 后者不能用于Sorted表的non-unique.29.修改内表语法: modify itab from wa transporting col2 where….. 表明根据where条件来更新COL2字段值,表类型为SORTED或HASHED.30.删除内表语法: Delete table itab: from wa, with table key col = 1. 三个标点不可少,with后的为条件关键字.如果用条件的则为: DELETE ITAB WHERE (COL > 17 AND COL < 4 )31.在LOOP AT…ENDLOOP内有一个AT ,<…>,ENDAT循环. 其中的包括: FRIST, LAST, NEW , END OF.这些可以用来进行内表中按某个字段进行分组统计.32.几条记录作一次取用:PACKAGE SIZE N eg: select * from spfli into corresponding fields of table itab package size 3.33.接口成员只能为类的公有成员,接口没有自己的实例,一个接口可以被任意多个不同的类实现,接口中定义的成员集在各类中名称要相同.34. 在程序中使用逻辑数据库有两种方法:通常是通过GET事件或者功能模块进行调用.如: NODES node.35.在程序代码中输入NEW-PAGE PRINT ON ,将生成的列表直接发送走到SPOOL 系统进行打印,不在屏幕上显示.36.将一组选择屏幕组合在一个区域,可以使用Begin of block…..eg:Selection-screen begin of block blocka [with frame [title tit] ][no intervals]—只选单值不出现TO.Selection-screen end of block.37.屏幕流逻辑分为两个最基本的处理块: PBO与PAI, 前者是在向用户显示屏幕GUI之前触发,后者是在用户进行某些屏幕行为后并回车时触发.流逻辑模块是在语句MODULE/ENDMODULE之间定义.这里的语法不属于ABAP系列.38.屏幕中的OK字段其作用是:返回在屏幕和GUI状态中用户触发的功能代码:一般情况字段命名为:OK_CODE,数据类型与SY-UCOMM相同.39.通过SE93可以为程序创建自定义的事务代码.40.GUI中的交互元素包括菜单条,标准工具按扭,APPLICATIONTOOLBAR,FUNCTIONKEYS共四种,在作屏幕事务设计时这些都要分配具体的功能代码与之对应.41.在定义EXPORTING、IMPORTING与CHANGING的时候,前两者分别为基本输入与输出参数,而CHANGING可用于前两者功能。
SAP ABAP PA certification 培训笔记
帮助旅行代理或旅行社订票的基本需求: 在特定的时间到指定的地点 处理特定的航班订票 附加的信息 Price 价格 Capacity 容量 非常重要:航班模型的表: SCARR 航空公司表 SPFLI 航线表 SFLIGHT 航班表(订票时所需要的表)
2. SAP GUI FOR JAVA (优点:可以跨平台 缺点:操作速度较 FOR WINDOWS 略慢) 3. SAP GUI FOR HTML (优点:0 安装 , 查看少量数据较方便 缺点:对网络传输要求较高, 速度较慢)
SAP BASIS DATABASE LAYER(数据库层) 在 LOCAL BUFFER 拥有一个 TABLE BUFFER 可以将不经常改变的表放入到 TABLE BUFFER 中
屏幕 内存 以及硬盘上的字段变量都对应相同的 但是储存的位置不同 在程序中,可以把内存中的变量当作数据库条件使用,使用 where 语句进行数据库操作 然后 数据库将结果集返回给 ABAP 程序, 最后返回给列表屏幕
程序 可以 将内存变量当作 条件 重要:在新版本中 Development classes 属于变化了 package 包
以上表的关系是树形关系 一个航空公司对应多个航线,而一个航线对应多个航班
Client/Sever Architecture Work process 可以执行 ABAPprogram
应用服务器一分为二: 1. 一部分可以执行 JAVA 程序 2. 另一部分是 ABAP 程序
Black box 黑盒 对于 gui 和用户来说相当于一个黑匣子
长事务运行: 当有用户占用多个进程并且执行 LONG-RUNNING ABAP PROGRAM(长运行时间程序例:死循环 程序)时,其余用户只能使用剩余的少量进程,这会导致多数用户成为等待状态,速度会非常慢, 解决方法:通过 BASIS 人员对占用多个进程的用户 进行操作或删除,释放线程,缓解运行压力
ABAP中经常会用到字符串操作—学习笔记
ABAP中经常会用到字符串操作—学习笔记字符串首字符索引为0;Character Fields:C,N,D,T,string(CNDT =>C N Data Time)1.字符串连接CONCATENATE dobj1 dobj2 ...INTO result[IN{BYTE|CHARACTER}MODE][SEPARATED BY sep].2.字符串分隔,split一个string的部分到一个内表或一系列的变量SPLIT dobj AT sep INTO{{result1 result2 ...}|{TABLE result_tab}}[IN{BYTE|CHARACTER}MODE].3.字符串查找,在一个字符串中查找模式串(FIND or SEARCH)FIND sub_stringIN SECTION[OFFSET off][LENGTH len]OF dobj --> 灰色部分用来缩小目的串被查找的范围[IN{BYTE|CHARACTER}MODE][{RESPECTING|IGNORING}CASE][MATCH OFFSET moff ][MATCH LENGTH mlen ].FIND'knows'IN SECTION OFFSET5OF'Everybody knows this is nowhere' MATCH OFFSET moff " => moff = 10MATCH LENGTH mlen. "=> mlen=5在字符串dobj中查找patternSEARCH dobj FOR pattern[IN{BYTE|CHARACTER}MODE][STARTING AT p1][ENDING AT p2][ABBREVIATED][AND MARK].if sy-subrc =0.then SY-FDPOS =返回pattern在dobj中的位置About pattern:'pat'-忽略尾部空格'.pat.'-不忽略尾部空格'*pat'-以pat结尾'pat*'-以pat开始单词是指:用空格,;:?!()/+=分隔的字串4.字符串替换REPLACE SECTION[OFFSET off][LENGTH len]OF dobj WITH new[IN{BYTE|CHARACTER}MODE].REPLACE[{FIRST OCCURRENCE}|{ALL OCCURRENCES}OF] [SUBSTRING] sub_stringIN[SECTION[OFFSET off][LENGTH len]OF] dobj WITH new [IN{BYTE|CHARACTER}MODE][{RESPECTING|IGNORING}CASE][REPLACEMENT COUNT rcnt][REPLACEMENT OFFSET roff][REPLACEMENT LENGTH rlen].eg:DATA: text1 TYPE string VALUE'xababx'.REPLACE'ab'IN text1 WITH'xx'.--> xxxabx5.去前导0(Remove leading zero)SHIFT dobj LEFT DELETING LEADING'0'.FM : CONVERSION_EXIT_ALPHA_OUTPUT增前导0(Add leading zero)DATA v_s(5).UNPACK'123'to v_s.==> v_s ='00123'FM: CONVERSION_EXIT_ALPHA_INPUTSHIFT dobj[{BY num PLACES}|{UP TO sub_string}][LEFT|RIGHT][CIRCULAR]SHIFT dobj{LEFT DELETING LEADING}|{RIGHT DELETING TRAILING}pattern. [IN{BYTE|CHARACTER}MODE].6.字符串的长度,内表的行数STRLEN( dobj)字符串的长度LINES( itab )内表的行数7.删字符串中的空格:CONDENSE text[NO-GAPS].8.大小写转换,字符变换TRANSLATE text{TO{UPPER|LOWER}CASE}|{USING pattern}. eg:text= `Barbcbdbarb`.TRANSLATE text USING'ABBAabba'.=>'Abracadabra'9.CONVERT转换CONVERT DATE dat [TIME tim [DAYLIGHT SAVING TIME dst]]INTO TIME STAMP time_stamp TIME ZONE tz.CONVERT TIME STAMP time_stamp TIME ZONE tzINTO[DATE dat][TIME tim][DAYLIGHT SAVING TIME dst].CONVERT TEXT text INTO SORTABLE CODE hex.10.覆盖OVERLAY text1 WITH text2 [ONLY pattern].如果不指定后面的ONLY pattern,text1中的空格会被text2中的对应字符替代如果指定只有匹配的字符才会被替代,注意大小写敏感11.模式匹配CO/CN contains only or notCA/NA contains any or not anyCS/NS contains string or notCP/NP contains pattern or not注意:a).CO,NO,CA,NA比较时区分大小写,并且尾部空格也在比较的范围之内data: s1(10)value'aabb'.if s1 co'ab'==>falseif s1 co'ab '==>trueCS,NS,CP,NP不区分大小写和尾部空格b).对于CP,NP*= \s?+= \s# 换码字符,用于匹配*,+这样的字符###*#+#___ 比较结尾空格#[a-z]在CP,NP中强制区分大小写c).比较结束后,如果结果为真,sy-fdpos将给出s2在s1中的偏移量信息12.特殊字符在字符串中加入回车换行或TAB字符,在其他语言可以使用$13$10这样的ASCII 码进行插入.但在ABAP中要使用sap的类CL_ABAP_CHAR_UTILITIES.里面有字符常量:CR_LF,HORIZONTAL_TAB,NEWLINE等等.13.字符串位操作DATA: v_s(10)value'abcd'.v_s+0(1)='b'.v_s+2(*)='12'.=> v_s ='bb12'.。
ABAP开发笔记二
ABAP开发笔记⼆ABAP是事件驱动的语⾔,程序的运⾏由事件引导由过程块组成程序架构1.ABAP分类2.命名规范3.报表过程块事件关键字之间或事件关键字与form关键字之间的语句形成⼀个过程块⼦程序form和endform之间的语句形成⼀个⼦程序,⼦程序在过程块中被调⽤没有紧跟着事件关键字或FORM-ENDFORM 块的语句⾃动成为默认事件START-OF-SELECTION过程块的⼀部分主要事件块INITIALIZATION 在选择屏幕显⽰前,对变量进⾏初始化赋值AT SELECTION-SCREEN 对选择屏幕的数据输⼊进⾏检查START-OF-SELECTION 选择屏幕处理完后,数据的处理(缺省事件块)TOP-OF-PAGE 列表显⽰启动新页,页头的输出END-OF-PAGE ⼀页结束时,页尾的处理AT LINE-SELECTION ⽤户双击选中某⾏触发该事件AT PF 设置⾃定义的菜单AT USER-COMMAND 当⽤户功能健时,触发该事件跳出事件:exit,check,stop事件跳过事件在所有事件中:check离开当前事件并继续进⾏下⼀个事件处理;stop离开当前事件并直接跳到end-of-selection事件。
在Start-of-selection之前的事件,exit,check都是离开当前事件继续处理下⼀个事件。
在start-of-selection之后的事件,exit⽴即镜像输出显⽰,check离开当前事件并继续处理下⼀个事件。
4.基本语法数据类型系统变量结构data begin of 结构名.data f1[(l)] [type t] [decimals d] [value 'xxx'].data f2[(l)] [type t] [decimals d] [value 'xxx']....[include structure 另⼀个结构.]data end of 结构名.注意这⾥定义的⽅法和⼀般的结构不同。
ABAP笔记:BDC完整版例子
ABAP笔记:BDC完整版例⼦BDC(batch data communication)是SAP常⽤的⼀种数据传输⽅法。
⽤于⼀些数据量⼤,但是对速度⼜要求不⾼的数据传输。
在实施中,很多开发顾问都忽略了BDC的⽇志和出错管理。
这给⽤户在使⽤中带来了很⼤的不便。
⽐如:哪些数据是成功⽣成的,哪些是失败的?那些失败的,原因的是什么?程序问题还是数据问题?我觉得,既然是要做⼀套程序,那就应该尽可能地为客户考虑,减少⽇后的维护量。
对于BDC程序来讲,⽇志和出错管理应该是必备的。
下⾯讲⼀下,BDC的两种通⽤写法。
1. Call Transaction: 顾名思义,就是直接调⽤BDC进⾏数据批量导⼊。
优点:⽅便快捷,程序处理⽅便。
缺点:⽇志管理能⼒差,需⾃⼰建透明表来维护数据。
我只是把它⽤作测试⽤途,不做正式使⽤。
2. BDC Insert:这是⼀种不直接运⾏,⽽是将BDC程序⽣成session,间接运⾏的⼀种⽅法。
优点:通过T-code SM35可以进⾏运⾏管理及⽇志管理,⽅便查错。
缺点:相对⽅法1来说实现起来⽐较繁琐。
我主要是⽤这种⽅法来实现BDC功能。
下⾯主要来谈⼀下BDC Insert这种⽅法。
1. 需要在程序中调⽤ function 'BDC_INSERT'来把BDCDATA⽣成SESSION.2. 程序RSBDCSUB是执⾏SESSION的专⽤程序,要建⽴相应的VARIANT,后续建⽴JOB中使⽤3. 建⽴BATCH JOB来定期执⾏RSBDCSUB,从⽽实现,SESSION⾃动执⾏的⽬的4. 当然,不使⽤程序RSBDCSUB和JOB,每次⼿⼯在SM35中执⾏SESSION也是可以的下⾯是我写的⼀个实例:*----------------------------------------------------------------------** Program Name: Z_KEVIN_ADV_BDC* Project : N/A* Author : Kevin.Zhang* Date : 2007.1.1* Module : N/A* Description : Advanced BDC**** Special features: N/A***----------------------------------------------------------------------** Modifications:* Author Date Commented as Description*----------- -------- ----------- ----------------------------------***----------------------------------------------------------------------*REPORT Z_KEVIN_ADV_BDC.*$*$----------------------------------------------------------------$*$**$*$ Global Types, Data Statements, Ranges, Constants $*$**$*$----------------------------------------------------------------$*$**-----------------------------------------------------------------------* Tables*-----------------------------------------------------------------------TABLES: COAS, CEPC.*-----------------------------------------------------------------------* Internal Tables and Work Areas*-----------------------------------------------------------------------DATA: BEGIN OF GT_TABLE OCCURS 0, "internal order tableAUART LIKE AUFK-AUART, "order typeAUFNR LIKE AUFK-AUFNR, "order numberKTEXT LIKE AUFK-KTEXT, "descriptionBUKRS LIKE AUFK-BUKRS, "company codeGSBER LIKE AUFK-GSBER, "business areaPRCTR LIKE AUFK-PRCTR, "profit centerFUNCA LIKE AUFK-FUNC_AREA, "function areaEND OF GT_TABLE.DATA: BEGIN OF GT_EXISTS OCCURS 0. "existed IOINCLUDE STRUCTURE GT_TABLE.DATA: END OF GT_EXISTS.DATA: BEGIN OF GT_PRFT_CNTR OCCURS 0."the profit center not existing IOINCLUDE STRUCTURE GT_TABLE.DATA: END OF GT_PRFT_CNTR.DATA: BEGIN OF GT_SUBMIT OCCURS 0. "the submitted IOINCLUDE STRUCTURE GT_TABLE.DATA: END OF GT_SUBMIT.DATA: BEGIN OF GT_BDCDATA OCCURS 0. "BDC DATAINCLUDE STRUCTURE BDCDATA.DATA: END OF GT_BDCDATA.DATA: BEGIN OF GT_MESSTAB OCCURS 10. "message tableINCLUDE STRUCTURE BDCMSGCOLL.DATA: END OF GT_MESSTAB.DATA: GT_IMESG LIKE MESG OCCURS 0 WITH HEADER LINE.*-----------------------------------------------------------------------* Variables*-----------------------------------------------------------------------DATA: GV_GROUP(12) TYPE C VALUE 'INTERNAL_ORD', "BDC NameGV_USER(12) TYPE C, "BDC UserGV_KEEP(1) TYPE C VALUE 'X', " ' '=Delete,'X'=keep after processingGV_HOLDDATE LIKE SY-DATUM. "DateDATA: GV_FLAG(1) TYPE C,GV_LIN TYPE I. "number of ordersDATA: GV_C170(170),GV_C_ULINE(50) VALUE '__________________________________________________'. *$*$----------------------------------------------------------------$*$**$*$ Selection Screen $*$**$*$----------------------------------------------------------------$*$**-----------------------------------------------------------------------* Selection Screen*-----------------------------------------------------------------------PARAMETERS: BDCTYPE(1) TYPE C DEFAULT 'B' NO-DISPLAY,BDCMODE LIKE BDCRUN-BDC_AMODUS DEFAULT 'A' NO-DISPLAY. SELECTION-SCREEN COMMENT 10(70) TEXT-001.PARAMETERS: IN_FILE(128) DEFAULT 'C:/TEMP/*.txt'.SELECTION-SCREEN SKIP 1.*-----------------------------------------------------------------------* At Selection Screen*-----------------------------------------------------------------------*--------- AT SELECTION-SCREEN ON VALUE-REQUEST ----------AT SELECTION-SCREEN ON VALUE-REQUEST FOR IN_FILE.CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGDEF_FILENAME = '*.txt'DEF_PATH = 'C:/DATA'MASK = ',All Files,*.*,Text Files,*.txt;*.doc.'MODE = 'O'TITLE = 'Please choose file to use 'IMPORTINGFILENAME = IN_FILEEXCEPTIONSINV_WINSYS = 1NO_BATCH = 2SELECTION_CANCEL = 3SELECTION_ERROR = 4OTHERS = 5.*$*$----------------------------------------------------------------$*$**$*$ Main Program $*$**$*$----------------------------------------------------------------$*$**--------- START-OF-SELECTION ----------START-OF-SELECTION.REFRESH GT_TABLE.* Uploading the data which will be inserted into the internal tableCALL FUNCTION 'WS_UPLOAD'EXPORTINGFILENAME = IN_FILEFILETYPE = 'DAT'TABLESDATA_TAB = GT_TABLEEXCEPTIONSCONVERSION_ERROR = 1FILE_OPEN_ERROR = 2FILE_READ_ERROR = 3INVALID_TABLE_WIDTH = 4INVALID_TYPE = 5NO_BATCH = 6UNKNOWN_ERROR = 7OTHERS = 8.IF SY-SUBRC <> 0.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000''Unable to upload input file 'IN_FILE '' ''.ENDIF.SORT GT_TABLE BY AUFNR GSBER DESCENDING.DELETE ADJACENT DUPLICATES FROM GT_TABLE COMPARING AUFNR. PERFORM OPEN_GROUP.PERFORM FILL_BDC_DATA.PERFORM BDC_CLOSE_GROUP.PERFORM WRITE_REPORT.*--------- END-OF-SELECTION ----------*$*$----------------------------------------------------------------$*$**$*$ Subroutines $*$**$*$----------------------------------------------------------------$*$**&---------------------------------------------------------------------**& Form OPEN_GROUP*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM OPEN_GROUP.GV_USER = SY-UNAME.CALL FUNCTION 'BDC_OPEN_GROUP'EXPORTINGCLIENT = SY-MANDTGROUP = GV_GROUPHOLDDATE = GV_HOLDDATEKEEP = GV_KEEPUSER = GV_USER.IF SY-SUBRC <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.ENDFORM. " OPEN_GROUP*&---------------------------------------------------------------------**& Form FILL_BDC_DATA*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM FILL_BDC_DATA.CLEAR GT_TABLE.LOOP AT GT_TABLE.CLEAR GT_MESSTAB.CLEAR GT_BDCDATA.REFRESH GT_BDCDATA.REFRESH GT_MESSTAB.CLEAR GV_FLAG.* Check if Profit Center exists.SELECT SINGLE * FROM CEPCWHERE PRCTR = GT_TABLE-PRCTR.IF SY-SUBRC <> 0.CLEAR GT_PRFT_CNTR.MOVE-CORRESPONDING GT_TABLE TO GT_PRFT_CNTR.APPEND GT_PRFT_CNTR.GV_FLAG = 'X'.ENDIF.* check if Internal Order has already been created.SELECT SINGLE * FROM COASWHERE AUFNR = GT_TABLE-AUFNR.IF SY-SUBRC = 0.CLEAR GT_EXISTS.MOVE-CORRESPONDING GT_TABLE TO GT_EXISTS.APPEND GT_EXISTS.GV_FLAG = 'X'.ENDIF.IF GV_FLAG <> 'X'.PERFORM BDCDATA USING: 'X' 'SAPMKAUF' '0100', "order type' ' 'COAS-AUART' GT_TABLE-AUART,' ' 'BDC_OKCODE' '=KOKR'.PERFORM BDCDATA USING: 'X' 'SAPLSPO4' '0300', "control area' ' 'SVALD-VALUE(01)' '1000',' ' 'BDC_OKCODE' '=FURT'.PERFORM BDCDATA USING: 'X' 'SAPMKAUF' '0100', "ok code' ' 'BDC_OKCODE' '/00'.PERFORM BDCDATA USING: 'X' 'SAPMKAUF' '0600', "order master data ' ' 'COAS-AUFNR' GT_TABLE-AUFNR,' ' 'COAS-KTEXT' GT_TABLE-KTEXT,' ' 'COAS-BUKRS' GT_TABLE-BUKRS,' ' 'COAS-GSBER' GT_TABLE-GSBER,' ' 'COAS-PRCTR' GT_TABLE-PRCTR,' ' 'COAS-FUNC_AREA' GT_TABLE-FUNCA,' ' 'BDC_OKCODE' '=SICH'.* PERFORM CALL_TRANSACTION. "for test purposePERFORM BDC_INSERT.MOVE-CORRESPONDING GT_TABLE TO GT_SUBMIT.APPEND GT_SUBMIT.ENDIF.ENDLOOP.ENDFORM. " FILL_BDC_DATA*&---------------------------------------------------------------------**& Form BDC_INSERT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM BDC_INSERT.CALL FUNCTION 'BDC_INSERT'EXPORTINGTCODE = 'KO01'TABLESDYNPROTAB = GT_BDCDATA.IF SY-SUBRC <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.ENDFORM. " BDC_INSERT*&---------------------------------------------------------------------**& Form BDC_CLOSE_GROUP*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM BDC_CLOSE_GROUP.CALL FUNCTION 'BDC_CLOSE_GROUP'.IF SY-SUBRC <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.ENDFORM. " BDC_CLOSE_GROUP*&---------------------------------------------------------------------**& Form CALL_TRANSACTION*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM CALL_TRANSACTION.CALL TRANSACTION 'KO01' USING GT_BDCDATA MODE BDCMODEMESSAGES INTO GT_MESSTAB.* IF SYST-SUBRC <> 0.* CALL FUNCTION 'WRITE_MESSAGE'* EXPORTING* MSGID = SY-MSGID* MSGNO = SY-MSGNO* MSGTY = SY-MSGTY* MSGV1 = SY-MSGV1* MSGV2 = SY-MSGV2* MSGV3 = SY-MSGV3* MSGV4 = SY-MSGV4* MSGV5 = ' '* IMPORTING* ERROR = ERROR* MESSG = MESSG* MSGLN = MSGLN.ENDFORM. " CALL_TRANSACTION*&---------------------------------------------------------------------**& Form BDCDATA*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_0310 text* -->P_0311 text*----------------------------------------------------------------------*FORM BDCDATA USING P_BEGIN P_FIELD1 P_FIELD2. CLEAR GT_BDCDATA.CASE P_BEGIN.WHEN 'X'.GT_BDCDATA-PROGRAM = P_FIELD1.GT_BDCDATA-DYNPRO = P_FIELD2.GT_BDCDATA-DYNBEGIN = 'X'.WHEN SPACE.GT_BDCDATA-FNAM = P_FIELD1.GT_BDCDATA-FVAL = P_FIELD2.ENDCASE.APPEND GT_BDCDATA.ENDFORM. " BDCDATA*&---------------------------------------------------------------------**& Form WRITE_REPORT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM WRITE_REPORT.DESCRIBE TABLE GT_EXISTS LINES GV_LIN.IF GV_LIN >= 1.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000''The following Internal Orders already exist.' '' '' ''. PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GV_C_ULINE '' '' ''.LOOP AT GT_EXISTS.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GT_EXISTS-AUFNR '' '' ''. ENDLOOP.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GV_C_ULINE '' '' ''.ENDIF.DESCRIBE TABLE GT_PRFT_CNTR LINES GV_LIN.IF GV_LIN >= 1.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000''The following Profit centers do not exist.' '' '' ''. PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GV_C_ULINE '' '' ''.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000''Internal Order Profit Center.' '' '' ''.LOOP AT GT_PRFT_CNTR.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GT_PRFT_CNTR-AUFNRGT_PRFT_CNTR-PRCTR '' ''. ENDLOOP.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GV_C_ULINE '' '' ''.ENDIF.DESCRIBE TABLE GT_SUBMIT LINES GV_LIN.IF GV_LIN >= 1.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000''BDC was created for the following Internal Orders.''' '' ''.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GV_C_ULINE '' '' ''.LOOP AT GT_SUBMIT.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GT_SUBMIT-AUFNR '' '' ''. ENDLOOP.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GV_C_ULINE '' '' ''.ENDIF.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000''The following Internal Orders have no Business Area.''' '' ''.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GV_C_ULINE '' '' ''.DELETE GT_TABLE WHERE NOT GSBER = ' '.LOOP AT GT_TABLE.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GT_TABLE-AUFNR '' '' ''. ENDLOOP.PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'GV_C_ULINE '' '' ''.ENDFORM. " WRITE_REPORT*&---------------------------------------------------------------------**& Form COLLECT_MESSAGES*&---------------------------------------------------------------------** Collects messgaes into rep tree table and writes them to * screen for regular reporting*----------------------------------------------------------------------** -->P_MSGID message id* -->P_MSGTY messgae type* -->P_MSGNR msg number* -->P_MSG1 text 1* -->P_MSG2 text 2* -->P_MSG3 text 3* -->P_MSG4 text 4*----------------------------------------------------------------------*FORM COLLECT_MESSAGES USING P_MSGIDP_MSGTYP_MSGNRP_MSGV1P_MSGV2P_MSGV3P_MSGV4.CLEAR GT_IMESG.GT_IMESG-ARBGB = P_MSGID.GT_IMESG-MSGTY = P_MSGTY.GT_IMESG-TXTNR = P_MSGNR.GT_IMESG-MSGV1+0(2) = '@ '.GT_IMESG-MSGV1+2(48) = P_MSGV1.GT_IMESG-MSGV2 = P_MSGV2.GT_IMESG-MSGV3 = P_MSGV3.GT_IMESG-MSGV4 = P_MSGV4.APPEND GT_IMESG.CONCATENATE P_MSGV1 P_MSGV2 P_MSGV3 P_MSGV4 INTO GV_C170 SEPARATED BY SPACE.WRITE:/ GV_C170.ENDFORM. " collect_messages。
ABAP面试大全之欧阳理创编
目录1. 报表知识1.1基础知识1.1.1报表事件,有哪些?1.1.1.1过程化事件INITIALIZATIONSTART-OF-SELECTIONEND-OF-SELECTION1.1.1.2选择屏幕事件AT SELECTION-SCREEN OUTPUT选择屏幕PBO事件,每次选择屏幕调用之前触发,在其中进行选择屏幕输出之前的准备工作,如确定屏幕各元素的输出状态。
AT SELECTION-SCREEN选择屏幕最后被触发的事件,用户在选择屏幕上回车、选择某个GUI按钮、功能键或者菜单项时触发AT SELECTION-SCREENON fieldAT SELECTION-SCREEN ON BLOCK blockAT SELECTION-SCREEN ON RADIOBUTTON GROUP group1AT SELECTION-SCREENON seltabAT SELECTION-SCREEN ON END OF seltab,AT SELECTION-SCREEN ON HELP-REQUEST FOR field选择屏幕的POH事件,F1事件,定义字段帮助AT SELECTION-SCREEN ON VALUE-REQUEST FOR field选择屏幕的POV事件,F4事件,定义字段输入帮助1.1.1.3在使用到逻辑数据库时,比如HR报表,涉及到的逻辑数据库事件:GET nodeGET node LATE1.1.1.4列表事件TOP-OF-PAGEEND-OF-PAGEAT-LINE-SELECTIONAT-USER-COMMAND用户交互控制,选择某个GUI功能出发,用于交互式报表1.1.1.5AT 事件AT FIRST功能循环时第一条记录时调用AT LAST功能循环中最后一条记录时调用AT NEW 功能循环中当指定字段之前(包括指定字段)的组合和上一条记录不一样的时候调用AT END OF功能循环中当指定字段之前(包括指定字段)的组合和下一条记录不一样的时候调用AT事件的注意点AT事件中的工作区不同于LOOP循环的工作区该工作区中位于指定字段后面的值将不会被读取如果需要用到则需重新抽取一次1.1.1.6交互式报表事件AT USER-COMMAND.AT LINE-SELECTIONAT PF-FUNCTION KEY(设置功能键)1.1.2报表选择画面1.1.2.1报表的选择画面上能否添加自定义工具栏?能够添加,通过语句SELECTION-SCREEN FUNCTION KEY n(n为1至5,最多定义5个)。
ABAP学习笔记--数据查询语句SELECT
ABAP学习笔记--数据查询语句SELECTc通常使用Open SQL的数据查询语句SELECT将数据库条目选择到内存。
一.SELECT语句:1)SELECT用于确定读取数据表中的哪些字段;2)FROM子句用于确定从哪些内表或者视图中读取数据;3)INTO用于确定将数据读取到程序内的哪些数据对象;4)WHERE 用于限定选择条件;SELECT select_clause FROM from_clause INTO into_clause WHERE where_clause.在传统的ABAP语言中,如果使用TABLES语句声明表工作区,则可省略INTO子句(此方法已经被ABAP Object禁用)除以上4种外还有:GROUP BY:用于将一组数据条目压缩为一个单行作为选择最终结果;HAVING:用于限定ORDER BY子句子数据目组的选择条件;ORDER BY:用于限定行排序;SELECT整体语法结构:SELECT <result> FROM <source> INTO <target> [WHERE <condition>] [GROUP BY <fields>] [HAVING <cond>] [ORDER BY <fields>].二.选择单行数据:如果只需要选取一个结果数据行,系统在数据库种找到第一个符合条件的数据条目时,就停止查询。
单行选择需要在SELECT中使用SINGLE关键字,且INTO自居的结构必须为扁平结构:SELECT SINGLE <RESULT> INTO <target> FROM <source> ...如果系统找到一个完全符合指定条件的行,SY-SUBRC返回0,否则返回4。
1.选择全部字段一般不需要指明所有字段,而是在SELECT后用"*"符号,其中INTO语句种的目标对象最好与FROM种的类型相同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.第二部分ABAP开发语言2.1.ABAP基础2.1.1.语言概述2.1.1.1.程序结构ABAP程序源码结构包括数据定义和处理块两部分;处理块又分为事件块,对话模块,过程。
过程中可以定义自己的局部变量。
事件块,对话模块,只能使用全局数据定义。
2.1.1.2.程序类型可直接运行的应用程序(可分配事务代码)可执行程序Executable program,类型代码1,report关键字引导可自定义屏幕,ABAP Editor编辑和运行,submit提交,可分配事务码运行,可调用所有类型的ABAP处理块,不能定义功能模块,可出现所有运行时事件常做报表程序,处理报表事件模块池Module Pool,类型代码M,Program关键字引导可自定义屏幕和对话模块,ABAP Editor编辑,必须通过分配事务码运行,可以调用ABAP处理块(除报表事件和功能模块),非后台工作模式。
常做复杂的事务程序,操作数据库等功能模块,不可直接运行的函数(特定的功能,模块化功能)功能组Function groups,类型代码F,由Function-pool引导唯一可以包含功能模块的程序,可定义屏幕,但不能直接运行ABAP类库Class pools,类型代码K,由class-pool引导唯一可以包含类方法的处理块,不可定义屏幕,也不能直接运行,可包含一个全局类和多个局部类,Class Builder创建ABAP接口库Interface pools,类型代码J,由interface-pool引导与代码K类似,表示ABAP对象的接口子程序池Subroutine pools,类型代码S,由program引导不可定义屏幕,不可直接运行,只能被普通程序调用,可包含一个或者多个子程序代码模块或类方法,ABAP Editor编辑类型组Type groups,无类型代码,由type-pool引导不可定义屏幕,不可直接运行,仅用于定义全局数据类型,ABAP Dictionary定义包含程序Include programs,类型代码I,不需要任何语句引导无需完整的处理模块,无需独立编译,仅是代码复用,ABAP Editor编辑,可直接插入其他程序中,可被多个程序引用,与引用程序直接不存在参数接口。
2.1.1.3.程序元素ABAP元素源代码Source code数据定义和处理块变式Variants与选择屏幕有关,用于存储用户屏幕选择的条件属性Attributes程序类型,逻辑数据库,应用模块文本元素Text elements存储在文本池Text Pools的文字,包括文本字符Text symbols、选择字符Selection texts、列表标题List Headings文档Documents解释程序功能,注释部分,可语言相关性屏幕普通屏幕Screens,标准屏幕包含屏幕布局Layout和流逻辑Flow logic,使用Screen Painter设计布局,用户可见的元素,比如输入输出字段,按钮等流逻辑,屏幕处理器控制,独立ABAP语法,需调用ABAP模块实现具体应用操作选择屏幕Selection Screens常用于报表程序中,接受用户输入报表的选择标准,使用ABAP控制屏幕输出格式不需要使用Screen Painter设计,流逻辑,不需要特别控制,自动触发传统列表屏幕ListsALV表格控件前的主要报表程序输出界面,通过ABAP的write和uline语句生成。
GUI屏幕的一部分,独立与上述三个SAP屏幕,主要包括菜单,工具栏,功能键等。
不使用ABAP编辑,通过Object Navigator(SE80)添加至程序中。
使用Screen Painter和Menu Painter开发。
2.1.1.4.语句格式语句结构ABAP关键字引导,句号“.”结束。
根据关键字分类:声明语句TYPES, DATA, PARAMETER, TABLES模块化语句事件关键字AT SELECTION-SCREEN, START-OF-SELECTION, AT USER-COMMAND过程定义关键字FORM/ENDFORM, FUNCTION/ENDFUNCTION, MODULE/ENDMODULE 控制语句IF, WIHLE, CASE调用语句PERFORM, CALL, SUBMIT, LEAVE TO操作语句WRITE, MOVE, ADD, =数据库语句编辑格式空格语句链“:”“,”注释整行注释*语句注释“2.1.1.5.程序运行程序调用直接运行,SE38/SA38中运行按钮,或者系统目录,命令域输入事务代码运行;内部调用,完全移交控制权,无返回调用,SUBMIT, LEAVE TO TRANSACTION,嵌入式,调用并返回,SUBMIT AND RETURN, CALL TRANSACTION,结束程序Leave program2.1.1.6.内存管理SAP程序运行期间的内存管理与用户会话相关,包括SAP内存和ABAP内存两大部分。
主会话外部会话,可以6个,使用不同的ABAP内存内部会话主会话中运行可执行程序或者模块池程序,ABAP内存的一部分。
调用序列程序调用时,传递的数据需要使用同一个主会话的公共ABAP内存ABAP内存每个主会话都有一个ABAP内存,其中的数据以程序调用序列的顺序存储。
通过EXPORT TO MEMORY/IMORT FROM MEMORY在该内存的堆栈间传递数据SAP内存所有会话都可以访问的内存区域,SET PARAMETER/ GET PARAMETER装载程序每次开始运行或者调用一个ABAP程序时,系统将一个程序实例转载入ABAP内存,第一个被转载的程序为主程序。
每个1、M、F、S类型的程序实例被转载时都触发LOAD-OF-PROGRAM事件(类库程序除外),该事件保证每个程序在内部会话中仅转载一次。
对象创建CREATE OBJECT语句创建ABAP Object时,一个类的实例被转载至内存会话,所有该内存会话的程序及对象都可以使用该类实例。
对象引用变量不能储存与ABAP内存和SAP内存中,故跨事务的处理,需要将数据对象使用数据库的持续服务persistence service来长期保存,以供另一个事务使用。
而内部会话的子程序,功能模块和类方法可以直接引用对象指针。
2.1.2.数据定义2.1.2.1.数据类型和数据对象数据对象是数据类型的一个实例,占有内存中的存储单元。
数据类型,Named Type(Full predefined type)和Anonymous typeData Types Data objectsElement types Elementary data objectsFixed length static data objectsVariable length Dynamic data objectsComplex types Complex data objectsStructure type StructuresTable types Internal tablesReference types Reference variablesData reference Data reference variablesObject reference Object reference variable注意:Fully types◊⇓Generically typesFlat Deep structures◊⇓structures◊⇓局域类型全局类型2.1.2.2.内置基本数据类型1、固定长度的内置类型字符型C 文本字符,初始空格N 数字文本,初始’000…0’T 时间HHMMSS,初始’000000’D 日期YYYYMMDD,初始’00000000’数字型I 整型,4位,初始0F 浮点,8位,初始0P 压缩数,1-16位,初始0十六进制X 十六位进制数,1-65535X位,初始’0’2、长度可变的内置类型String,长度可变的字符串,默认空格,根据固定内存的地址操作,属于纵深类型XString,十六位进制字符串,默认空格,根据固定内存的地址操作,属于纵深类型2.1.2.3.程序内部数据定义1、自定义基本类型数据数据类型定义TYPES type(len) TYPE type [DECIMAL dec]数据对象定义DATA data(len) TYPE type [DECIMAL dec] [values val]2、引用类型和对象TYPE|DATA .. TYPE REF TO data3、结构类型和结构体TYPES|DATA: BEGIN OF structure.K1 [TYPE type | LIKE dobj] … ,K2 [TYPE type | LIKE dobj] … ,… ,Kn [TYPE type | LIKE dobj] … ,END OF structure.也可以用types和data直接参照已经存在的结构体TYPES|DATA structure TYPE str_type | LIKE str_dobj …也可以参考数据字典中定义的数据库表结构声明结构体TYPES|DATA structure TYPE dbtable也可以通过INCLUDE子句嵌套其他结构通过-来访问结构体的某个数据对象,比如structure-comp4、表类型和内表TYPES|DATA table TYPE|LIKE tabkind OF linetype [WITH key] [INITIAL SIZE n].2.1.2.4.数据字典中的类型1、数据字典类型数据元素,Data element,对应ABAP基本类型和引用类型结构,Structures,对应ABAP结构类型表类型,Table types,对应内表结构和属性命名空间问题,程序中定义的将覆盖数据字典中的同名数据类型。
2、数据元素和域域Domains,定义了数据元素的技术属性,类型,长度,小数位等。
3、内置数据类型ABAP数据字典中也含有一系列的内置类型,程序运行时,自动转化为ABAP内置类型。
比如数据字典预置类型ACCP,对应ABAP类型N(6),含义为会计结算周期数据字典预置类型CHAR,对应ABAP类型C(n),含义为字符串数据字典预置类型CURR(n,m),对应ABAP类型P((n+1)/2) DECIMAL m,货币金额数据字典预置类型DATS,对应ABAP类型D(8),含义为日期4、创建数据类型SE11,先创建域,5、其他数据字典类型引用类型,结构类型,表类型,并非ABAP类型,都可以使用se11创建2.1.2.5.程序中的数据对象1、文字对象文字分为数字和字符两种,数字直接使用,字符用“’”注明。