SAP ABAP编程规范V1251SAP教育中心.docx

上传人:b****5 文档编号:27657381 上传时间:2023-07-03 格式:DOCX 页数:25 大小:24.75KB
下载 相关 举报
SAP ABAP编程规范V1251SAP教育中心.docx_第1页
第1页 / 共25页
SAP ABAP编程规范V1251SAP教育中心.docx_第2页
第2页 / 共25页
SAP ABAP编程规范V1251SAP教育中心.docx_第3页
第3页 / 共25页
SAP ABAP编程规范V1251SAP教育中心.docx_第4页
第4页 / 共25页
SAP ABAP编程规范V1251SAP教育中心.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

SAP ABAP编程规范V1251SAP教育中心.docx

《SAP ABAP编程规范V1251SAP教育中心.docx》由会员分享,可在线阅读,更多相关《SAP ABAP编程规范V1251SAP教育中心.docx(25页珍藏版)》请在冰豆网上搜索。

SAP ABAP编程规范V1251SAP教育中心.docx

SAPABAP编程规范V1251SAP教育中心

 

编程规X

版本<1.1>

修订历史记录

日期

版本

说明

作者

2006/03/31

1.0

完成初稿、计划在试运行中不断进行完善,获取正式版本

李剑

2008-1-11

1.1

修正

李剑

2008-3-4

1.2

修正了Tcode的命名方式

李剑

 

 

一、编码规则

1.程序命名规则

1.1报表规则

格式:

Z程序类型_模块名称_序列号

程序类型:

RPT

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

程序简称(6个字符)

例:

ZRPT_SD_STOALV

如有特殊情况,可加版本号

例:

ZRPT_SD_STOALV_V1

1.2子程序规则

格式:

Z程序类型_模块名称_序列号

程序类型:

SUB

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

程序简称(6个字符)

例:

ZSUB_SD_STOALV

1.3Include规则

格式:

Z程序类型_模块名称_序列号

程序类型:

INC

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

程序简称(6个字符)

例:

ZINC_SD_STOALV

1.4Query/CATT规则

格式:

Z程序类型_模块名称_序列号

程序类型:

QUE/CAT:

Query/CATT

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

简称(6个字符)

例:

ZQUE_SD_STOALV/ZCAT_SD_STOALV

1.5Form规则

格式:

Z程序类型_模块名称_序列号

程序类型:

FRM

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

简称(6个字符)

例:

ZFRM_SD_STOALV

1.6Smartform规则

格式:

Z程序类型_模块名称_序列号

程序类型:

SMF

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

简称(6个字符)

例:

ZSMF_SD_STOPRT

1.7Function规则

格式:

Z程序类型_模块名称_序列号

程序类型:

FUN

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

程序简称(6个字符)

例:

ZFUN_SD_STOALV

1.8FunctionGroup规则

格式:

Z程序类型_模块名称_序列号

程序类型:

FUG

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

程序简称(6个字符)例:

ZFUG_SD_STOALV

1.9SCREEN规则

格式:

Z程序类型_模块名称_序列号

程序类型:

SCR

模块名称:

模块名称(MM/PP/FI/CO/SD……)

序列号:

程序简称(6个字符)

例:

ZSCR_SD_STOALV

2.内部定义规则

⏹TYPES定义:

TYP_(※最长30字节)

⏹内表定义全局:

TAB_G_(※最长30字节)

⏹局部:

TAB_L_(※最长30字节)

⏹参数调用内表定义:

L_TAB_(※最长30字节)

⏹工作区全局:

REC_G_(※最长30字节)

⏹局部:

REC_L_(※最长30字节)

⏹参数调用工作区:

L_REC_(※最长30字节)

⏹PARAMETERS:

P_(※最长8字节)

⏹SELECT-OPTIONS    :

S_(※最長8字节)

⏹变量(含全局变量):

G_(※最长8字节)

⏹            :

G_T_

⏹:

G_FLG_

⏹            :

G_KBN_

⏹常量:

G_C_(※最长30字节)

⏹变量(参数调用):

L_(※最长30字节)

⏹:

L_T_counter

⏹:

L_FLG_flag

⏹常量(参数调用):

L_C_(※最长30字节)

⏹RANGE:

RG_(※最长30字节)

⏹Form传递参数     :

L_P_(※最长30字节)

⏹Filedsymbol(文件符号) :

(※最长30字节)

3.消息类

3.1消息类名

固定以字母”Z”开头,形式为Z+模块名称nnn

(以程序所属的功能模块划分消息类,如MM模块相关的消息类就以‘ZMM’开头)

3.2Type:

A:

终止当前事务

E:

错误,系统等待新输入数据

I:

信息,处理ENTER之后,系统继续处理

S:

确认,消息出现在下一屏上

W:

警告,可以更改输入数据或通过按ENTER继续

3.3消息号

nnnnnn为000-999连续数字。

4.SAPSCRIPT

4.1FORM

固定以字母”ZSF”开头,形式为ZSFnnnn

nnnn为0000-9999连续数字

4.2STYLE

固定以字母”ZSS”开头,形式为ZSSnnnn

nnnn为0000-9999连续数字

4.3TEXT

固定以字母”ZST”开头,形式为ZSTnnnn

nnnn为0000-9999连续数字

二、程序规则

1.程序属性的设置

(1)程序名称的填写必须是copy设计书里的程序名称

(2)根据设计书上的要求选择程序的种类

(3)程序状态都选择用户生成程序,如果是自己写的测试程序就选择测试用程序

(4)程序应用选择用户开发(个别管理)

(5)在指定开发类的时候按照命名规则里的规定来指定,学习或者测试的程序放到TMP临时对象中。

测试程序等非正式程序以Y开头。

2.文本元素

(1)文本符号

一般情况下不要使用,只有在需要用代码来改变画面上的内容才可以使用

(2)选择文本

输入画面上所需输入的字段名称都要由选择文本来标识,select-options和parameters所用的变量名长度不得超过8个字符

(3)报表窗口的头部包括标题栏在内按照设计书上所要求的需要来设置

3.程序结构

3.1即时报表程序/批处理程序

程序里所用到的变量定义及事件记述的顺序如下

REPORT

TYPE-POOLS(类型池定义)

TYPES(数据类型定义)

TABLE(透明表定义)

DATA(全局变量定义)

DATA(内表定义)

DATA(结构体定义)

PARAMETERS

SELECT-OPTIONS

CONSTANTS(常数定义)

INITIALIZATION

ATSELECT-SCREEN(处理选择屏幕)

START-OF-SELECTION

GET

END-OF-SELECTION

SELECT

TOP-OF-PAGE

END-OF-PAGE

ATLINE-SELECTION

ATUSER-MAND

FORM

ENDFORM

3.2Dialog程序

程序里所用到的变量定义及事件顺序

PROGRAM

TYPE-POOLS(类型池定义)

TYPES(数据类型定义)

TABLE(透明表定义)

DATA(全局变量定义)

DATA(内表定义)

DATA(结构体定义)

PARAMETERS

CONTROLS(Tablecontrol定义)

MODULE

ENDMODULE

FORM

EMDFORM

3.3共通模块

共通模块处理内容记述在include程序中要按照以下的顺序

FUNCTION

处理内容

ENDFUNCTION

FORM

处理内容

ENDFORM

***********************************************************************

共通模块定义变量用的include程序要按照下以顺序来写

TYPE-POOLS(类型池定义)

TYPES(数据类型定义)

TABLE(透明表定义)

DATA(全局变量定义)

DATA(内表定义)

DATA(结构体定义)

PARAMETERS

SELECT-OPTIONS

CONSTANTS(常数定义)

3.4模块化处理

程序开发使用精练语句,尽量做到功能强大代码简单。

避免出现垃圾代码从而降低程序运行速度,公共代码尽量模块化以减少代码重复编写,提高开发速度。

但是尽量避免form里面再套form,否则程序可读性不好。

START-OF-SELECTION.

PERFORMGET_DATA.

PERFORMPROCESS_DATA.

END-OF-SELECTION.

PERFORMOUT_DATA.

FORMGET_DATA.

……

ENDFORM.

FORMPROCESS_DATA.

……

ENDFORM.

FORMOUT_DATA.

……

ENDFORM.

程序逻辑清晰,每功能段都要以子程序的形式开发,以增加程序的可读性

3.5FORM/内部子程序

在程序内会经常使用到的功能代码块必须以FORM的形式来出现。

不允许在FORM使用或者修改全局变量,如果一定要用必须把全局变量作为实际参数传递给FORM里的局部变量形式参数再作处理传出为全局变量所接受。

FORM所用的USING参数和CHANGING参数必须一个参数占一行分行写

FORM内使用的局部变量要在该FORM内定义

FORM的形式参数和调用FORM所用的实际参数的名称必须不相同,其中形式参数的类型必须定义。

FORM里的文本包括代码和注释在内不应该超过300行。

3.6缩进

缩进的标准是两个半角空格即TAB键一次按下

相同层次的代码块必须保持缩进的整齐

3.7注释

除了中文的注释以外必须以半角的形式出现在整个程序中所有以”开头的注释必须对齐

屏幕程序主程序的头部注释

头部形式

*---------------------------------------------------------------------*

*ProgramID:

<程序名>

*ProgramName:

<程序描述>

*---------------------------------------------------------------------*

*DateCreated:

*CreatedBy:

<创建人>

*Description:

<处理内容>

*---------------------------------------------------------------------*

*Modification:

<修改版本>

*DateModified:

*ModifiedBy:

<修改人>

*Description:

<修改理由/内容>

*Request:

<需求人>

*---------------------------------------------------------------------*

共通模块的头部注释

头部形式

*”----------------------------------------------------------------------

*”*”共通模块ID            *

*”IMPORTING*

*”VALUE(参数名)LIKE参照项目名DEFAULT値*

*”EXPORTING*

*”VALUE(参数名)LIKE参照项目名*

*”CHANGING*

*”VALUE(参数名)LIKE参照项目名DEFAULT値*

*”TABLES*

*”内表名STRUCTURE参照结构名*

*”EXCEPTIONS*

*”例外参数名*

*”---------------------------------------------------------------------*

*”ProgramID:

<程序ID>*

*”ProgramName:

<程序名>*

*---------------------------------------------------------------------*

*DateCreated:

*CreatedBy:

<创建人>

*Description:

<处理内容>

*---------------------------------------------------------------------*

*Modification:

<修改版本>

*DateModified:

*ModifiedBy:

<修改人>

*Description:

<修改理由/内容>

*Request:

<需求人>

*---------------------------------------------------------------------*

FORM的头部注释

举例

*&---------------------------------------------------------------------*

*&Form:

F_READ_T00001

*&---------------------------------------------------------------------*

*<处理内容>*----------------------------------------------------------------------*

*<输入或输出><参数名><参数类型><参照项目或者默认值>

*----------------------------------------------------------------------*

 

在功能处理逻辑和错误捕捉逻辑前要写上相应的注释

对以前的程序进行修正要加代码修改注释,格式如下

*Startofcorrectionby<更新人> <修改版本>

*ifsy-subrc<>0.

*exit.

*endif.

Ifsy-subrc=4.

Messagee001.

Endif.

*Endofcorrectionby<更新人><修改版本>

变量注释

DATE_FROMLIKEADRC-DATE_FROM,“有效日期

NAME1LIKEADRC-NAME1,“名称1

NAME2LIKEADRC-NAME2,“名称2

REGIONLIKEADRC-REGION,“地址

CITY1LIKEADRC-CITY1,“城市

子程序注释

*客户数据处理

PERFORMF_MOD_CUSTUSINGREC_ZSF957

对于开发中的子程序,MODULE,INCLUDE,FUNCTION都要详细注释说明,对于变量、内表、屏幕等涉及到的字段都要做引用注释。

3.8变量定义的规则

在程序内一次都没有使用过的变量不要定义

在定义变量的右侧用简单明了的文字来注释

变量的长度和类型不要省略,即使是逻辑型也一样

日期使用D型而时刻使用T型

输入输出文件所用的变量不要用I型、P型、F型

与透明表相关的变量必须要用like来定义

输入文件和输出文件所用的layout都要用工作区来组织

在变量命名的时候不要使用中划线,要使用下划线

变量名太长会导致程序可读性降低,要使用省略的字符,使用有意义的名字来命名

如果存在有几本程序都要使用的相同的变量应该登录到数据字典中

以下举例说明几种数据对象的定义方式

相同类型的数据对象请分组定义(即定义在同一区域,并且使用冒号省略关键字DATA,不同类型数据对象则要另写一个DATA关键字来定义)

透明表引用

DATA:

NCX_T001TYPET001,

BSEGTYPEBSEG.

变量和定量

DATA:

PLANT_CD      LIKET001W-WEKRS.

DATA:

NCX_S_TRUE

(1)TYPECVALUE‘X’,

NCX_S_FALSE

(1)TYPECVALUE‘’.

内表

TYPES:

BEGINOFTYP_YG_PRODUCT.

MATNRLIKEMARAV-MATNR,

……

ENDOFTYP_YG_PRODUCT.

DATA:

TAB_TG_PRODUCTTYPESTANDARDTABLEOFTYP_YG_PRODUCT.

工作区

DATA:

BEGINOFTYP_LONG_DATE,

YEAR(4)TYPEN,

MONTH

(2)TYPEN,

DAY

(2)TYPEN,

ENDOFTYP_LONG_DATE.

PARAMETERS

如果是必须输入项目要加上OBLIGATORY

如果是标志位项目和开关项目要使用checkbox

PARAMETERS:

NCX_P_FL_NM(30)TYPEC

DEFAULT‘usr/sap/output.dat’OBLIGATORY,

P_FLG_TASCHECKBOXDEFAULT‘X’.

SELECT-OPTIONS

即时报表如果存在默认输入值或者需要F4输入帮助的必须要带有MEMORYID和MATCHCODEOBJECT选项,如果是必须输入的还要加上OBLIGATORY

SELECT-OPTIONS:

NCX_S_P_CFORBKPF-BUKRSMEMORYIDBUK,

NCX_S_POST_DFORBKPF-BUDAT

DEFAULTSY-DATUMOBLIGATORY,

NCX_S_XREF_DFORBKPF-XBLNR

MATCHCODEOBJECTZZBK.

如果是开发人员自定义的标志位、开关或者返回值请具体在注释里解释各个值的含义

3.9SQL文规则

相关所有SQL文用OPENSQL的规则来写,不要使用其它SQL规则

在SQL的WHERE条件中不要指定集团号

在写SELECT语句要注意以下几点

在同一段SQL文中最多只能使用三次JOIN

每个输出字段占一行,后面必须写注释

每个JOIN条件占一行

每个WHERE条件占一行

SELECT内嵌套SELECT是作为原则来禁止的,复杂的嵌套可以用VIEW来代替,简单的话可以直接放在内表

当所有的主键都指定了的时候要使用SELECTSINGLE

尽量不要使用SELECT*或者是SELECTSINGLE*

加锁和解锁时要注意以下几点

在更新数据库里的记录时,应该以一个记录为单位进行加解锁处理

在进行加解锁处理的时候要使用数据字典里的锁对象

处理内表时要注意以下几点

尽量避免把海量的数据放在内表里

按照特定条件来循环内表的时候要使用WHERE语句而不要使用CHECK命令

正确

LOOPATI_TABWHEREK=V_KEY.

ENDLOOP.

错误

LOOPATI_TAB1.

CHECKI_TAB-K=V_KEY.

ENDLOOP.

当内表里的记录没有必要是唯一的或者不存在重复输入的可能的时候

正确

INSERT[WA_TABINTO]TABLEI_TAB

错误

COLLECT[WA_TABINTO]I_TAB

在内表进行更新操作的时候要使用MODIFY命令

LOOPATI_TAB.

I_TAB-ABABA=C_ABABA.

MODIFYI_TAB.

ENDLOOP.

对内表进行排序的时候一定要指定对哪列进行排序,否则效率会很低

要统计内表里记录数时要使用DESCRIBE命令

DESCRIBETABLEI_TABLINESCTR_LINES.

存在大内表的场合,一旦后续处理不再使用该内表则要及时清空

FREEI_TAB.

对画面输入字段进行验证时要注意以下几点

根据标准功能进行更新处理前都要对全部参数进行验证

所有的输入字段的验证处理都要在ATSELECTION-SCREEN事件中进行

PARAMETERS:

P_YDLIKEBKPF-GJHAR.

ATSELECTION-SCREEN.

IFP_YD>SY-DATUM(4).

MESSAGEE901.

ENDIF.

如果是写了OBLIGATORY选项的字段就不要验证它是否已经输入了

如果验证没有通过就要报错让用户再次输入

在即时报表中涉及到ATLINE-SELECTION和ATUSER-MAND同时使用的时候要用CHECK命令

ATLINE-SELECTION.

CHECKNOTBKPFISINITIAL.

CHECKSY-UM<>C_FNC_DISP.

PERFORMF_SUBWIN_DISP.

加减乘除等运算符号要使用常用符号而不是ADD和PUTE等命令

正确

CTR_IN=CTR_IN+1,

错误

ADD1TOCTR_IN.

逻辑运算也要使用常用符号而不是EQ、NT等符号

正确

IFSY-SUBRC=0.

错误

IFSY-SUBRCEQ0.

MESSAGEE900(ZZ)WITHI_BSEG-BUKRS.

取得光标的位置

使用WRITE输出后再用HIDE命令可以使字段隐藏并保留

使用GETCURSOR命令来取得光标的列坐标

WRITE:

/BKPF-BELNR,

BKPF-GJHAR.

HIDEBKPF.

ATLINE-SELECTION.

GETCURSORFIELDV_KMK.

CHECKNOTV_KMKISINITIAL.

CASEV_KMK.

WHEN‘BKPF-BELNR’.

WHEN‘BKPF-GJHAR’.

ENDCASE.

3.10其它内容

连接字符串时要使用CONCATENATE命令

正确

V_PREF=C_TOKYO.

V_CITY=C_YOKKAICHI.

CONCATENATEV_PREF

V_CITY

INTOV_ADR

SEPARATEDBYSPACE.

错误

V_PREF=C_TOKYO.

V_CITY=C_YOKKAICHI.

V_LEN1=STRLEN(V_PREF).

MOVE:

V_PREFTOV_ADR,

V_CITYTOV_ADR+V_LEN1.

字符串逻辑比较运算符参照以下列表

结构式

内容

xCOy(ContainsOnly)

X包含y

xNAy(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

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

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