ABAP开发规范V1.0_.20241127

news/2025/1/9 23:40:18/文章来源:https://www.cnblogs.com/amadeuslee/p/18650645

1. 概要

1.1目的

该文档定义了在开发与维护ABAP程序过程中必须遵守的规范与标准。该文档应当被视为一个动态的文档,该文档会根据需要进行增补和修订。

开发规范的重要作用在于保持整个开发团队的开发风格一致,提高程序质量,降低维护压力。

1.2适用范围

所有ABAP开发及系统配置人员。

2. 程序命名规范Naming Rule

2.1.目的

系统设计及开发过程中,需要遵守的命名规则规定的相关标准。

2.2.命名规范标准

制作Naming Rule时根据以下制作标准编写。

2.2.1.命名规范基本结构

命名规范的基本结构如下所示:

'Z' + (模块标识符) + (标识符:一至两个字母) +(序号四位)。

命名一个对象的时候以 'Z'开头。

模块标识符,用来指明所属模块。

标识符,用来区分该对象的类别。

使用这种基本结构为Naming Rule的原则,无法应用Naming Rule的情况可以使用其他例外结构。

2.2.2.流程模块命名

流程模块命名为2至4位字符,以按业务流程来区分,跨业务流程模块的以服务提供方作为流程模块命名。

(1)模块命名规则

流程模块 名称
SD 销售
PP 生产
FI 财务
MM 后勤
HR 人事
PM 设备
MDM 主数据
PS 项目管理
…… ……

2.2.3.Package 开发包

(1)Z + 流程模块名(各流程模块用一个)

EX:ZFI、ZPM。。。。

Package由开发负责人统一创建,需要的可以提出申请。

²注意:S4/HANA中所有接口及增强都放在Package:ZNT下面

²国贸个性化需求放ZGM包下

2.2.4.ABAPDictionaryObject

(2)Object 类型

标识 类型 含义
T Table 数据库表
V View 数据库视图
S Structure 结构
LT Table Type 使用Line Type来定义表的时候使用
TG Type Group 类型组
SH Search Help 搜索帮助

(3)Tables Name

1)字段的定义必须用Data Element,不能使用原始类型。

对象 Table
命名规范 Z + FI + T + NNNN
说明 Z 表示自建
FI 流程模块
T 表示Table
NNNN 4个数字的组合,数字的递增是1为单位,表的编号XXXX应和该表所对应的主程序的编号保持一致。ex:ZFIT0001 当后期业务需要加入跟该表有关联的新表时,在后面加入字母A/B/C。。。来区分 ex:ZFIT0001A
范例 ZFIT0001 : FICO模块的第一张自建表 ZFIT0001A: FICO 模块的第一张自建表的关联表
描述 [流程模块] + 该表用途的描述(尽量详细明了)

(4) Configuration table

对象 Table
命名规范 Z + FI + T + _ + CFG + NNN
说明 Z 表示自建
FI 流程模块
T 表示Table
NNN 3个数字的组合,数字的递增是1为单位,表的编号XXXX应和该表所对应的主程序的编号保持一致。ex:ZFIT_CFG001
范例 ZFITCFG001 : FICO模块的第一张配置表
描述 [流程模块] + 该表用途的描述(尽量详细明了)

(5)Structure Name

所有字段的Data Element中,没有特殊原因一定要分配Data Element。(不使用Predefined type .)

对象 Structure
命名规则 Z + FI + S + NNNN
说明 Z 表示自建
FI 流程模块
S Structure
NNNN 4个数字的组合,数字的递增是1为单位
举例 ZFIS0001
Description [流程模块] + Structure 用途描述(尽量详细明了)

对于增强结构,以ZAS开头,后加有意义的字符区分,即:ZAS+ 有意义的字符

(6)View Name

无法复制加载中的内容

Table type

无法复制加载中的内容

(7)Search Help Name

无法复制加载中的内容

(8)Type Group Name

无法复制加载中的内容

2.2.5.Class Definition & Implementation

(9)Class Name

无法复制加载中的内容

(10)Interface

无法复制加载中的内容

(11)BADI Enhancement Spot Name

无法复制加载中的内容

(12)BADI Name

无法复制加载中的内容

(13)BAdI Implementation Name

无法复制加载中的内容

2.2.6.ABAP Programming Object

(14)概要

对于与ABAP 程序相关的Object规定命名规则。

  • 命名规则使用重复的情况(例:是BDC,是 Report 程序的情况命名规则):

按DialoguE (第1级), Interface (第2级), Report(第3级) , BDC(第4级),Conversion(第5级),Form(第6级)的顺序,依次套用命名规则。

无法复制加载中的内容

(15)Dialog Program Name

无法复制加载中的内容

(16)Report Program Name

无法复制加载中的内容

(17)Interface Program Name

无法复制加载中的内容

(18)Includes programs

主程序ID + TOP/FRM/_screen No.

(19)Function Group Name

无法复制加载中的内容

(20)Function Module Name

无法复制加载中的内容

(21)Screen Name

无法复制加载中的内容

(22)Menu Name( GUI-Status (PF-Status) )

无法复制加载中的内容

(23)GUI title

无法复制加载中的内容

(24)Subroutines

无法复制加载中的内容

(25)Transaction Code

与程序名称相同。(Module Pool 程序的情况'SAPM'除外)

(26)Form Name

无法复制加载中的内容

2.2.7.其他命名规范

(27)消息类开发需遵循以下开发规范:

a) 必须使用预定义的MESSAGE(SE91定义),不得直接抛出硬编码的text消息,或不使用消息类抛出消息;

b) 新建消息类须遵循消息类命名规则,Z+FI(流程模块)+XX;

c) 板块消息类和跨板块(全局)消息类需严格区分,避免板块和全局消息类传输时相互覆盖。

(28)Message Class Name

无法复制加载中的内容

Message Text 使用时Parameter有两个以上的情况,在 Parameter上可以区分顺序。

例) session&1正被用户 &2处理中

(29)Project Name

用户自定义的User Exit,适用本标准。

无法复制加载中的内容

(30)Number Ranges (Object)

Number Range Object按各模块使用序列号并创建。

无法复制加载中的内容

(31)权限对象命名规范

Authorization Fields

无法复制加载中的内容

Authorization Object Classes

无法复制加载中的内容

Authorization Objects

无法复制加载中的内容

(32)传输请求号

传输请求理论上对应开发清单,一个功能模块创建一个传输请求,不允许一个请求号嵌套多人子请求号。

无法复制加载中的内容

3. Coding Convention

3.1.变量声明

通常在定义变量的时候,冒号后面要用一个空格。

例: DATA:MATNR LIKE VBAP-MATNR,

WERKS LIKE VBAP-WERKS.

在多个程序中共同使用的变量和类型,使用Type Group或者Include文件来减少重复的定义。

如果可能,尽量使用本地变量以减少全局变量的定义个数。

如果可能,尽量不让变量持续的运行在程序中。

3.2.变量的命名规范

一般规则:变量范围(g/l)+变量类型(v/s/t)+'_'+ xx.xxx

如:

全局变量 gv+_+xx.xxxeg: data gv_count type i.

全局结构 gs+_+xx.xxx

全局内表 gt+_+xx.xxx

本地变量 lv+_+xx.xxxeg:data lv_count type i.

本地结构 ls+_+xx.xxx

本地内表 lt+_+xx.xxx

n全局变量的定义

无法复制加载中的内容

n本地变量的定义

无法复制加载中的内容

nTypes 定义

  • Program 内部 Global Types 定义

  • User Predefined Types

  • Refer to Existing types

  • Reference Types

  • Structured Types

  • Table Types

  • Ranges Table Types

无法复制加载中的内容

n全局内表的定义

无法复制加载中的内容

n本地内表的定义

无法复制加载中的内容

n Perform Parameter 定义

无法复制加载中的内容

n User Interface定义

  • Selection Screen的user interface中要使用的parameters/select-options的相关定义

  • 各个相关的Label text:利用相关 program的text elements tool进行管理

nParameters

无法复制加载中的内容

n Select-Options

无法复制加载中的内容

nConstant常量定义

无法复制加载中的内容

n Range变量 公布

无法复制加载中的内容

n集的定义

无法复制加载中的内容

nText Symbols

所有program 内的 text一定要使用Text Symbol

Hard conding text时一定要进行向text symbol的变化。在 program中使用的所有text要使用ABAP Text Element tool进行管理。

无法复制加载中的内容

nField Symbols

Field Symbols区分Global/Local。

要指定Type,指定特别type困难的情况使用'TYPE ANY'。

无法复制加载中的内容

n Table Control

Table Control作Global定义.

无法复制加载中的内容

nCustom Control

Control Object使用通过Container Screen Layout的Custom Control

无法复制加载中的内容

nLocal Class Definition (Program 内部)

与通过Class Builder创建的global class object不同,是在程序内部定义。

无法复制加载中的内容

n参考变量(Reference Variables for Class/Interfaces)

无法复制加载中的内容

4. 程序注释的命名规范

以下定义注释相关的标准事项。

4.0一般规则

注释分为程序 main header 注释, Line注释, Block注释三种。

①一定要在适当的位置上进行注释.

②注释基本上使用中文。

③所有程序上都要附上main header 注释。

④所有子模块routine上都要附上注释。

⑤程序的所有注释,为了方便第三者理解都要进行详细描述。

⑥有效代码行与注释的比例不得低于100:7

4.1注释的格式

无法复制加载中的内容

4.1.1标题/程序头的注释

所有程序要包含与以下信息相关的注释。

main header 注释的位置位于main Include的上端。

程序修改时与变更编号一起管理变更内容,并且在程序coding部份也要通过注释描述变更编号,便于后期管理。

无法复制加载中的内容

4.1.2修改程序的注释

程序修改时程序下端的程序main header 注释中一定要描述变更历史,修改的子模块 routine也要注释,需要增加 **** XX BY 用户名 AT 日期 For 申请者 Begin***;

**** Add BY 用户名 AT 日期 For 申请者 End ***。

XX:新增Add 修改 Modify 删除 Delete,

删除时直接注释源代码,不需要物理删除。

无法复制加载中的内容

5. 程序结构

主程序结构应该简洁明了。

主程序应该至少采用:

XXXTOP

XXXXFRM的模式。

XXXX表示主程序ID。

程序主体逻辑部分应该至少分为:

FRM_GET_DATA

FRM_PRC_DATA两部分。

²ALV输出保持统一风格,参考示例如下:
img

²修改内表行时不使用MODIFY关键字,而是使用FIELD-SYMBOLS指针

LOOP AT gt_ ASSIGNING FIELD-SYMBOLS(<g_acdoca>).

<g_acdoca >-hslalt = 1000.

<g_acdoca >-kslalt = 2000.

<g_acdoca >-oslalt = 3000.

<g_acdoca >-vslalt = 4000.

<g_acdoca >-bslalt = <g_acdoca >-oslalt + <g_acdoca >-vslalt.

ENDLOOP.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863478.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浙江单考单招政策解读!(内含浙江单招院校名单)

浙江单考单招政策解读!(内含浙江单招院校名单) 浙江单考单招: 浙江单招,即浙江省普通高校招生单独考试,浙江单招的考试科目通常包括文化课和职业技能测试(分为理论课和操作两部分),很多考生对浙江单招政策还有很多疑问,小编整理了浙江单招政策常见的一些政策问题及单…

如何评估员工是否以客户为中心

达到或超过期望值他能够与客户的反对意见打交道,应对它们,并使客户相信他的观点的优点。 他能为任何客户找到正确的方法,即使是最关键的客户。 他对客户总是很有礼貌和友好。他在谈话中从不打断他们。 他不能让客户失望。如果他承诺过要做什么,他就会履行承诺。 他总是关心…

antdVue 合并a-table相同内容行的方法

{title: "核算项",dataIndex: "hesxName",key: "hesxName",align: "center",customRender: (text, record, index) => {const obj = {children: text !== null ? text : "",attrs: {},};obj.attrs.rowSpan = this.merge…

在jooq的POJO类中使用Lombok的Data注解

jooq生成pojo类的配置根据官方给的如下: https://www.jooq.org/doc/3.14/manual/getting-started/tutorials/jooq-in-7-steps/jooq-in-7-steps-step3/如果想要使用lombok注解,需要自定义生成器。原生的参数并不足够支持这样做。另外一般也不需要这样做,因为更推荐把生成的代…

01.03 CW 模拟赛 T1. math

前言 赛场上 \(\rm{while}\) 打成 \(\rm{if}\) 痛失 \(40 \rm{pts}\) 不过下来看是贪心的话也没什么好做的了, 一般都不会 对了这是题目 题目下载 \(\rm{sol}\) 方法 \(1\) : 逐位计算 思路 显然的是你需要把数字从大到小填入, 使得高位的数尽量大, 这个显然 由上面的结论可以知…

电商团队信息共享的最佳方案:在线协同工具的应用

电商行业发展迅速,竞争也日益激烈,团队协作效率已成为企业能否脱颖而出的决定性因素。一个高效的电商团队不仅需要快速反应和高效执行,更需要具备流畅的沟通和协同机制。而在线协同编辑文档工具,正是推动这一机制的核心工具之一。 电商团队架构的挑战与需求 电商团队通常由…

体验领礼啦!体验自建数据库迁移到阿里云数据库RDS,领取桌面置物架!

​「技术解决方案【Cloud Up 挑战赛】」上线了! RDS MySQL 支持实例管理、账号管理、数据库管理、备份恢复、白名单、透明数据加密以及数据迁移等基本功能,还支持读写分离、SQL审计、多可用区集群等高级功能。经过双十一高并发、大数据量的考验,RDS MySQL 拥有优良的性能。 …

接入企业微信审批开发记录

背景 客户提了关于对接企业微信【审批】功能的需求,具体需求包括: 1、当企业微信审批流程到达某个节点后,能将审批信息推送到我们系统,或者我们系统能够拉取某个流程的信息; 2、能在审批流程中嵌套一个评价节点,跳转我们系统的评价页面。1 调研企业微信是否支持 根据这篇…

并发编程 StampedLock

StampedLock是JDK8引入的,是为了优化读的性能乐观读:tryOptimisticRead方法内没有加任何锁,在真正进行读取操作之前要进行一次查验,即validate,因为在获取stamp后,到读取操作之间,可能会有并发问题。 如果查验结果为false,就会升级为读锁

【硬件测试】基于FPGA的8PSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章:基于FPGA的8PSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR-CSDN博客的硬件测试版本。在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(完整代码运…

Linux 安装和配置openssl

使用python3.10版本时遇到无法加载.ssl的报错,解决方法如下: 1. 检查openssl的当前版本,如果已经是openssl-1.1.1w,则跳过下文,应该不是同一个问题。openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 2. 下载openssl-1.1.1w版本的压缩包 openssl-1.1.1w.tar.gz3. 解压压…

【Java 温故而知新系列】基础知识-04 重点关键字(面试经常遇到的)

1、final 在 Java 中,final 关键字可以用于变量、方法和类,分别赋予它们不同的语义和行为。以下是 final 关键字的主要作用 修饰变量 当 final 修饰一个变量时,表示该变量的值一旦初始化后就不能再被改变。这适用于基本类型和引用类型。基本类型:对于基本类型(如 int, do…