【ABAP】SAP系统变量用法----ABAP程序系统字段中英文详解

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: 没有找到符合条件的记录,也没有更新。
 

ABAP程序系统字段中英文详解

-注_华亭慧剑译

系统字段由ABAP运行时环境填写,并且可以用来在ABAP程序中查询系统状态。除了一个例外(sy-repid),系统字段都是变量,但是它们都是只读的。此外,更多程序执行的重要信息通常都被丢弃。ABAP程序中的系统字段只在极少需要控制系统行为的时候才能被重写。

System fields are filled by the ABAP runtime environment and can be used in an ABAP program to query system statuses. With one exception (sy-repid), system fields are variables, but they should only be accessed on a read-only basis. Otherwise, important information for further program execution often gets lost. System fields in ABAP programs can only be overwritten in a few cases to control system behavior.

对于例外的sy-repid,这个系统字段的数据类型在ABAP字典的SYST结构(6.10版以后)中定义,作为sy结构(也可以用SYST来定位)的组件在ABAP程序中有示例。sy结构在一个内部会话期间内只存在一次,并且在这个内部会话期间内被所有程序使用。下表列出了在ABAP程序中可以使用的系统字段。所有sy结构的其他组件则或者在ABAP运行时环境内部使用或者已经废弃。

With the exception of sy-repid, the data types of the system fields are defined in the ABAP Dictionary in the structure SYST (as of release 6.10), and are instantiated in ABAP programs as components of the predefined structure sy, which can also be addressed using SYST. The structure sy exists only once in an internal session and is used by all programs of an internal session at the same time. The following table shows the system fields that can be used in ABAP programs. All other components of the structure sy are either intended for internal use by the ABAP runtime environment or are obsolete.

名称

Name

类型

Type

说明

Content

sy-abcde

c(26)

包含了字母表。可以用来通过指定偏移/长度直接访问独立的字母,而无需考虑代码页。

Contains the alphabet. Can be used to access individual letters directly by specifying the offset/length, regardless of the code page.

sy-batch

c(1)

在一个后台运行的ABAP程序中设置为“X”,否则就是初始值。

Set to "X" in an ABAP program that runs in the background, otherwise initial.

sy-binpt

c(1)

在批处理输入会话中设置为“X”,在ABAP程序中调用using CALL TRANSACTION USING。否则就是初始值。

Set to "X" during processing of batch input sessions, and in ABAP programs called using CALL TRANSACTION USING. Otherwise initial.

sy-calld

c(1)

在一个调用序列中的第一个程序里为空字符串,否则为值“X”。在调用using CALL TRANSACTIONCALL DIALOG或者SUBMIT ... AND RETURN后变为“X”。如果程序以LEAVE TO TRANSACTION或者从一个屏幕事务开始的话,则为空。使用SUBMIT(没有AND RETURN)时设定为调用它的程序的值。

Contains a blank character in the first program in a call sequence , otherwise contains the value "X". Is set to "X" after calls using CALL TRANSACTION CALL DIALOG, or SUBMIT ... AND RETURN. Empty if the program was started using LEAVE TO TRANSACTION or a transaction from the screen. A call using SUBMIT (without AND RETURN) assumes the value of the calling program.

sy-callr

c(8)

当打印清单时,显示打印从何处开始的值,例如NEW-PAGE为程序控制的打印,或者RSDBRUNT为从一个选择屏幕打印。

When printing lists, contains a value that displays where the printing was started, for example, NEW-PAGE for program-controlled printing, or RSDBRUNT for printing from the selection screen.

sy-colno

i

在清单缓冲区中创建清单过程中的当前位置。从1开始计算。在非Unicode系统中,这个位置也符合显示清单中的列。在Unicode系统中,由于清单缓冲区中的一个字符可能占多列,这只保证每个输出的最低和最高的输出能力。

Current position during creation of a list in the list buffer. Counting begins at 1. In non-Unicode systems, this position also corresponds to the column in the displayed list. In Unicode systems, this is only guaranteed for the lower and upper output limits applicable to each output, as one character may take up more columns in the list than positions in the list buffer.

sy-cpage

i

当清单事件被触发时,显示在清单顶端的页码。从1开始。

Page number of the page displayed at the top of the list for which a list event was triggered. Counting begins at 1.

sy-cprog

c(40)

在外部程序调用中,调用程序的名字,否则就是当前程序的名字。如果一个程序包含多级程序调用,sy-cprog包含框架程序的名字,而不是设置为程序调用序列中的框架程序名字。

In procedures called externally, the name of the calling program, Otherwise the name of the current program. If a procedure called externally calls another external procedure, sy-cprog contains the name of the framework program, and is not set to the name of the framework program of the subsequent calling program.

sy-cucol

i

在屏幕上显示的横向指针的位置。从第2列开始。

Horizontal cursor position in the display on a screen. Counting begins at column 2.

sy-curow

i

在屏幕上显示的纵向指针的位置。从第1行开始。

Vertical cursor position on the screen display of a screen. Counting begins at line 1.

sy-datar

c(1)

在PAI中,如果屏幕上至少有一个输入字段的值被用户或其他数据传输所更改,则为“X”,否则为初始值。

At PAI, contains "X" if at least one input field of a screen has been changed by a user or by further data transfer, otherwise initial.

sy-datlo

d

用户的当前日期,例如:19990723,20000422。可以用GET TIME来设置。

Local date of the user, for example 19990723, 20000422. Can be set using GET TIME.

sy-datum

d

SAP系统的本地日期。可以用GET TIME来设置。

Local date of the SAP system. Can be set using GET TIME.

sy-dayst

c(1)

在夏令时中设置为“X”,否则为初始值。

"X" during summertime, otherwise initial.

sy-dbcnt

i

SQL语句把sy-dbcnt的内容设置为处理过的表行数。

SQL statements set the content of sy-dbcnt to the number of processed table lines.

sy-dbnam

c(20)

在执行程序中,表示连接的逻辑数据库。

In executable programs, the linked logical database.

sy-dbsys

c(10)

使用的数据库系统,例如ORACEL, INFORMIX。

Central database system, for example, ORACLE, INFORMIX.

sy-dyngr

c(4)

当前屏幕的屏幕组。在屏幕画笔中,几个屏幕可以指定给一个公共屏幕组,例如,可以用来一次修改同一个屏幕组中的全部屏幕。

Screen group of the current screen. In the Screen Painter, several screens can be assigned to a common screen group, which can be used, for example, for making modifications to all screens in the group at once.

sy-dynnr

c(4)

当前的屏幕号。在选择屏幕处理过程中,这指定了当前被选中的屏幕。在列表处理过程中,说明了子屏幕容器的数量。在子屏幕屏幕过程中(包括选项卡),说明了屏幕数量。

Number of the current screen. During selection screen processing, this is the current selection screen. During list processing, the number of the subscreen container. During processing of a subscreen screen (including in tabstrips), this screen number.

sy-fdayw

b

工厂日历的周日,Monday为1,…,Friday为5。

Factory calendar weekday, Monday = 1, ..., Friday = 5.

sy-fdpos

i

在字符类型数据对象操作时查找定位。

Found location in operations with character-type data objects.

sy-host

c(8)

应用服务器的名字,例如,KSAP0001,HS01234。

Name of the application server, for example, KSAP0001, HS01234.

sy-index

i

循环索引。在DOWHILE循环中,指包含了本次循环的循环次数。

Loop index. In DO and WHILE loops, contains the number of the loop passes including the current pass.

sy-langu

c(1)

单字符的语言键,例如,D,E,F,给当前的文本环境使用。通过依照当前用户的登录语言,或使用SET LOCALE语句设定。

Single-character language key, for example, D, E, F, for the current text environment. Set according to the logon language of the user or by using the statement SET LOCALE.

sy-ldbpg

c(40)

在可执行程序中,指定了连接的逻辑数据库的数据库程序。

In executable programs, the database program of the linked logical database.

sy-lilli

i

当清单事件被触发时的清单行数,从1开始计算并包含页抬头。

List line for which a list event was triggered. Counting begins at 1 and includes the page header.

sy-linct

i

在当前清单创建时的页长。sy-linct在一个任意长度的标准清单中的值为0,而在定义了页长的清单中不为0。

Page length of the current list during list creation. sy-linct is 0 for a standard list of any length, and has a value that is not 0 for lists with a defined page length.

sy-linno

i

当清单建立时的当前清单行。从1开始并包含了页抬头。

Current list line during list creation. Counting begins at 1 and includes the page header.

sy-linsz

i

当清单建立时,在清单缓冲区中的行长度。

Line width of the current list in the list buffer during list creation.

sy-lisel

c(255)

当一个清单事件被触发时,光标所在行在清单缓冲区中的行内容。(限制为最前面的255行(疑误,应为字符))。

Content of the list line in the list buffer, on which the cursor was positioned while a list event was triggered (restricted to the first 255 lines).

sy-listi

i

当清单事件被触发时,清单等级。

List level of the list for which a list event was triggered.

sy-loopc

i

在一个表控制中当前显示的行号。

Number of lines currently displayed in a table control.

sy-lsind

i

正在被创建清单的清单级别(基本清单:0,明细清单:大于0)。对每个交互式清单事件,sy-lsind自动以1递增。sy-lsind只能在ABAP程序中在清单列表的导航中更改。

List level of the list that is currently being created (basic list: 0, details lists: greater than 0). For every interactive list event, sy-lsind is automatically increased by an increment of 1. sy-lsind can only be changed in ABAP programs for navigating between details lists.

sy-macol

i

当打印清单时,包含了左边距的列数。

When printing lists, contains the number of columns on the left edge.

sy-mandt

c(3)

当前用户登录的客户端号,例如:401,800。

client identifier with which the user has logged on, for example, 401, 800.

sy-marow

i

在打印清单时,包含了顶端空白的行数。

When printing lists, contains the number of lines on the top margin.

sy-modno

c(1)

外部会话的索引。在第一个会话中设置为0。在使用Create Session函数创建或由在工具栏输入字段中带/o参数的事务调用新事务时,这个值以1递增。

Indexing of external sessions. Contains the value 0 in the first session. In new sessions that are opened using the Create Session function or by calling a transaction with /o in the input field of the toolbar, this value is increased by 1.

sy-msgid

c(20)

MESSAGE语句后,包含了消息类。

After the statement MESSAGE, contains the message class.

sy-msgno

n(3)

MESSAGE语句后,包含了消息号。

After the statement MESSAGE, contains the message number.

sy-msgty

c(1)

MESSAGE语句后,包含了消息类型。

After the statement MESSAGE, contains the message type.

sy-msgv1 ...

sy-msgv4

c(50)

MESSAGE语句后,包含了要替换掉消息中参数字段的内容。

After the statement MESSAGE, contain the contents of the fields that are used as placeholders in the message.

sy-opsys

c(10)

应用服务器的操作系统,例如,SOLARIS,HP-UX。

Operating system of the application server, for example, SOLARIS, HP-UX.

sy-pagno

i

在清单创建时的当前页。

Current page in list creation.

sy-pfkey

c(20)

当前屏幕的GUI状态。

GUI status of the current screen.

sy-prdsn

c(6)

当打印清单时,包含了脱机文件的名字。

When printing lists, contains the name of the spool file.

sy-repid

c(40)

当前ABAP程序的名字。对外部调用的程序,是指程序的框架程序的名字。在6.10版以前,当sy-repid向一个外部程序传递实际参数时,形式参数没有被设置为调用者的名字,而是程序的名字。在6.10版之后,sy-repid可以被传递给程序而无需参考字段。

Name of the current ABAP program. For procedures called externally, name of the framework program of the procedure. sy-repid when transferring actual parameters to an external procedure, before release 6.10, the formal parameter was not set to the name of the caller, but to the name of the procedure instead. As of release 6.10, sy-repid can be transferred to procedures without help fields.

sy-saprl

c(4)

SAP系统的发行版本,例如46D,610。

Release status of the SAP system, for example, 46D, 610.

sy-scols

i

当前屏幕的列数。

Number of columns of the current screen.

sy-slset

c(14)

用来填充一个选择屏幕的变量。

Variant that was used for filling a selection screen.

sy-spono

n(10)

当打印清单时,包含了缓冲池的数量。

When printing lists, contains the name of the spool number.

sy-srows

i

当前屏幕的行数。

Number of lines of the current screen.

sy-staco

i

当清单事件被触发时,清单显示的第一列的数量,从1开始。

Number of the first column displayed in the list for which a list event has been triggered. Counting begins at 1.

sy-staro

i

当清单事件被触发时,在清单页顶端显示的页顶端的列表行数。从1开始计数并且不包括在页抬头中。

Number of the list line displayed at the top of the page at the top of the list, for which a list event was triggered. Counting begins at 1 and does not include the page header.

sy-stepl

i

在表控制中当前行的索引。在每个循环过程中设置。

Index of the current line in a table control. This is set for every loop pass.

sy-subrc

i

返回被ABAP语句设置的值。通常,0表示程序执行没有错误。当发生错误时,根据语句的使用方法来设置sy-subrc,可以从不同的值来判断发生的错误。

Return value that is set by many ABAP statements. In general, the value 0 means that the statement was executed with no problems. Depending on which statement was used to set sy-subrc, if errors occur, the cause of the error can be derived from the corresponding value.

sy-sysid

c(8)

SAP系统的名字,例如,S01,K99。

Name of the SAP system, for example, S01, K99.

sy-tabix

i

表索引。标准表或者排序表的最后被定位的行(表循环中当前所在行)。如果访问哈希表,则设置为0。

Table index. Last addressed line of a standard table or sorted table. Is set to 0 if hashed table is accessed.

sy-tcode

c(20)

当前事务码的名称。

Name of the current transaction code.

sy-tfill

i

DESCRIBE TABLELOOP ATREAD TABLE语句中,sy-tfill设置为被定位的那表的行数。

In the statements DESCRIBE TABLELOOP AT, and READ TABLEsy-tfill is filled with the number of lines in the internal table that has been addressed.

sy-timlo

t

用户的本地时间,例如152557。可以用GET TIME来设置。

Local time of the user, for example 152557. Can be set by GET TIME.

sy-title

c(70)

当前屏幕标题栏显示的文字。

Text that appears in the title bar of the screen.

sy-tleng

i

DESCRIBE TABLELOOP ATREAD TABLE语句中,sy-tleng设置为被定位的那表的行大小。

In the statements DESCRIBE TABLELOOP AT, and READ TABLEsy-tleng is filled with the line size of the internal table that is being addressed.

sy-tvar0

...

sy-tvar9

c(20)

程序中可以指定值的系统字段。在事件TOP-OF-PAGE中,sy-tvar0sy-tvar9替换程序里清单和列标题中占位符的文本。

These system fields can be assigned values in the program. At the event TOP-OF-PAGE, the content of sy-tvar0 to sy-tvar0 replaces the placeholders in the list and column headers of the text elements of the program.

sy-tzone

i

与UTC参考事件的事件差异,以秒为单位,例如,3600,10800。

Time difference to the UTC reference time in seconds, for example, 3600, 10800.

sy-ucomm

c(70)

触发事件PAI的功能码。

Function code that triggered the event PAI.

sy-uline

c(255)

在清单中显示的包含最多255个字符的横线。

Contains a horizontal line of length 255 for displaying in lists.

sy-uname

c(12)

用户的登录名,例如,KELLERH。

User's logon name, for example, KELLERH.

sy-uzeit

t

SAP系统的本地时间,可以用GET TIME来设置。

Local time of the SAP system. Can be set using GET TIME.

sy-vline

c(1)

在清单中显示的一个竖线(|)。

Contains a vertical line (|) for displaying in lists.

sy-wtitl

c(1)

REPORTPROGRAMFUNCTION-POOL语句中,如果使用了NO STANDARD PAGE HEADING附加属性,则设置为“N”,否则用初始值。

In the statements REPORTPROGRAM, and FUNCTION-POOL, set to "N" if the addition NO STANDARD PAGE HEADING is used, otherwise initial.

sy-zonlo

c(6)

用户时区,例如CET,PST。

Time zone of the user, for example, CET, PST.

系统字段的数据类型和长度都在第二列描述,格式为类型(长度)

The data type and length of the system fields are specified in the second column in the notation type(length).

在6.10版之后,sy-repid系统字段不再是SYST或者sy结构的一部分了。作为替代,每个程序都包含了预定义常数sy-repid和syst-repid,都包含了相关程序的名字。这也是两个预定义类型——sy-repid和syst-repid——的名字,都是长度为40的字符。

As of release 6.10, the system field sy-repid is no longer a part of the structures SYST or sy. Instead, each program contains the predefined constants sy-repid and syst-repid, which both contain the name of the relevant program. There are also two predefined types with the same names, sy-repid and syst-repid, of type c and length 40.

 

注意

Notes

  • 如果可能的话,一个系统字段应该在设置它的语句后立即使用,以避免其他语句修改它的值。如果必要的话,把系统字段的值存储在一个辅助的变量中。
    If possible, a system field should be evaluated directly following the statement that set it, so that it is not overwritten by other statements. If necessary, store the values of system fields in auxiliary variables.
  • 如果语句不设置一个系统字段的值,则它只能作为一个读取位置的操作数来使用。否则,系统将出现异常表现。
    A system field should only be used as an operand at a read position if its content is not set by the same statement. Otherwise, the system may behave unexpectedly.

给TA打赏
共{{data.count}}人
人已打赏
ABAPSAP

【ABAP】ABAP 开发系列(01): ABAP Development Workbench 介绍(上)

2020-4-13 22:03:17

ABAPSAP

【ABAP】dialog 子屏幕中不允许SET SCREEN

2020-5-14 2:36:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索