ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:135.83KB ,
资源ID:26093513      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26093513.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SAP开发规范.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SAP开发规范.docx

1、SAP开发规范 SAP开发规范1说明1.1内容说明开发规范总的包含了以下三方面的内容 SAP开发规范,即本文档,主要内容为: 说明开发中要注意的事项 代码编写的规范 开发中要遵循的规则 性能有关的例子 SAP开发命名规范,主要为开发过程中涉及的命名规则 涉及开发中的命名,统一命名规则,方便程序的沟通、阅读1.2规范目的提高SAP项目中开发的效率、质量,实现标准化管理1.3使用说明 在客户有开发规范的情况下,请按照客户的开发规范进行开发 如客户未有现成的开发规范,请按照公司的开发规范进行开发 请确保在开发的时候遵循了以下规则,如模糊不清时,请及时重新查阅。如有冲突的地方,请与项目上的开发负责人进

2、行确认1.4使用对象 任何在SAP系统进行开发的人员 初学ABAP开发者2一般规则以下为开发过程必须遵守的一般规则,请遵守。 请严格按照SAP开发命名规范进行相关命名 请遵循SAP项目管理流程来进行开发及开发管理 在开发完成后,在开发系统中清除不需要的对象 不可随便修改SAP源代码,除非是客户化字段、用户出口等 若确实需修改SAP源代码,请与技术负责人确认,并进行严格记录、测试 在程序中不要遗留下没有使用的变量,可以使用”Extended Program Check”进行检查 当有文本输出时,通过维护文本符号来实现。使用文本符号方便翻译 使用常数来代替固定数值或固定字符 常数必须定义为全局的。

3、优点:可重复使用,只需修改一个地方 请不要在代码中对组织架构(公司代码、工厂、采购组织等)的数据赋予固定值,组织架构的值可通过参数(Parameter)、选择范围(Select-options)、变式等方式来传值 不要使用TABLES语句定义的数据结构,使用专门定义的工作区 TABLES语句只用于Select-options需要的时候 尽可能不要使用MOVE-CORRESPONDING语句,因为比较耗时 在SQL语句执行完成后、内表操作语句执行完成、调用完函数等之后,检查返回码sy-subrc的值,并做判断处理 一般情况下为一个程序创建一个对应的请求,以防传输时混乱 慎用ABAP中的宏,因为宏

4、不易维护且不可调试 所有的开发的程序必须分配对应的事务代码,从而可避免给用户分配SA38或SE38的权限 原则上一个程序的代码不能超过2000行,超过2000行请使用include program确保可读性3代码管理在创建一般报表时,请拷贝报表模板程序,并在模板程序的基础上进行代码编写。模板程序主要包括了程序标题格式、事件关键字等内容。方便程序编写并统一规范。3.1程序标题每个程序标题必须包括了程序名称、程序名、开发日期、开发者、概要、变更记录(日期、变更者、传输请求号、修正内容)。请参考以下例子:例子*-*程序名称:程序名称*程序名:ZZZ*_*开发日期:2012/MM/DD*创建者:张三*

5、申请者:李四*-*概要:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*XXXXXXXXXXXXXXXXXXXXXXXX*-*变更记录*2012/ins-dayBy张三(Hand)DEVK90000*Description:*1.初始开发*2012/ins-dayBy张三(Yahua)DEVK90010*Description:*1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*2.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*-*REPORTZZZ*_*NOSTANDARDPAGEHE

6、ADINGLINE-SIZE255LINE-COUNT65.注意:请将可能详细的维护好程序标题。3.2子程序、模块标题在子程序定义前面必须进行注释说明。说明内容包含:包括子程序名称、子程序功能描述、参数功能等。模块与子程序类似。子程序例子*-* Form GET_COMPANY_CODE_DESCRIPTION *-* 通过传入的公司代码,得到公司代码 描述* *-* 传入参数:fu_bukrs 为公司代码*-*FORM get_company_code_description USING fu_bukrs CHANGING fu_butxt.模块例子*-* MODULE SET_PFSTAT

7、US OUTPUT *-* 设置屏幕100的 GUI 状态 *-*MODULE SET_PFSTATUS OUTPUT.注意:请将可能详细的维护子程序、模块的标题信息。另:原则上一个FORM的长度不能超过300行,如果超过300行,请尽量拆分为多个FORM,确保程序的可读性。如:要从10个表中取数,我们可以将其拆分为多个FORM,其中取文本表的单独一个FORM,当从某个表取字段过多(或者取出即有部分处理逻辑)时,我们甚至可以将其单独一个FORM。3.3编辑器设置为了使原代码更易于解读,规定对编辑器进行设置。设置路径为:SE38-实用程序(U)-设置(E)编辑器:设置使用新的编辑器、每行最长72

8、个字符长(注:抓图为ECC6.0例子,其它版本请以实际为主)“规范化打印机(pretty print)”设置:缩进、关键字大写3.4代码格式3.4.1使用规范化打印机要求在代码编写完成后,点来格式化代码,使代码自动缩进、关键字大写等,在编写代码过程中使用该按钮,也有助于发现输入错误的语句。注意:如果规范化打印机不可用,则手工的调整代码,使代码结构化。3.4.2查询SQL语句的写法Open SQL请按如下格式对齐,有助于阅读和查看 SELECT field1 “xxx field2 “xxxINTO TABLE it_maraFROM MARA WERE matnr =wa_tab-matnr.

9、 SELECT,INTO,FROM等缩进两空格 WHERE缩进一空格 字段field1,field2每个都进行换行,并在字段名后注释其意义3.5变更记录管理当程序传到生产机之后,开始进行变更管理。变更管理开始后,进行程序的修改时要注意以下: 在程序的开始处的变更记录上记录以下内容日期 修改者 传输请求号 修改内容及原因例子*-*变更记录*2012/ins-dayBy张三(Hand)DEVK90000*Description:*1.初始开发*2012/ins-dayBy张三(Yahua)DEVK90010*Description:*1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

10、XXXXXX*2.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*-* 在修改的程序代码处,要通过类似如下注释包括起修改的内容*2012/01/08 张三规格变更Chg修改开始*修改原因:*2012/01/08张三规格变更Chg修改结束例子1*2012/01/08张三规格变更Ins修改开始*修改原因:*2012/01/08张三规格变更Ins修改结束例子2*2012/01/08张三规格变更Del修改开始*修改原因:*2012/01/08张三规格变更Del修改结束修改标识意义Ins新增Chg修改Del删除注意:在删除代码时,只是注释,不要实际物理的删除代码。3.6代码注释

11、 数据声明和程序的逻辑部分必须要有注释,逻辑部分的注释尽量控制在整个程序代码的10%20%左右。 特殊的标记字段要在注释中说明其用法 根据项目语言使用情况选择用中文或英文进代码注释和文档说明 在初次提交的代码中不要保留初注释掉的代码行 在涉外的开发项目中,注释和说明要用英文3.7子程序与函数模块 程序中的代码要尽量实现模块化,即如果程序中多个地方将会用到相同的代码,那么将这些代码封装在子程序中,以便可以随时调用,同时也增加了程序的可读性和可维护性 当相同的功能的代码可以被多个程序使用时,最好定义成函数模块 避免调用外部程序中的子程序3.8其它注意事项在每一个程序行中,最多只有一个语句,避免一条

12、程序行中包含多条语句的写法。4数据库查询在使用SELECT语句中,尽可能把握以下几个原则: 尽可能的在Where条件中包含多的索引字段作为条件 Where条件中的索引字段按表中的索引顺序排列 尽可能的在Where条件中包含多的条件,即使字段不是索引的4.1不要在Loop循环中使用Select语句在循环中使用Select语句将会频繁的访问表,尽量减少数据库访问的操作。以下语句是不建议的。LOOP AT it_tab INTO wa_tab. SELECT * FROM MARA INTO TABLE it_mara WERE matnr =wa_tab-matnr.ENDLOOP.4.2取数的时

13、候不能使用SelectEndselect语句循环操作例: 错误正确SELECT * FROM dbtabMOVE-CORRESPONDING dbtab TO it_abAPPEND it_tabENDSELECT.SELECT *FROM dbtab INTO TABLE itab.注意:必须避免嵌套的Select,因为每条记录将连接一次数据库。4.3尽量多使用内表为了提高程序的性能,通常先把数据库表中的数据取到内表中,在内表进行数据处理。减少重复访问相同数据表的情况。例: (错误) (正确)4.4Select 与 Select*比较尽可能使用SELECT 来代替 SELECT *,减少数据

14、传输量,当数据量大时,前者速度会明显更快。例:不建议写法建议写法SELECT * FROM dbtabINTO TABLE it_tab WHERE .SELECT field1 field2FROM dbtab INTO TABLE it_tab WHERE .仅用于某种特殊情况时,如表的字段数很少或数据记录不多 当表中包含的大量字段时 使用Select 虽然会增加代码的工作量,但会减少内存的使用及网络的负担4.5外部检查尽可能避免使用Select COUNT (*)来确认表存在的记录数,因为该语句将会对表进行全扫描。4.6Select single语句使用注意 当使用Select Sing

15、le时,要求在where条件语句中包含所有的关键字 当不能确定所有关键字而能确定只有一条记录匹配时,可使用Select . up to 1 rows来查询 4.7Select 语句中排序 与ABAP语句中排序比较对数据排序有两种方式:一种为在数据库服务器中排序;一种为在应用服务器中排序。不建议写法建议写法SELECT field1 field2 FROM dbtab INTO TABLE it_tabWHERE.ORDER BY field1.SELECT field1 field2 FROM dbtabINTO TABLE it_tab WHERE .SORT it_tab BY field

16、1.应用服务器排序更快4.8Select distinct语句使用不建议写法建议写法SELECT DISTINCT fieldFROM dbtab INTO TABLE it_tabWHERE.SELECT field FROM dbtabINTO TABLE it_tab WHERE .SORT it_tab BY field1.DELETE ADJACENT DUPLICATES FROM it_tab COMPARING field. 需要在数据库服务器进行排序,且会影响整个系统性能如果没有合适的索引 使用DISTINCT语句时,数据库服务器经常不访问缓存.尽可能避免在SELECT语句中

17、使用GROUP BY, ORDER BY , DISTINCT 等功能。 4.9批量更新数据库表在更新数据库数据时,可以一条一条记录的更新,也可批量的更新多条记录。当更新记录数较多时,请采用批量更新的方式,有助于性能的提高。不建议写法建议写法LOOP AT it_tab INTO wa_tab. UPDATE dbtab SET field01 = wa_tab-field01 WHERE field2 = wa_tab-field2.ENDLOOP.LOOP AT it_tab INTO wa_tab. ENDLOOP.UPDATE dbtab FROM TABLE it_tab.执行完成更

18、新语句后,会有两个比较有用的系统变量值返回: SY-SUBRC 为0时则所有记录都成功更新。 SY-DBCNT 该值为成功更新的记录数。4.10For All Entries 语句说明:For All Entries后紧跟的内表称为驱动内表。 在使用该语句时,驱动内表不能为空,若为空,则等价于无此条件,可能造成全表的检索。所以,在使用For All Entries时,要先对驱动内表是否为空进行判断 在使用该语句前,尽可能保持少的驱动内表条目数,尽可能使驱动内表中的条目为唯一的(可先进行删除重复行等操作)。这样可避免在数据库中进行了不必要的读取 避免使用该语句读取小的数据库表(如配置表),对于小

19、的数据库表使用单独的SELECT语句将会更好 使用该语句时,尽可能的连接数据库表中的索引,否则将会重复的全表扫描,并注意按数据库表中的索引顺序来写Where语句 驱动内表与INTO后的内表不可以是同一个内表4.11Open SQL与 Native SQL比较开发人员不准使用 Native SQL,如果非得使用,请与项目组技术负责人确认。4.12表连接表连接取数是在数据库服务器里进行的,可以减少数据在网络上的传输。但是有一个缺点是表连接不使用应用服务器的缓存。例子SELECT vbakauart vbapmatnrINTO TABLE it_tab FROM vbak AS vbakINNER

20、JOIN vbap AS vbap ON vbakvbeln = vbapvbelnWHERE vbeln IN s_vbeln.vbak为主表vbap为副表 在where条件中必须有主表的关键字或索引 在where条件中尽可能的指定跟主表有关的条件 在某种情况下可以考虑建立对应的视图来代替表连接的使用 5内表使用注意5.1内表定义在定义内表时,建议先定义对应的类型,再定义内表。TYPES: BEGIN OF ty_company, bukrs TYPE t001t-bukrs, “公司代码 txtna TYPE t001t-txtna, “公司代码描述 END OF ty_company.D

21、ATA: it_company TYPE STANDARD TABLE OF ty_company, wa_company TYPE ty_company.注意:请避免使用带表头的内表,SAP将会废弃此荐功能,目前在面向对象编程中不支持带表头的内表。5.2内表使用5.2.1修改内表中的字段值 使用MODIFY it_tab TRANSPORTING field . WHERE 将可加快修改内表记录集的速度。特别是在内表行中有嵌套内表时,该写法将可明显增加速度。 通过LOOP处理来修改所有的组件 内表的大量修改必须通过在LOOP循环中来实现5.2.2把一个内表附加到另一个内表后面例:说明:内表i

22、t_tab01 和内表 it_tab02有相同的行结构且包含一定的记录集。错误写法正确写法LOOP AT it_tab01 INTO wa_tab.APPEND wa_tab TO it_tab02.ENDLOOP.APPEND LINES OF it_tab01 TO it_tab02.通过LOOP循环实现内表的附加通过APPEND LINES OF语句批量附加内表5.2.3删除内表中重复行先对一个内表按删除时比较的字段进行排序,再通过以下语句删除重复行。DELETE ADJACENT DUPLICATES FROM it_tab COMPARING field.5.2.4根据条件删除内表中

23、的行错误写法正确写法LOOP AT it_tab INTO wa_tab.IF wa_tab-filed = value.DELETE it_tab INDEX sy-tabix.ENDIF.ENDLOOP.DELETE it_tab WHERE filed = value.通过LOOP循环进行删除通过WHERE语句进行删除5.2.5内表是否为空的判断错误写法正确写法DESCRIBE TABLE it_tab LINES l_lines.IF l_lines = 0.* 内表为空ENDIF.IF it_tab IS INITIAL.* 内表为空ENDIF.5.2.6读取内表行 关键字读取REA

24、D TABLE it_tab INTO wa_tab WITH KEY field = value. 关键字二分搜索读取READ TABLE it_tab INTO wa_tab WITH KEY field = value BINARY SEARCH. 索引读取R EAD TABLE it_tab INTO wa_tab WITH KEY field = value INDEX l_index.*注意:在使用二分搜索读取内表时,要先按关键字对内表进行排序性能比较:类型性能比较索引读取最快关键字二分搜索读取较快关键字读取慢使用原则: 当可以通过指定索引读取内表时,用指定索引读取 如若不能,则通

25、过二分搜索进行读取例:不建议写法LOOP AT it_tab01 INTO wa_tab01. READ TABLE it_tab02 INTO wa_tab02 WITH KEY field = wa_tab01-field. CHECK sy-subrc = 0.ENDLOOP.通过内表关键字来连接两个表建议写法SORT it_tab02 BY field.LOOP AT it_tab01 INTO wa_tab01. READ TABLE it_tab02 INTO wa_tab02 WITH KEY field = wa_tab01-field BINARY SEARCH. CHECK

26、 sy-subrc = 0.ENDLOOP.通过使用关键字二分搜索来连接两个表要对内表 it_tab02 先按字段field进行排序5.2.7通过LOOP AT it_tab ASSIGNING 循环内表 由于字符变量指向内存地址,此种方式比LOOP AT it_tab INTO wa_tab方式快 适合于数据量大、需要循环处理的内表 在READ语句中也可以使用类似的字符变量。注意: 使用此种方式请确保对字符变量有充分理解 在此种方式的内表循环中,不要再使用ASSIGN语句给指定其它的值 通过此种方式修改内表行的数据时,不要使用MODIFY语句5.2.8通过平行光标来连接两个内表方法一:建议写法SORT it_tab01 BY fi

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1