zl程序教程

您现在的位置是:首页 >  其他

当前栏目

SAP常用知识点{系统变量|TCODE|消息类型|数据类型|变量声明|Internal Table}详解编程语言

2023-06-13 09:11:52 时间

KEY: 1.常用系统变量
  2.常用TCODE
  3.消息类型
  4.数据类型
  5.变量声明
  6.Internal Table

1.常用系统变量

SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功
SY-DBLNT: 被处理过的记录的笔数
SY-UNAME: 当前使用者登入SAP的USERNAME;
SY-DATUM: 当前系统日期;
SY-UZEIT: 当前系统时间;
SY-TCODE: 当前执行程序的Transaction code
SY-INDEX : 当前LOOP循环过的次数
SY-TABIX: 当前处理的是internal table 的第几笔
SY-TMAXL: Internal table的总笔数
SY-SROWS: 屏幕总行数;
SY-SCOLS: 屏幕总列数;
SY-MANDT: 當前系統編號(CLIENT NUMBER)
SY-VLINE: 画竖线
SY-ULINE: 画横线
SY-PAGNO: 当前页号
SY-LINSZ: 当前报表宽度
SY-LINCT: 当前报表长度
SPACE: 空字符串
SY-LSIND: 列表索引页
SY-LISTI: 上一个列表的索引
SY-LILLI: 绝对列表中选定行的行号
SY-CUROW: 屏幕上的行
SY-CUCOL: 光标列
SY-CPAGE: 列表的当前显示页
SY-STARO:真实行号
SY-LISEL: 选择行的内容,长度为255
SY-LINNO: 当前行

2.常用TCODE

ABAPDOCU ABAP文档和范例
BAPI  BAPI浏览器
CMOD/SMOD  系统增强
LSMW  数据导入工具
PFCG  权限管理
SA38  程序执行
SCAT  计算机辅助测试工具,测试、数据导入等
SCC1  集团拷贝
SCC4  显示集团
SE09  运输组织者,查询传输请求
SE10  请求传输
SE11  数据字典
SE16  数据浏览器
SE32  文本元素设定
SE36  逻辑数据器
SE37  函数模块
SE38  ABAP编辑器
SE41  菜单制作器
SE51  屏幕制作器
SE55  生成表维护程序
SE71  FORM设计
SE78  FORM、SmartFORMS使用图片上载
SE80  对象浏览器
SE90  对象浏览器
SE91  消息设定
SE93  维护事务代码
SHDB  批输入事务
SM04  显示在线用户
SM30  维护表视图
SM35  进程监控
SM50  超时用户
SMARTFORMS SmartForms设计
SNUM  编号对象维护
SO10  标准文本,设定Form使用的TIFF图片等
SPAD  假脱机管理
SQ01  Query查询制作
ST05  SQL跟踪
SU20  授权字段
SU21  授权对象
WE21  IDOC处理中的端口

3.消息类型

E 错误
W 警告
I  信息
A 异常终止
S 成功
X 退出

4.数据类型

C: 字符(串), 长度为1, 最大有65535 BYTES, 初始值为: space,例: ‘M’;
D: 日期,  格式为YYYYMMDD, 最大是’9999/12/31’ ,例:’1999/12/03’.
F: 浮点数,  长度为8, 例如: 4.285714285714286E-01
I: 整数  范围 :-2^31 ~ 2^31-1
N: 数值组成的字符串: 011, ‘302’.
P: packed 数,用于小数点数值,例如: 12.00542;
T: 时间, 格式为HHMMSS,例如: ’14:03:00’, ’21:30:39’.
X: 16进制数, 例如 ‘1A03’.

5.变量声明

变量宣告包含name, length, type, structure等,语法如下:
DATA  F [ length ] type [ value ] [ decimals ]
其中: f :变量名称,最长30个字符,不可含有 + , . , : ( )  等字符;
  length type :变量类型及长度;
  value :初值
  decimals :小数字数

6.Internal Table

一. Internal Table 的宣告
ABAP/4中的Internal Table是一种Data Structure,类似于其它语言中的STRUTURE,它可以由几个不同类型的字段(field)组成,用来表示具有不同属性的某一事物,单独一笔数据表示某个事物,多笔数据表示具有相同属性的多个事物.例如:
为了存取或记录某班的同学资料,我们创建如下的internal table:
DATA: BEGIN OF STUDENT OCCURS 20,
  STD_ID  TYPE N,
  NAME(10) TYPE C,
  AGE  TYPE I,
  BIRTH  TYPE D,
  SCORE  TYPE P DECIMALS 2,
  END OF STUDENT.
此时我们已经创建了名叫STUDENT的internal table,并且为它预先申请了能够存放20笔资料的Buffer(当然,如果存取资料不止20笔,程序执行时,会自动申请系统Buffer)
Internal table 的定义有以下几种格式:
格式一.  DATA: BEGIN OF internal table   OCCURS  n ,
  field 1   TYPE type1 ,
  [ field 2   TYPE type 2 ,
  field 3   TYPE type 3 ,
  …  ]
  END OF  internal table .
格式二.  TYPES: BEGIN OF work area ,
  field 1   TYPE type1 ,
  [ field 2   TYPE type 2 ,
  field 3   TYPE type 3 ,
  …  ]
  END OF work area .
  TYPES internal table TYPE work area OCCURS n .
格式三.  DATA: BEGIN OF work area .
  INCLUDE STRUCTURE table name .
  DATA: END OF work area .
  DATA: internal table LIKE work area OCCURS n .
二. APPEND LINE
格式: APPEND [ work area   TO ] internal table .
举例一. (使用work area)
DATA: BEGIN OF LINE,
  COL1 TYPE I,
  COL2 TYPE I,
  END OF LINE.
DATA  ITAB LIKE LINE OCCURS 10.
DO 2 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.
ENDDO.
LOOP AT ITAB INTO LINE.
  WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.
执行结果为:
1 1
2 4
举例二. (不使用work area)
  DATA: BEGIN OF ITAB OCCURS 10,
  COL1 TYPE I,
  COL2 TYPE I,
  END OF ITAB.
  DO 2 TIMES.
  ITAB-COL1 = SY-INDEX.
  ITAB-COL2 = SY-INDEX ** 2.
  APPEND ITAB.
  ENDDO.
  LOOP AT ITAB.
  WRITE: / ITAB-COL1, ITAB-COL2.
  ENDLOOP.
  执行结果与举例一相同.
举例三. (加入另一个Internal table的元素)
  格式: APPEND LINES OF itab1 [FROM n1 ] [TO n2 ] TO itab2 .
  将 itab1 的元素加入至 itab2 中,可选取自 n1 至 n2 的范围.
  APPEND LINES OF ITAB TO JTAB.
三. COLLECT LINE
COLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值字段相同的情况下,将数值字段汇总.
格式:  COLLECT [ work area INTO ] itab
DATA: BEGIN OF ITAB OCCURS 3,
  COL1(3)  TYPE C,
  COL2  TYPE I,
  END OF ITAB.
  ITAB-COL1 = ‘ABC’.  ITAB-COL2 = 10.
  COLLECT  ITAB.
  ITAB-COL1 = ‘XYZ’.  ITAB-COL2 = 20.
  COLLECT  ITAB.
  ITAB-COL1 = ‘ABC’.  ITAB-COL2 = 80.
  COLLECT  ITAB.
此时, internal table中放的是2笔数据, 分别为:
  ITAB-COL1  ITAB-COL2
  ‘ABC’  90
  ‘XYZ’  20
四. INSERT LINE
将元素插入在指定的internal table位置之前.
格式: INSERT [ wa INTO] [INITIAL LINE INTO ] itab [INDEX idx ]
或者: INSERT LINES OF itab1 [FROM n1 TO n2 ] INTO itab2 INDEX idx
其中: wa 即work area,工作区中的元素.
[INITIAL LINE INTO] :插入一笔初始化的记录.
itab : internal table
[INDEX idx ]: internal table 的记录号.(新加入的元素放在此记录前面)
五. 读取internal table
格式一:
LOOP AT itab [INTO wa ][FROM n1 TO n2 ][WHERE conditions ]
  statement
ENDLOOP.
格式二:
READ TABLE itab [INTO wa ] [INDEX idx / WITH KEY conditions ]
举例. (格式二)
DATA: BEGIN OF ITAB OCCURS 10,
  COL1 TYPE I,
  COL2 TYPE I,
  END OF ITAB.
  DO 10 TIMES.
  ITAB-COL1 = SY-INDEX.
  ITAB-COL2 = SY-INDEX * 2.
  APPEND ITAB.
ENDDO.
READ TABLE ITAB INDEX 3.
(或者: READ TABLE  ITAB WITH KEY COL1 = 3.)
WRITE: / ‘ITAB-COL1 = ‘, ITAB-COL1, ‘ITAB-COL2 = ‘, ITAB-COL2.
执行结果同样是:
ITAB-COL1 =  3
ITAB-COL2 =  6.
六. 修改internal table 中的值
格式: MODIFY itab [FROM wa ][INDEX idx ][TRANSPORTING f1 f2 …][WHERE conditions ]
举例一. READ TABLE ITAB INDEX 3.
  LINE-COL1 = 29.
  MODIFY ITAB FROM LINE TRANSPORTING COL1.
  将第三笔记录的COL1字段的值修改为29.
举例二. T_SALARY – salary = 50.
  MODIFY T_SALARY TRANSPORTING salary WHERE birthday = ‘1999/12/06’.
七. DELETE internal table中的字段
格式: DELETE itab INDEX idx .
或:  DELETE itab [FROM n1 TO n2 ] [WHERE conditions ]
八. Internal table 排序 
SORT itab [ order way ][BY f1 f2 …]
其中: order way 有DESCENDING 和ASCENDING, Default 为ASCENDING.
  f1 : 为指定排序的字段.
九. 加总
SUM.
总和计算存放与work area中,但只能在LOOP 中使用.
例: LOOP AT ITAB INTO LINE.
  SUM.
  ENDLOOP.
  WRITE: / LINE-COL1, LINE-COL2.
十. 初始化internal table
REFRESH itab .  清空 itab 中的值.
CLEAR  itab .  清空 itab 的Header Line.
FREE  itab .  释放记忆体空间.

19995.html

c