SAP ERP系统的演进历史(从R2,R3,ECC到S4)

 

一、SAP ERP系统的演进历史(从R2,R3,ECC到S4)

          

🌐 SAP是什么?
SAP,全称System Application and Products in Data Processing,是一种数据处理系统应用和产品。它既是公司名称也是产品名称。成立于1972年,总部位于德国沃尔多夫市,SAP已成为国际领先的企业应用软件提供商,拥有超过20万全球客户,包括《财富》世界500强企业中的80%和最具价值的品牌中的85%。

 

🔄 SAP产品的演变
SAP的产品经历了多次迭代,从早期的R/2、R/3到ECC,再到现在的S/4 HANA。以下是各版本的简要介绍:
R/2:1972年推出。
R/3:1992年推出,R代表“实时”,3表示三层客户端/服务器架构(数据库层、应用层和解释层),中国企业早期应用的4.6B和4.6C属于R/3时代的版本。
ECC:ERP Central Components,2004年推出,经历了ECC5.0、ECC6.0、ECC7.0等多个版本,每个版本间有一些增强包(Enhancement Package, EhP),如ECC6.05表示在ECC6.0的基础上使用了EhP5。
S/4 HANA:SAP于2015年推出的版本,全称为S/4 HANA<年份>,是SAP的第四代产品,如S/4 HANA 1909和S/4 HANA 2020。它只能运行在SAP HANA数据库上,是SAP全新一代的商务套件。

 

💼 SAP的核心产品:ERP
无论SAP产品如何演进,其核心产品都是ERP(企业资源计划),包括财务(Financials)和后勤(Logistics),它们构成了企业内部的主要业务框架。主要模块如下:
财务
FI → 财务会计(含总账、应收、应付、资产等子模块)
CO → 控制(含成本中心、产品成本控制、获利分析等子模块)
EC → 企业控制(含合并等子模块)
后勤
MM → 物资管理
SD → 销售与分销
PP → 生产计划与控制
PS → 项目系统
PM → 维护与技术支持
QM → 质量管理

SAP系统在企业资源管理中发挥着重要作用,帮助企业实现业务流程的自动化和优化,提升工作效率和准确性。

 

 

 

 

 

 

 

附录: SAP ERP系统的相关知识

--------------------------------------------------------------------------------------

A、SAP ABAP 中的模块化:宏、子程序和功能模块 

当您模块化源代码时,您将一系列 ABAP 语句放在一个模块中。 然后,您只需调用模块,而不是将所有语句放在主程序中。当程序生成时,模块化单元中的源代码被视为实际存在于主程序中。

模块化的需要

  • 改进程序的结构。
  • 易于阅读的代码
  • 易于维护代码
  • 避免冗余并促进代码重用

各种模块化技术

  • 宏的使用
  • 包含文件的使用
  • 子程序
  • 功能模块

让我们详细研究它们中的每一个:

SAP-ABAP 宏

如果您想在程序中多次重复使用同一组语句,可以将它们包含在宏中。

您只能在定义它的程序中使用宏,并且只能在其定义之后的程序行中调用它。

宏对于长计算或复杂的 WRITE 语句很有用。

DEFINE <macro_name>
'Macro Statements
END-OF-DEFINITION.
  • 1
  • 2
  • 3

宏可以使用参数 &N,其中 N = 1,2,3

DATA: number1 TYPE I VALUE 1.
DEFINE increment.
ADD 1 to &1.
WRITE &1.
END-OF-DEFINITION.
Increment number1.
WRITE number1.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

 

包括程序

包含程序仅用于模块化源代码,没有参数接口。 包含程序允许您在不同的程序中使用相同的源代码。 如果您想在不同的程序中使用冗长的数据声明,它们会很有用

Include <include program Name>
  • 1

这里的点(.)需要注意。

包含程序不能调用自己。

包含程序必须包含完整的语句

INCLUDE ZILX0004.
WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM.
================================

PROGRAM ZRPM0001.
INCLUDE ZILX0004.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

 

子例程

子例程是可以在任何ABAP程序中定义的过程,也可以从任何程序中调用。子例程通常在内部调用,也就是说,它们包含经常在本地使用的代码段或算法。如果您希望某个功能在整个系统中可重用,请使用功能模块。

FORM <Subroutine> [<pass>].

<Statement block>.

ENDFORM.
<子例程> =子例程名称
<pass> =传递的参数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

子程序的类型

  1. 内部的
    • 在被调用的同一程序中定义的子程序。
    • 可以访问主 ABAP/4 程序中声明的所有数据对象。
  2. 外部的
    • 在被调用程序之外定义的子程序。
    • 需要使用 选项或在内存的公共部分声明数据对象。

调用子程序

内部子程序

PERFORM <subroutine> [<pass>]
<子例程> =子例程名称
<pass> =传递的参
  • 1
  • 2
  • 3

在主程序中声明的数据是自动可用的。

外部子程序

PERFORM <subroutine>(<Program>) [<pass>].
PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND].
PERFORM (<subroutine>) IN PROGRAM  (<Program>) [<pass>] [IF FOUND].
PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意事项

  • 子程序中允许嵌套调用(即在 FORM … ENDFORM 中执行)。
  • 递归调用也是可能的。
  • 要定义本地数据,请在 FORM 之后使用 DATA 语句。 每次进入子程序时,都会重新创建数据(使用初始值)并在最后释放(从堆栈中)。
  • 要定义在子例程中使用的全局数据,请在 FORM 之后使用 LOCAL 语句。 当您进入子程序时保存这些值,然后在结束时释放(从堆栈中)

    

功能模块

功能模块是任何人都可以使用的通用 ABAP/4 例程。 事实上,有大量的标准功能模块可用。

功能模块被组织成功能组:逻辑相关功能的集合。 一个功能模块总是属于一个功能组。

句法-

FUNCTION <function module>
<Statements>
ENDFUNCTION.
  • 1
  • 2
  • 3
  • 4
  • 5

与功能模块相关的重要信息

  • 行政
  • 导入/更改/导出参数。
  • 表参数/异常。
  • 文档
  • 源代码 - LU01 。 是功能组
  • 全局数据 - LTOP . 功能组的全局数据 - 可跨功能组中的功能模块访问。
  • 主程序 - SAPL 。 包含该函数组的所有包含文件的列表

    

调用函数模块

要调用功能模块,请使用 CALL FUNCTION 语句:

CALL FUNCTION <module>
[EXPORTING  f1 = a 1.... f n = a n]
[IMPORTING  f1 = a 1.... f n = a n]
[CHANGING   f1 = a 1.... f n = a n]
[TABLES     f1 = a 1.... f n = a n]
[EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E]   
[OTHERS = ro]].
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

 

功能组

功能组是功能模块的容器。 事实上,有大量的标准功能组。

一个功能组中的所有功能模块都可以访问该组的全局数据。

与可执行程序(类型 1)和模块池(类型 M)一样,功能组可以包含屏幕、选择屏幕和列表。

 

注意事项

  • 无法执行功能组。
  • 功能组的名称最长可达 26 个字符。
  • 创建功能组或功能模块时,会自动生成主程序和包含程序。
  • 函数组封装数据。

 

如何创建功能组

  1. 转到事务 SE80。
  2. 在下拉菜单中选择程序。
  3. 写下您要创建的功能组的名称。 通常用户制作的功能组以“Z”开头。 例如 - <Z_FUNCTION_GROUP_NAME> 。 按回车键。
  4. 请注意,如果用户选中创建 TOP 包含的选项,则默认创建 TOP 包含。

 

如何创建功能模块

  1. 创建一个函数组(比如“ ZCAL ”)。
  2. 创建一个功能模块,设置属性(功能组、应用程序、短文本和进程类型)并保存。
  3. 包含文件“ LZCALU01 ”将包含第一个功能模块的源代码。
  4. 包含文件“ LZCALTOP ”将有全局数据。
  5. 主程序“ SAPLZCAL ”包含
      • 全局数据包含文件“ LZCALTOP ”
      • 功能模块包括文件“ LZCALUXX ”
      • 用户定义的包含文件“ LZCALF …”、“ LZCALO …”和“ LZCALI …”
    1. 定义接口参数和异常
    2. 编写源代码
    3. 激活功能模块
    4. 测试功能模块——单次测试和调试
    5. 记录和发布功能模块
      这就是 ABAP 中的模块化。

 

 

 

B、SAP ABAP 跟 VB的相同点和区别

‌SAP ABAP和VB(Visual Basic)的主要区别在于它们的用途、应用领域、开发环境和语法特性等方面: 

应用领域

▶SAP ABAP‌:ABAP是专为SAP系统设计的编程语言,主要用于开发SAP系统的应用程序和报表。它紧密集成在SAP系统中,支持面向过程和面向对象的编程。ABAP主要用于企业资源规划(ERP)和商务智能(BI)应用,特别是在财务、物流、人力资源等领域‌。

‌▶VB‌:VB是一种面向对象的编程语言,由Microsoft开发,主要用于快速开发Windows平台上的应用程序。它支持图形用户界面(GUI)开发,适合创建类型安全的应用程序,常用于办公自动化、数据分析等领域‌。


开发环境和语法特性
▶‌SAP ABAP‌:ABAP开发环境是一个完整的client/server开发环境,包含设计和开发程序、屏幕、菜单、功能模块等所需的一切工具。它支持面向对象编程,具有丰富的函数和包,特别适合于报表和商务智能应用开发‌。
▶‌VB‌:VB提供了一个集成开发环境(IDE),支持图形界面设计、事件驱动编程和组件技术。它易于学习和使用,特别适合快速开发小型到中型的应用程序‌。

 

性能和效率
▶‌SAP ABAP‌:由于ABAP紧密集成在SAP系统中,执行效率高,特别适合处理大量数据和复杂业务逻辑。它在企业资源规划系统中表现出色,但学习和使用门槛较高‌。
▶‌VB‌:VB执行效率相对较低,特别是在处理大量数据和复杂业务逻辑时。它的优势在于快速开发和用户友好的界面设计‌。

 

‌SAP ABAP和Visual Basic(VB)的相同点主要包括以下几点‌:

‌解释型语言‌

ABAP和VB都是解释型语言。这意味着它们的代码在运行时会被解释执行,而不是预先编译成机器语言。这种特性使得ABAP和VB的调试过程相对简单,因为可以在运行时逐步执行代码,方便跟踪和调试‌。

‌事件驱动编程‌

ABAP和VB都支持事件驱动编程。在ABAP中,程序的结构通常由一系列的事件块组成,如选择屏幕事件、输出事件等,这些事件块按照特定的顺序执行。这种结构使得ABAP程序在调试时可以通过事件块的顺序来逐步执行和调试‌。

‌面向对象编程‌

ABAP和VB都支持面向对象编程(OOP)。ABAP提供了类、对象、继承等面向对象的概念,使得代码更加模块化和可重用。这与VB的OOP特性相似,使得两者在开发复杂应用时都能提供更高的灵活性和可维护性‌。

‌易于学习和迁移‌

对于熟悉VB的开发者来说,学习ABAP相对容易,因为两者的语法和编程范式有诸多相似之处。ABAP的一些基本概念和结构与VB非常接近,这使得从VB转到ABAP的开发相对平滑‌。

 

 

当您模块化源代码时,您将一系列 ABAP 语句放在一个模块中。 然后,您只需调用模块,而不是将所有语句放在主程序中。当程序生成时,模块化单元中的源代码被视为实际存在于主程序中。
模块化的需要
改进程序的结构。易于阅读的代码易于维护代码避免冗余并促进代码重用各种模块化技术
宏的使用包含文件的使用子程序功能模块让我们详细研究它们中的每一个:
SAP-ABAP 宏如果您想在程序中多次重复使用同一组语句,可以将它们包含在宏中。
您只能在定义它的程序中使用宏,并且只能在其定义之后的程序行中调用它。
宏对于长计算或复杂的 WRITE 语句很有用。
DEFINE <macro_name>
'Macro Statements
END-OF-DEFINITION12345宏可以使用参数 &N,其中 N = 1,2,3
DATA: number1 TYPE I VALUE 1.
DEFINE increment.
ADD 1 to &1.
WRITE &1.
END-OF-DEFINITION.
Increment number1.
WRITE number1.12345678910111213包括程序
包含程序仅用于模块化源代码,没有参数接口。 包含程序允许您在不同的程序中使用相同的源代码。 如果您想在不同的程序中使用冗长的数据声明,它们会很有用
Include <include program Name>1点需要注意
包含程序不能调用自己。
包含程序必须包含完整的语句
INCLUDE ZILX0004.
WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM.
================================
PROGRAM ZRPM0001.
INCLUDE ZILX0004.123456789子例程子例程是可以在任何ABAP程序中定义的过程,也可以从任何程序中调用。子例程通常在内部调用,也就是说,它们包含经常在本地使用的代码段或算法。如果您希望某个功能在整个系统中可重用,请使用功能模块。
FORM <Subroutine> [<pass>].
<Statement block>.
ENDFORM.<子例程> =子例程名称<pass> =传递的参数1234567子程序的类型
内部的在被调用的同一程序中定义的子程序。可以访问主 ABAP/4 程序中声明的所有数据对象。外部的在被调用程序之外定义的子程序。需要使用 选项或在内存的公共部分声明数据对象。调用子程序
内部子程序
PERFORM <subroutine> [<pass>]<子例程> =子例程名称<pass> =传递的参123在主程序中声明的数据是自动可用的。
外部子程序
PERFORM <subroutine>(<Program>) [<pass>].
PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND].
PERFORM (<subroutine>) IN PROGRAM  (<Program>) [<pass>] [IF FOUND].
PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].1234567注意事项
子程序中允许嵌套调用(即在 FORM … ENDFORM 中执行)。递归调用也是可能的。要定义本地数据,请在 FORM 之后使用 DATA 语句。 每次进入子程序时,都会重新创建数据(使用初始值)并在最后释放(从堆栈中)。要定义在子例程中使用的全局数据,请在 FORM 之后使用 LOCAL 语句。 当您进入子程序时保存这些值,然后在结束时释放(从堆栈中)功能模块功能模块是任何人都可以使用的通用 ABAP/4 例程。 事实上,有大量的标准功能模块可用。
功能模块被组织成功能组:逻辑相关功能的集合。 一个功能模块总是属于一个功能组。
句法-
FUNCTION <function module>
<Statements>
ENDFUNCTION.12345与功能模块相关的重要信息
行政导入/更改/导出参数。表参数/异常。文档源代码 - LU01 。 是功能组全局数据 - LTOP . 功能组的全局数据 - 可跨功能组中的功能模块访问。主程序 - SAPL 。 包含该函数组的所有包含文件的列表调用函数模块要调用功能模块,请使用 CALL FUNCTION 语句:
CALL FUNCTION <module>
[EXPORTING  f1 = a 1.... f n = a n]
[IMPORTING  f1 = a 1.... f n = a n]
[CHANGING   f1 = a 1.... f n = a n]
[TABLES     f1 = a 1.... f n = a n]
[EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E]    
[OTHERS = ro]].12345678910111213功能组功能组是功能模块的容器。 事实上,有大量的标准功能组。
一个功能组中的所有功能模块都可以访问该组的全局数据。
与可执行程序(类型 1)和模块池(类型 M)一样,功能组可以包含屏幕、选择屏幕和列表。
注意事项无法执行功能组。功能组的名称最长可达 26 个字符。创建功能组或功能模块时,会自动生成主程序和包含程序。函数组封装数据。如何创建功能组转到事务 SE80。在下拉菜单中选择程序。写下您要创建的功能组的名称。 通常用户制作的功能组以“Z”开头。 例如 - <Z_FUNCTION_GROUP_NAME> 。 按回车键。请注意,如果用户选中创建 TOP 包含的选项,则默认创建 TOP 包含。如何创建功能模块创建一个函数组(比如“ ZCAL ”)。创建一个功能模块,设置属性(功能组、应用程序、短文本和进程类型)并保存。包含文件“ LZCALU01 ”将包含第一个功能模块的源代码。包含文件“ LZCALTOP ”将有全局数据。主程序“ SAPLZCAL ”包含全局数据包含文件“ LZCALTOP ”功能模块包括文件“ LZCALUXX ”用户定义的包含文件“ LZCALF …”、“ LZCALO …”和“ LZCALI …”定义接口参数和异常编写源代码激活功能模块测试功能模块——单次测试和调试记录和发布功能模块这就是 ABAP 中的模块化。
posted @   亟待!  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 一个费力不讨好的项目,让我损失了近一半的绩效!
历史上的今天:
2020-01-15 Win7最后一天,微软开始慌了!
欢迎这位怪蜀黍来到《SAP ERP系统的演进历史(从R2,R3,ECC到S4) - 亟待! - 博客园》
点击右上角即可分享
微信分享提示