SAP系统变量详解

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: 当前行

系统内部有一个专门存放系统变量的结构SYST,其中最常用的系统变量有:
SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功
SY-UNAME: 当前使用者登入SAP的USERNAME;
SY-DATUM: 当前系统日期;
SY-UZEIT: 当前系统时间;
SY-TCODE: 当前执行程序的Transaction code
SY-REPID: ABAP 程式名,目前的主程式
SY-CPROG: ABAP 程式名
SY-SYSID: R/3 系統,R/3 系統名稱
SY-UCOMM: 畫面,PAI 驅動的功能代碼,一般用來參照定義變量
SY-INDEX : 当前LOOP循环过的次数 READ TABLE it_po INDEX 1 此時變量值1
SY-TABIX: 当前处理的是internal table 的第几笔
下面說下sy-index 和 sy-tabix的區別

sy-index和sy-tabix都是系统字段,用来记录循环的次数。

sy-index 在DO…ENDDO循环里有效,而sy-tabix在loop at …endloop里有效。

運行下面的例子能更好的理解:
DATA: BEGIN OF line,
col1 TYPE i,
col2 TYPE i,
END OF line.
DATA itab LIKE TABLE OF line WITH HEADER LINE.
DO 30 TIMES.
line-col1 = sy-index.
line-col2 = sy-index * sy-index.
APPEND line TO itab.
ENDDO.
LOOP AT itab .
DO 2 TIMES.
WRITE: / ‘sy-tabix:’,sy-tabix,itab-col1,
‘sy-index:’,sy-index,itab-col2.
ENDDO.
ENDLOOP.
sy-dbcnt:Sy-dbcnt代表有多少条记录被处理了
例如:當我們查詢記錄放入內表,判斷內表中是否有數據就可以用 if sy-dbcnt = 0 MESSAGE s000.
STOP. ENDIF.
sy-tfill:返回当前内表(Internal Table)内的记录数。
但是要小心,那些字段随各自的内表(Internal Table)改变。例:如果你循环(Loop at)(读取)itab,sy-tfill返回itab的记录数。
如 果你在循环(Loop at)(读取)内表(Internal Table)itab的内部嵌套循环(Loop at)(读取)内表(Internal Table)jtab,sy-tfill返回的不再是itab的记录数,而是jtab的!所以如果你需要使用itab的记录数,请先把sy-tfill的 值传递给其它变量。
无论如何,sy-tfill永远保存当前的记录数。
例如記錄內表記錄條數:DESCRIBE TABLE itab LINES sy-tfill.
SY-TMAXL: Internal table的总笔数
SY-SROWS: 屏幕总行数;
SY-SCOLS: 屏幕总列数;
SY-MANDT: 当前系统编号(CLIENT NUMBER)
SY-VLINE: 画竖线
SY-ULINE: 画横线

sy-pagno 当前页号
sy-lsind 列表索引页
sy-listi 上一个列表的索引
sy-linsz 当前报表宽度
sy-lilli 绝对列表中选定的行号
sy-linct 当前报表长度
sy-curow 屏幕上的行
space 空字符
sy-cucol 光标列
sy-cpage 列表的当前显示页
sy-staro 真实行号
sy-lisel 选择行的内容,长度为255
sy-linno 当前行

SY-MANDT: 當前系統編號(CLIENT NUMBER)
SY-SLSET:

SY-SUBRC 的含义

================= FUNCTION MODULE (或RFC中) SY-SUBRC 的含义 ================
使用SELECT语句选择查询:
SY-SUBRC = 0: 至少有一行数据,当ENDSELECT语句执行完,SY-DBCNT中保存着记录的个数。
SY-SUBRC = 4: 没有数据。
SY-SUBRC = 8: 只有使用“SELECT SINGLE FOR UPDATE”时才会有,
表示: WHERE条件指定的记录不止一行,结果是没有记录被选中。

使用INSERT语句,向表中插入一行,必须注意INSERT的顺序与表中字段的顺序一致:
SY-SUBRC = 0: 插入成功,SY-DBCNT包含了插入的行数,0或1。
SY-SUBRC = 4: 由于有相同的KEY存在,所以插入失败。

使用LOOP语句来遍历一个内表:
SY-SUBRC = 0: 循环至少被执行一次。
SY-SUBRC = 4: 循环没有被执行,可能是没有数据,也可能是没有符合条件的记录。

使用DELETE语句来删除一条记录:
SY-SUBRC = 0: 找到一行并删除之,如果该表有不唯一主键,也就是有多条重复的记录,则只删除第一条记录。
SY-SUBRC = 4: 没有找到符合条件的记录,也没有删除。

使用UPDATE语句来更新一条记录:
SY-SUBRC = 0: 找到记录并更新,(如果有多条记录呢?)
SY-SUBRC = 4: 没有找到符合条件的记录,也没有更新。

猜你喜欢

转载自blog.csdn.net/weixin_43734184/article/details/103306809
今日推荐