Базовые и структурированные типы данных ABAP/4

Программы ABAP обрабатывают данные из базы данных или внешнего источника на прикладном уровне, ABAP операторы могут работать только с локально доступными данными в программе. Внешние данные, например, пользовательский ввод на экране, данные из файла или данные из таблицы базы данных, должны всегда транспортироваться и сохраняться в локальной памяти программы, чтобы обрабатывать с помощью операторов ABAP.

Другими словами, прежде чем какие-либо данные обработать с помощью программы ABAP, они должны быть сначала считывается из источника, сохраняется локально в памяти программы, а затем с ним можно работать используя язык ABAP. Нельзя работать с внешними данными на прямую с помощью ABAP-операторов.
 
Временные данные, которые существуют в программе ABAP пока программа выполняется называется переходными данными и очищается из памяти после завершения программы. Чтобы использовать временные данные в будущем, их необходимо сохранить, такие данные называются постоянными данными.

Базовые типы

Иерархия типов и соответствующих им данных в ABAP может быть представлена следующим образом:



Краткое описание базовых типов:
Тип данных Длина по умолчанию (в байтах) Допустимая длина (в байтах) Значение по умолчанию (в байтах) Описание
Числовые типы
I 4 4 0 Целочисленный тип со знаком (от -231 до 231-1)
F 8 8 0 Число с плавающей запятой (около 15 символов в мантиссе, экспонента от ‑307 до 308)
P 8 1 - 16 0 Упакованное число со знаком (до 14 знаков после запятой)
Символьные типы
C 1 1 - 65535 ' … ' Текстовое поле
D 8 8 '00000000' Дата (формат: ГГГГММДД)
N 1 1 - 65535 '0 … 0' Число в текстовом виде
T 6 6 '000000' Время(формат: ЧЧММСС)
Шестнадцатеричные типы
X 1 1 - 65535 X'0 … 0' Шестнадцатеричное поле
Строковые типы
STRING 0 Строка переменной длины
XSTRING 0 Шестнадцатеричная строка переменной длины

Объявление нового типа имеет следующий синтаксис:
*TYPES <t>[(<length>)] [TYPE <type>|LIKE <obj>] [DECIMALS <dec>].
*Пример:
TYPES: number TYPE i,
       length TYPE p DECIMALS 2,
       code(3) TYPE c.

DATA counts TYPE i.
TYPES: company    TYPE spfli-carrid,
       no_flights LIKE counts.
 
Имя типа может иметь до 30 символов. Имя типа не может состоять только из цифр. Недопустимыми символами являются + . , : ( ) - < >.
Существует так же описание типа ссылки:
TYPES <t> TYPE REF TO ... 
Ссылка на данные:
 TYPES <t> TYPE REF TO DATA. 
Ссылка на объект класса или интерфейса:
TYPES <t> TYPE REF TO <class>|<interface>.

Структурированные типы

В ABAP есть возможность объявлять структуры:

  TYPES: BEGIN OF <structure>,
                ..............
                <ti> ..., 
                ..............
       END OF <structure>.

  
Пример:
  TYPES: spfli_type TYPE spfli,
       surname(20) TYPE c,
       BEGIN OF address,
             name       TYPE surname,
             street(30) TYPE c,
             city       TYPE spfli_type-cityfrom,
       END OF address,
       town TYPE address-city.
    
Допускается объявление вложенных структур:
TYPES: BEGIN OF struct1,
         col1 TYPE i,
         BEGIN OF struct2,
           col1 TYPE i,
           col2 TYPE i,
         END OF struct2,
       END OF struct1.
TYPES mytype TYPE struct1-struct2-col2.

* Локальные типы в программе
* ссылающиеся на стандартные ABAP-типы:
TYPES: surname(20)  TYPE c,
       street(30)   TYPE c,
       zip_code(10) TYPE n,
       city(30)     TYPE c,
       phone(20)    TYPE n,
       date         LIKE sy-datum.

* Локальные типы в программе
* ссылающиеся на объявленные типы
TYPES: BEGIN of address,
         name TYPE surname,
         code TYPE zip_code,
         town TYPE city,
         str  TYPE street,
       END OF address.

TYPES: BEGIN of phone_list,
         adr TYPE address,
         tel TYPE phone,
       END OF phone_list.

    
Возможно, добавление полей другой структуры через следующую конструкцию:
INCLUDE TYPE s1.
    
Пример:
TYPES: BEGIN OF rec.
        INCLUDE STRUCTURE address.
TYPES: END OF rec.
TYPES myname TYPE rec-name.

Табличные типы

Табличные типы в ABAP представляют собой описание массивов с элементами таблиц баз данных. Помимо простого индекса Эл-та массива у таблицы имеется ключ, а так же тип хранения данных. Есть типы таблиц, которые не имеют привычного доступа к элементу по индексу.

Общий вид объявления табличного типа выглядит следующим образом:

TYPES <t> TYPE|LIKE <tabkind> OF <linetype> [WITH <key>]
          [INITIAL SIZE <n>].
TYPES <t> TYPE|LIKE <linetype> OCCURS n.
    
Типы ANY TABLE и INDEX TABLE используются только при описании типа ссылки или при описании параметров процедур (подпрограмм, функциональных модулей, методов классов)

Типы STANDARD TABLE (или просто TABLE), SORTED TABLE и HASHED TABLE используются для указания типа внутренних таблиц в самой программе.



Ключ описывается в разделе WITH <key> одним из следующих вариантов:
[UNIQUE|NON-UNIQUE] KEY <col1> ... <col n>
В таблицах со структурированной строкой, все поля, используемые в качестве компонент ключа <coli>, могут быть любого типа, кроме внутренней таблицы и ссылки, а так же не могут содержать ни таблицы, ни ссылки. Ключ может быть вложенной структуры. Подструктура разворачивается поле за полем, при доступе к таблице по ключу.
[UNIQUE|NON-UNIQUE] KEY TABLE LINE
Если строка таблицы состоит из одного поля элементарного типа (C, D, F, I, N, P, T, X), вы можете объявить всю эту строку ключом. Строка таблицы при таком объявлении ключа сама не может быть таблицей. Если строка таблицы структурированного типа, то вы так же можете объявить всю строку как ключ.
[UNIQUE|NON-UNIQUE] DEFAULT KEY
Если строка таблицы структурирована, то ключ по умолчанию будет содержать все не числовые поля, так же исключая поля‑таблицы и ссылки. Если таблица имеет элементарный тип строки, то ключ по умолчанию будет вся строка. Если строка таблицы состоит только из поля‑таблицы, то ключ по умолчанию будет пустым.
Примеры объявления табличного типа:

Комментарии