目录SAP开发规范1.1 1.21-4内容说明规范目的使用说明使用对象一般规则代码管理3.13.23.33.43.4.1程序标题................. r程序、模块标题 ........ 编辑器设置............... 代码格式.................使用规范化打审机査询SQL语句的写法、3.5变更记录管埋......3.6代码注释..........3.7r程用与函数模块.3.8其它注意事项•••••••••3.4.2数据库査询4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12不耍在LOOP循坏中使用SELECT涪句 ...................... 取数的时候不能使用SELECT……ENDSELECT语句循环操作尽量*使用内衣....................................... SELECT<FIELD> 与SELECT*比较....................外部检査...................................SELECT SINGLE语句使用注意.....................SELECT语句中扌II疗与ABAP语句中排序比较SELECT DISTINCT 语句使用......................批量更新数据库农...........................FOR All ENTRIES 语句...........................OPEN SQL 打NATIVE SQL 比较农连接........................内表使用注童5.15.25.2.1内衣定义.................内衣使用.................修改内农中的字段值、1010101111111111115.22 5.23 524 525 5.2.6 5.2.7 5.28 5.2.9把一个内&附加到另一个内表后面..............删除内衣中重复彳亍.........................根据条件删除内衣中的彳亍...................内衣是否为空的判断.........................读取内农彳亍...............................通过LOOP AT it tab ASSIGNING <fA 循环内衣・通过平彳亍光标来连接两个内&................释放内&....................................11121212121313146 数据字典对象146.1 6.2 6.3 6.4建衣规则....................创建数据元索/域的城本规则添加客户化字段到SAP农中■索引维护文件处理SMART FORM1414141515161610其它注意事项1610.1 10.2 10.3消息类使用.....................r-程序参数传递................局部变量与全局变量的使用比较16161611 代码检査1812 ABAP性能例子18SAP 开发规范1说明1.1内容说明开发规范总的包含了以下三方而的内容《SAP 开发规范》,即本文档,主要内容为: > > > ><SAP 开发命名规范》,主要为开发过程中涉及的命名规则 > 涉及开发中的命列,统一命名规则,方便程序的沟通、阅读提高SAP 项目中开发的效率、质量,实现标准化管理在客户有开发规范的情况下,请按照客户的开发规范进行开发 如客户未有现成的开发规范,请按照公司的开发规范进行开发请确保在开发的时候遵循了以下规则,如模糊不淸时,请及时重新査阅。
如有冲突的地 方,请与项目上的开发负责人进行确认任何在SAP 系统进行开发的人员 初学ABAP 开发者一般规则以下为开发过程必须遵守的一般规则,请遵守。
请严格按照《SAP 开发命名规范》进行相关命名 请遵循《SAP 项目管理流程》来进行开发及开发管理 在开发完成后,在开发系统中淸除不需要的对象 不可随便修改SAP 源代码,除非是客户化字段、用户出口等 若确实需修改SAP 源代码,请与技术负责人确认,并进行严格记录、测试 在程序中不要遗留下没有使用的变量,可以使用''ExtendedProgramCheck-ji 行检查 当有文本输出时,通过维护文本符号来实现。
使用文本符号方便翻译 使用常数来代替固左数值或固是字符常数必须楚义为全局的。
优点:可重复使用,只需修改一个地方 请不要在代码中对组织架构(公司代码、工厂、采购组织等)的数据赋予固定值,组织 架构的值可通过参数(Parameter )、选择范用(Select-options 变式等方式来传值 不要使用TABLES 语句崔义的数据结构,使用专门世义的工作区 TABLES 语句只用于Select-options 需要的时候尽可能不要使用MOVE-CORRESPONDING 语句,因为比较耗时在SQL 语句执行完成后、内表操作语句执行完成、调用完函数等之后,检查返回码 sy-subrc 的值,并做判断处理说明开发中要注意的事项 代码编写的规范开发中要遵循的规则 性能有关的例子1.2 规范目的13使用说明1.4 使用对象一般情况下为一个程序创建一个对应的请求,以防传输时混乱憤用ABAP中的宏,因为宏不易维护且不可调试所有的开发的程序必须分配对应的事务代码,从而可避免给用户分配SA38或SE38的权限原则上一个程序的代码不能超过2000行,超过2000行请使用include program确保可读性代码管理在创建一般报表时,请拷贝报表模板程序,并在模板程序的基础上进行代码编写。
模板程序主要包括了程序标题格式、事件关键字等内容。
方便程序编写并统一规范。
3.1程序标题每个程序标题必须包括了程序名称、程序名、开发日期、开发者、概要、变更记录(日期、变更者、传输请求号、修正内容)。
请参考以下例子:3.2子程序、模块标题在子程序定义前面必须进行注释说明。
说明内容包含:包括子程序名称、子程序功能描 述、参数功能等。
模块与子程序类似。
子程序例子* Form GET_COMPANY_CODE_DESCRIPTION* __________________________________________________ * 通过传入的公司代码,得到公司代码描述** 传入参数:fu_bukrs 为公司代码* ___________________________________FORM get company code description USING fu bukrs CHANGING fu butxi.模块例子 *_ — **MODULE SET_PFSTATUS OUTPUT+*设置屏幕100的GUI 状态* *MODULE SET-PFSTATUS OUTPUT,*注意:请将可能详细的维护子程序、模块的标题借息。
另:原则上一个FORM 的长度不能超过300行,如果超过300行, 确保程序的可读性。
如:要从10个表中取数,我们可以将其拆分为多个FORM, FORM,当从某个表取字段过多(或者取出即有部分处理逻辑)时, 个 FORM 。
为了使原代码更易于解读,规定对编勒*器进行设置。
设置路径为:SE38-A 实用程序(P )-〉设置(E )编辑器:设置使用新的编辑器、每行最长72个字符长(注:抓图为ECC6.0例子,其它版 本请以实际为主)请尽量拆分为多个FORM, 其中取文本表的单独一个 我们甚至可以将其单独一“规范化打印机(prettyprin" 设置:缩进、关键字大写& User-S pedfic Settings3.4代码格式 341 使用规范化打印机SELECT field 1 *xxx• SELECTJNTO.FROM 等缩进两空格 field2 “XXX• WHERE 缩进一空格INTO TABLE it_mara • 字段fieldtfield2每个都进行换行,并在字段名后注FROM MARA释其意义WERE niatnr =wajab-matnr要求在代码编写完成后,点應代扌卿」在编写代码过程中使用该按钮,也有助于发现输入错误的语句。
注意:如果规范化打印机不可用,则手工的调整代码,使代码结构化.3.4.2 查询SQL 语句的写法Open SQL 按如下格式对齐,有助于阅读和査看 来格式化代码,使代码自动缩进、关键字大写等,/ workbench (GeneiaO KuML Settings^ ABAP Editor Class Builder Screen Painter Bl:reen r Debugging r Patrrn r worklBtEditor X P伦try3.5变更记录管理当程序传到生产机之后,开始进行变更管理。
变更管理开始后,进行程序的修改时要注意以下:> 在程序的开始处的变更记录上记录以下内容修改标识意义Ins 新增Chg 修改Del 删除日期修改者传输请求号修改内容及原因> 在修改的程序代码处,要通过类似如下注释包括起修改的内容 ****2012/01/08张三规格变更Chg修改开始*修改原因:*****2012/01/08张三规格变更Chg修改结束注意:在IM除代码时,只是注释,不要实际物理的删除代码.3.6 代码注释数据声明和程序的逻辑部分必须要有注释,逻辑部分的注释尽量控制在整个程序代码的 10%~20% 左右 Q 特殊的标记字段要在注释中说明其用法根据项目语言使用情况选择用中文或英文进代码注释和文档说明在初次提交的代码中不要保留初注释掉的代码行在涉外的开发项目中,注释和说明要用英文程序中的代码要尽量实现模块化,即如果程序中多个地方将会用到相同的代码,那么将 这些代码封装在子程序中,以便可以随时调用,同时也增加了程序的可读性和可维护性 当相同的功能的代码可以被多个程序使用时,最好宦义成函数模块 避免调用外部程序中的子程序在每一个程序行中,最多只有一个语句,避免一条程序行中包含多条语句的写法•4数据库査询在使用SELECT 语句中,尽可能把握以下几个原则:尽可能的在Where 条件中包含多的索引字段作为条件 Where 条件中的索引字段按表中的索引顺序排列尽可能的在Where 条件中包含多的条件,即使字段不是索引的在循环中使用Select 语句将会频繁的访问表,尽量减少数据库访问的操作。