SAP 模块简介
SAP的模块很多,网上讲解 SAP 模块的内容也很多,就简单的汇总整理一下:
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。
- 随后 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 语言
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,变更传输系统
包的功能:
- 对象(程序等)的结构化(Structure)
- 对象功能模块化(Encapsulate, Modularize)
- 对象按照功能区分(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.
按类型的定义区分:预定义、全局、局部
按类型的结构区分:基本数据类型、参考数据类型、复杂数据类型、类类型、接口类型等
预定义数据类型
定长类型:
可变长度数据类型:
例如:
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.
变量命名规则
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.
- 变量要遵循命名规则,分清作用域和变量类型。
- ABAP中的变量必须先声明后使用,声明可以初始化值,但一般不必要在声明时就进行初始化。
- 对于变量每次只能赋一个值,但赋值次数不受限制,变量赋值时要注意类型的匹配和转换问题。
- 在同一个作用域中不能重复定义同名的变量(因为ABAP语言是大小写不敏感的。因此即使是字母相同,大小写不同的变量也会被认为是同一个变量),否则系统会报出“"{变量}"has already been declared”的错误。
- 主程序和子程序的作用域不同,因此可以定义同名的变量,但这样会造成不可预知的错误,应采用正确的命名规则来避免出现这样的定义,如主程序可以使用全局命名规则“gv_”,子程序采用局部变量命名“lv_”。
- 程序的全局数据定义要集中放在一个include(包含程序)中,避免分散定义。
- 不要在循环中定义变量并初始化值,如果是全局变量,那么该初始化的值并不是随着循环每次都初始化的,如果一定要定义变量,那么请及时清理或修改变量的值(如示例程序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
程序类型:
- Executable program(TYPE 1)
- Module pool(TYPE M)
- Function group(TYPE F)
- Interface pool(TYPE J)
- 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 基本数据类型对应表
赋值
- MOVE 或 WRITE TO
f2 = f1
MOVE f1 to f2.
MOVE-CORRESPONDING <STRING1> TO <STRING2>.
WRITE f1 to f2 [<option>].
MOVE语句可以用于类型转换,除了类型D(Date)与类型T(Time)外都可以相互转换类型。
- 利用 Offset 进行赋值
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情