Sy tabix abap что это
ABAP guide
ABAP. Tips, tricks & code examples.
воскресенье, 11 сентября 2016 г.
Типы данных
Типы данных делятся на три категории: стандартные, локальные и глобальные.
Стандартные типы бывают фиксированной, заданной или переменной длины.
Фиксированной длины | |
D | Дата (Date) |
Формат – ГГГГММДД | |
Длина – 8 | |
Значение по умолчанию – ‘00000000’ | |
T | Время (Time) |
Формат – ЧЧММСС | |
Длина – 6 | |
Значение по умолчанию – ‘000000’ | |
I | Целое число (Integer) |
Длина – 4 | |
Значение по умолчанию – 0 | |
F | Число с плавающей запятой (Float) |
Длина – 8 | |
Значение по умолчанию – 0.0 | |
Заданной длины | |
C | Последовательность символов (Character) |
Длина по умолчанию – 1 | |
Значение по умолчанию – ‘’ (пустая строка) | |
N | Последовательность числовых символов (Numericalcharacter) |
Длина по умолчанию – 1 | |
Значение по умолчанию – ‘0’ | |
X | Байтовая последовательность (Hexadecimal) |
Длина по умолчанию – 1 | |
Значение по умолчанию – ‘00’ | |
P | Упакованное число (Packed number) |
Длина по умолчанию – 8 | |
Значение по умолчанию – 0 | |
Переменной длины | |
STRING | Последовательность символов переменной длины (String) |
XSTRING | Байтовая последовательность переменной длины (Hexadecimal string) |
D
Объявление нескольких полей можно объединить, поставив после DATA двоеточие и записав объявление полей через запятую.
Чтобы определить поле того же типа, что и ранее объявленное, вместо TYPE используется LIKE.
Константа определяется словом CONSTANTS с указанием типа, длины и числа десятичных разрядов аналогично объявлению полей. Дополнение VALUE для константы обязательно. Таким образом определяется её значение.
Стандартные типы могут использоваться для определения локальных типов данных. Локальные типы существуют только в программе и могут использоваться только в ней. Локальный тип определяется служебным словом TYPES.
Глобальные типы определяются в ABAP-словаре и могут использоваться во всей системе (во всей рассматриваемой SAP-системе).
Структуры содержат фиксированное число полей и служат для объединения простых полей в более сложный, например, данные о сотруднике. Структуры объявляются служебными словами BEGIN OF и END OF.
Аналогично можно объявить тип структуры, чтобы в дальнейшем использовать его для объявления полей.
Для обращения к полю структуры надо указать её имя и через дефис имя поля.
В системе предусмотрена глобальная структура SYST, которая хранит системные данные. Доступ к ней в программе осуществляется по имени SY. Некоторые значения системных переменных указаны ниже.
Русские Блоги
[Готово] Введение в новые функции ABAP 7.40 (вкл.)
ABAP 7.40 Quick Reference
Description
Before 7.40
With 7.40
Data statement
DATA text TYPE string.
text = `ABC`.
DATA(text) = `ABC`.
Loop at into work area
DATA wa like LINE OF itab.
LOOP AT itab INTO wa.
…
ENDLOOP.
LOOP AT itab INTO DATA(wa).
…
ENDLOOP .
Call method
DATA a1 TYPE …
DATA a2 TYPE …
oref->meth( IMPORTING p1 = a1
IMPORTING p2 = a2).
oref->meth(
IMPORTING p1 = DATA(a1)
IMPORTING p2 = DATA(a2) ).
Loop at assigning
ENDLOOP.
LOOP AT itab
Read assigning
READ TABLE itab
READ TABLE itab
Select into
table
DATA itab TYPE TABLE OF dbtab.
SELECT * FROM dbtab
INTO TABLE itab
WHERE fld1 =lv_fld1.
SELECT * FROM dbtab
INTO TABLE DATA(itab)
WHERE fld1 = @lv_fld1.
Select single
into
SELECT SINGLE f1 f2
FROM dbtab
INTO (lv_f1, lv_f2)
WHERE …
WRITE: / lv_f1, lv_f2.
SELECT SINGLE f1 AS my_f1,
F2 AS abc
FROM dbtab
INTO DATA(ls_structure)
WHERE …
WRITE: / ls_structure-my_f1, ls_structure-abc.
If a table line is not found, the exception CX_SY_ITAB_LINE_NOT_FOUND is raised. No sy-subrc.
Description
Before 7.40
With 7.40
Read Table index
READ TABLE itab INDEX idx
INTO wa.
wa = itab[ idx ].
Read Table using key
READ TABLE itab INDEX idx
USING KEY key
INTO wa.
wa = itab[ KEY key INDEX idx ].
Read Table with key
READ TABLE itab
WITH KEY col1 = …
col2 = …
INTO wa.
wa = itab[ col1 = … col2 = …].
Read Table with key components
READ TABLE itab
WITH TABLE KEY key
COMPONENTS col1 = …
col2 = …
INTO wa.
wa = itab[ KEY key col1 = …
col2 = …].
Does record exist?
READ TABLE itab …
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
ENDIF.
IF line_exists( itab[ … ] ).
ENDIF.
Get table index
DATA idx type sy-tabix.
READ TABLE …
TRANSPORTING NO FIELDS.
idx = sy-tabix.
DATA(idx) =
line_index( itab[ … ] ).
NB : There will be a short dump if you use an inline expression that references a non-existent record.
SAP says you should therefore assign a field symbol and check sy-subrc.
Примечание. Если вы используете встроенное выражение для ссылки на несуществующую запись, появится дамп. Поэтому SAP рекомендует указать символ поля и проверить sy-subrc.
ASSIGN lt_tab[ 1 ] to FIELD –SYMBOL( ).
IF sy – subrc = 0.
…
ENDIF.
NB : Use itab [ table_line = … ] for untyped tables.
Примечание. Для нетипизированных таблиц используйте itab [ table_line = … ]
CONV dtype|#( … )
dtype = Type you want to convert to (explicit)
# = compiler must use the context to decide the type to convert to (implicit)
Method cl_abap_codepage=>convert_to expects a string
4. Оператор значения VALUE-Оператор значения VALUE
Переменные: VALUE dtype|#( )
Структуры: VALUE dtype|#( comp1 = a1 comp2 = a2 … )
Внутренние таблицы Таблицы: VALUE dtype|#( ( … ) ( … ) … ) …
Elementary line type:
FOR wa| IN itab [INDEX INTO idx] [cond]
This effectively causes a loop at itab. For each loop the row read is assigned to a work area (wa) or field-symbol( ).
This wa or is local to the expression i.e. if declared in a subrourine the variable wa or is a local variable of
that subroutine. Index like SY-TABIX in loop.
Это эффективно распространяет внутреннюю таблицу itab. Для каждого цикла каждая прочитанная строка назначается рабочей области (wa) или символу поля ( ).
Populate internal table GT_CITYS with the cities from GT_SHIPS.
Populate internal table GT_CITYS with the cities from GT_SHIPS where the route is R0001.
Note: ls_ship does not appear to have been declared but it is declared implicitly.
FOR i = … [THEN expr] UNTIL|WHILE log_exp
Populate an internal table as follows:
INIT result = start_value
While VALUE and NEW expressions can include FOR expressions, REDUCE must include at least one FOR expression. You can use all kinds of FOR expressions in REDUCE:
хотя VALUE с NEW Выражение может содержать выражения FOR, но REDUCE должно содержать хотя бы одно выражение FOR. В REDUCE можно использовать различные выражения FOR:
Count lines of table that meet a condition (field F1 contains “XYZ”).
Вычислите количество строк внутренней таблицы, удовлетворяющих условиям (поле F1 содержит «XYZ»).
Sum the values 1 to 10 stored in the column of a table defined as follows
Сложите значения 1 и 10, хранящиеся в таблице, как показано ниже.
Using a class reference – works because “write” method returns reference to instance object
… COND dtype|#( WHEN log_exp1 THEN result1
[ WHEN log_exp2 THEN result2 ]
…
[ ELSE resultn ] ) …
… SWITCH dtype|#( operand
WHEN const1 THEN result1
[ WHEN const2 THEN result2 ]
…
[ ELSE resultn ] ) …
… CORRESPONDING type( [BASE ( base )] struct|itab [mapping|except] )
Given structures ls_line1 & ls_line2 defined and populated as above.
Определение и заполнение данной структуры ls_line1 и ls_line2 описаны выше.
1、The contents of ls_line1 are moved to ls_line2 where there is a matching column name. Where there is no match the column of ls_line2 is initialised.
При наличии совпадающего имени столбца переместите содержимое ls_line1 в ls_line2. Если совпадений нет, инициализируйте столбец ls_line2.
2、This uses the existing contents of ls_line2 as a base and overwrites the matching columns from ls_line1. This is exactly like MOVE-CORRESPONDING.
Используйте существующее содержимое ls_line2 в качестве основы и перезапишите его на основе соответствующего столбца в ls_line1. Это точно как MOVE-CORRESPONDING 。
3、This creates a third and new structure (ls_line3) which is based on ls_line2 but overwritten by matching columns of ls_line1.
Создайте третью новую структуру (ls_line3), которая основана на ls_line2, а затем ls_line2 перезаписывается соответствующим столбцом ls_line1.
MAPPING allows you to map fields with non-identically named components to qualify for the data transfer.
Сопоставление позволяет сопоставить поля компонентов, имена которых не соответствуют условиям передачи данных.
… MAPPING t1 = s1 t2 = s2
EXCEPT allows you to list fields that must be excluded from the data transfer.
EXCEPT Позволяет перечислить поля, которые должны быть исключены из передачи данных.
Инструкция по использованию отладчика
Венц Власта Александровна
ведущий специалист FI/TR/SL
Использование отладчика (Debugger)
Введение: назначение отладчика
Как известно, отладчик предназначен для пошагового выполнения программ с целью наблюдения за значением переменных и управления их значениями. Его используют при:
Существуют несколько способов запуска исполнения программного кода в режиме отладки:
Рис. 1 Транзакция SE38 –запуск отладчика
Рис. 2 Запуск отладчика в любом окне системы
В том случае, когда известно имя выполняемой программы, удобно воспользоваться ABAP-редактором. Если же имя выполняемой программы неизвестно, либо программа имеет сложную структуру вызова, то удобнее воспользоваться вызовом отладчика с помощью команды «/h».
Вход в отладчик (возможен двумя путями):
Точка прерывания – сигнал в строке кода, который вызывает прекращение выполнения программы на этой строке и запускает ABAP-отладчик.
Перезапуск отладчика
Выключение отладчика (продолжить выполнение программы в обычном режиме)
Выход из отладчика с выходом из программы
Выход из режима отладки с последующим выполнением программы имеет особенность – режим отладки может быть возобновлен в случае наличия точек прерывания в модуле программы.
Интерфейс
Отображение исходного кода
Позиционирование на указанном столбце кода
Позиционирование на указанной строке кода
Увеличение фрагмента кода
Позиционирование на текущем операторе
Доступные способы отображения данных
Управление отладкой
Позволяет выполнить оператор в текущей строке с заходом в вызываемую подпрограмму/функцию/программу (Рис. 3)
Рис. 3 Отладчик
Позволяет выполнить оператор в текущей строке с обходом вызываемой подпрограммы/функции/программы
Возвращает из вызываемой подпрограммы/функции/программы в главную программу
Запускает выполнение программы до следующей точки прерывания
Просмотр/изменение значений полей
Нажмите Enter, значение поля отобразится.
Так же можно отобразить значение поле для просмотра двойным щелчком по этому полю.
Sy-subrc –- системная переменная, хранящая код возврата: результат выполнения какого-либо действия. 0 – действие выполнено успешно. Другие значения зависят от исполняемого оператора.
Sy-tabix – текущий индекс строки, читаемой внутренней таблицы.
Sy-dbcnt – число считанных строк из БД
Sy-dynnr – номер экрана.
Просмотр/изменение внутренних таблиц
Для отображения внутренних таблиц переключитесь в режим просмотра таблиц (нажмите кнопку ) и скопируйте название таблицы в поле «ВнутрТаблица».
Прочие функции
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
Difference between Sy-tabix and Sy-index
Sy-tabix vs Sy-index
Sy-tabix is used to find the current line in the internal table; it’s a current line index. Whereas sy-index in used to find the number of current pass in the loop statement.
sy-tabix = Index of Internal Tables
set by commands processing internal tables (e.g. READ, LOOP)
It contains the nr/index of the last line accessed for standard or sorted tables. In case of hashed tables it is set to 0
since hashed tables are no index tables, they use a hash administration.
sy-index = Loop Index.
set by DO and WHILE loops. contains the number of the loop passes including the current pass.
APPEND sets SY-TABIX to the index of the last line of the table, that is, it contains the overall number of entries in the table.
COLLECT sets SY-TABIX to the index of the existing or inserted line in the table.
LOOP AT sets the SY-TABIX to the index of the current line at the beginning of each loop lass.At the end of loop, SY-TABIX is reset to the value that it had before entering the loop.
READ TABLE sets SY-TABIX to the index of the table line read.If you use a binary search and system doesn’t a line SY-TABIX contains the total no. of lines.
sy-tabix is nothing but the index or row number of an internal table.
when control goes to the twentieth record of the table, then sy-tabix will hold value 20.
On otherhand, sy-index denotes the number of processing for any loop statements like do, while etc.
ABAP Blog
Все о разработке в решениях от SAP
ABAP Blog
Все о разработке в решениях от SAP
Ссылки
Цитаты
Любой дурак может написать код, понятный компьютеру. Только хороший программист способен написать код, понятный человеку.
Мартин Фаулер. Рефакторинг
Новое
Последние комментарии
Динамическое программирование в ABAP
На днях довелось прослушать курс BC402 в рамках программы «Вечерний ABAP», хочется выразить благодарность компании SAP за такую возможность, а также отметить профессионализм преподавателя, в роли которого выступал Василий Ковальский. Сам курс посвящен обзору довольно обширных тем, которые, так или иначе, пригодятся всем ABAP программистам в их повседневной деятельности. Одной из рассматриваемых тем данного курса была возможность динамического программирования в ABAP, о которой и хотелось бы поговорить далее.
Ключевой особенностью программного обеспечения является его способность к изменению и приспособлению к меняющимся условиям. Одним из инструментов обеспечивающих такое приспособление является динамическое программирование.
В ABAP под динамическим программированием могут пониматься следующие вещи:
В данной статье будут рассмотрены последние 2 способа, информацию по остальным можно получить из официальной справки, а также из курса BC402.
Для динамического программирования необходимо понять, что такое ссылочные переменные и указатели на поля (field symbols) и в чем их отличия.
Для разработчиков, только начинающих изучение ABAP термин field-symbols часто может вызывать путаницу. Те из них, кто работал с языками C/C++, зачастую путают их с типом указателя (Pointer). Но field-symbols не являются указателями на область памяти, они лишь являются указателями на переменную или объект данных которые являются видимыми в текущем блоке кода (можно использовать термин alias).
На следующем рисунке хорошо видны основные отличия.
У нас есть три объекта:
Обобщенные типы
В дополнение к стандартным типам данных, в ABAP существует так же ряд обобщенных типов, использование которых возможно только в случае: формальных параметров методов (функций, процедур), field-symbols и ссылочных переменных. Часто используя динамическое программирование, приходится иметь дело с заранее не известными типами данных, для этого нужно знать каким образом их можно представить в виде обобщенных типов.
Перечень таких типов определен ниже:
Тип | Описание |
any | Любой тип данных |
any table | Любая внутренняя таблица |
clike | Обобщенный символьный тип (c, d, n, t, string, а так же плоские структуры, состоящие из элементов символьных типов) |
csequence | Текстовая последовательность (c, string) |
data | Любой тип данных (аналогично any в случае объявления TYPE data, если объявлять TYPE REF TO DATA, будут подразумеваться ссылки на данные, но не объектные ссылки). Данный тип может быть использован в ссылочных переменных (рассмотрено ниже). |
decfloat | Числовой тип с плавающей запятой, один из следующих: decfloat16, decfloat34. |
hashed table | Любая хеш таблица |
index table | Любая стандартная или сортированная внутренняя таблица. |
numeric | Числовой тип (i (b, s), p, decfloat16, decfloat34, f) |
object | Любой объектный тип |
simple | Любой элементарный тип данных включая плоские структуры состоящие из символьных элементов. |
sorted table | Любая сортированная таблица |
standard table | Любая стандартная таблица |
table | Аналогично предыдущему |
xsequence | Байтовая последовательность (x, xstring) |
Предположим мы пишем некую процедуру, в параметрах которой хотели бы видеть любую сортированную или стандартную таблицу, сделать это можно с помощью обобщенного типа index table: