从事 SAP 开发,需要用到的 ABAP 开发知识

883 阅读12分钟

SAP 模块简介

SAP的模块很多,网上讲解 SAP 模块的内容也很多,就简单的汇总整理一下:

image-20210316152412713.png

1、MM(物料管理模块):产品中最常用的一个模块,它涉及到物料管理的全过程,与财务、生产、销售、成本等模块均有密切的关系。主要有采购、库房与库存管理、MRP、供应商评价等管理功能。

2、SD(销售与分销模块):其中包括销售计划、询价报价、订单管理、运输发货、发票等的管理,同时可对分销网络进行有效的管理。

3、FI(财务会计模块):它可提供应收、应付、总账、合并、投资、基金、现金管理等功能,这些功能可以根据各分支机构的需要来进行调整,并且往往是多语种的。同时,科目的设置会遵循任何一个特定国家中的有关规定。

4、CO(管理会计模块):它包括利润及成本中心、产品成本、项目会计、获利分析等功能,它不仅可以控制成本,还可以控制公司的目标,另外还提供信息以帮助高级管理人员作出决策或制定规划。

5、PS(项目管理模块):具有项目计划、项目预算、能力计划、资源管理、结果分析等功能。

6、QM(质量管理模块):可提供质量计划、质量检测、质量控制、质量文档等功能。

7、PP(生产计划模块):可实现对工厂数据、生产计划、MRP、能力计划、成本核算等的管理,使得企业能够有效的降低库存,提高效率。同时各个原本分散的生产流程的自动连接,也使得生产流程能够前后连贯的进行,而不会出现生产脱节,耽误生产交货时间。

8、PM(工厂维修模块):可提供维护及检测计划、交易所处理、历史数据、报告分析。

9、BW(商务智能集成化组件):为数据和非数据的采集、存储、分析和管理提供一个集成的,面向商务的平台。使企业对市场反应更灵敏快捷,整个企业也更具有生命力和竞争力。

10、ABAP(开发模块):作为的应用编程语言,ABAP现在用于编写的几乎全部产品源代码。同时也是挑战FICO顾问、MM顾问、SD顾问等具体岗位的基石。

11、HANA(大数据):HANA是一个软件结合体,提高性能的数据数据查询功能,用户可以对大量实时业务数据进行查询和分析。通过HANA,为优化技术应用,转变人们的思考、规划和工作方式。

除ERP产品外,SAP还提供以下套件:

  • ① 供应商关系管理(SRM)
  • ② 客户关系管理(CRM)
  • ③ 企业战略管理(SEM)
  • ④ 供应链管理(SCM)
  • ⑤ 产品生命周期管理(PLM)等。

SAP 版本发展

SAP: 全称 Systems, Application and Products in Data Processing。SAP 既是公司名称,又是其产品的软件名称。

  • 1973年,SAP 开发人员完成了公司的第一个财务软件 RF(即后来的 R/1系统),其中 R 代表 Realtime(实时处理),即数据输入后立即被计算机所处理
  • 1979 年开始,基于 SAP Main frame 的 ERP 系统称为 SAP R/2,该系统不仅包括财务应用,还包括 RF(财务管理)、RK-P(生产计划)、RM(工厂维护管理)、RM-Mat(物料管理)和 RP(人力资源管理)等多个系统。

PS:无论是 R/1 还是 R/2 都离不开超大型中央处理器的束缚。

  • 1987年,SAP 推出了以网络连接的 R/3 系统,从此 SAP 转换到 C/S 架构。R/3: Real time, 3 tier in Client Server Architecture。在前台运行在办公室计算机和个人计算机上,其基本结构分为数据库、应用层和显示层桑部分,并可以进行用户级的开发。系统中的主要功能模块包括销售与分销、物料管理、生产计划、质量管理、工厂维修、人力资源、工业方案、办公室与通信、项目管理、资产管理控制、财务会计等,然后在一段时间内,它也被称为 MySAP business suite。

图片.png

  • 随后 SAP 推出了 6.0 的新版本,并将其更名为 ECC (ERP Core Component)。
  • 在 6.0 之后,SAP 推出了 HANA 数据库,并将其 ERP 产品迁移到了 HANA。然后 ECC( ERP 产品)被重命名为 S/4 HANA。

如果不想使用 S/4 HANA 但仍想使用 HANA 的功能或提高效能,则可以选择 SAP Business Suite on HANA,这是 S/4 HANA 和 ECC 6 EHP7 之间的版本。

S/4 HANA 也可以在云上使用,它被称为 S/4 HANA cloud,它与 on premise 几乎相同,但有一些限制 (Cloud)。

ABAP 语言

图片.png

SAP R/3 是用 ABAP/4 语言开发的 ERP 包,ABAP 是编程接口。

ABAP: 全称 Advanced Business Application Programming

4: Fourth generation Language

ABAP 是一种事件驱动的编程语言。借鉴了COBOL语言和SQL设计的第四代开发语言。

Web dynpro for ABAP 和 Web Dynpro for Java,用不同语言开发SAP应用程序。

REPORT zrep_error_check_01.

DATA:
    gv_result TYPE p LENGTH 8 DECIMALS 2,
    gv_exref  TYPE REF TO cx_root,
    gv_msgtxt TYPE string.

DATA:
    gv_cuotient TYPE i,
    gv_dividend TYPE i VALUE 19,
    gv_divisor  TYPE i VALUE 0,
    gv_s_numbr     TYPE string VALUE '1234567890',
    gv_position_11 TYPE i VALUE 11.

TRY.
  gv_result = gv_dividend / gv_divisor. " no short dump here. catch it.
CATCH cx_root INTO gv_exref.
  gv_msgtxt = gv_exref->get_text( ).
  
    WRITE: / gv_msgtxt.
    CLEANUP.
ENDTRY.

TRY.
    gv_s_numbr = gv_s_numbr(gv_position_11). " no short dump here. catch it.
CATCH cx_root INTO gv_exref.
    gv_msgtxt = gv_exref->get_text( ).

    WRITE: / gv_msgtxt.
    CLEANUP.
ENDTRY.

SAP HANA

内存中处理数据,查询更快。

SAP HANA(High-Performance Analytic Appliance)是 SAP 提供的软硬件结合的计算平台,HANA 基于内存数据库技术,可以提供高性能的数据分析与处理的解决方案。

SAP Fiori

SAP Fiori 是一套全新的用户界面交互系统标准,提供简洁化、平面化、用户可定制的个性化的终端。SAP 新发布的 SAP 第四代 ERP 产品 SAP S/4HANA 所推荐的前端用户交互系统就是 SAP Fiori Apps。

摘自:《SAP ABAP 面向对象程序设计:原则、模式及实践》 — 郝冠华

SAP相关知识

画面说明:

  • 命令窗口:直接输入事务码(T-code)执行程序
  • 菜单栏:选择菜单执行程序。分类显示与画面连接的菜单
  • 标准工具栏:所有程序里都带有的工具栏
  • 应用工具栏:开发人员在 ABAP 语言里可以自行调整的工具栏
  • SAP 菜单:又叫做局部菜单,按照业务领域分层显示菜单,使用户便于访问程序
  • 状态栏:用于提示用户登录 SAP 系统的信息或程序执行结果信息(错误或成功信息等)

主要T-CODE

  • SE80:对象导航器,集合了以上所有工具的开发环境。
  • SE38:ABAP 编辑器,增删改查ABAP程序的开发工具。开发报表(Reports)、功能池(Module pools)、子程序池(Includes and subrou-tine pools)。
  • SE37:函数编辑器,开发Function modules。
  • SE11:ABAP 数据字典,SAP 数据字典(ABAP Dictionary)。
  • SE16N:数据库数据编辑器:创建修改查询数据库表数据的开发工具
  • SE93:维护事务码
  • SE43:维护局部菜单
  • SE41:开发菜单(Menu)、任务条(Toolbar)。
  • SE21:包编辑器,增删改查包的开发工具
  • SE24:类编辑器,开发类与接口
  • SE09:传输组织
  • SE51:开发窗体

包与 CTS

包:每一个开发对象(程序,类)都属于一个 Package 。包隶属于某一个模块,作用是对开发对象进行归类,便于管理。

CTS:Changed Transport System,变更传输系统

包的功能:

  1. 对象(程序等)的结构化(Structure)
  2. 对象功能模块化(Encapsulate, Modularize)
  3. 对象按照功能区分(Classify)

包命名规则:

  • ZSD:销售模块
  • ZPP:生产模块
  • ZCO:管理会计模块
  • Z**:其他对应模块

开发基础

  • 报表开发,如 ALV、LIST 开发
  • 屏幕开发,如 Dynpro 开发
  • 单据打印,如 SmartForms、Form、Adobe Form 开发等
  • 数据上载,如 CATT、BDC 开发等
  • 数据接口,如 IDOC、Proxy 开发
  • 增强的应用,主要是对 SAP 标准流程进行一定的修改和定制化开发,比如 User Exit,BAdI 等。
  • SAP Workflow(工作流)开发,定义特定的客户业务流程

Hello World

PROGRAM zhello_world.
START-OF-SELECTION.
    WRITE 'Hello, World!'.

数据类型

Data Type:定义程序中可以使用的数据类型

Data Variable:参照数据类型定义的、可以存储值的变量

"定义类型为p的长度为8, 小数部分的长度为2
DATA lv_price TYPE p LENGTH 8 DECIMALS 2 VALUE '1.99'.

"定义类型为c、长度为10的字符串变量, 默认值为‘Text’
DATA lv_text_buffer(10) TYPE c VALUE 'Text'.

"定义类型为i的变量, 默认值为1
DATA lv_count TYPE i VALUE 1.

"定义类型为i的变量, 默认值为空
DATA lv_price_i TYPE p VALUE IS INITIAL.

按类型的定义区分:预定义、全局、局部

按类型的结构区分:基本数据类型、参考数据类型、复杂数据类型、类类型、接口类型等

预定义数据类型

定长类型:

image-20210315145908765.png

可变长度数据类型:

image-20210315145940970.png

例如:

DATA gv_name(30) TYPE c.
DATA: 
    gv_total_counter TYPE i,
    gv_actual_number TYPE f,
    gv_flag TYPE c,
    gv_start_date TYPE d,
    gv_start_time TYPE t.

全局数据类型

DATA: gv_material_id TYPE mara-matnr,
      gv_created_date TYPE mara-ersda,
      gv_inspection_type TYPE qals-art,
      gv_unit_of_measure TYPE  meins.

局部数据类型(用户自定义类型)

TYPES ty_var_c10 TYPE c LENGTH 10. " Local new type t_var_c10

DATA gv_str TYPE ty_var_c10.

gv_str = 'Hello ABAP OOP'. " only get first 10 characters.
WRITE / gv_str.

image-20210315151451541.png

变量命名规则

ABAP的变量可以分为普通变量、常量、静态变量三种类型

DATA: {变量名}(长度) TYPE {数据类型} VALUE {默认值}.

DATA gv_top(20) TYPE c VALUE 'Top of the World'.
DATA gv_on_the_way(20) TYPE c.

定义多个变量时使用逗号隔开即可,并且可以采用LIKE关键字根据已有的变量来定义新变量,示例代码如下:

DATA: gv_char(20) TYPE c,
      gv_float TYPE f,
      gv_c_origin(10) TYPE c VALUE 'Hello',
      gv_c_new LIKE gv_c_origin.
  1. 变量要遵循命名规则,分清作用域和变量类型。
  2. ABAP中的变量必须先声明后使用,声明可以初始化值,但一般不必要在声明时就进行初始化。
  3. 对于变量每次只能赋一个值,但赋值次数不受限制,变量赋值时要注意类型的匹配和转换问题。
  4. 在同一个作用域中不能重复定义同名的变量(因为ABAP语言是大小写不敏感的。因此即使是字母相同,大小写不同的变量也会被认为是同一个变量),否则系统会报出“"{变量}"has already been declared”的错误。
  5. 主程序和子程序的作用域不同,因此可以定义同名的变量,但这样会造成不可预知的错误,应采用正确的命名规则来避免出现这样的定义,如主程序可以使用全局命名规则“gv_”,子程序采用局部变量命名“lv_”。
  6. 程序的全局数据定义要集中放在一个include(包含程序)中,避免分散定义。
  7. 不要在循环中定义变量并初始化值,如果是全局变量,那么该初始化的值并不是随着循环每次都初始化的,如果一定要定义变量,那么请及时清理或修改变量的值(如示例程序2.1所示)。
REPORT zrep_cls_07.

DATA gv_top(20) TYPE c VALUE 'Top of the World'.
DATA gv_on_the_way(20) TYPE c VALUE 'Because it is there'.

DATA: gv_char(20) TYPE c,
      gv_float TYPE f,
      gv_float_origin(10) TYPE c VALUE '10.90',
      gv_float_new LIKE gv_float_origin.

DO 6 TIMES.
  "避免在循环中定义并初始化变量
  "并不是每次循环都会重新初始化变量
  DATA: gv_elevation TYPE i VALUE 6688.
  "如果一定要定义, 那么应在循环中对变量及时赋值
  "gv_elevation = 6688.
  IF sy-index = 3.
    gv_elevation = 8848.
  ENDIF.
  IF gv_elevation = 8848.
    WRITE sy-index.
    WRITE gv_elevation.
    WRITE gv_top.
  ELSE.
    WRITE sy-index.
    WRITE gv_elevation.
    WRITE gv_on_the_way.
  ENDIF.
  NEW-LINE.
ENDDO.

常量

CONSTANTS

CONSTANTS  { name } (length) TYPE {data type}  VALUE {value}.

REPORT zrep_cls_08.

DATA:    gv_counter  TYPE i VALUE 0.

"此处不符合命名规则, 应该命名为gc_team1、gc_team2
CONSTANTS: team1(30) TYPE c     VALUE 'Atlanta Hawks',
           team2     LIKE team1 VALUE 'Boston Celtics'.
"作用域为全局有效
WRITE: / gv_counter, 0, team1, team2.

DO 5 TIMES.
  PERFORM add_value.
ENDDO.

"作用域继续为全局有效
WRITE: / gv_counter, 0, team1, team2.

FORM add_value.
  "子程序中, 变量每次都会被重新定义并初始化为0
  DATA:    lv_counter  TYPE i VALUE 0.

  "子程序中作用域被局部变量替代
  "此处不符合命名规则, 应该命名为lc_team1、lc_team2
  "所以采用良好的命名规则也是避免这种值替代情况发生的好办法
  CONSTANTS: team1(30) TYPE c     VALUE 'Philadelphia 76ers',
             team2     LIKE team1 VALUE 'Chicago Bulls'.
  gv_counter = gv_counter + 1.
  lv_counter = lv_counter + 1.
  WRITE: / gv_counter, lv_counter, team1, team2.
ENDFORM.                    "add_value

引用变量包含两种类型:数据引用变量和对象引用变量,其定义格式分别如下。

DATA ref { {TYPE REF TO type}
         | {LIKE REF TO dobj} }
         [VALUE IS INITIAL]
         [READ-ONLY].

静态变量

STATICS

TABLES

程序类型:

  1. Executable program(TYPE 1)
  2. Module pool(TYPE M)
  3. Function group(TYPE F)
  4. Interface pool(TYPE J)
  5. Include program(TYPE I)

命名规则

Ya、Za:报表程序

SAPMY 或 SAPMZ:对话程序

Z 开头:自定义程序

数据字典类型

大概分为3种形式:

  • 表及视图:..TYPE dbtab, ..TYPE dbtab-comp
  • 数据类型:数据元素,结构体,表类型
  • 类型组(Type Groups)

通过:SE11 创建、修改及查询 ABAP 数据字典

主要Demo数据库表

SPFLI: Flight Schedule

SFLIGHT: Flight Information

SBook: Flight Booking

数据字典类型与 ABAP 基本数据类型对应表

赋值

  1. MOVE 或 WRITE TO
f2 = f1
MOVE f1 to f2.
MOVE-CORRESPONDING <STRING1> TO <STRING2>.
WRITE f1 to f2 [<option>].

MOVE语句可以用于类型转换,除了类型D(Date)与类型T(Time)外都可以相互转换类型。

  1. 利用 Offset 进行赋值

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情