Главная страница

Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4. Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР. Разработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс


Скачать 28.36 Mb.
НазваниеРазработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс
АнкорР. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4.pdf
Дата21.12.2017
Размер28.36 Mb.
Формат файлаpdf
Имя файлаР. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР.pdf
ТипКнига
#12433
страница4 из 24
1   2   3   4   5   6   7   8   9   ...   24
Глава 4
Локальные данные
программы
• Определение полей АВАР/4
Элементарные и неэлементарные типы
данных в АВАР/4
• Просмотр записей и внутренних таблиц
• Использование системных полей

36 Глава 4
В АВАР/4 имеются элементарные типы данных: символьный тип, целые чисча, дата. Для создания составных объектов данных в языке используется два способа конструирования — записи и внутренние таблицы. Кроме того, в языке поддерживаются различные способы определения типов
переменных
(полей). Ссылки на поля и структуры Dictionary гарантируют непротиворечивость данных во всех про- граммах системы.
О словаре АВАР/4 Dictionary см. главу 5.
В данной главе речь пойдет о том, как определять типы, поля, записи и внутренние таблицы. Внут- ренние таблицы обычно применяются для создания временных копий частей или целых таблиц базы данных, так как в этом случае не требуется заранее знать количество элементов, записываемых во внут- реннюю таблицу при выполнении программы.
О работе с внутренними таблицами см. главу
О п р е д е л е н и е полей с п о м о щ ь ю э л е м е н т а р н ы х
типов и с с ы л о к
Поле в АВАР/4 является переменной, которая не может быть разложена на более мелкие составляю- щие. Поле определяется с помощью оператора data. Для него отводится объем памяти в зависимости от длины поля. В главе 1 были введены понятия элементарного и неэлементарного типов и приведен пример поля customer. Предположим, надо написать программу, которая строит список клиентов и продавцов. Поле фамилии клиента в главе 1 определено как символьное, длиной 25 символов; поле фамилии продавца в этом примере будет иметь такое же определение.
предлагает три подхода для разработки данной программы:
• Использование элементарных типов (таких, как символьный, целый, дата)
• Ссылка на существующие поля (в программе или Dictionary)
• Ссылка на неэлементарный тип (в программе или Dictionary)
Для того чтобы вспомнить пример, обратитесь к разделу
объекты данных (пере-
менные) и интегрированный словарь Dictionary" главы
В программе, приведенной ниже, реализуется первый подход, т.е. элементарные типы. Здесь каждое поле определяется отдельно с помощью ключевого слова
Полям присваиваются имена, задается их тип (с) и размер (25):
d a t a :
(25) t y p e с,
(25)
При втором подходе используется дополнение like и ссылка на поле (см. листинг, приведенный ниже). Здесь поле vendor_name наследует всю информацию от поля customer_name: элементарный тип с и длину 25. Б данном случае необходимо задать только тип, а все изменения в определении поля cus- будут автоматически переноситься на определение поля vendor_name:
d a t a :
(25) t y p e с,
l i k e
Рассмотрим третий подход — ссылку на неэлементарный тип, В главе 1 тип t_name был определен как символьное поле длиной 25 — он и будет использоваться в дальнейшем. Тип, определенный как назначается для полей vendor_name и customer_name, и любые изменения в нем автоматически распространяются на определения обоих полей;
t y p e s t y p e d a t a :
t y p e t_name,
t y p e
Какой способ лучше?
У каждого из представленных подходов свои преимущества и недостатки. Первый способ обладает меньшей гибкостью, чем два остальных, так как любые изменения в определении должны выполняться

Локальные данные программы 37
для обоих полей, т.е. дважды, что означает дополнительную работу. Второй способ (ссылка на поле)
не требует нового определения типа для каждого поля, т.е. пользователь делает это только один раз.
Третий способ (ссылка на неэлементарный тип), в отличие от первых двух, отражает тот факт, что как так и имеют поле фамилии одинакового типа и длины. Другим словами, они принадлежат к более общему определению, чем эти поля конкретных клиентов и продавцов. Исполь- зование неэлементарных типов позволяет перейти к обобщенным структурам данных, которые могут применяться в различных ситуациях.
Последние два способа задания типа особенно эффективны, если с помощью дополнений like и type можно сослаться на поля и типы, которые уже определены в АВАР/4 Dictionary или в системе
Использование Dictionary гарантирует, что все изменения в определениях полей и структур автомати- чески распространяются на все программы, в которых задействованы эти поля и структуры. Таким образом, у разработчика всегда под рукой самая свежая информация. Авторы руководства настоятельно рекомендуют обращаться к Dictionary, если одни и те же поля и структуры более одного раза. АВАР/4 Dictionary дает возможность создавать и поддерживать большие программные системы,
над которыми совместно трудится коллектив разработчиков, обеспечивая каждому из них доступ к дан- ным и правильное и согласованное их использование.
При определении типов данных в Dictionary или собственных программах нет никаких общих пра- вил относительно работы с like. (Следует помнить, что типы из Dictionary доступны всем программам системы.) Использовать ссылку на другие поля с помощью like проще, чем вводить объявление нового неэлементарного типа, представляющего собой новый уровень абстракции.
Разрешается применять динамические ссылки, которые в АВАР/4 называются
Reid-Symbols (см. главу
В общем случае внесение изменений в поля программы всегда упрощается при выборе одного из абстрактных подходов, особенно если над программным проектом, отличающимся высокой степенью интеграции, трудятся несколько разработчиков. С другой стороны, любой программист должен писать по возможности предельно понятные тексты, а абстрактный подход затрудняет понимание. В частности,
в небольших программах и подпрограммах иногда лучше воздержаться от длинных цепочек like и слож- ных неэлементарных типов.
Элементарные типы
В АВАР/4 используются следующие элементарные типы:
Characters Поддерживается два символьных типа: с (собственно символьный)
и п (текст, состоящий из цифр).
Numbers Поддерживается три цифровых типа: i (целые р (упакованные числа) и f (числа с плавающей запятой).
Date Поддерживается один тип даты: d (дата).
Time Поддерживается один тип для задания времени: t (время).
Hexadecimal Поддерживается один шестнадцатиричный тип: х (шестнадцатиричный).
Каждое поле определяется с помощью ключевого слова data и ссылки на элементарный тип:
d a t a :
(25) type с,
(5) type n,
counter
1 value
Длина поля определяется числом в круглых скобках, которое следует после имени поля. В этом примере поле name имеет размер 25, а поле zip_code — 5. Если размер поля в операторе data не задан,
АВАР/4 использует значение размера поля по умолчанию.
Размер поля определяет число занимаемых им байтов, а ключевое слово value
— содержимое этих байтов. Дополнение value позволяет задать начальное значение переменной counter. Каждый эле- ментарный тип обладает своим значением по умолчанию, которое применяется в тех случаях, когда до выполнения программы не было задано начальное значение переменной. Например, значение по умол- чанию для типа с — пробел (т.е. поле заполняется пробелами), а для типа i — число 0. Принятые по умолчанию размеры полей и начальные значения всех элементарных типов приведены в табл. 4.1.

38 Глава 4
Таблица 4.1
Длины и значения по умолчанию для элементарных типов
с
n
i
p
f
t
x
1
1
4
8
8
8
6
1
Пробел
о о
0.0
•000000'
Аналогично полям задаются неэлементарные типы. Например, следующее объявление определяет тип flag того же типа и размера, что и тип но с начальным значением
Тип flag опре- делен как абстрактный, в то время как поле занимает некоторую память во время выпол- нения. Другими словами, понятие тип (type) не связано с выделением памяти, а для полей, описанных как данные память всегда выделяется:
t y p e s f l a g
с .
data
flag value 'X' .
Для всех типов (включая обсуждаемые ниже неэлементарные) в качестве значений можно задавать константы. Константы типов определяются так же, как константы полей, т.е. с помощью дополнения value:
constants:
(3)
с value 'SAP' ,
i value
Константы нельзя изменять; любой оператор, изменивший константу, вызовет сообщение об ошибке при синтаксической проверке или во время выполнения (например, когда константа используется в каче- стве фактического при вызове подпрограммы и изменяется внутри нее). Заметим, что литералы трактуются системой как константы, а значит, не могут изменяться при выполнении оператора.
Константы используются для определения начальных значений:
data counter type i value
В этом примере значение определяется как константа равная
Так как операторы объявление (или декларативные), использующие ключевые слова types,
data и constants, имеют идентичный синтаксис, синтаксическая структура конкретного
оператора будет обсуждаться только в том случае, если она отличает от синтаксиса,
для
этой группы.
Обсудив использование типов, приступим к их детальному рассмотрению.
Символьные типы
Как уже упоминалось, в языке поддерживается два символьных типа. Тип с применяется для символов или текстовых полей,
для текстов, состоящих из цифр.
СИМВОЛ (текст)
Текстовые поля, в которых задается обычная текстовая информация, имеют тип с (символьный).
Если тип не указан, по умолчанию используется тип с. Рассмотрим пример:
data:
о,
value 'A' .
В этом примере поля city и flag имеют по умолчанию тип с, так как другой тип не задан. Поскольку размер поля flag не он равен одному символу (напомним, что длина символьного поля по умол- чанию — 1). Теоретически размер символьных полей в приложениях не ограничен, но по чисто тех- ническим причинам он не должен быть выше
Кбайт. При превышении этого предела во время синтаксической проверки появляется сообщение об ошибке. Если в операторе data начальное значение

Локальные данные программы 39
поля не указано, до начала выполнения программы поля типа с заполняются пробелами, а поля с за- данными начальными значениями не изменяются.
Если поле и соответствующее ему значение или имеют разные размеры, это начальное значение или усекается (если оно больше размера поля) или дополняется пробелами справа
(если оно меньше):
data
value 'АВАР/4' .
В этом примере поле language будет иметь начальное значение АВ, так как последние 4 байт текс- товой строки АВАР/4 будут отброшены.
Цифровой текст
Переменные типа п (цифровой текст) содержат текстовые строки, состоящие из цифр, например,
0123456789. С их помощью записываются цифры, которые используются для идентификации и сорти- ровки внутренних таблиц. Например, поля типа п часто содержат различные идентификационные но- мера, такие как номера домов, почтовые индексы (коды ZIP), номера частей, номера счетов и т.д.
Начальные значения полей типа с заполняются пробелами справа, а поля типа п — цифрой 0 слева.
Предположим, нужно вывести на экран список идентификаторов клиентов, имеющих разные длины и дополненных нулями слева. Запишите следующий программный текст:
data
(8) type n.
1234' .
Идентификатор клиента будет напечатан как
Если использовать для идентификатора кли- ента тип с, появится число
(с завершающими пробелами).
Размер поля типа п по умолчанию равен 1, а начальное значение состоит из соответствующего длине числа нулей — 0000 для цифрового текста длиной 4.
Числа
Для чисел АВАР/4 поддерживает следующие типы: целые, упакованные числа и числа с плавающей запятой.
Целые
Поля типа i используются в основном для счетчиков, например для подсчета числа клиентов или числа шагов цикла:
type i ,
loop_counter type
Целое поле имеет фиксированный размер — 4 байт, следовательно, нет необходимости задавать длину в явном виде. Возможный диапазон допустимых значений — от до
При выполнении на- чальное значение целого поля устанавливается равным 0, однако его можно задать следующим образом:
data
type i value
Упакованные числа
Поле типа упакованного числа (типа р) дает возможность хранить числа во внутреннем представле- нии данных в упакованном виде. Такие числа имеют более широкий диапазон значений и могут ис- пользоваться в машинных вычислениях. Область применения полей этого типа:
• Очень большие числа (более 31 значащей цифры)
• Числа с фиксированным количеством знаков после запятой
• Округление по правилам десятичной арифметики
Предположим, нужно рассчитать популяцию москитов в данной местности. Возможно следующее определение переменной:
data
type
Очевидно, что в этом случае значение по умолчанию будет равно 0. Размер поля по умолчанию
8 байт, а них можно записать до 15 значащих цифр и знак (+ или -). Это и есть диапазон возможных значений для упакованного числа, размер которого задан по умолчанию (и которое не имеет знаков после запятой):
от
до + 999,999,999,999,999.
Если при подсчете число окажется больше, система немедленно прекратит выполнение программы,
выведет на экран текущий выполняемый оператор и всю относящуюся к нему информацию (например,
содержимое связанных с оператором полей).

40 Глава 4
Упакованные числа могут иметь десятичные позиции после запятой. Предположим, вы работаете в
международной компании, выпускающей сумки для авиапассажиров, и хотите вычислить стоимость
новой модели такой сумки. Чтобы получить результат в долларах
поле следует определить
дующим образом:
data
p
2.
Этот оператор определяет число
(цену сумки) как десятичное с двумя знаками после
запятой. Его начальное значение: 0.00.
Разрешается также задавать размер упакованного числового поля в явном виде, причем максималь-
ная длина равна 16, что соответствует числу с S1 значащей цифрой плюс знак числа:
data
(16)
p.
Число
в данном примере содержит S1 значащую цифру и знак числа. В самом общем
случае число значащих цифр в упакованном числе определяется длиной п и вычисляется из выражения:
число цифр равно (2п-1).
Значения чисел,
• качестве результата, обсуждаются • главе
Выбор меньшего размера упакованного числа не дает никаких реальных преимуществ. Однако, если
число может превысить допустимый диапазон, разумнее задать максимальный размер —
Упакованные числа
средствами языка АВАР/4 на всех платформах, даже
если аппаратно »то не предусмотрено. Такая возможность особенно важна для
с десятичными
Числа с плавающей запятой
ЧИСЛО С плавающей запятой (тип используется в сложных арифметических вычислениях. Напри-
мер, число age_of_earth, определяемое в приведенном ниже примере, имеет начальное значение
(т.е. с мантиссой, равной 12Я, и показателем степени 8):
data
f
Значение числа с плавающей запятой может быть представлено несколькими эквивалентными спо-
собами:
data:
f,
f,
f3 typa f.
f l -
-
- ' -765E04' .
Начальное значение числа с плавающей запятой равно 0, если при определении в операторе data
не задано другое. Допустимый диапазон значений — от
до
Стандартный размер поля
числа типа
полученного в результате вычислений, равен 22.
Операции, использующие числа с плавающей запятой выполняются сервером очень быстро. Однако
при работе с типом f следует быть особенно внимательным, так как даже при простейших вычислениях
могут обнаружиться ошибки округления, как, например, в следующем простом выражении:
fl -
/ ' 3 . 0 ' ) * ' 3 . 0 ' .
Поскольку ошибки округления нельзя исключить, число с плавающей запятой лучше не использовать
в условных выражениях с оператором " или eq:
if fl - '1' .
Условие, приведенное в примере (П - '1'), не может быть выполнено. Его следует заменить более
сложным выражением типа
if '0.9999999999' < fl and fl < ' 1 . 0 0 0 0 0 0 0 0 0 1 . '
В коммерческих приложениях числа с плавающей запятой находят применение в основном для хра-
нения промежуточных результатов очень сложных арифметических операций,
при графичес-
ком представлении результатов вычислений. Позже они обычно преобразуются в упакованные числа.
Если использовать только упакованные числа, все промежуточные результаты будут округляться соглас-
но правилам десятичной арифметики, поэтому могут значительно отличаться от результатов, получен-
ных при использовании чисел с плавающей запятой, так как операции над числами с плавающей
запятой выполняются по правилам двоичной арифметики. Для небольших чисел предпочтение следует
отдать целым без десятичной запятой, а для
с большими числами или с десятичными дробя-
ми — упакованным числам.

Локальные данные программы 41
Дата
Поле дата (date)
тип d с фиксированным размером поля в восемь знаков. Внутреннее пред- ставление поля дата :
(Y — год, М — месяц, D — день). Начальное значение поля: 00000000.
Язык АВАР/4 поддерживает несколько выходных форматов записи поля типа date, отличающихся от внутреннего представления. Разрешено самостоятельно задавать формат записи поля date, используя команду write:
today
Get a c t u a l date system f i e l d sy-datum and display it today write today.
Первое предложение является примером определения поля today. Последующие предложения пере- дают реальную дату, содержащуюся в системном поле sy-datum в поле today, которое затем выводится на экран с помощью команды write. Системные поля рассматриваются ниже в разделе "Использование системных полей". Если этот пример будет выполняться в последний день этого тысячелетия в США,
на экране появятся цифры: 12 1999. Но так как европейский формат даты несколько иной, в боль- шинстве стран Европы эти цифры будут выглядеть так: 31 12 1999. Если для поля данных в операторе write задан размер 10:
write (10)
в США на экране появится а в Европе - 31/12/1999.
Разрешается задавать специальный формат даты, добавляя дополнительные параметры в команду write (см. главу 8) или в определение поля в словаре Dictionary языка АВАР/4 (см. главу 5).
Необходимо отметить, что даже на начальной стадии изучения типов данных можно выполнять вычисления, используя поля типа date. Типичный пример определения последнего дня предыдущего месяца (ultimo):
date type
* Set v a r i a b l e to day of current ultimo = sy-datum.
ultimo+6(2) - ' 0 1 ' .
Set v a r i a b l e to l a s t day of previous s u b t r a c t 1
Упоминавшиеся ранее форматы выходной записи поля date абсолютно не влияют на внутреннее представление этого поля. Так, число, равное дню, всегда содержится в последних двух байтах внут- реннего представления, независимо от задания вывода даты на экран.
Об использовании полей типа date см. главы 7 и 8.
Время
Поля для задания времени имеют фиксированную длину и формат HHMMSS (часы, минуты, се- кунды). Подобно полям дат, вывод полей времени может быть модифицирован в команде write или с помощью дополнительных форматных определений Dictionary.
Шестнадцатиричное
Для шестнадцатиричных двоичных) представлений чисел используется тип х. Например,
начальное значение шестнадцатиричного поля определяется последовательностью битов
1111000010001001:
data xstring(2) type ас value 'F089' .
Заметим, что две шестнадцатиричные цифры между 0 и F занимают один байт. Другими словами,
шестнадцатиричное поле длиной п содержит 2п цифр и длина результата также равна 2п.
Записи и внутренние таблицы
Поля являются основными объектами данных в языке АВАР/4. Кроме полей, АВАР/4 поддерживает специальные конструкции для сложных (или составных) объектов данных: записи и внутренние табли- цы. Записи содержат фиксированное число объектов данных, а внутренние таблицы могут включать любое количество объектов данных при выполнении программы. В частности, внутренние таблицы очень удобно использовать для запросов к таблицам базы данных.

42 Глава 4
Записи (ИЛИ структуры) и таблицы легко определить, с ними удобно работать, поэтому они
особенно широко применяются в программах АВАР/4.
Использование записей в языке АВАР/4
Записи (или структуры) содержат фиксированное число объектов данных (компонентов записи), опреде- ляемых с помощью ключевых слов data begin of и data end of. Предположим, нужно скомпоновать
информацию о клиенте в одну запись. Можно определить структуру со следующими полями: идентифи-
катор клиента (id), фамилия клиента (name) и номер телефона (telephone):
begin of customer,
id
type
,
end of
Структура с названием customer начинается с ключевого слова data begin of и содержит три поля:
для идентификатора, фамилии и номера телефона (размеры полей объявлены). Структура завершается ключевым словом data end of.
После того как структура определена, можно работать и с отдельными компонентами, и со всей
структурой:
data vendor like
customer-id
.
customer-паше =
customer-telephone = '111-111-1111'.
move customer to
В приведенном тексте программы дополнительное ключевое слово like определяет структуру vendor,
имеющую такой же формат, как и структура customer. Эта информация добавляется к каждому полю.
Последняя команда этого примера работает со всей структурой, т.е. все компоненты записи customer
копируются в запись vendor.
Предлагается также возможность определения структуры типа constant, в которой все поля должны иметь фиксированное значение. Это может быть, например, запись, содержащая путь доступа к неко- торому каталогу на ПК пользователя:
begin of
value
value
end of
Так как ключевое слово constants вместе с begin of определяют постоянную структуру path, все ее
компоненты должны иметь определенные значения. В противном случае на экран выводится сообщение
об ошибке. Запись как единое целое будет содержать символьную строку
Внутренние таблицы
В отличие от таблиц базы данных, которые существуют независимо от обращается пользова- тель к ним или нет, внутренние таблицы существуют только во время выполнения программы. Они
часто используются в качестве "моментальных снимков" таблиц базы данных или контейнеров для вре-
менного хранения данных в программе. Внутренние таблицы могут содержать любое число строк (или элементов) одинакового типа. При этом нет необходимости заранее вычислять, какое число строк будет записано в таблицу во время выполнения программы. Не вдаваясь в такие детали, как распределение
памяти, или в процедуры "уборки мусора", сконцентрируйте свое внимание на основной задаче — раз- работке бизнес-приложения.
Внутренние таблицы определяются с помощью дополнительного ключевого слова occurs (количество
экземпляров), за которым следует число, определяющее верхний предел числа строк в таблице. Оно назы- вается параметром числа строк — Occurs Parameter. Например, если необходимо собрать информацию о
многих клиентах, можно определить внутреннюю таблицу, каждая строка которой имеет тот же тип, что и заданная перед этим структура customer. Предположим, максимальное число клиентов — 100:
data all_customers like customer occurs
В этой строке программы оператор data определяет внутреннюю таблицу all_customers, каждый эле- мент которой имеет структуру записи customer. В начальный момент выполнения программы система
резервирует память для таблицы, содержащей 100 элементов.

Локальные данные программы 43
Параметр числа строк (Occurs Parameter) влияет исключительно на производительность и
не накладывает никаких ограничений на максимальный размер внутренней таблицы.
АВАР/4 автоматически выделяет новую область памяти при добавлении строк к таблице. В принципе,
внутренняя таблица может содержать любое число строк и разработчик не должен заботиться о выделении памяти.
В приведенном примере каждая следующая строка внутренней таблицы будет того же типа, что и запись таблицы customer. Как и для записи, тип строки внутренней таблицы может быть задан с по- мощью ссылки на элементарный или неэлементарный тип. В следующем примере определяется неэле- ментарный тип begin of end of personal_data.
Этот тип, как показано в следующем примере программной строки, можно использовать для опре- деления внутренней таблицы people, каждая строка которой имеет тот же тип:
data people type personal_data occurs
Многие операции с таблицами (такие, как добавление новой строки) требуют дополнительной запи- си для размещения новой информации. Используя дополнительные ключевые слова header line (заго- ловок строки) в операторе определения data, при построении таблицы можно добавлять к ней объект данных того же типа. Этот объект header line называется строкой заголовка и используется по умолча- нию как запись для хранения текущей, добавляемой к таблице, записи. Если таблица не имеет строки заголовка, необходимо предусмотреть отдельную запись для хранения содержимого текущей строки.
Об операциях с внутренней таблицей см. главу 12.
Внутренние таблицы особенно удобны для временных копий таблиц базы данных или их частей.
Можно комбинировать содержимое различных таблиц базы данных в одной внутренней таблице, по- строив объект temporary view (временное представление). Внутренние таблицы часто используются и для объединения объектов во время выполнения программы (например, для структур типа "дерево" или связанных списков), так как их размер не ограничен.
О п р е д е л е н и е с о с т а в н ы х н е э л е м е н т а р н ы х
типов и о б ъ е к т о в д а н н ы х
Структура синтаксиса определения типов и объектов данных в АВАР/4 очень простая:
Поля и типы могут иметь ссылки на элементарные типы (например, на тип с) или на объекты
Dictionary.
2. Записи (или структуры) определяются с помощью ключевых слов begin of/end of.
3. Внутренние таблицы определяются посредством ключевого слова occurs.
Разработчик может начинать с элементарных типов и полей, а затем, применяя в любом порядке опи- санные выше правила, строить вложенные структуры записей и таблиц, т.е. структуры, содержащие другие структуры или внутренние таблицы, которые, в свою очередь, содержат внутренние таблицы, и т.д. Напри- мер, запись с персональными данными (personal_data) может включать составную запись — компоненту с именем address, которая строится из полей city и street:
types: begin of address,
,
end of begin of address type end of data receiver type

44 Глава 4
В этом примере структура person является вложенной. В дальнейшем можно использовать отдельные компоненты структуры:
'
,
— 'Big City' .
receiver-address-street — 'Main S t r e e t ' .
Работать с вложенными таблицами в программе очень удобно. Предположим, вам нужно построить список, где у каждого человека (person) несколько номеров телефонов и факсов. Для этого определите соответствующие типы таблиц и объедините их:
types : begin of
type
type number (10) type n,
end of
begin of
phone type
occurs
type
s occurs
end of
data employees type employee occurs
В этом фрагменте программы сначала определена запись типа с тремя компо- нентами, каждый из которых является полем. Вторая запись типа employee также имеет три компонен- та — поле и две внутренние таблицы. После этого оператор data определяет вложенную внутреннюю таблицу employees со строкой типа employee. А каждая строка внутренней таблицы employees содержит одно поле и две внутренние таблицы.
Область определения данных
После определения объектов данных в операторе data их можно использовать в любой программе.
Обычно определение данных размещается в начале программы; большие программы часто имеют спе- циальный файл типа Include, содержащий список с определениями данных.
Данные программы доступны также в каждой подпрограмме, и их разрешено переопределять в под- программе (см. главу 10). Локальные объекты данных в подпрограмме являются приоритетными по сравнению с глобальными переменными, имеющими идентичные имена. Например, при наличии кального объекта данных с именем abc и глобального с именем abc подпрограмма будет использовать локальный, а не глобальный объект.
Переменные программы (т.е. все объекты данных, объявленные в программе с помощью оператора data) для других программ недоступны. Если эти переменные необходимо использовать в системе много- кратно, добавьте их в тот файл Include, который содержит определения данных других программ. Од- нако гораздо более широкие возможности (с точки зрения многократного использования переменных)
открываются при определении их как глобальных переменных в словаре Dictionary, автоматически до- ступном для всех программ АВАР/4.
О Dictionary и определенных в нем структурах см. главу 5.
Уровней "видимости" (старшинства) объектов данных три:
Глобальные переменные словаря Dictionary.
2. Переменные программы, являющиеся локальными по отношению к системе и глобальными по отношению к самой программе.
3. Локальные переменные подпрограммы.
Переопределение переменной на более низком уровне всегда имеет приоритет над определением переменной с таким же именем, сделанным на более высоком уровне.
Использование системных полей
поддерживает несколько системных полей, доступных любой программе, написанной на этом языке. Системные поля принадлежат к структуре Dictionary с именем sy и содержат общую

Локальные данные программы 45
о состоянии системы и объектах программы в данный момент времени. Например, в поле sy- содержится текущая дата. Значения многих системных полей устанавливаются во время выпол- нения программы после определенных операций. Так, при выполнении цикла в поле sy-tabix задается значение индекса, равное текущему значению строки внутренней таблицы (о внутренних таблицах см.
главу 12).
Работая с редактором Editor, используйте функцию оперативной справки Help для структуры чтобы получить более подробную информацию обо всех системных полях.
Список наиболее важных системных полей приведен в приложении Е.
Резюме
• Объекты данных определяются ключевым словом data.
• Неэлементарные типы данных можно задавать с помощью ключевого слова type.
• Константы (постоянные величины) объявляются ключевыми словами constants.
• Объекты, входящие в словарь Dictionary и определяемые пользователем, могут иметь взаимные ссылки, реализуемые посредством ключевых слов like или type.
• Запись (record) вводится с помощью ключевых слов, ограничивающих содержимое записи:
начало — data begin of, конец — data end of. Записи должны содержать фиксированное число объектов.
• Внутренние таблицы определяются посредством дополнительного ключевого слова occurs, за ко- торым следует числовое поле, называемое Occurs Parameter (параметр счетчика). Эти таблицы могут содержать любое количество строк одного и того же типа.
• Составные объекты данных генерируются из записей и внутренних таблиц.
• Существует три допустимые области определения переменных: глобальные в локальные в программе и локальные в подпрограмме.
В следующей главе рассматриваются правила использования глобальных переменных, входящих в словарь Dictionary языка АВАР/4.
3 65

1   2   3   4   5   6   7   8   9   ...   24


написать администратору сайта