SAP 中的LT
本人开始转行到SAP开发
2020-10-24 14:48:31
sap开发核心语言ABAP
有套视频大概一个多月可以入门,
我发现自学一个东西真的很有意思,每天下班后闭关修炼,加成自己,多年后你就是大神,你还怕没收入吗?咳咳有点说多了下面,我随便记录一下自己的学习比较毕竟散,我是用来自己看的。
FI 财务报表
co成本控制
sd销售模块
mm 物料管理
pp生产模块
abap开发模块
basis 补丁,硬件
pm 工厂管理
ps项目管理
QM质量管理
数据字典是一个工具,和新华字典类似
数据字典点主要功能为保证数据点完整性,一致性,安全性。
结构是什么?
结构就是有系列的字段组成
元素是什么?
元素就是单独点一些数据
数据类型是数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。在SAP中,数据类型有3种:
Data element:最基本的数据单位,没有结构,定义了数据的描述,数据类型和长度等其他特征。
Structure:由数据元素或者其他的数据类型组成的一个特定结构。
Table type:table类型的数据元素,可存放多行数据。
LIKE???LINE?OF
数据字典定义点表不是直接创建一个物理表,而是在中间层创建一个表,创建完成后它自动的在后台创建一个物理表
abap数据字典的基本对象,表,视图,数据类型,域,搜索帮助,锁对象。六大对象。
database-vice数据库视图
Projection -view投影视图
Maintenance view维护视图
Help view帮助视图
SAP
SE16:专门看表数据的。
SM30:查看视图数据的。
SAP数据类型
程序命名GUI法
以Z开头
报表是ZR
接口是I
打印是F
快速调整字体大小 Ctrl + 鼠标滚轮
剪切一行 Ctrl + Shift + X
删除一行 Ctrl + Shift + L
复制一行 Ctrl + Shift + T
转成小写 Ctrl + L
转成大写 Ctrl + U
大小写相互转换 Ctrl + K
取消 Ctrl + Z
重做 Ctrl + Y
原地复制一行 Ctrl + D
tableType:表类型。
我的程序
ZOROGRAM_F0029
包
Z51SAP_CAO
表格维护生成器
1.SE54
2.在se11表格中实用程序中选择维护生成器
权限组指点是查看的权限,选择无权限,函数组只要给个名字就可以了。
数据库视图
其中数据库视图主要是用来查数据的。
维护视图专门用来维护数据
LOC锁:
释放锁DEQ
加锁:ENQ
语法:
数据类型缩写
DECIMALS x表示小数 位。
C:文本型,默认长度为1,默认值为 space(空).
D: 日期型,默认长度8 允许长度8 ,默认值为 00000000 ,格式为 YYYYMMDD.
F:浮点型,默认长度8 允许长度8 ,默认值为 0.
I:整型,默认长度4 允许长度10 ,默认值为 0
N: 数值型,默认长度1允许长度31 ,默认值为 ‘00000000’ 表示存储数值类型的字符串。
P:压缩型,默认长度8 允许长度16 ,默认值为 0,将两个十进制数字压缩到1个字节注意如果需要存储小数必须指定小数的个数。
T:时间类型,默认长度6 允许长度6 ,默认值为 ‘000000’ 时间。
P型小数点要使用DECIMAL声明小数位n.
变量定义;DAta:后面跟name
like用在已经定于好的数据类型
type用在定义数据类型。
常量定义:constants;name
打印关键词 WRITE
move-corresponding 用于结构赋值,仅复制相同名称的字段
。
=赋值是基本赋值
WRITE xx(数据源) to xx(赋值对象)。
move xx to xx(同上)。
c类型转N类型只保留数值,其他忽略。
C类型不能直接转行I类型需要通过N类型转换。
小数位赋值时一定要“”否则系统不知道你中间那个点是结束还是什么。
系统常量的意思:
SY-SUBRC:语句执行后的返回值,0表示成功
SY-DATUM:当前服务器日期
SY-UZEIT:当前服务器时间
SY-ULINE:255长度的水平线
SY-VLINE:垂直线 SY-INDEX:循环说执行的次数
SY-TABIX:内表循环的次数
SY-DYNNR:当前Screen号
SY-MANDT:当前登录的Client号
SY-STEPL:返回当前操作的屏幕行号(Table Control)
SY-LOOPC:当前表格控件在屏幕中的总行数(Table Control)
SY-UCOMM:PAI所出发的功能代码
SY-DYNNR:当前屏幕号
SY-MSGID:Message Class
SY-MSGNR:Message Number
SY-MSGTY:Message Type
SY-MSGV1~4:Message Variant
SY-LINCT:REPROT语句中设定的LINE-COUNT
SY-LINSZ:REPROT语句中设定的LINE-SIZE
SY-SROWS:当前窗口的列表行数
SY-SCOLS:当前窗口的列表栏目数
SY-PAGNO:当前页的页码
SY-LINNO:当前选定行的行号
SY-COLNO:当前选定列的列号
SY-LSIND:当前列表索引,第一级列表为1
SY-LILLI:选择某行时光标行位置
SY-CUROW:选择某行时光标列位置
SY-REPID:返回当前程序名
MOVE-CORRESSPONDING to :此表达的是:
各种符号意思:
+
/
mod(除法的一种取余)
=或EQ(等于)
<>或><或者 NE(不等于)
<或LT(小于)
或GT(大于)
<=或LE(小于等于)
=或GE(大于等于)
逻辑运算符号
AND 且。
OR 或。
not 非。
移位
关键词
SHIFT XX(数据源) by x(整数需要移动多少位) PLACES (默认往left(左)移动right(右))
指定字符串c从c1位置开始移位。
shift c(数据源)up to c1(指定的位置)
write sy-subrc(检查是否成功,成功返回0否则返回4)
移除字符串c左边/右边的子字符串c1:
SHIFT c LEFT/RIGHT DELETING LEADING/ TRAILING c1
把‘abcdefg’中的abc替换成123
REPLACE ‘ABC’ WITH ‘123’ INTO ‘ABCDEFG’.
去除所有空格
condense (数据源) no-GAPS.
查找某个字符串
SEARCH (数据源) for(目标数据)
TYPE STANDARD TABLE OF定义标准内表
什么叫执行语句
除了定义点语句其他语句都叫执行语句。
条件控制语句
DATA: lv_number type int2.
DATA lv_result TYPE int2.
lv_number = 7.
lv_result = lv_number mod 2.
write: sy-uline.
IF lv_result = 0.
WRITE:/,‘偶数’.
else.
write:/,‘基数’.
ENDIF.
CLEAR 内表。
清除变量内容
常量不能被清空
CONTINUE:无条件终止当前循环,直接执行下一次循环
CHECK: 有条件终止当前循环
EXIT:终止所有循环
PERFORM作用是用来调用封装的代码。
WITH HEADER LINE这是一个旧bai说法,定义内表的时du候,你可以指定是否创建一个zhi同名的表头(工作区)
内表
内存中建立的临时表。
内表有三种类型
1standard:标准表
2sorted:排序表
3hashed:哈希表
共同点:
都可以对内存的数据进行插入,删除,修改操作
不同点:
标准表:在插入数据时并不对数据行的地址进行重新排序存储。
排序表:在增加和插入时要对数据存储的地址进行重新排序。
哈希表:只能通过关键字进行访问,在检索数据里与数据行数无关。
内表的初始化:CLEAR只能清空工作行。
数据库插入只有一个insert关键字
内表有三个关键字
insert插入一行或者多行数据。
append也是表示插入,内表仅用于存储数据,可以进行附加。
collect也是表示插入,内表去重复,统计字段之和。
initial:表示空行
SPLIT <需要拆分的程序> AT <拆分条件> INTO h1…hn(h为变量名称使用空格隔开)。
使用"LOOP … ASSIGNING …"可以直接修改内表中的数据,而不需要先将内表数据复制到相应工作区,然后再更新回去,性能提高。
BREAK-POINT.表示断点
参考定义
DATA: itab4 like itab1.“参考已定义的内表”
data: itab6 TYPE TABLE OF (数据库表名称).“参考数据库表定义内表”
DATA: itab7 TYPE STANDARD TABLE OF zschange.“参考表结构定义内表”
*排序表,哈希表
DATA itab8(内表名称) TYPE SORTED TABLE OF 数据库表名称 WITH UNIQUE KEY 关键字(数据库字段).“排序表”
DATA itab9(内表名称) TYPE HASHED TABLE OF 数据库表名称 WITH UNIQUE KEY carrid.“数据库字段”
*定义工作区
DATA:ls_itab1 type ty_inab1.
WITH HEADER LINE 此关键词就是在定义内表的时候定义一个名字相同的工作空间,(旧方法)。
通过DESCRIBE获得内表的行
DESCRIBE TABLE LINES n
DESCRIBE?TABLE?emp?LINES?n1.???"表中无数据,回执为0.
内表处理
*添加条目
ls_itab1-field1 = ‘00001’.
ls_itab1-field2 = 00001.
INSERT ls_itab1 INTO itab1 INDEX 1.
APPEND ls_itab1 to itab1 .
COLLECT ls_itab1 INTO itab1.
添加条目排序表
ls_itab1-field1 = ‘00001’.
ls_itab1-field2 = 00001.
INSERT ls_itab1 INTO itab8 INDEX 1.
APPEND ls_itab1 to itab8 .
COLLECT ls_itab1 INTO itab8.
添加一个内表到另一个内表中
append lines of itab1 to itab2.
append lines of itab1 FROM 1 to 2 to itab2.
INSERT LINES OF itab1 to itab2.
DELETE TABLE itab WITH TABLE KEY k1=v1…kn=vn.
按具体值删除
DELETE TABLE itab [FROM wa].
参照其它内表值删除
DELETE itab INDEX idx.
删除具体行数据
DELETE itab FROM idx1 TO idx2.
删除具体行数范围间数据
DELETE ADJACENT DUPLICATES FROM itab.
删除重复数据,执行此条件前必须先排序
BOOK1[] = BOOK[].内表赋值给内表。
APPEND INITIAL LINE TO
排序
sort itab(名称) [by f1 f2…fn]
sql
SELECT语法结构:
SELECT FROM
?INTO
WHERE
GROUP BY
ORDER BY
其中各关键字的属性描述如下:
SELECT :具体的查询字段。
SELECT SINGLE:定义单行查询。
FROM :所查询的透明表。
INTO :查询结果赋值对象,赋值到具体表或结构体。
INTO (…):将查询结果赋值到具体字段。
INTO CORRESPONDING FILES OF :将查询结果按字段匹配赋值给具体的内表或者结构体。
WHERE :查询条件。
GROUP BY :分组查询条件。
ORDER BY :排序条件。
使用SELECT…ENDSELECT语法能循环读取及操作查询
通过系统参数SY-DBCNT可以获取当前读取数据的行数
COUNT():统计查询总数
SUM():统计表中某个数值字段的总和
AVG():统计表中某个数值字段的平均值
MAX():统计表中某个字段的最大值
MIN() :统计表中某个字段的最小值。
IKE LINE OF后面接一个内表,表示一个DATA参数具有和内表一样的结构(structure),例如有一个TABLES:Z_USER,Z_USER有两个字段,一个ID,一个NAME,那么
DATA:WA LIKE LINE OF Z_USER 表示WA和Z_USER的STRUCTURE一样,可以吧WA当做Z_USER的WORK AREA来用。
LIKE TABLE OF 后面接一个STRUCTURE,表示一个DATA参数是一个内表,这个内表的结构和后面接的那个结构一样,
与alv事件相关事务代码
se37
REUSE_ALV_EVENTS_GET
常用事物
user_command 客户响应
top_of_page 标题栏的设置
pf_status_set 工具栏设置
调用alv显示:REUSE_ALV_EVENTS_GET(在工具模式中输入以上函数)
判断内表是否为空的语句为:
IF IT_DATA IS INITIAL. "如果内表为空
*执行体
ENDIF.
IF NOT IT_DATA IS INITIAL. "如果内表不为空
*执行体
ENDIF.
lav事件常用的
user_command
top_of_page
pf_status_set
rrc远程函数
使用CALL FUNCTION 语句调用方法函数注意函数名称必须是大写而且要用单引号包裹例子:
CALL FUNCTION ‘BC400_MOS_POWER’
EXPORTING表示输入参数的关键字。
IMPORTING表示输出参数的结果关键字。
se80叫做对象开发浏览器,可以查看所有的开发对象。
补充前导零的函数:‘CONVERSION_EXIT_ALPHA_INPUT’。
内存有两种,一种是sap内存,一种是abap内存,
sap内存要比abap中的内存要大。
sap内存不管你打开了多少个窗口,所有的内存都是共享的,
abap只是针对一个进程进行内存共享,如果一个用户开启多个窗口其中内存不是共享的,
CALL TRANSACTION ‘’.在同一个程序中调用另一个程序的语法。
还可以使用submit {程序名称}
abap内存共享成功需要他们定义的变量名称要一致才行。
DEFAULT 此关键词是设置默认值的意思。
MEMORY ID 往sap内存中设置默认值。
AS CHECKBOX 复选框关键字 长度只能唯一超过就报错,复选框如果选中对应的值是大写的X 否则就是空格。
RADIOBUTTON GROUP{名称}单选框,所以在书写的时候最少需要两个元素才能使用,当然可以定义多组单选框以名称为分组。
AS LISTBOX 下拉菜单。
VISIBLE LENGTH 10显示长度,我们肉眼能看到的长度并不是输出参数的长度。
SELECT-OPTIONS name for(参考)data_object
.
name 为选择选项的名称
data_object是一个预定义的变量,或者数据库表的字段。
SELECT-OPTIONS是当做内表来进行的包含四列 sing (符号),optin(比较符号),low(最小值),high(最大值)
它定义的类型是char2只能是字母来表达。
types 声明表。
调试的时候出现帽子一样的图标表示他是一个内表。
no INTERVALS 表示所有的选择元素都只有一个输入项。
屏幕事件就是点击某一个按钮触发不同的事件表示不同的功能。
INTO CORRESPONDING FIELDS OF的作用:匹配工作区
,(INTO CORRESPONDING FIELDS OF TABLE的作用是:表字段名转换在查询过程中我们通常会遇到这样的情况,将透明表查询值直接传递给内表:
两表中字段结构一样,但字段名称却不同
通常的情况下将字段名称设为一致的
除此之那还可以用AS关键字,就像SQL中的用法一样
程序有五种程序:可执行程序,模块池程序都可以插入屏幕,函数程序,接口程序,子程序。)
对话屏幕:客户操作之后和程序进行交互叫对话屏幕,
跟程序显示相关的程序都在pbo里边,用户触发了某一个事件,我们要进行响应这部分逻辑流写在了pai里边
LEAVE PROGRAM.退出屏幕。
LEAVE SCREEN:退出当前屏幕。
concatenate表示字符串拼接的意思。
在查询过程中我们通常会遇到这样的情况,将透明表查询值直接传递给内表:
两表中字段结构一样,但字段名称却不同
通常的情况下将字段名称设为一致的
除此之那还可以用AS关键字,就像SQL中的用法一样
*这个意思是新语法,不用自己再创建内表或者工作空间它自动创建
INTO TABLE @DATA(lt_zsdt02_021)
*FOR ALL ENTRIES IN这是一个固定写法,以内表中的某些字段为条件在数据库中取数,我们一般bai使用for all entries in 语句将该表与内du表串联。
FOR ALL ENTRIES IN @gt_item
WHERE zvbeln EQ @gt_item-zvbeln.
select single?single选取的数据要放到 工作区中,而不能放到表中。
INTO TABLE与APPENDING TABLE的区别 从字面看好像作用是相同的,但具体使用以来还是有区别的。
如果都是从数据库表中select一次数据,添加到内表中,他们的作用相同;
但是多次,他们的作用则有很大差别,INTO TABLE:将数据select出来添加到内表时会将内表先清空再添加,
而APPENDING TABLE则会直接追加,实现累计效果。
程序二:
LOOP AT it_marc.
it_marc-dispo = ‘G00’.
it_marc-plifz = 5.
MODIFY it_marc TRANSPORTING dispo plifz.
ENDLOOP.
程序二使用了TRANSPORTING子句,
更新内部表记录时仅更新DISPO,PLIFZ两个字段.
CALL METHOD
特殊符号 &表示拼接字符串代码如下:
DATA name(300) TYPE c VALUE 'spfli AS p ’
& ’ INNER JOIN sflight AS f ’
& ‘ON p~carrid = f~carrid and p~connid = f~connid’ &
'inner join sbook as b ’ &
‘ON b~carrid = f~carrid AND b~connid = f~connid AND b~fldate = f~fldate’.
abap 命名规范
数据定义(data definitions):
type类型 : TY_
全局变量 GV_
局部变量 LV_
全局工作区GS_
本地工作区: LS_
全局内表:GT_
局部内表: LT_
指针(field symbols):
本地结构:<LFS_*>
全局结构:<GFS_*>
功能模块:
输入参数:IV_ eg: IV_MATERIAL
输出参数): EV_
changing-parameter :CV_
表 :T_* eg:T_MATERIAL
类 (Class) :
输入参数:IV_ eg: IV_MATERIAL
输出参数: EV_
changing-parameter :CV_
结果 : RV_
异常 :ZCX_ eg: ZCX_ERROR
Parameter : P_*
Select-Options : S_*
Range Field : R_*
Interface : ZIF_*
LOOP … ASSIGNING …的使用
表示指针指向的地址。
Field-Symboles: like ITAB.
LOOP AT ITAB ASSIGNING .
I = SY-TABIX MOD 2.
IF I = 0.
<WA>-FLAG = 'X'.
ENDIF.
ENDLOOP.
事件
双击事件:&IC1
SKIP FIRST SCREEN意思是:跳过第一个屏幕。
REF TO(参考)用来定义类和接口。
触发异常:
Raise.
如果在function的调用中指定异常,控制直接返回调用程序。
如果未列出该异常,则程序会因运行是错误而终止。
变式是什么:
这个我不清楚确切的定bai义,但du根据我以往用的情况,这个变式多半是zhi指,你自己设定的特殊格式和内容。
比dao如你在使用一个报表时,你常用几个信息,你就可以将这些信息输入后,点那个小框框(变式),
保存一个名字,下次你再用的时候,可以直接将你保存的名字输入,就不必一个一个的重新填写了。
massge 类型 E类型就是在屏幕下方出现提示,I类型就是弹出一个提升框。
instance 级别,叫做实例属性 必须要创建一个对象接受才能拿来用。
constant 常量级别,可以当作静态属性来用。
判断对象是否创建成功 使用关键字 is bound (是否被绑定)。