0.前言
米娜桑大家好,2024年的9月,我开始了SAP之旅。
你被暂时分配至负责MM模块的开发,但此时的你对于SAP、ABAP程序一无所知。。。
刨去了解相关背景知识的过程,我们先来创建一下自己的第一个ABAP程序吧。
1.第一个ABAP程序
一般公司会有四个不同环境的SAP:测试系统、独立系统、开发系统、生产系统。进行开发的时候需要特定的开发账号和权限。
开发的步骤一般是:编写代码->检查代码->激活代码->测试代码->代码上线
编写代码:初学者一般会进行报表开发和接口开发。
报表开发的事务代码(T-CODE):SE38。接口开发的事务代码:SE37。
让我们登录SAP,进去界面看看
点击独立系统,这种是完全独立于公司的一个系统,就算玩坏了也没有什么影响,一般是进入这个环境开发。
输入用户名和密码就能进入系统了,一般公司会为你分配的,第一次进入一般会让你修改密码。
首页就这么水灵灵地出现了:
左上角是输入事务代码的地方,输入事务代码敲击回车后就会进入相应的开发功能模块。
一些常用的事务代码:
SE37 |
ABAP/4函数编辑器 |
SE38 |
ABAP编辑器 |
SE91 |
消息维护 |
SE16 |
数据浏览器与维护 |
SE16N |
常规表维护 |
SE80 |
资源管理器 |
XK01 |
创建供应商代码 |
ME11 |
创建采购信息记录 |
ME21N |
创建采购订单 |
ME29N |
审核采购订单 |
MB01 |
购订单收货 |
MIRO |
采购订单发票校验 |
输入事务代码如果系统提示没有该权限,说明账号没有配好,不要慌,联系mentor帮忙添加权限就好了。
让我们输入事务代码SE38,创建ABAP程序
这里的你可以直接输入程序名,如果你输入已经存在的程序,点击显示就能看到程序的源代码了,点击修改就可以进行编程,不过有时候你没有权限去修改其他人的程序,只能够看它们的源代码。
如果你想创建一个新程序,输入程序名看它是否存在,如果已存在的话就需要修改名称,如果不存在的话点击创建就能进入编辑页面了:
检查代码:代码写完后需要检查,这里我们要用到界面上方的按钮们:点击框中第一个按钮,系统就会检查程序中的代码的语法是否正确,但是逻辑问题不会帮你检查是否符合,需要自己后续debug,如果语法没有错误的话,点击第二个按钮进行激活,代码激活后,我们的代码才能被系统识别,之后才能运行。
如果是开发环境和测试环境一体的情况,直接运行即可测试,如果是分开的情况,可以登录测试环境进行测试。
我们可以先用事务代码SE93创建事务代码,因为用户不能够进入我们的开发程序,而是通过事务代码进入我们的报表页面。创建一个和程序名相同的事务代码后,用户就能通过此事务代码进入报表了。
记得一定要选择第二项,不然主界面输入事务代码后,不能够正确运行程序。
然后输入我们程序的代码名称就好了。
关于代码的上线,我在我的另一篇帖子中有详细介绍,这里就不多说了。上传之后,用户就能在正式机使用我们上传的代码了!
2.hello world
让我们再次输入事务代码SE38,创建ABAP程序,LET'S 编程:
程序中的第一个非注释行以REPORT开头,后面是程序名称,以句点结尾:
语法:REPORT [Program_Name].
WRITE的作用类似于C语言中的printf,用来打印
语法:WRITE 'Hello World!'.
WRITE: 'Hello',
'World'.
代码注释:选中代码块,按下ctrl + ,
取消注释:选中代码块,按下ctrl + .
*:行注释代码
“:选择注释代码
基本的语法大概就是这些,点击检查按钮,确认没有语法错误:
点击激活按钮:
点击运行按钮,helloworld就这么水灵灵地出现了:
这就是我们的第一个ABAP程序了,接下来试着做一些简单的开发报表吧。
3.开发报表
恭喜你已经会创建ABAP程序了,让我们自己开发一个自己的报表界面吧。
开发类型:创建库存数据汇总表
运行效果:
报表界面如下:
开发步骤:
该需求是将多个字段从各个表中查询出来,并且按照不同的方式进行汇总求和,同时ALV要自己定义按钮使之能够在不同的ALV界面进行切换。
事务代码se38进行开发
敲击回车进入界面,输入一个新的自建程序流水号码,注意:必须使用Z开头。如果程序命名重复,则会提示创建失败。
填写完title后,选择程序的属性为可执行程序,点击保存:
在实际开发过程中,需要在属性-包中选择相应的模块,不同的公司的包可能有不同,然后点击保存按钮,程序开发完成之后可以进行上线到正式环境,如果是自测程序,则可以点击“”本地对象“”按钮,后面不能上线到正式环境。
接下来就进行我们的程序开发吧:
1)使用关键字 TABLES 声明本次开发设计到的表
在选择屏幕的字段参照、ALV的展示参照时会用到,按照需求我们需要用到表格MCHB、MCH1、MARA表。
使用关键字TYPES 创建ALV报表结构,怎么说呢,这个就相当于一个容器,装了所有需要展示的数据,同时规定了装这些数据的格式,确保他们展示出来的数据类型使我们需要的,不知道我这样形容是否够直白。
使用关键字DATA 创建内表工作区和结构,内表像是一个大容器,里面装了很多条数据,而工作区只能装一条数据,工作区类似于展示框,把每条数据装在工作区这个展示框里,进行判断和处理,等处理完数据符合要求了,再把数据拿出来,换下一条数据进行处理。
设计选择屏幕
选择屏幕是用于给用户前端输入数据,后台根据用户输入的数据进行数据筛选的依据。常用的有两种,单选和多选:SELECT-OPTIONS 是多选(是一个值范围); PARAMETERS 是单选,可以通过这样的方式在选择屏幕提前预设好要输入的数据,为用户使用提供方便。
设计事件的调用顺序(先取数,再赋值,最后展示)SELECTION
取数子程序form,这一子程序的编写主要是看用户的需求了,没有什么技术上的难度,主要是要判断好用到的事哪个表的哪个字段,关于表字段的查询,也可以查看我的另一篇帖子。下面简单介绍一下用到的相关语法:
collect:在非数值字段相同的情况下,汇总字段
append , modify , insert: 追加一条数据,更新一条数据,插入一条数据
clear:初始化内表
SORT:内表排序
删除重复的数据:
SORT ITAB(内表名) BY 重复字段名.
DELETE ADJACENT DUPLICATES FROM itab(内表名) COMPARING针对的字段.
展示ALV数据子程序form
按钮子程序form
这里要注意的是,按钮的创建,和文本元素的编辑
关于按钮的创建,也可以参考我的另一篇帖子
而文本元素则是这样编辑的:
文本元素的编辑则是在这个界面进行编辑的:
转到->文本元素->选择文本
然后运行无误后,代码就这么水灵灵地写完了。
4.战术总结
完成了这一个报表,总算能松一口气,虽然大部分代码都是网上缝缝补补修修改改以及mentor进行修改才最后能够正常运行的,很多地方写的非常冗余而且命名啥的很不规范。以后还有千千万万个报表等着我去开发,以及还有其他我目前没有见识过的工作内容。唉工作好难呀。
总结一下自己遇到的bug和疑问吧。
2)select语句中涉及表中的数据元素的时候要用~
3)alv界面显示不了
原因是因为那时候自己还没有编辑按键,而代码中有定义了按键,导致alv界面进入后无法退出。
4)运行的时候显示程序超时
可能是因为是公司的数据太多了,再加上自己的代码写的比较低效,所以可以筛选一下数据,把那些全都是0的数据清除掉
5)报错statement is not accessible
6)还有一些七七八八的取数逻辑的报错就不写了。
以上就是我的第一个报表程序开发的全过程了,作为一个刚入行三个月的小白,还有很多东西需要学习,有些东西写的不够详尽或者有误的话还请见谅,希望各位友友能够多多交流。