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)

Поле – это переменная, которая хранит данные. Поля объявляются служебным словом DATA с указанием типа данных, а также длины и количества десятичных разрядов, если это применимо.

  " Объявление поля name символьного типа длиной 30 символов
  DATA name TYPE c LENGTH 30.

  " Также длину поля можно указать в скобках
  DATA name(30) TYPE c.

  " Можно задать начальное значение поля служебным словом VALUE
  DATA name(30) TYPE c VALUE 'John'.

  " Если не указан тип поля, по умолчанию используется 
  " символьный тип C
  DATA name(30) VALUE 'John'.
  
  " Если не указана длина поля, используется длина по умолчанию
  " для указанного типа
  DATA flag TYPE c.
  
  " Объявление поля flag символьного типа длиной 1 символ
  DATA flag.

  " Объявление поля count целого типа
  DATA count TYPE i.

  " Объявление поля amount упакованного типа длиной 10
  " с количеством десятичных разрядов 3
  DATA amount(10) TYPE p DECIMALS 3.

Объявление нескольких полей можно объединить, поставив после DATA двоеточие и записав объявление полей через запятую.

  DATA: name(30),
        count TYPE i,
        flag.

При объявлении упакованного типа надо учитывать, что на один символ приходится полбайта, включая знак числа. Т.е. при указании длины 10 подразумевается, что итоговая разрядность числа будет 16 (1 символ определяет знак числа +/-, 3 символа приходится на десятичную часть и оставшиеся 16 символов – на целую часть). Таким образом, диапазон чисел, которые может хранить поле amount из последнего примера от -9 999 999 999 999 999,999 до 9 999 999 999 999 999,999.

Чтобы определить поле того же типа, что и ранее объявленное, вместо TYPE используется LIKE.

  DATA: first_name(50) TYPE c,
        last_name LIKE first_name.

Константа определяется словом CONSTANTS с указанием типа, длины и числа десятичных разрядов аналогично объявлению полей. Дополнение VALUE для константы обязательно. Таким образом определяется её значение.

  CONSTANTS name_john TYPE c LENGTH 30 VALUE 'John'.

Стандартные типы могут использоваться для определения локальных типов данных. Локальные типы существуют только в программе и могут использоваться только в ней. Локальный тип определяется служебным словом TYPES.

  " Определяется символьный тип длиной 30 символов
  TYPES t_name(30).
  
  " Определяется поле типа t_name
  DATA name TYPE t_name.

Глобальные типы определяются в ABAP-словаре и могут использоваться во всей системе (во всей рассматриваемой SAP-системе).

Структуры

Структуры содержат фиксированное число полей и служат для объединения простых полей в более сложный, например, данные о сотруднике. Структуры объявляются служебными словами BEGIN OF и END OF.

  DATA: BEGIN OF employee,
          first_name(50),
          last_name(50),
          birthday TYPE d,
        END OF employee.

Аналогично можно объявить тип структуры, чтобы в дальнейшем использовать его для объявления полей.

  TYPES: BEGIN OF t_employee,
           first_name(50),
           last_name(50),
           birthday TYPE d,
         END OF t_employee.

  DATA: employee TYPE t_employee.

Для обращения к полю структуры надо указать её имя и через дефис имя поля.

  employee-first_name = 'John'.
  employee-last_name = 'Smith'.
  employee-birthday = '19820101'.

Системные поля

В системе предусмотрена глобальная структура SYST, которая хранит системные данные. Доступ к ней в программе осуществляется по имени SY. Некоторые значения системных переменных указаны ниже.

SY-DATUMАктуальная дата сервера приложений
SY-UZEITАктуальное время сервера приложений
SY-INDEXСчетчик цикла DO
SY-TABIXИндекс в цикле LOOP
SY-SUBRCКод возврата, содержит результат последней выполненной операции. SY-SUBRC = 0 в случае успешного выполнения.
SY-LANGUЯзык входа в систему
SY-BATCHПрограмма выполняется в фоновом режиме
SY-BINPTПрограмма выполняется в рамках пакетного ввода
SY-REPIDИмя текущей программы
SY-UNAMEИмя пользователя