Вы находитесь на странице: 1из 54

Московский государственный университет путей сообщения

(МИИТ)

Кафедра “Автоматизированные системы управления”

М.Г. Борчанинов

ОСНОВЫ ЯЗЫКА АВАР


(часть 1)

Рекомендовано редакционно-издательским советом


университета в качестве методических указаний по дисциплине
"Корпоративные информационные системы"

Для студентов специальностей


"Автоматизированные системы обработки информации и
управления" и "Информационные системы и технологии"

М О С К В А - 2008
УДК 004
Б82

Борчанинов М.Г. Основы языка АВАР. Часть 1: Методические


указания к лабораторным работам по дисциплине "Корпоративные
информационные системы”. — М.: МИИТ, 2008.-54 с.

В методических указаниях представлены сведения о языке


программирования АВАР - внутреннем языке корпоративной
информационной системы SAP R/3 фирмы SAP AG, а также об
инструментальных средствах написания и отладки программ на
этом языке.

© Московский государственный
университет путей сообщения
(МИИТ), 2008
1. Введение............................................................................. 4
2. Основы языка АВАР ..................................................... 5
3. Инструментальные средства.................................. 6
4. Особенности структуры языка АВАР............... 10
5. Базисные выражения................................................. 13
5.1. Синтаксис..................................................................... 13
5.2 Типы данных и объекты.............................................. 14
6. Объекты..........................................................................20
7. Операции с данными.................................................. 25
7.1. Вычислительные операции........................................ 25
7.2. Стандартные функции................................................27
7.3 Преобразование данных.............................................. 28
7.4 Управление выполнением программы...................... 34
7.5. Внутреннее управление в системе............................ 36
8. Порядок выполнения работ ы ................................. 45
9. Рабочее задание............................................................ 47
Лабораторная работа № 1................................................. 47
Лабораторная работа № 2..................................................48
10. Содержание отчета ................................................ 53
11. Литература................................................................. 53

Цель: лабораторные работы предназначены для изучения


синтаксиса и базовых операций АВАР - внутреннего языка
корпоративной информационной системы SAP R/3.
Корпоративная информационная система SAP R/3 фирмы
SAP AG предназначена для автоматизации бизнес-процессов на
средних и крупных предприятиях. Она фактически стала
стандартом информатизации самых крупных корпораций во
всем мире и, в настоящее время, широко используется
крупнейшими российскими предприятиями. Система SAP R/3
обеспечивает выполнение всех рутинных операций по
управлению любыми подразделениями предприятия в их
взаимосвязи. Это позволяет руководству сосредоточиться на
перспективных целях и контроле выполнения стратегических
планов.
В корпоративной информационной системе SAP R/3
заложено большинство возможных процессов управления,
применимых на любом предприятии, в форме готовых
технологических решений. Для создания прикладной системы
настроить эти решения, называемые «лучшими методиками»
для удовлетворения требований конкретного предприятия. Эту
работу выполняют консультанты SAP по функциональностям.
Такой консультант выбирает подходящую деловую практику,
представленную в репозитарии системы, и настраивает ее
параметры в окнах специальных экранов. В результате в
системе инициализируется один из десятков тысяч модулей,
реализующих «лучшие методики» управления. Не настроенные
модули реализуют стандартную обработку в бизнес-процессах
и также участвуют в бизнес-сценариях. Прикладная
корпоративная информационная система состоит из множества
модулей со стандартными и специальными настройками.
Вся система SAP R/3 написана на языке АВАР. Коды всех
модулей и функций, как настроенных, так и стандартных,
доступны разработчику. Обычно они не требуют вмешательства
на уровне ручного программирования. Если необходимость
такого вмешательства все-таки возникает, то от программистов
требуются глубокие знания в объектной структуре языка и
взаимосвязях модулей системы. Кроме того, фирмой
4
поддерживаются только заранее предусмотренные расширения
программного кода, вставляемые в специально подготовленные
места модулей с учетом строгих требований. Эти возможности
не документированы и изучаются разработчиками конкретных
функциональностей непосредственно по кодам настраиваемых
модулей.
Таким образом, знание языка АВАР является
необходимым условием изучения и разработок в системе SAP
R/3 и ее современного варианта - mySAP Business Suite.
Консультанты должны легко читать код на АВАР,
сгенерированный системой, чтобы понимать, к каким
результатам приводят те или иные настройки. Программисты
должны не столько уметь писать, сколько уметь читать код,
чтобы не нанести вред системе своим вмешательством. Чаще
всего, программисты решают задачи «косметического»
характера и никогда не вмешиваются в структуру системы. В
данных лабораторных работах студенты делают первые шаги в
освоении языка АВАР.
2. Основы языка АВАР
В этих методических указаниях рассматриваются
основные элементы, конструкции и структура языка АВАР,
являющиеся частью корпоративной информационной системы
SAP R/3. В понятие языка АВАР включается целый комплекс
средств подготовки, тестирования и хранения программных
разработок. В первую очередь, это АВАР-словарь,
предназначенный для хранения информации о типах,
структурах и объектах, используемых в корпоративной
информационной системе SAP R/3. Информация этого словаря
доступна из всех элементов корпоративной информационной
системы SAP R/3 и используется при организации всех
процессов, в том числе при разработке и тестировании новых
программ. Во-вторых, инструментальные средства АВАР,
поддерживающие действия разработчика на всех стадиях
создания программы. Наконец, это система управления SAP
R/3, обеспечивающая надежность включения новых разработок
в действующую корпоративную информационную систему SAP
R/3. Надежность в данном случае подразумевает проверки:
целостности баз данных, актуальности данных и программных
текстов, непротиворечивости функционирующих программных
элементов системы и вновь подключаемых программ и тому
подобное.
3. Инструментальные средства
Среда разработки системы SAP к R/3 представляет собой
полностью интегрированный набор средств разработки,
функций, языков программирования и словаря данных,
объединенных вместе под названием АВАР-инструментальные
средства»
АВАР-инструментальные средства являются ядром всех
бизнес-приложений системы SAP R/3 и основой для создания
дополнительных функций и приложений.
АВАР -инструментальные средства представляют собой
такую среду разработки, которая охватывает все стадии
создания проекта.
Необходимо отметить, что подавляющее большинство
элементов программного обеспечения системы SAP R/3
написано на языке АВАР. Любой из этих элементов можно
вызвать в редактор АВАР, изучать и проанализировать его
деятельность, установить связь с другими элементами
окружения. Редактор программ на языке АВАР поддерживает
также правила регистрации программ, обеспечивает права
доступа к программам и не позволяет пользователям, не
обладающим соответствующими правами, вмешиваться в текст
зарегистрированных программ.
При выборе в качестве начального шага транзакции SE38,
пользователь в качестве подсказки получает начальный экран.
В начальном экране присутствует единственное окно, и это
окно пусто. Слева находится поясняющая надпись -
«программа». Справа - клавиша «Создать». В это окно следует
ввести имя программы. Предполагается, что пользователь знает
имя нужной ему программы. Если программа создается
впервые, то пользователь должен придумать имя программы. В
соответствии с соглашением об именах, имя пользовательской
программы должно начинаться с буквы z. Если пользователь
попытается создать программу, имя которой начинается с
другой буквы или знака, то получит сообщение об ошибке.

АВАР-редаитор: первый экран

рис 1 Начальный экран транзакции SE38


При выборе в качестве начального шага транзакции SE80,
пользователь получает на начальном экране почти все
богатство возможностей среды разработки. Эта среда позволяет
увидеть не только инструменты, необходимые для написания ,
проверки и отладки программ, но также и все окружение
создаваемой программы. В начальном экране присутствует
меню из клавиш, позволяющее переключиться в разные
разделы среды разработки АВАР Workbench. При выборе
клавиши «Браузер репозитария», появляется возможность
перейти в среду АВАР редактора. Для этого в окне «иерархия
приложений» надо выбрать пункт - программы, а в нижнее
окно ввести имя программы. Дальше работа с редактором мало
отличается от окна АВАР редактора.
Навигатор по объ ектам

рис 2 . Начальный экран транзакции SE80


Выбор пункта «Изменить» делает доступным текст
программы. В текст программы можно вносить исправления и
дополнения.
Выбор пункта «Просмотреть» делает недоступным текст
программы. В текст программы нельзя вносить никаких
изменений, его можно только просматривать.
Выбор пункта «Проверить» приводит к проверке
правильности синтаксиса введенного текста программы.
Ошибки синтаксиса выявляются до активизации программы.
Как правило, сообщение об ошибке выдается с указанием ее
местоположения - номер строки в листинге, и с подсказкой о
способе исправления ошибки.
Если программа уже была активизирована, а
синтаксическая ошибка возникла после внесения исправлений,
то выбор пункта проверить не всегда позволяет обнаружить эту
ошибку, поскольку инструментальные средства продолжают
работать с текстом активизированной программы. Однако, при
попытке активизации программы возникает сообщение об
ошибке. После нажатия на кнопку «Обработать ошибку»
производится переход в раздел проверка синтаксических
ошибок.

А В А Р -р е д а к то р : О т ч е т ZM GB01 П р о с м о тр
» t . i A U u < i ■ » i

gagn B irao< !n rac~.iij7i:


Создать
Изменить
Ш*ЛП , * ,
Просмотреть
Проверить р ч ?ъ*. 1Л* ре»--
Активировать
Выполнить
II*щцт т чткот ip p m ы*г %
*
Скопировать Wfr*J+ '» vume- »
Переименовать " Ь, д, *« *gs радием» *»♦.
Удалить
Журнал использования
Поиск
Другие функции

рис 3. Управление операциями в транзакции SE80


Активация программы - это окончательная ее подготовка
к выполнению. При активации программы ее текст сохраняется,
затем повторно проводится синтаксический анализ. При
обнаружении ошибки появляется заставка с предложением ее
исправления. Если ошибок в тексте программы нет, то можно
переходить к регистрации программы и ее исполнению.
4. Особенности структуры языка АВАР.
Программу, разработанную на АВАР, в отличие от
приложений, созданных на других языках программирования,
можно читать как обычный текст, написанный на английском
языке. Лежащая в основе такого подхода концепция
представляется очень простой: нельзя делать программу
скоплением загадочных формул, понятных только автору и
компилятору, — ее должен суметь прочесть каждый, кто
проявил к ней интерес. Однако русскоязычному пользователю
эта концепция не доставляет особых удобств, зато
неоднозначность стандартных операторов языка создаёт
определенные трудности.
Текст программы на АВАР строится из операторов,
каждый из них заканчивается точкой. Это относится даже к
логическим выражениям, включающим ключевое слово if,
например:
if а > b.
write а.
e ls e ....
Из-за точки, поставленной в конце первой строки, первый
оператор (write) не отличается от последующих, поэтому
операторные скобки (begin...end) в этом случае не нужны.
Оператор начинается с зарезервированного ключевого
слова, за которым следуют дополнительные параметры и
объекты данных. Можно объединять последовательность
операторов, имеющих одинаковую начальную часть (одни и те
же ключевые слова, иногда параметры и объекты данных), в
один оператор, используя символы двоеточия и запятой и
располагая идентичную часть оператора перед символом
двоеточия. Например, выражение:
а = а + Ь.
а = а + с.
а = а + d.
можно записать следующим образом:
а = а +: b, с, d.
Кроме прямолинейной структуры текста самой
программы, язык АВАР обеспечивает еще и набор
элементарных типов (таких, как символьный, целый и дата) и
поддерживает две концепции конструирования (с помощью
записей и внутренних таблиц), которые помогают строить
сложные типы и объекты данных. Можно также создавать
неэлементарные типы и структуры данных, хранить их
определения в АВАР-словаре, чтобы впоследствии
использовать эти определения во всех компонентах системы. В
результате удается избежать многократного создания объектов
данных в программах пользователя, что экономит время и
усилия.
В языке широко используются ссылки, указывающие на
то, что для нового объекта данных следует применить
определение уже существующего объекта, т.е. оба объекта
будут использовать одну и ту же информацию. Единообразие
объектов обеспечивает система управления SAP R/3. Самой
системе управления такие ссылки позволяют построить
процедуры, существенно ускоряющие обмен данными между
объектами. Любые изменения определения исходного объекта
данных будут отражаться на всех объектах, имеющих ссылки на
исходный объект. Ссылка на объект данных задается с
помощью дополнительного ключевого слова like. В следующем
примере поле new паше наследует всю информацию от поля
oldname:
data new_name like old_name.
В АВАР можно конструировать не только простые типы и
объекты данных, но и сложные объекты. Это обеспечивают
ключевые слова records (записи) и internal tables (внутренние
таблицы). Записи содержат фиксированное число объектов
данных, внутренняя таблица — набор произвольного числа
записей. АВАР помогает также определять вложенные записи и
внутренние таблицы.
Запись представляет собой структуру, включающую
несколько полей, а строки внутренней таблицы могут иметь
точно такую же структуру. В этом случае для определения
внутренней таблицы добавляется ключевое слово occurs
(количество строк) и после него записывается число, которое
оценкой количества строк в таблице. Оно влияет только на
производительность, не ограничивая максимального размера
внутренней таблицы. Во время работы программы, если число
строк в таблице превосходит occurs-параметр, автоматически
будет введена дополнительная память.
Для большинства операций с таблицами нужна буферная
область памяти, в которую заносится текущая строка таблицы.
Определяя таблицу с головной строкой (со строкой заголовка),
в дополнение к самой таблице можно построить объект данных
с такой же структурой, что и строка таблицы.
Интегрированный словарь АВАР содержит определения
типов и структуры данных, которые можно использовать для
всех компонентов системы. В частности, единообразие таблиц
достигается тем, что во всех программах, на всех экранах и в
таблицах базы данных присутствуют структуры, определение
которых содержится в АВАР-словаре. Добавляя ключевое слово
like, как и в приведенном выше примере, можно ссылаться на
таблицу АВАР-словаря и ее поля.
В средства языка АВАР интегрировано подмножество
операторов SQL (так называемый открытый SQL — Open
SQL). Программы АВАР, использующие Open SQL, получают
доступ к информации всех баз данных, поддерживаемых
системой R/3, независимо от их физической реализации и
особенностей управления внесенных фирмой-разработчиком.
Операторы Open SQL обеспечивают одновременное
использование внутренних таблиц и таблиц базы данных. Во
время выполнения программы содержимое таблиц базы данных
может копироваться во внутренние таблицы, поэтому
внутренние таблицы можно рассматривать как "моментальные
снимки” таблиц базы данных. Например, чтобы построить
список со всеми элементами таблицы базы данных, можно
считать содержимое таблицы базы во внутреннюю таблицу,
которая имеет аналогичную структуру, после чего вывести на
экран каждую строку.
В языке АВАР предусмотрено несколько команд для
изменения таблиц базы данных (insert, update, modify и delete),
позволяющих изменять как отдельный элемент, так и набор
элементов. Таблицы реляционной базы всегда имеют "плоскую"
структуру (не допускают вложенных таблиц). Локальные
объекты программы могут быть глубоко структурированными,
т.е. содержат вложенные структуры или даже внутренние
таблицы. Для хранения содержимого таких глубоко
структурированных объектов в плоских таблицах следует
формировать объекты так, чтобы они соответствовали плоской
структуре таблиц базы.
АВАР предоставляет доступ к отдельной строке: в
операторе read table есть параметры, которые задают индекс
необходимой строки или соответствующий логический ключ.
Процесс доступа к таблице существенно ускоряется, если
таблица отсортирована. Это можно сделать, задав двоичный
метод поиска при извлечении определенной строки.
Поддерживается вывод на экран промежуточных сумм,
заголовков и другой информации по группам элементов
внутренней таблицы. Для этого используются программные
блоки, заключенные в "скобки" операторов at/endat. Такие
блоки обрабатываются всякий раз при изменении содержимого
некоторого ключевого поля.
5. Базисные выражения.
5.1. Синтаксис.
В тексте программы могут использоваться как прописные,
т а к и строчные буквы. Язык не делает различий между ними. В
любом месте, где использован пробел, может стоять любое
число пробелов и знаки Ц - перевод строки. Таким образом,
выражение одинаково успешно может занимать одну строку
или несколько строк. Строки, взятые в одиночные кавычки, -
литералы, являются исключением из этого правила. Они
выводятся на печать так, как они написаны.
Любое выражение должно начинаться с ключевого слова.
Исключение делается для некоторых строк - алгебраических
выражений. Строки комментариев начинаются со знака * -
звездочка и заканчиваются этим знаком. При желании написать
комментарий в строке после некоторого выражения, их следует
разделить двойной кавычкой - “. Например:
***************************************
* Declarations *
****************************************

data: pari type I, “ Переменная типа integer


par2 (5) type С. “ Переменная типа строка 5
знаков.
Если нужно указать имя поля в структуре или таблице, то
используется разделитель тире. Например: stract-name, где
stract - имя структуры или таблицы, a name - имя поля.
Наконец, можно объединять повторяющиеся части
выражений, как это было описано в предыдущем разделе.
5.2 Типы данных и объекты.
Классификация типов и объектов во многом совпадает.
Каждое поле в таблицах и структурах имеет имя и тип данных.
В большинстве языков программирования характеристики поля
интерпретируются как тип данных. В АВАР поля называются
объектами данных, и представляют собой экземпляр
абстрактного типа данных. Это означает, что имя поля
одновременно является объектом и типом данных.
Описание типа данных может базироваться на
элементарных типах или быть копией структуры, а определение
типа данных может быть локальным в модуле или глобальным
в АВАР-словаре. Объект отличается от типа тем, что для него
всегда существуют физические параметры, такие как длина
поля и число десятичных знаков. Объект доопределяется
полностью в момент вызова соответствующей программы.
Главное отличие объектов от типов в том, что объекты
занимают место в памяти, а типы - нет.
Типы данных имеют следующую иерархическую
классификацию.
Типы данных
\- Элементарные типы
| |- фиксированной длины
I I be
I I И
I I Ю
I I И
I I и
I I 1-р
I I hi
I I LF
| L переменной длины
I h STR IN G
I L X S TR IN G
I
|- Сложные типы
I |- структуры
I L таблицы
L Ссылочные типы
h ссылки на данные
L ссылки на объект
h ссылки на класс
L ссылки на интерфейс

Среди элементарных типов данных выделяются:


Знаковые типы
С - строка символов;
N - строка цифр;
D - дата;
T - время;
Числовые типы
I - целое число;
F - число с плавающей точкой;
Р - «упакованное число»;
Шестнадцатеричный тип
X - байтовое поле.
Не все из перечисленных типов имеют жестко
закрепленную длину, но длина поля окончательно задается при
спецификации, поэтому они называются типами с постоянной
длиной.
Типы с переменной длиной
Для следующих типов длина поля может изменяться в
широких пределах, и окончательно определяется при вводе
данных. Они называются типами с переменной длиной.
STRING - символьная строка;
XSTRING - байтовая строка.
Ссылочные типы
Ссылочные типы представляют собой ссылки на
известные объекты или типы. Последние могут быть как
объектами АВАР-словаря, так и локально определенными
типами.
Сложные типы .
Сложные типы представлены структурами и внутренними
таблицами. Структуры бывают плоскими и глубоко
структурированными. Плоские структуры составлены из
элементарных типов, а глубоко структурированные структуры
из других структур.
Внутренние таблицы отличаются от структур тем, что
состоят из некоторого количества строк. Все строки имеют
одинаковую структуру. Кроме того, многие внутренние
таблицы имеют дополнительный буфер, называемый головной
строкой, имеющий структуру, совпадающую со структурой
строк таблицы.
5.3. Элементарные типы.
:
! | Длина поля | Допустимые |
Начальное
j | по значения длины j Определение |
i данных 1 ! значение
i | умолчанию поля j |
Числовые типы
I | 4 0 | Целое |
4 !
; с плавающей j
F 8 8 0
точкой
Р 8 1-16 0 I Упакованное j
Знаковые типы
• 1
с 1 j 1 -6 5 5 3 5 Знаковое
D 8 8 ’0000000’ дата
о
о
о
N 1 j 1 -6 5 5 3 5 цифровое
т 6 6 •00000’ время
Шестнадцатиричный тип
х 1 j 1 -6 5 5 3 5 Х’0 0’ байтовое

Целые числа определены в диапазоне от -231 до 231-1.


Числа с плавающей точкой от 1*10'307 до 1*Ю308 в сторону
положительных и отрицательных чисел. Упакованные числа
задаются строкой с заданным числом знаков, а также числом
десятичных знаков. При этом в каждый байт упаковывается по
два знака. Максимальное количество десятичных знаков - 14.
Упакованные числа обеспечивают самую высокую точность
вычислений, поскольку они не подвержены потерям, связанным
с ограничением ни по величине, как у целых чисел, ни по числу
значащих цифр мантиссы, как у чисел с плавающей точкой. Как
правило, упакованные числа задаются с двумя десятичными
знаками и используются для финансовых вычислений.
5.4. Определение типов данных и объектов в
программах.
Для определения типов используется ключевое слово
types. Типы могут определяться на базе других типов или на
базе объектов. В первом случае используется ключевое слово
type, во втором - like. Основой для новых типов могут служить
элементарные типы или уже готовые сложные типы.
Типы задаются следующим выражением:
types <имя типа> [длина] [type <имя >|like <имя объекта> ]
[decimals <дес>]
В этом выражении <имя типа> должно быть не длиннее
30 символов. Оно может содержать буквы, цифры и служебный
символ _ . Имя типа не может начинаться с цифры и содержать
служебные символы + .,-:о (). Нельзя также использовать в
качестве имени типа стандартные имена элементарных типов:
С, N, Р, I, F и так далее.
Для некоторых элементарных типов может задаваться
длина в символах. Если надо задать количество символов после
десятичной точки, то используется ключевое слово decimals и
число <дес>, отражающее их количество. Между ключевыми
словами, именами и числами ставятся пробелы.
В качестве имени после ключевого слова type должны
использоваться имена элементарных типов: С, N, Р, I, F, Т, X,
STRING и XSTRING. Можно также использовать элементарные
типы, уже определенных в АВАР-словаре или локально в
программе.
В качестве имени объекта после ключевого слова like
может использоваться имя любого объекта элементарного типа
из АВАР-словаря или локальной программы.
Можно привести следующие примеры:
types znak (1) type С. “ обозначает тип текстовой
строки с одним знаком.
types namber type Р decimals 2 . “ обозначает тип
действительного числа с двумя знаками после точки.
types company like spfli-carrid. “ обозначает тип
переменной, совпадающей по типу с полем carrid
таблицы spfli из АВАР-словаря.
Для определения объектов (данных) используется
ключевое слово data. В остальном выражения для задания
типов и данных практически не отличаются.
Можно привести следующие примеры:
data znak (1) type С. “ обозначает текстовую строку с
одним знаком.
data namber type Р decimals 2 . “ обозначает
действительное число с двумя знаками после точки,
data company like spfli-carrid. “ обозначает
переменную, совпадающую по типу с полем carrid
таблицы spfli из АВАР-словаря.
5.5 Сложные типы.
Сложные типы представлены структурами и таблицами.
Описания таблиц будут рассмотрены в специальном разделе.
Структуры или записи состоят из полей. Поля являются
основными объектами данных в языке АВАР, поскольку
образуют основные хранилища информации в системе -
таблицы баз данных. Поля в структурах могут быть
представлены элементарными типами или другими
структурами. Запись в последнем случае называется глубоко
структурированной.
Описание записи (структуры) начинается ключевыми
словами begin of, а заканчивается end of. Например:
types: begin of <имя структуры^
описания типов полей,
end of <имя структуры>.
Для простых структур это может выглядеть так:
types: begin of structl,
polel type I,
pole2 type P decimal 2,
end of struct"!.
Для глубоко структурированных записей описание может
выглядеть так:
types: begin of pole3,
pole"! type I,
pole2 (30) type C,
end of pole3.

types: begin of struct2,


pole"! type I,
pole2 type P decimal 2,
pole3 type poie3,
end of struct2.
При обращении к элементу простой структуры
используется разделитель - тире. При обращении к элементу
сложной структуры этот разделитель может использоваться
многократно. Например:
types namber like struct"! - pole2.
или
types: nmb1 like struct2- pole2,
string like struct2- pole3- pole2.
6. Объекты.
Под объектами данных в языке АВАР понимаются
литералы, переменные, константы, структуры, внутренние
таблицы, заранее определенные объекты, текстовые символы,
рабочие области интерфейсов и динамические объекты.
6.1. Литералы.
Эти объекты не требуют специального описания в разделе
деклараций. Их описанием является строка с содержанием
непосредственно в тексте программы. Литералы относятся к
объектам без имени. Прочие технические атрибуты (тип
данных, длина поля, число десятичных знаков) у литералов
присутствуют, как и у других объектов.
Литералы подразделяются на текстовые и цифровые.
Ограничителями для текстовых литералов являются одиночные
кавычки, а для цифровых - пробелы. Выглядят они следующим
образом: ‘Текстовый литерал’ и 100.
Примеры использования цифровых литералов:
write 2486.
namber = 1000.
data namber tape I value 1000.
Таким образом, можно описать целочисленные литералы.
Они могут содержать до 15 цифровых знаков и знак плюс или
минус. Если разработчику надо завести другие типы цифровых
литералов, то следует воспользоваться текстовыми литералами,
которые затем будут преобразованы в цифровые F или Р типов.
Примеры таких литералов:
‘1234512345123451234512345*
43,141592’
‘-0,5467’
‘-345Е+5’
‘1,6789е-6’
Текстовые литералы представляют собой
последовательность букв, цифр и знаков препинания,
ограниченную одиночными кавычками. Длина литерала не
должна превышать 255 знаков. Только в литералах язык АВАР
делает различия между прописными и строчными буквами, а
также учитывает число пробелов между символами. Примеры
таких литералов:
‘Текстовый литерал’
‘Иван Петрович Иванов’
‘095 Москва’
6.2. Переменные.
В языке АВАР предусмотрено статическое и
динамическое определение переменных. Пока будем
рассматривать только статические определения. Для простых
определений переменных используется ключевое слово data.
Выражение, начинающееся с ключевого слова data, имеет
такую же структуру, что и описание типа, начинающееся
ключевым словом types. Для определения типа переменной
могут использоваться ключевые слова type или like. В первом
случае, для указания типа переменной используется описание
типа в строке types. Во втором - другая переменная или поле
таблицы.
Для задания начального значения переменной может
использоваться ключевое слово value. Имя переменной должно
быть не длиннее 30 символов. Может включать цифры и
служебные символы, за исключением знаков +.,:() . Должно
включать хотя бы одну букву и не совпадать ни с одним из
имен заранее определенных переменных (см.далее).
В именах переменных не желательно использовать знак
тире, поскольку оно будет использовано в структурах и
таблицах для выделения элементов. Предпочтительно
использовать имена, отражающие смысл переменной, чтобы не
уточнять его в комментарии. При выборе названия переменной,
состоящего из нескольких слов, следует разделять их знаками
подчеркивания. Первым знаком имени переменной должна
быть буква.
При задании объектов- структур обычно используется
предварительное описание типа. Например, для описанных в
предыдущем разделе структур, задание объектов сводится к
следующему:
data my_structur type structl.
или
data my_tema type struct2.
Внутренняя таблица отличается от структуры тем, что
может иметь несколько строк одинаковой структуры. Указание
на это дает ключевое слово occurs. Например:
data: begin of tablet occurs 100,
polei type I,
pole2 type P decimal 2,
end of tablet.
Ключевое слово static используется в процедурах и
функциях. Это определение позволяет переменным и таблицам
оставаться в оперативной памяти после окончания выполнения
процедуры и функции. Это будет описано позднее в разделе
модульной структуры программ.
При задании переменной можно сразу определять ее
начальное значение. Для этого используется ключевое слово
value.
6.3. Константы.
Синтаксис выражений, определяющих константы,
полностью совпадает с выражениями для переменных.
Различаются только ключевые слова. При определении
констант используется ключевое слово constants и обязательно
используется ключевое слово value,
constants znak(1) type C value 'a’,
или
constants num type P decimals 2 value 314.
В последнем случае определена константа 3,14. Можно
задать структуру как константу:
constantss: begin of str,
polet type I value 314,
pole2 type P decimal 2 value 314,
end of str.
В этом случае str-pole1 = 314, a str-pole2 = 3,14.
Главное отличие констант от переменных в том, что
переменные в процессе выполнения программы могут изменять
свое значение, а константы нет.
6.4. Заранее определенные объекты.
При выполнении программ эти объекты всегда
присутствуют в оперативной памяти, однако они не обязаны
показывать свои значения ни программисту, ни пользователю.
Содержащаяся в них информация часто бывает нужна для
управления и принятия решений.
Особое место занимает объект space. Это константа типа
С и длиной в один байт. Содержит знак пробела, доступна в
любом месте и не может быть изменена.
Имеется так же большая группа системных переменных
принадлежащих структуре sy, хранящейся в АВАР-словаре. Эта
структура содержит более 200 элементов, но некоторые из них
используются чаще других:
sy-subrc - переменная состояния выполнения выражения,
если программе удалось выполнить последнюю
операцию, sy-subrc получает значение ноль,
sy-index - переменная цикла, в ней хранится номер
текущего шага цикла.
sy-tabix - переменная состояния таблицы, в ней хранится
номер активной строки таблицы,
sy-uname - переменная содержит имя (logon)
пользователя.
sy-tcode - выполняемая транзакция,
sy-repid - выполняемая АВАР программа.
Значения этих переменные могут изменяться под
воздействием обстоятельств выполнения программы, но
пользователю не рекомендуется вмешиваться в значения этих
переменных, так как это может привести к потере важной для
выполнения программы информации.
7. Операции с данными.
7.1. Вычислительные операции.
Вычислительные операции, как привило, должны
начинаться с ключевого слова compute. В этом случае они
соответствуют концепции языка и выглядят:
compute а = b + с.
или
compute а = b * с.
Однако, это ключевое слово часто опускают. Это
единственное ключевое слово в языке, которое можно опустить.
Выражения тогда принимают более привычный вид:
а = b + с.
а = b * с.
Есть в языке АВАР и другая форма записи выражения для
сложения и умножения:
add с to b. и multiply b by с.
Однако, рассмотренные выражения не эквивалентны. В
первом случае результат был записан в переменную а. Во
втором случае результат отправляется в переменную Ь. Так что
первая форма более универсальна, зато вторая ближе к
английскому языку.
Полностью эквивалентны только выражения
а = Ь.
move b to а.
Полный список вычислительных выражений приведен в
следующей таблице:
Математическая Альтернативная Операция
форма форма
a=b move b to a. присвоение
a=a+c add c to a сложение
a = a -c subtract c from a вычитание
a=a *c multiply a by c умножение
a = a /c divide a by c деление
a = b div c нет целочисленное
деление
a = b mod c нет остаток от
целочисленного
деления
a = b ** c нет возведение в
степень
Порядок операций определяется следующей иерархией:
операции в скобках;
вычисление функций;
возведение в степень;
деление и умножение;
сложение и вычитание.
Для равно уровневых операций, порядок выполнения
слева направо. За исключением операций возведения в степень.
Порядок их вычисления справа налево, то есть сначала
вычисление показателя степени, а потом возведение в степень.
Пример операций деления:
data: rez type Р decimals 4,
n type F value 7.5,
m type I value 2.
rez = n/m.
write rez.
rez = n div m.
write rez.
rez = n mod m.
write rez.
В результате будут отпечатаны значения:
3.2500
3.000
1.500
7.2. Стандартные функции.
Функции для всех типов численных переменных.
Язык АВАР ориентирован на работу с коммерческими
приложениями, поэтому в большей степени учитывает
возможности преобразования текстов и элементарных
арифметических операций. Данные, как правило, извлекаются
из таблиц базы данных, обрабатываются и отправляются в базы
данных. Иногда требуются для вычислений на уровне языка
таких математических функций, как sin или cos. В язык АВАР
включен набор функций, которого вполне достаточно для
большинства бизнес-приложений.
abs - абсолютное значение числа;
sign - знак числа (для отрицательных -1 , для
положительных +1, для нуля - 0);
ceil - наименьшее целое число не меньше аргумента;
floor - наибольшее целое число не больше аргумента
trunk - целая часть действительного числа;
frac - дробная часть действительного числа.
Применение функций приводит к следующим
результатам:
аргумент -5.55 5.55
abs 5.55 5.55
sign -1 +1
ceil -5 6
floor -6 5
trunk -5 5
frac -0.55 0.55
Аргумент этих функций не обязательно должен иметь
числовой тип, но должен преобразовываться к числовому типу.
На разновидности числовых типов здесь не накладывается
ограничений.
Функции для численных переменных плавающей точкой.
cos, sin, tan, acos, asin, atan - тригонометрические
функции;
cosh, sinh, tanh - гиперболические функции;
exp - экспоненциальная функция по основанию е;
log - логарифм по основанию е
log 10 - логарифм по основанию 10
sqrt - корень квадратный
7.3 Преобразование данных.
Если данные в исходном и целевом полях имеют разный
тип и размер данных, то АВАР всегда преобразует содержимое
исходного поля к формату целевого. При этом происходит
преобразование данных как между типами, так и по количеству
знаков в типах, например:
data: а(3) type с, b(5) type n, с type i.
а = ‘010’.
Ь = ‘10000’.
с = а + Ь.
write с.
В результате выполнения фрагмента будет отпечатано
число 10010. Сначала переменные а и b преобразованы к типу i,
а затем просуммированы. Аналогичный результат получится
при а = J 1 0 ’ и даже при а = ‘10J, где знаком _ обозначены
пробелы.
Переменные типа времени и даты преобразуются с учетом
формата числа и смысла действия. Так при увеличении даты на
10 дней происходит следующее.
data: d a te jl type d, date_2 type d.
d a te jl = *19991229’.
date_2 = d a te jl + 10.
В результате в date_2 получится дата 8 января 2000 года,
код внутреннего хранения для которого - ‘20000108’. При
вычислениях сначала строчная запись будет преобразована в
дату, а затем по правилам преобразования дат, к дате 29 декабря
1999 года добавлено 10 дней.
Различные типы и размеры данных, которые
поддерживает АВАР можно комбинировать, используя
команды копирования и вычислений. Допустимы
преобразований, когда цифры внутри символьного поля могут
рассматриваться как число, исходное поле может усекаться,
числа преобразовываться в дату и наоборот. Ошибка
выполнения возникает только в том случае, когда
преобразование приводит к потере информации. Так
переполнение числовой переменной при вычислениях вызывает
прерывание выполнения и вывод на экран сообщения о
системной ошибке.
Если при преобразовании возникает необходимость
перейти от меньшей длины поля к большей, то числовые и
текстовые переменные преобразуются по разному. Числовые
поля дополняются нолями слева, а текстовые - пробелами
справа. Усекание полей тоже происходит различно: текстовые
поля усекаются справа, а у числовых полей отбрасываются
незначащие ноли слева. Если отбрасывания нулей оказывается
недостаточно, то возникает ошибка переполнения.
Допустим надо передать текст в две переменные разной
длины.
data: а(6) type с, b(16) type с.
move Сообщение’: to a, to b.
В результате в а появится текст ‘сообще’, а в b -
сообщение и 7 пробелов справа. Очевидно, что в первом случае
строка источника усекается до размера поля, в во втором —
дополняется пробелами в конце тоже до указанного размера
поля. Но если для передачи текста выбрать другой стиль
написания формулы, то может получиться совсем другой
результат.
Ь = а = ‘сообщение’.
В результате в а появится текст ‘сообще’, а в b - сообще и
10 пробелов справа, поскольку в переменную b будет передано
содержимое переменной а.
Символьные строки можно объединять с помощью
команды concatenate:
data: one(12), two(2), three(15), all(64).
one = 'Соед'.
two = 'ин'.
three = 'ение'.
concatenate one two three into all.
После выполнения этого блока в переменной all будет
записано ‘Соединение’. Если длина объединенной строки
больше, чем длина переменной, в которую она записывается, то
возвращается не равное нулю значение системной переменной
sy-subrc. Если предполагается, что в строке будут разделители,
то требуется уточнение separated by.
data: one(12), two(12), three(12), all(64).
one = 'Иванов',
two = 'Петров',
three = 'Сидоров'.
concatenate one two three into all separated b y ';'.
Содержимое all в этом примере будет 'Иванов; Петров;
Сидоров'. Возможны и другие разделители, например слеш,
минус, или даже последовательность символов, а если
сообщения должны отделяться пробелом, то употребляется
конструкция separated by space.
Обратная операция разделения символьной строки
осуществляется для произвольно выбранного разделителя:
data: one(12), two(12), three(12), all(64).
all = 'Иванов,Петров,Сидоров',
split all at 7 into one two three.
Если одно из полей, в которые записывается результат,
имеет недостаточную длину, все компоненты усекаются и
переменная sy-subrc получает ненулевое значение. Надо точно
рассчитывать число целевых полей, чтобы оно не превышало
число компонентов, иначе часть информации будет потеряна.
Язык АВАР попытается записать в последнее поле всю
оставшуюся часть строки. Если число компонентов до
сепарации известно не точно, то для записи результатов лучше
использовать внутреннюю таблицу, которая может содержать
любое число строк:
Операции сдвига.
Символьная строка сдвигается на один символ влево
командой shift, а если надо сдвинуть строку на п символов, то
добавляется блок by n places. В конце конструкции могут
стоять дополнения: right, circular, left (вправо, по кругу, влево).
При дополнении right строка сдвигается вправо, а при circular
знаки, удаленные слева, появляются в правой части строки,
data: one(12)ytwo(12), three(12).
one = 'Иванов',
two = 'Петров',
three = 'Сидоров',
shift one.
shift two by 3 places.
shift three by 2 places circular.
В результате этих операций в поле one появится
символьная строка 'ванов9, в поле two - 'ров9, а в поле three —
'доров_____Си1(знаками _ обозначены пробелы).
У разработчика есть возможность не указывать число
байтов, на которое предполагается сдвинуть строку. Можно
использовать поисковый вариант команды shift,
data: dtl(2), all(21), test(21).
all = 'Иванов Петров Сидоров',
dtl = 'П е\
test = all.
shift test up to dtl.
write test,
test = all.
shift test up to dtl circular,
write test.
В результате этих операций будет отпечатан текст Петров
Сидоров, а затем 'Петров Сидоров Иванов 9 с пробелом в
конце.
Замена символов в строке.
Команда replace позволяет замещать первый
встретившийся символ (или подстроку) внутри строки на
другой символ (или подстроку),
all = 'Петров и Сидоров',
replace 'и* with 'или' into all.
В результате этих операций в поле all появится
символьная строка 'Петров или Сидоров9. Буква и в слове
Сидоров заменена не будет. Команда translate обеспечивает
замену всех указанных символов в строке на другой символ,
однако символы заменяются только поодиночке, например:

all = 'Иванов,Петров,Сидоров;',
translate all using .
В результате операции в поле all появится символьная
строка 'Иванов&Петров&Сидоров.'
Правило замены выглядит как последовательность пар, где
первый символ всегда заменяется на второй. В данном случае
все символы V заменены на а символ на V.
Команда translate может использоваться с дополнениями
to upper case и to lower case. Это беспечивает замену всех
символов в строке на символы верхнего или нижнего регистров
соответственно.
a ll= 'Иванов, Петров, Сидоров',
translate all to upper case.
В результате операции в поле all появится символьная
строка 'ИВАНОВ, ПЕТРОВ, СИДОРОВ’,
all = 'Иванов, Петров, Сидоров',
translate all to lower case.
В результате операции в поле all появится символьная
строка 'иванов, петров, сидоров'.
Для определения длины строки в языке имеется команда
strlen(str)^e str - имя переменной, содержащей строку. Длина
строки может быть уменьшена за счет лишних (или всех)
пробелов. Команда condense удаляет из строки повторяющиеся
пробелы, а с дополнением no-gaps - все пробелы. Рассмотрим
следующий блок команд:
data: long type i, all(64), test(64).
all - 'Иванов Петров Сидоров',
test = all.
long = strlen(test).
Write:/ test, long,
test = all.
Condense test,
long = strlen(test).
Write:/ test, long,
test = all.
Condense test no-gaps,
long = strlen(test).
Write:/ test, long.
В результате этих операций будет отпечатан текст Иванов
Петров Сидоров 32, затем Иванов Петров Сидоров 21 ,
наконец ИвановПетровСидоров 19 - цифра после строки
означает число символов в строке. В первой строке между
фамилиями стоит 13 пробелов суммарно, во второй строке по
одному пробелу между фамилиями, а в третьей строке фамилии
записаны вообще без пробелов.
Битовые операции.
В языке АВАР предусмотрены команды для работы с
битовыми переменными, которые могут быть использованы в
логическом анализе.
bit-not - отрицание,
bit-and - логическое и,
bit-or - логическое или,
bit-xor - исключительное или.
Применение команд дает следующие результаты:
а ь bit-not а a bit-and b a bit- or b a bit- xor b
о 0 1 0 0 0
0 1 1 0 1 1
1 0 0 0 1 1
1 1 0 1 1 0

7.4 Управление выполнением программы.


Концепция события в АВАР позволяет успешно
разрабатывать диалоговые программы, поскольку система
ориентирована на автоматическую обработку событий.
События инициируются как пользователем, так и системой, они
образуют внешнее управление программой. АВАР/4 относится
к языкам, управляемым событиями и этот аппарат оказывается
мощным и гибким инструментом.
Здесь используются такие управляющие структуры, как
if/else/endif и do/enddo. Алгоритм может посещать различные
ветви программы, переключая их в зависимости от результатов
проверки условий внутри самой программы. Это принято
называть внутренним управлением. Диалоговые стиль
управления программой обычно порождает большое число
внешних событий. Таким образом, внешнее управление
представлено событиями, описывающими основные шаги
управления, в то время как внутреннее управление
обеспечивают правильную последовательность действий при
реакции системы на каждое событие.
Как и в других языках программирования, использование
циклов — наиболее удобный прием в тех случаях, когда
необходимо многократно выполнять одну и ту же операцию,
такую как извлечение квадратного корня из чисел от 1 до 100.
Безусловные циклы реализуются с помощью do/enddo, циклы с
завершением по условию — while/endwhile.
Элементы внешнего управления.
Внешнее управление имеет место когда обрабатывается
типовое событие at line selection, возникающее при двойном
щелчке мышью на строке выходной страницы экрана.
Предположим, программа выводит на экран список следующим
образом: все данные клиентов из базы данных считываются в
цикле, содержащем оператор select, и отображаются командой
write:
select * from customers.
Write / customers-name.
endselect.
Здесь * обозначает, что будут считаны все поля таблицы
customers. Чтобы обеспечить переключение обработки,
программа должна реагировать на выбор пользователем строки.
Операторы этого события записаны после оператора at line
selection:
at line-selection
select single * from customers where...
При двойном щелчке мышью на какой-либо строке будут
выполнены все команды между at line selection и следующим
оператором события или концом программы. Кроме события at
line selection, в АВАР есть и другие событий, среди которых
чаще других встречаются:
at line-selection, at user-command: реакция на действия
пользователя;
top-of-page, end-of-page: создание и вывод на экран
верхних и нижних колонтитулов страниц;
start-of-selection9 get, end-of-selection: поиск данных, с
помощью Logical Databases;
process before output, process after input: события,
определяющие действия системы до и после вывода на
экран;
При возникновении любого из рассмотренных событий
система выполняет все операторы, заключенные между
ключевым словом данного _ события и ключевым словом
следующего события. Каждая программа по умолчанию
обладает событием start-of-selection, которое инициируется
системой в начале выполнения программы. Кроме того, его
можно включить в программу в явном виде. Порядок
следования операторов событий в исходном тексте программы
не влияет на порядок выполнения операций, связанных с
реакцией на события, а действия пользователя или системы
существенно влияют на порядок вызова этих операций.
7.5. Внутреннее управление в системе.
Внутреннее управление в АВАР поддерживает логические
условия и циклы. Возможность различать ситуации путем
проверки логических условий присуща любой программе,
написанной на любом алгоритмическом языке. Различаются две
основные ситуации: выбор из двух альтернативных условий и
выбор из множества вариантов по значениям некоторого
признака. Соответственно в языке АВАР предлагается две
логические конструкции.
if/elseif/else/endif: ветвление по условию, имеющему
два или три исхода;
case/when/endcase: ветвление в соответствии с
фиксированным набором возможных значений;
Далее приведен пример использования информации во
внутренней таблице для принятия решений. Пусть во
внутренней таблице client есть поле client-sex, определяющее
пол клиента. В зависимости от пола выбирается обращение к
клиенту: «Уважаемый» или «Дорогая». Логическая
конструкция выглядит следующим образом:
if client-sex = 'Ж',
write ‘Дорогая
else.
write ‘Уважаемый
endif.
При содержимом поля client-sex, равном Ж (женщина),
выполняются операторы между if и else. Затем выполнение
программы продолжается с оператора, который располагается
после endif. Если client-sex не равно Ж, то выполняются
команды между else и endif.
В языке разрешается использовать вложенные операторы
if. Допустим, нужно увеличить целое число на 1, если оно
положительное, вывести на экран zero, если число равно 0, и
уменьшить на 1 в остальных случаях:
if п > 0.
п = п + 1.
else,
if n = 0.
w rite' ze ro '. else.
n = n - 1.
endif.
endif.
Вложенные предложения if употребляются, когда нужно
выбирать более чем из двух вариантов. В нашем примере таких
вариантов три: n > 0 , п = 0 и п < 0. В большинстве случаев, с
учетом особенностей логического выражения, можно написать
более короткую программу, используя elseif:
if n > 0.
n = n + 1.
elseif n = 0.
write 'zero',
else,
n = n -1 .
endif.
При n больше нуля выполняются только операторы между
if и elseif. В противном случае проверяется условие, записанное
после elseif, и, если оно удовлетворяется, то сначала
выполняется часть программы между elseif и else, а затем
программа продолжает выполняться с оператора, записанного
после endif. Если второе условие также не удовлетворяется,
выполняются операторы, записанные после else. Эта более
короткая программа полностью эквивалентна предыдущей и
дает тот же результат. Иногда операторы elseif и else могут
вообще отсутствовать:
if г = 0.
write 'нулевое значение', endif.
Нежелательно использовать нескольких вложенных
операторов if, поскольку глубокое вложение предложений if
обычно затрудняет понимание программы. Лучше для таких
конструкций использовать ряд операторов elseif. Во вложенных
конструкциях if каждый оператор elseif/else относится к
ближайшему оператору if.
Если при переключениях используется несколько условий
с участием одной переменной или поля, то для ветвления по
ним можно использовать синтаксическую конструкцию
case/when/endcase:
case signal.
when 'красный1. write 'стойте'.
when 'желты й'. write 'внимание'.
when 'зелены й'. write 'идите',
when others, write 'необычный сигнал',
endcase.
При выполнении этого фрагмента программы содержимое
поля signal сначала проверяется на значение красный. Если
результат положительный, выполняютсяоператоры до
следующего when. Оставшаяся часть оператора case
пропускается, и выполнение программы продолжается с
оператора, записанного после endcase. В случае отрицательного
результата обрабатывается следующее предложение when
(значение желтый). При совпадении выполняются операторы,
стоящие после when 'желтый*. Если результаты проверок всех
предложений when, содержащих конкретные значения поля
signal, отрицательные, то выполняются операторы, стоящие
после when others. Последняя часть конструкции может и
отсутствовать, если разработчик не собирается принимать во
внимание никаких возможностей, кроме описанных в явном
виде в операторах when. Рассмотренную конструкцию можно
описать и операторами if/elseif/else/endif.
Логические выражения
Операторы if и elseif содержат кроме ключевого слова
логическое выражение. Эти выражения в языке АВАР могут
использовать символы математических операций или их
буквенные эквиваленты
символы буквенные символы логическое
математических выражение
операций принимает
значение true, если
а=Ь aeqb а равно b
а>Ь agtb а больше b
а<Ь altb а меньше b
а<>Ь a neb а не равно b
а>=Ь ageb а не меньше b
а<=Ь a le b а не больше b
нет a between b and c между а и b
В логических выражениях могут использоваться скобки и
соединительные слова and - и , or - или , а так же not - не,
например:
not(asb) - а не равно Ь,
a>b and а<с - а между b и с, если b меньше с.
Выражение a is initial означает, что а имеет начальное
значение (0 для чисел и пробел для символов).
При сравнении полей, содержащих данные разных типов,
производится преобразование типов, если содержимое этих
полей вообще сравнимо. Поля преобразовываются по
следующим правилам:
• если оба поля имеют одинаковый тип и разную
длину, то более короткое из них дополняется
нулями или пробелами (слева или справа в
зависимости от типа);
• если одно из полей типа f, другое также
преобразуется к типу f;
• если одно из полей типа р, другое также
преобразуется к типу р;
• если одно из полей типа d или t, то другое также
преобразуется к этому типу, сравнение полей типа
"дата и время” не предусмотрено, и возникает
ошибка выполнения;
• если одно из полей типа п, а другое типа с или х, то
они преобразуются к типу р;
• если одно из полей типа х, а другое типа с, то
шестнадцатеричное поле преобразуется к типу с
(символьному).
При сравнениях следует учитывать правила
преобразования типов. Так следующее сравнение приводит к
печати.
data: a type n value 001234,
b type n value 1234.
if а = b.
write ‘а равно Ь’.
endif.
При следующем сравнении печать не производится,
поскольку переменная b - символьного типа и дополняется
справа пробелами, а не слева нулями, как в предыдущем случае,
data: a type с value 001234,
b type с value 1234.
if а = Ь.
write 'а равно Ь’.
endif.
При сравнении символьных строк обычно интересуют не
состояние “больше - меньше”, а совсем другие признаки.
Например, содержит ли одна строка символы другой строки. В
частности, допустимы такие сравнения:
• а са b (содержит любой): а содержит как минимум
один символ из b
• а со b (содержит только): а содержит только
символы из b (в любом порядке)
• a cs b (содержит строку): а содержит символьную
строку b (концевые пробелы игнорируются; при
сравнении не различаются символы верхнего и
нижнего регистров)
• а ср b (содержит шаблон): а содержит шаблон b (%
означает любую символьную строку; + - отдельный
символ).
Работают сравнения следующим образом:
data:txt (6) value 'Проба-1', res (2).
if txt ca 'а в '.
res = sy-fdpos(2).
write res.
endif.
После выполнения фрагмента будет отпечатано число 5,
так как один из знаков строки 'ав' найден в позиции 5
переменной txt.
data:txt (6) value 'Проба-2',
if txt со 'п р б '.
write 'в txt нет ничего, кроме п, р, б',
endif.
После выполнения фрагмента ничего не будет отпечатано,
так как в переменной txt есть еще знаки о,а-2.
data:txt (6) value 'Проба-3',
if txt cs 'о б а '.
write 'в txt есть строка о б а'.
endif.
После выполнения фрагмента будет отпечатан текст,
поскольку знаки оба действительно есть в строке.
data:txt (6) value 'Проба-4',
if txt ср '% ба++'.
write 'последовательность найдена'.
endif.
После выполнения фрагмента будет отпечатан текст,
поскольку знаки ба и ровно два знака после нее есть в строке;
все символы перед ба заменяются знаком %, независимо от их
количества.
Организация циклов.
В АВАР предусмотрено два типа циклов:
do/enddo — безусловный цикл,
while/endwhile — цикл с условием завершения.
Каждый из них имеет несколько схем применения,
data n type i.
n = 50.
do n times,
группа операторов,
enddo.
В данном случае задано точное число циклов
динамической переменной п.
data: n type i, m type i.
do.
* завершить цикл, если n=200 или число шагов
цикла больше 500
if sy-index > 500 or n = 200 .
exit.
endif.
группа операторов вычисления m.
n = n - m.
write, n
enddo.
В этом варианте команда exit прекращает выполнение
цикла, после чего программа продолжается с оператора,
записанного после enddo. Кроме того, в операторе if содержится
двойное условие, так как завершение по п=200 сформулировано
некорректно, цикл может никогда не завершиться. Это приведет
к ошибке превышения лимита времени (time-out) в программе.
Нужно предусмотреть дополнительное условие, чтобы
избежать системной ошибки.
Иногда возникает необходимость прервать текущий шаг
цикла и продолжить выполнение со следующего. Это
обеспечивает команда continue:
do max times.
f2 = fl + fO.
if f2 = 0.
continue,
endif.
f3 = 1 / f 2 .
enddo.
Здесь max - переменная, динамически задающая число
циклов. В команде do/enddo предусмотрено применение
вложенных циклов. Системное поле sy-index всегда содержит
правильный номер шага цикла, который автоматически
помещается в стек выполнения.
В циклах while/endwhile всегда имеется правило
завершения циклов.
п1 = 0 . п2 = 100.
while delta<> resalt,
res = (n1 + n 2 ) div 2.
if res > resalt.
n1 = key -1 . else.
n2 = key + 1.
endif.
endwhile.
Однако, это не гарантирует завершение цикла за
ограниченное число шагов. Поэтому тоже может возникнуть
ошибка, связанная с превышением лимита времени. При
выполнении условия while обрабатываются операторы между
while и endwhile. Когда условие становится ложным, программа
продолжает выполняться с оператора, записанного после end-
while.
Если цикл предусматривает более одного условия
останова, то остальные условия завершения можно
сформулировать с помощью оператора exit:
while m о n.
if sy-index > 100. exit,
endif.
группа операторов вычисления т и п .
endwhile.
Если условие sy-index > 100 выполняется, цикл while
завершается и программа продолжается с оператора,
записанного после endwhile. Точно так же в цикле do/enddo
можно прекратить выполнение текущего шага, применив
continue.
8. Порядок выполнения работы
Для выполнения работы необходимо иметь доступ к
программному обеспечению - SAP Applycation Server,
установленному на выделенном сервере. На рабочей станции
должен быть установлен SAPlogon, настроенный на IP SAP
Applycation Server. Доступ к SAP AS может быть реализован по
локальной сети, по сети Internet или Intranet (СПД).
Пользователь не увидит разницы между этими подключениями.
На одном SAPlogon может быть зарегистрировано несколько
подключений к разным SAP AS. Для подключения к SAP AS
студент должен выбрать строку с именем подключения, нажать
кнопку “Регистрация”, в появившемся окне ввести логин и
пароль, указанные преподавателем. После подключения к SAP
AS студент увидит функциональное меню учебной системы. В
этом меню надо выбрать пункты: «Инструменты», «АВАР-
инструментальные средства», «Разработка» и, наконец, «АВАР-
редактор», или набрать в верхнем окошке имя транзакции
SE38. В открывшемся окне выбора программы надо набрать
имя создаваемой Вами программы. Обязательное условие: имя
программы должно начинаться с буквы z. Затем следует
название группы, три буквы фамилии и порядковый номер
создаваемой программы. Наконец нажмите кнопку «Создать».
Если программа с таким именем уже есть, то возьмите 4 буквы
фамилии.
После регистрации имени нажмите кнопку «изменить». В
ответ появится заготовка программы-отчета. Обратите
внимание на точку, завершающую последнюю строку. Вводите
Ваш текст после этой точки.
Обращайте внимание на правильную расстановку
пробелов, точек, запятых и двоеточий. Начинающие часто не
отделяют знак равенства и другие знаки пробелами от
идентификаторов, и, наоборот, ставят пробел между именем
идентификатора и числом знаков в скобках. Редактор строг к
пробелам, а замечания, которые он делает, часто невнятны.
После исправления синтаксических ошибок программу
надо активировать. Это можно сделать только после
исправления всех ошибок. После активации программа
становится доступной всем пользователям системы, и для
запуска на исполнение. При внесении исправлений после
активации, проверка синтаксических ошибок часто не
срабатывает, поскольку система видит текст активированной
программы. Но проверка синтаксиса возможна, если
попытаться активировать исправленный текст.
При запуске программы на исполнение окно с текстом
закрывается результатами, но только в том случае, если в
программе предусмотрена печать. Для возвращения к тексту
программы надо нажать кнопку с зеленой стрелкой налево.
Для завершения работы нужно в главном меню (наверху
экрана) выбрать пункт «Система», а в выпадающем меню -
«Выход из системы».
9. Рабочее задание
Лабораторная работа № 1.
Знакомство с инструментальными средствами редактора
АВАР/4, типами и объектами данных.
Задание.
1. Знакомство с инструментальными средствами АВАР.
a. войти в logon, набрать login и пароль,
b . открыть по меню “инструменты”, “инструментальные
средства АВАР”,
c. войти в разделы: “обзор”, “иерархия приложений”,
“навигатор по объектам”,
d. записать шифр транзакции,
e. создать новую программу: имя программы должно
начинаться с z, дальше свои инициалы и №
программы,
f. щелкнуть правой клавишей на имени программы,
выбрать “изменить”, набрать текст программы,
текст:
REPORT demo.
PARAMETERS input(19) TYPE c DEFAULT
*введите свой текст f.
SKIP TO LINE 10.
POSITION 40.
WRITE input _________________________________
g. щелкнуть правой клавишей на имени программы,
“проверить синтаксис” программы,
h. щелкнуть правой клавишей на имени программы,
“активировать” программу,
i. щелкнуть правой клавишей на имени программы,
“выполнить” программу в текущем окне,
j. в процессе выполнения, ввести значение параметра с
клавиатуры и продолжить выполнение программы до
печати введенного Вами сообщения.
2. Типы переменных, их преобразование и сравнение.
(Каждому заданию соответствует написание и выполнение
отдельной программы.)

■ завести переменные разных типов ( I , F, Р, С, N),


занести в эти переменные некоторые значения,
соответствующие заданным типам, и вывести на
печать, (значения присваивать явно и путем
инициализации);
■ завести переменные различных цифровых и
текстовых типов ( I , F, Р, С, N, STRING), ввести в
часть из них специально подобранные значения;
преобразовать введенные значения из одного типа
в другой, используя незанятые переменные
(выбрать такие значения и типы, чтобы при
преобразовании произошла потеря информации),
вывести на печать, составить отчет с
пояснениями: какая потеря информации
произошла, почему она произошла и насколько
критична такая потеря информации;

Лабораторная работа N9 2.
Средства управления при выполнении программ и логические
выражения в языке АВАР/4.
1. Операции со строчными переменными. (Каждому
заданию соответствует написание отдельной
программы.)

■ завести несколько строчных переменных (всех,


рассмотренных в теоретической части типов),
занести в эти переменные значения в
соответствии с вариантом, объединить в одной
переменной и вывести на печать, составить отчет
с объяснением результатов (особое внимание
уделить дефектам объединенного сообщения);

Вариант Вариант 2 Вариант 3 Вариант 4 Вариант


1 5
каким жаль яв надежды МОЙ
ты мне себя синий маленький костер
был немножко тролейбус оркестрик в
таким жалко сажусь под тумане
остался бездомных на управлением светит
собак ходу любви

■ завести несколько строчных переменных, ввести


в одну из них текст, а в другие слова из
вариантов; заменить слово в тексте на слово из
другой переменной, вывести на печать начальные
и конечные значения, составить отчет;
Вариант 1 Ты у меня одна, словно в ночи луна
заменить в степи сосна
Вариант 2 Нету другой такой, ни за какой рекой
заменить за туманами
Вариант 3 Вот поворот какой делается с рекой
заменить такой
Вариант 4 Пошел на взлет наш самолет, прижав к земле
тоскливый вереск
заменить полярный
Вариант 5 Махнул рукой второй пилот на этот каменистый
берег
заменить мглистый

■ завести несколько строчных переменных, ввести


в них разные тексты и разделители, заменить
разделители в тексте одной переменной на
другие, вывести на печать начальные и конечные
значения, составить отчет.
Вариант 1 В саду растут: яблони; груши; сливы.
получить В саду собрали - яблоки, груши, сливы.
Вариант 2 В портфель положили: тетради, карандаш, ручку.
получить На стол положили - тетрадь/ карандаш/ ручку.
Вариант 3 В телеге лежат: мешки, коробки, бочка.
получить С телеги упали - мешки; коробка; бочка.
Вариант 4 В доме живут: журналисты и дипломаты.
получить Из дома вышли журналист и дипломат.
Вариант 5 С горы скатились кубарем, вприпрыжку,
кувырком.
получить С горы катались - кубарем; вприпрыжку;
кувырком.
2. Операции управления при выполнении
программы. (Каждому заданию соответствует
написание и выполнение отдельной программы.)

■ завести переменные, организовать цикл с


указанным числом шагов с изменением значений
переменных, вывести на печать начальные и
конечные значения, составить отчет;

нач.значение шаг ЦИКЛОВ


Вариант 1 50 5 5
Вариант 2 60 6 10
Вариант 3 80 7 15
Вариант 4 20 3 35
Вариант 5 10 2 38

■ завести несколько переменных, организовать


цикл с изменением значений переменных,
организовать выход из цикла по достижении
некоторого значения, вывести на печать
начальные, промежуточные и конечные значения,
составить отчет;

нач.значение шаг предел


Вариант 1 40 5 80
Вариант 2 30 6 90
Вариант 3 60 7 200
Вариант 4 70 3 100
Вариант 5 50 2 60

■ завести несколько переменных, организовать


цикл с изменением значений переменных и
завершением по нарушению условия while,
вывести на печать начальные, промежуточные и
конечные значения, составить отчет;

нач.значение шаг предел


Вариант 1 50 2 60
Вариант 2 40 5 80
Вариант 3 30 6 90
Вариант 4 60 7 200
Вариант 5 70 3 100

■ завести несколько переменных и параметр,


организовать цикл с завершением по нарушению
условия if сравнения переменных с параметром,
организовать ввод значений параметра и его
сравнение в цикле с переменными разными
способами, вывести на печать начальные,
конечные значения и выводы по результатам
сравнения для каждого из таких циклов,
составить отчет;
■ завести несколько строчных переменных,
организовать сравнение с использованием
команд са, со, cs, ср одних переменных с другими
разными способами, вывести на печать начальные
и конечные значения, составить отчет.

10. Содержание отчета


Отчет должен содержать:
1. Название и цель работы.
2. Результаты работы: текст программы на языке АВАР и
скриншоты результатов.
3. Пояснения к сделанному выбору программного решения.
11. Литература.
1. Рюдигер Кречмер, Вольфганг Вейс. Разработка приложений
SAP R/3 на языке АВАР. Пер.с англ. Москва, издательство
«Лори», 2001 г.
2. документация АВАР Programming (ВС-АВАР) с сайта
http://help.sap.com/printdocu/core/Print46c/en/Data/htm/english.htm
Учебно-методическое издание

Борчанинов Михаил Георгиевич

ОСНОВЫ ЯЗЫКА АВАР


(часть 1)
Методические указания по дисциплине "Корпоративные
информационные системы"

Подписано в печать 2 9 .4 2 .0 7 . Тираж 100 экз.

усл.-п.л. 3,5 Заказ №?Я£Формат 60x84.16 Изд.№ 202-07

127994 Москва, ул. Образцова, 15.


Типография МИИТа