• SAP-ABAP程序开发规范


    SAP--ABAP程序开发规范

    1  范围

    本标准规定了SAP S/4 系统程序开发过程中术语定义、命名规则、程序结构、测试方法和请求管理。

    本标准适用于SAP S/4 系统的ABAP语言开发的程序。

    2  规范性引用文件

    下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅所注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。

    GB/T 1.1-2000《标准化工作导则 第1部分:标准的结构和编写规则》

    3  术语和定义

    3.1  SAP

    SAP来自于Systems Applications and Products in Data Processing,它是德国思爱普公司的英文名称。

    3.2  SAP S/4

    SAP S/4 是一个基于客户/服务机结构的开放、集成的企业资源计划系统(Enterprise Resource Planning,简称:ERP)软件,其功能涵盖企业的财务管理、后勤管理(含采购、库存、生产、销售、设备、项目、质量等模块)和人力资源管理等各个方面。SAP S/4 软件由德国SAP公司所研创,其R 指实时(realtime), 而3表示S/4 系统是三层架构:数据库、应用服务器、展现层。

    3.3  ABAP

    ABAP是一种高级商务应用编程语言(Advanced Business Application Programming),SAP S/4 系统的应用程序就是用ABAP/4编写的。

    3.4  AA

    AA表示SAP S/4 应用模块,其模块如下:

    AA模块

    模块名称

    FI

    财务会计

    CO

    管理会计

    SD

    销售分销

    MM

    物料管理

    PM

    工厂维护

    HR

    人力资源

    PS

    项目管理

    BW

    数据仓库

    BC

    系统相关

    OT

    其他

    3.5  PT

    PT表示程序类型,其类型如下:

    PT类型

    名称

    RP

    Printing Report 打印输出报表

    EX

    Enhancement User Exit 功能增强

    FM

    Function module函数

    QR

    Query 查询

    SF

    Smart Forms快速格式报表

    BI

    Batch Input 批输入

    3.6  DT

    DT表示数据对象类型,其类型如下:

    DT类型

    名称

    TB

    透明表

    VW

    视图

    DE

    数据元素

    ST

    结构表

    TT

    表类型

    CI

    TG

    类型组

    DM

    HP

    帮助

    LO

    锁对象

    3.7  符号说明

    符号类型

    名称

    [XX]

    XX是必要组成部分

    {XX}

    XX是条件式的必要组成部分

    <XX>

    XX是可选组成部分

    4  命名规则

    4.1  程序名命名规则

    4.1.1  克隆系统标准程序的程序其名称按Y{_}[PROGRAM]格式编写;

    4.1.1.1  Y表示该程序是克隆自系统标准程序;

    4.1.1.2  克隆的程序是函数时,必须包含“_”;

    4.1.1.3  PROGRAM表示被克隆的系统标准程序名称,如果PROGRAM的字符长度达到最大长度,可省略后面多余的字符;

    4.1.2  新开发程序名称按Z{_}<AA><PT><SEQ>{FSQ}格式编写;

    4.1.2.1  AA表示SAP S/4 应用模块,其定义见3.4;

    4.1.2.2  PT表示程序类型,其定义见3.5;

    4.1.2.3  SEQ表示流水序号,范围为000-999;

    4.1.2.4  FSQ表示包含文件的流水号,范围为F00-F99;

    4.1.2.5  创建的程序为函数时,必须包含“_”;

    4.1.2.6  创建的程序为INCLUDE程序时,必须包含FSQ;当该程序仅用于一个特定程序时,程序名称由AA、PT、SEQ、FSQ部分组成;当该程序可用于某类程序类型时,程序名称由AA、PT、FSQ部分组成;当该程序可用于所有程序时,程序名称只包含FSQ;

    4.2  事务代码命名规则

    事务代码是由一组有效字符组成的字符串,在SAP系统中为了方便用户使用系统功能和应用的快捷方式。在ABAP程序开发过程中,为了体现事务代码的有效意义,只针对程序类型为报表类(RP)、函数模块类(FM)、维护表视图以及查询建立事务代码。为了便于事务代码的分类和区别应用,把事务代码分为业务类事务代码和管理类事务代码,其中业务类事务代码作用于报表类应用,管理类事务代码作用于配置类应用。

    4.2.1  在克隆系统标准程序的程序开发过程中,当原系统标准程序有事务代码时新建事务代码名称为:Y+原事务代码;当原系统标准程序无事务代码时新建事务代码名称按Y[AA][SEQ]格式编写;其它情况下的事务代码名称按Z[AA][SEQ]{SQ}格式编写;

    4.2.2  AA表示SAP S/4 应用模块,其定义见3.4;

    4.2.3  SEQ流水号必须与对应报表的流水号相同,相同应用模块下的不同程序类型的流水号不能相同,如果存在相同情况,那么需在后面加上报表类型,如ZMM010QR;

    4.2.4  SQ表示流水号,范围为00-99,其只适用于管理类事务代码;

    4.3  开发类命名规则

    4.3.1  开发类的名称按Z[AA][SQ]格式编写。其中AA表示SAP S/4 应用模块,其定义见3.4;SQ表示流水号,其范围为00-99;

    4.3.2  一个开发类只对应一次项目的一个应用模块,非项目期间的开发类流水号使用99,一个应用模块可对应多个开发类,在增加开发类时需按流水号递增编写;

    4.4  函数组命名规则

    4.4.1  函数组的名称按Z[AA][SQ]格式编写。其中AA表示SAP S/4 应用模块,其定义见3.4; SQ表示流水号,其范围为00-99;

    4.4.2  一个函数组只对应一次项目的一个应用模块,非项目期间的函数组流水号使用99,一个应用模块可对应多个函数组,在增加函数组时需按流水号递增编写;

    4.4.3  表格维护生成器里的函数组使用该数据字典对象名作为其名称;

    4.5  消息类命名规则

    消息类是ABAP程序开发中为异常情况而设计的故障信息类别,这样有利于问题的跟踪、诊断和解决。消息类的名称按Z[AA]格式编写,其中AA表示SAP S/4 应用模块,其定义见3.4;

    4.6  区域菜单命名规则

    4.6.1  区域菜单的名称按Z[AA][SQ]格式编写。其中AA表示SAP S/4 应用模块,其定义见3.4; SQ表示流水号,其范围为00-99;

    4.6.2  一个区域菜单对应一个应用模块,一个应用模块对应多个区域菜单,在增加区域菜单时需按流水号递增编写;

    4.7  数据字典命名规则

    4.7.1  数据字典包含表、视图、数据元素、结构、域、帮助等方面的内容,新建名称按Z[AA][DT][NNN]格式编写;

    4.7.1.1  AA表示SAP S/4 应用模块,其定义见3.4;

    4.7.1.2  DT表示数据对象类型,其定义见3.6;

    4.7.1.3  NNN表示数据对象说明,可以用三位数字或字母来描述;

    4.7.2  克隆系统标准数据对象的对象,按Y[DO]格式编写。其中DO表示被克隆的系统标准数据对象,当DO的数据对象名称长度已经达到最大长度时,可省略后面多余的字符;

    4.8  文本符号命名规则

    4.8.1  在程序中尽可能使用文本符号存储文本信息,避免“硬代码”;

    4.8.2  文本符号也可以进行分类,分类如下:

    文本号

    用途

    E01-E99

    错误文本

    I01-I99

    提示文本

    W01-W99

    警告文本

    S01-S99

    SELECTION-Screen使用

    T01-T99

    一般文本

    H01-H99

    报表头或表格标题等

    4.9  变量命名规则

    4.9.1  为了更好的区分变量的作用范围,规范变量的正确引用,把变量分为局部变量和全局变量。全局变量必须定义于程序头,其名称一般增加前缀“g_”,但为简化书写可省略全局变量的前缀;局部变量可根据实际情况灵活定义,其名称必须增加前缀“l_”;

    4.9.2  为保证数据的一致性,在变量定义时尽量使用like、type等进行引用已有类型;

    4.9.3  定义变量应按照一定的顺序定义,参考顺序如下:

    4.9.3.1  Tables (only if required for SELECT-options)

    4.9.3.2  Nodes

    4.9.3.3  Infotypes

    4.9.3.4  Controls (for dialogue processing only)

    4.9.3.5  Type-groups

    4.9.3.6  Types

    4.9.3.7  Constants

    4.9.3.8  Data (structures)

    4.9.3.9  Data (internal tables and their work areas)

    4.9.3.10  Data (objects)

    4.9.3.11  Ranges

    4.9.3.12  Data (simple fields)

    4.9.3.13  Field-symbols

    4.9.3.14  Field groups (followed by INSERT into field-groups)

    4.9.3.15  SELECTION-Screen data (for list processing only)

    4.9.3.16  Parameters

    4.9.3.17  SELECT-options

    4.9.4  为便于识别变量类型,在变量前需要增加变量类型前缀,如下:

    类型

    说明

    变量前缀

    备注

    C

    字符串

    c_

    N

    数字

    n_

    D

    日期

    d_

    T

    时间

    t_

    X

    十六进制

    x_

    I

    整数

    i_

    P

    压缩号

    pn_

    F

    浮点数

    f_

    String

    字符串

    str_

    Xstring

    X字符串

    xstr_

    Constants

    常量

    con_

    Type

    类型

    ty_

    Internal Table

    内表

    itb_

    Work Area

    工作区

    wa_

    Range

    范围

    s_

    Field-symbols

    字段符号

    fs_

    SELECT Options

    选择选项

    s_

    Parameters

    选择参数

    p_

    p_名称

    Radiobutton

    单选

    rb_

    Checkbox

    复选框

    cb_

    Select

    下拉框

    sl_

    Form Name

    子程序名

    动词_其它描述

    Form Parameters

    子程序参数

    p_

    p_变量属性_名称

    Function Name

    函数名

    z_,y_

    参考4.1.2

    Function Parameters

    函数参数

    变量前缀

    变量属性_名称

    4.10  子程序命名规则

    4.10.1  在子程序定义时必须有相应的用途和参数说明等,样式如下:

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

    *&      Form  子程序名

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

    *       用途说明

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

    *      -->P_P1  传入参数1

    *      -->P_P2  传入参数2

    *      <--P_RP1 返回参数名

    *      -->P_TB1 表参数

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

    4.10.2  子程序引用参数前缀使用“p_”;

    4.11  报表输出

    4.11.1  报表输出方式有ALV,EXCEL,直接写屏或其它;

    4.11.2  EXCEL输出方式模板文件名称按[AA][SEQ]<OT>格式编写;

    4.11.2.1  AA表示SAP S/4 应用模块,其定义见3.4;

    4.11.2.2  SEQ为流水号,该流水号必须与对应的程序流水号相同;

    4.11.2.3  OT表示其它字符或数字等,当AA和SEQ都无法唯一区别时,可以使用该选项;

    4.11.3  当EXCEL输出方式模板文件为EXCEL时,其表格名称必须按文件名称重命名;

    5  程序结构

    良好的程序结构便于阅读和维护,能大大提高软件开发人员的工作效率。在ABAP代码编写过程中,可根据程序类型不同而顺序包含5.2中的部分结构。

    5.1  程序事件

    5.1.1  INITIALIZATION

    5.1.2  AT SELECTION-SCREEN OUTPUT

    5.1.3  AT SELECTION SCREEN ON VALUE-REQUEST

    5.1.4  AT SELECTION SCREEN ON HELP-REQUEST

    5.1.5  AT SELECTION SCREEN ON <parameter>

    5.1.6  AT SELECTION-SCREEN

    5.1.7  START-OF-SELECTION

    5.1.8  GET <node>

    5.1.9  END-OF-SELECTION

    5.1.10  TOP-OF-PAGE

    5.1.11  TOP-OF-PAGE DURING LINE-SELECTION

    5.1.12  END-OF-PAGE

    5.1.13  AT LINE-SELECTION

    5.1.14  AT USER-COMMAND

    5.1.15  FORM

    5.1.16  ENDFORM

    5.2  代码结构

    5.2.1  程序头部

    程序头部是记录程序开发过程中的一些控制信息,便于对程序的功能了解和后期维护,样式如下:

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

    *  程序名:XXXXX

    *  程序名称:XXXXX

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

    *  创建日期       程序员    SAP版本    程序类型

    *  YYYYMMDD       XXXXXX    R4.7       RP/F...

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

    *  描述:

    *    XXXX

    *=================================================

    *  修改日期   版本    修改人      修改描述

    *             1.1

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

    5.2.2  程序名称部分

    程序名称部分记录程序名称及其它属性,样式如下:

    REPORT  XXXXX MESSAGE-ID XX.

    5.2.3  全局定义部分

        全局定义部分包含表、信息类型、全局变量的声明,样式如下:

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

    *                             GLOBLE-DEFINATION                        *

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

    tables:...

    infotypes: ...

    include zrpcm001.

    data:...

    5.2.4  程序取数逻辑部分

        程序取数逻辑部分包含屏幕样式、程序初始化、人机交互、取数逻辑等,样式如下:

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

    *                             SELECTION-SCREEN                         *

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

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

    *                             INITIALIZATION                           *

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

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

    *                            AT SELECTION-SCREEN                       *

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

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

    *                            START-OF-SELECTION                        *

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

    START-OF-SELECTION.

    取数语句

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

    *                             END-OF-SELECTION                         *

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

    END-OF-SELECTION.

    5.2.5  结果输出部分

        结果输出部分包含模板下载、结果填充等,样式如下:

    PERFORM templetdownload USING 模板名.

    输出语句

    PERFORM displayexcel."显示EXCEL

    5.2.6  子程序部分

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

    *                            SUBROUTINES(子程序FORM)                  *

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

    5.3  程序注释

    5.3.1  良好的程序注释便于程序的理解,达到“程序文档化”的状态。注释主要用于程序头说明、变量说明、修改备注、包含文件引用说明、FORM程序说明以及其它说明。

    5.3.2  程序注释分为行外注释和行内注释。行外注释就是注释单独成行,行首使用星号“*”标识,行内注释就是注释与变量、方法、对象等在同一行,并且放在其后,注释字符前使用英文的双引号“"”标识;

    5.3.3  程序头部说明采用行外注释方式,主要包含程序名、程序名称、创建信息、程序用途以及修改原因和情况;

    5.3.4  变量说明一般采用行内注释方式;

    5.3.5  修改备注、包含文件引用说明采用行外注释方式;

    5.3.6  FORM程序说明采用行外注释方式,主要包含FORM名称、功能说明以及参数说明等;

    5.3.7  其它说明是指在IF、LOOP、CASE、WHILE等结构的开始和结束处加上注释,便于分解程序运行逻辑;

    5.4  其它

    5.4.1  在程序编写过程中注意代码段间行宽,在合适处换行来提高代码可读性;

    5.4.2  为了保证程序在不同SAP版本间的兼容性,每行ABAP代码不能超过72个字符;

    5.4.3  在使用DO语句时,尽量使用DO x TIMES,避免出现死循环;

    5.4.4  两个结构体ty_a、ty_b进行赋值,使用ty_b=ty_a,而不使用MOVE-CORRESPONDING ty_a TO ty_b;

    5.4.5  两个内表itab1、itab2结构相同,需要赋值,使用itab1[]=itab2[],而不使用循环操作赋值。

    6  测试方法

    6.1  测试案例编制

    6.1.1  测试案例就是设计一个业务运行情况,软件程序在这种情况下,必须能够正常的运行并且达到程序设计的预期执行结果;

    6.1.2  测试案例编制方法有等价划分法、边界值分析法、错误推断法、因果图法、判定表驱动法、正交试验法、功能图法等;

    6.1.3  测试案例由用例编号、用例目的、操作步骤、输入数据或调用数据、期望结果等组成,格式如下:

    用例编号

    用例目的

    操作步骤

    输入数据/调用数据

    期望结果

    001

    测试多个公司时显示顺序是否先按公司排序

    输入多个公司代码操作

    输入两个以上公司代码

    先按公司排序

    6.2  测试场景的定义

    6.2.1  测试场景就是对用户需求内容的不同情况的定义。在场景设计过程中要尽量考虑全面,特别是一些很少发生的业务逻辑,这样才能达到程序与需求间匹配性的全面诊断;

    6.2.2  测试场景由用例编号、用例目的、场景编号、场景名称、场景目的、菜单路径/事务代码、所用字段、字段数据、预期结果、实际结果等组成,其格式如下:

    用例编号

    用例目的

    场景代码

    场景名称

    场景目的

    菜单路径/事务代码

    所用字段

    字段数据

    预期结果

    实际结果

    001

    001.01

    6.3  测试数据生成

         按测试场景要求操作相关业务,以获得测试过程中需要的各种业务数据;

    6.4  测试结果的反馈

    6.4.1  测试结果填写在场景测试的实际结果栏;

    6.4.2  如果实际结果与预期结果一样使用绿色字体进行说明,否则使用红色字体进行说明。在程序员调整完相应的逻辑后,又再次进入程序测试;

    7  请求管理

    7.1  请求的生成

    7.1.1  客户的测试数据,如果不传生产系统,那么尽量使用本地对象,不要产生传输请求;

    7.1.2  请求生成过程中,如果不同传输内容需同时传到生产系统,那么尽量使用同一传输请求;

    7.1.2  传输请求描述尽量能准确表现请求的用途,在其末尾加上生成请求的年月日时间;

    7.2  请求的释放

    7.2.1  确认请求任务下的所有子请求已完成,所有包含的对象已激活;

    7.2.2  对请求进行检查,确认无错误报告,同时需注意报警信息;

    7.2.3  为方便信息跟踪和请求的协调管理,需在文档栏填写带释放人信息的备注;

    7.3   请求的上传

    7.3.1  在传输请求前,需要明白传输的内容以及影响范围;

    7.3.2  传输完成后需在生产系统上进行检查和验证。

  • 相关阅读:
    从C#角度 单例模式 懒汉和饿汉
    从C#角度 理解MVC原理
    总结下 简单工厂-》工厂-》抽象工厂
    尝试加载Oracle客户端库时引发BadImageFormatException
    org.springframework.dao.DuplicateKeyException: 问题
    写出严谨的代码
    Spring基础入门之IoC注入
    javaIO流小结(1)
    java入门之异常处理小结
    static关键字使用
  • 原文地址:https://www.cnblogs.com/BruceKing/p/12302287.html
Copyright © 2020-2023  润新知