48
Mo Ьорчанннов M.l уч.4 Основы языка \ВЛР Г08Ч.2 мщения M.Y. №27 8С ПЗ 1 668Q Кафедра “Автоматизированные системы управления” М.Г. Борчанинов ОСНОВЫ ЯЗЫКА АВАР (часть 2) Рекомендовано редакционно-издательским советом университета в качестве методических указаний по дисциплине "Корпоративные информационные системы" Для студентов специальностей "Автоматизированные системы обработки информации и управления" И "Инфпрмяпипнные ц . труяпппгнн " МОСКВА- 2008

ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

  • Upload
    others

  • View
    25

  • Download
    1

Embed Size (px)

Citation preview

Page 1: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Mo

Ьорчанннов M.l уч.4Основы языка \ВЛР Г08Ч.2 мщения

M.Y. №27 8СПЗ 1 668Q

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

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

ОСНОВЫ ЯЗЫКА АВАР (часть 2)

Рекомендовано редакционно-издательским советом университета в качестве методических указаний по дисциплине

"Корпоративные информационные системы"

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

М О С К В А - 2008

Page 2: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

УДК 004 Б82

Борчанинов М.Г. Основы языка АВАР. Часть 2: Методические указания к лабораторным работам по дисциплине "Корпоративные информационные системы". — М.: МИИТ, 2008 48 с.

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

© Московский государственный университет путей сообщения (МИИТ), 2008

Page 3: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Содержание.1. Введение.......................................................................42. Таблицы и структуры............................................. 53. Таблицы баз данных.................................................64. Совместная работа с таблицами баз данных и

внутренними таблицами..................................................115. Использование внутренних таблиц...................16

5.1. Создание внутренних таблиц.....................................165.2. Заполнение внутренней таблицы..............................205.3. Оператор move-corresponding........................... 215.4. Чтение строк из внутренней таблицы...................... 275.5. Изменения во внутренней таблице........................... 35

6. Управление при работе с внутреннимитаблицами............................................................................38

7. Порядок выполнения работы .............................. 408. Рабочее задание............................................... 42

Лабораторная работа № 3............................. 42Лабораторная работа № 4..................................................43

9. Содержание отчета..............................................4410. Литература........................................................... 4411. Тезаурус к методическим указаниям...............45

Цель: лабораторные работы предназначены для изучения синтаксиса и базовых операций АВАР - внутреннего языка корпоративной информационной системы SAP R/3. Эти лабораторные работы являются продолжением цикла, начатого в методических указаниях «Основы языка АВАР (часть 1)» [3].

Page 4: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

1. Введение.

Корпоративная информационная система SAP R/3 фирмы SAP AG предназначена для автоматизации бизнес-процессов на средних и крупных предприятиях. Она фактически стала стандартом информатизации самых крупных корпораций во всем мире и, в настоящее время, широко используется крупнейшими российскими предприятиями. Система SAP R/3 обеспечивает выполнение всех рутинных операций по управлению любыми подразделениями предприятия в их взаимосвязи. Это позволяет руководству сосредоточиться на перспективных целях и контроле выполнения стратегических планов.

Корпоративная информационная система SAP R/3 содержит в своем составе инструментальные средства разработки, отладки и сопровождения модулей системы. Причем править, отлаживать и сопровождать можно только модули своей разработки, а в модули, поставляемые с системой, нельзя вносить изменения. Их защищает специальный ключ, который можно получить на фирме SAP AG, но, в этом случае, фирма снимает с себя ответственность за дальнейшую эксплуатацию системы.

Основы работы с инструментальными средствами разработки были рассмотрены в методических указаниях «Основы языка АВАР (часть 1)» [3]. Настоящие методические указания «Основы языка АВАР (часть 2)» являются продолжением первой части, и предполагают, что учащиеся ознакомились с содержанием первой части и выполнили задания по лабораторным работам 1 и 2. Поэтому в этой части приведены задания к лабораторным работам 3 и 4. Если в первой части рассматривались только особенности самого языка, то в этой части уже просматривается структура системы, главной особенностью которой является широкое использование при обработке данных из таблиц БД внутренних таблиц, располагающихся в оперативной памяти. Такой подход повышает скорость обработки данных, но, одновременно, повышает требования к объему оперативной памяти.

Page 5: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Прикладные программы в SAP R/3 обычно содержат обращения к большому числу таблиц баз данных. Таблицы баз данных определены в АВАР-словаре и, в зависимости от настроек системы, могут оставаться незаполненными, или заполняться пользователями при нормальной эксплуатации системы. Таблицы связаны между собой через ключевые поля. Каждая связь соединяет две таблицы и имеет стороны первичного и вторичного ключа. Первичный ключ обладает свойством уникальности, то есть значения этого ключа не повторяются. Вторичный ключ может содержать в любом количестве значения, существующие в первичном ключе. Нарушение этих принципов приводит к нарушениюцелостности базы данных.

Обычно информационные системы работают непосредственно с таблицами баз данных, считывая и записывая в них данные по мере необходимости. В SAP R/3 предусмотрена другая технология общения. Очень часто создаются внутренние таблицы, куда копируется часть данных (или все данные) из таблицы баз данных, и с этими таблицами ведется оперативное общение. Такая технология общения существенно ускоряет взаимодействие пользователя с нужными ему данными.

В первой части указаний рассмотрены типы и объекты данных. Сложные типы представлены структурами и таблицами. Структура в описаниях языка АВАР - это очень многозначное понятие. С одной стороны, структура - это объект данных, то есть физическое понятие, имеющее представительство в оперативной памяти системы с четко определенным объемом. С другой стороны, структура •- это тип данных, то есть описание, относящееся к структуре, как к объекту данных, так и к отдельной строке таблицы. Структурой также является буфер, необходимый для передачи данных между таблицами. Этим буфером может быть структура, как объект данных, или «головная строка» - структура, как

Page 6: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

составной элемент внутренней таблицы (подробности далее). Наконец, понятие - глубоко структурированная структура, говорит о том, что поля структуры могут быть структурами или таблицами, причем степень вложения таких структур может быть велика. Кроме того, трудно обойтись без понятия «структу ра», говоря о физической структуре таблиц, например, включающих головную строку.

Строки внутренних таблиц представляют собой структуры (как объекты). Все строки одной внутренней таблицы имеют одинаковую структуру (как тип). Внутренние таблицы могут иметь структуру (как тип), совпадающую со структурой соответствующей таблицы баз данных, а могут иметь оригинальную структуру, если используются для промежуточных вычислений. Больше того, в отличие от таблиц баз данных, внутренние таблицы могут быть глубоко структурированными. Использование таких таблиц повышает гибкость и выразительность соответствующих блоков программ, написанных на языке АВАР/4.

Для передачи данных между внутренней таблицей и таблицей баз данных или между двумя внутренними таблицами используется специальная буферная область, представляющая собой структуру. Структура буферной области совпадает со структурой строки соответствующей внутренней таблицы. Если структуры двух внутренних таблиц, участвующих в передаче данных, не совпадают, то для передачи данных нужны два буфера, соответствующих структур.

3. Таблицы баз данных.

Для демонстрации возможностей различных операторов языка АВАР/4 при работе с внутренними и внешними таблицами нужно воспользоваться несколькими заполненными таблицами баз данных. Будем пользоваться таблицами, относящимися к работе туристического агентства:

customers - таблица клиентов туристического агентства; carriers - таблица транспортных компаний;

Page 7: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

planfli - таблица возможных рейсов между городами;actfli - таблица реальных рейсов;bookings - таблица заказов клиентов на авиабилеты.

Пример заполнения таблицы customers.id паше city telephon

00000001 Иванов Москва 284-48-5500000003 Петров Самара 264-33-2500000025 Сидоров Пермь 227-56-37123456781 Кузнецов - Саратов 223-43-52

В этой таблице названия полей означают следующее: id - номер клиента, первичный ключ и уникальный

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

паше - фамилия клиента; city - город, в котором проживает клиент telephon - телефон клиента.

Пример заполнения таблицы carriers.carrid carrname currcodeДАЛ Домодедовские авиалинии RR |САЛ Сибирские авиалинии r r ;AL ALITALIA ITL

В этой таблице катания, колей, означают следующее-, carrid - код авиакомпании, ключевое поле; conn id - название компании, currcode - используемая валюта.

Page 8: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

carrid connid | cityfrom cityto fltime deptimeДАЛ оою | Москва Норильск 1 053700САЛ 0356 | Томск Саратов 3 167400AL 3214 i Москва Рим. ... ___1 7 . J 004500

В этой таблице названия полей означают следующее: carrid - код авиакомпании;connid - код связи с пунктом назначения, первые два поля

являются ключем; cityfrom -- город вылета; cityto - пункт назначения; fltime - общее время полета deptime - код времени вылета

Пример заполнения таблицы actfli.carrid connid fldate | price currency seatsoccДАЛ оою 20050507 2400 RR 105САЛ 0356 20050612j 1800 RR 36AL ! 3214 10050623 120 USD 135

В этой таблице названия полей означают следующее: carrid - код авиакомпании; connid - код связи с пунктам назначения; fldate - дата вылета, первые три поля являются ключем; price - стоимость полета; currency - валюта;seatsocc - число занятых мест в самолете;

Page 9: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

... ............... SAP# | »' ; Л ©0в В*£ 'Щ'ЬОО айС яоварь; просмотр табпицы4»: »> ! Н? ft <Й1;. оЬ ' ,с£»: qV '-В:.*-.:8&;®■ Те»л*«сииепар---- ,,7,,,„}>J—---- ---■ .„ £<»{̂ лТГГггу~ _...а метры к* тройки .' ИвДв1tfcu./; Дрпопй. CTpywtw>a— :«здцвеггу.1. Vg

легат:. . Щ Г АДО/4-кмкга;.*дееы '

<*ойст** 4 : froerawcsHведение. ' Поля- £.ШЁШШШШШ

ш ж т

рис 1. Структура внутренней таблицы actfli (частично)

ш b r -,:m!. ^ QrVv-r.-.-.r* Г 1 .Ь 1 ,■ •''S.i'mh : ...>‘ ЛЧ «.IV -11 ; . SAP©1 J: . ■у в©в ока ®oaa ®й @Щbpavjep данных: т збт т э АС TFU, совпадении 9

i s ? т а а Проверочная таблица

! * и ш ? е ^ й | ф И И 1 й ш я & ж Щ Ш Ш Ж Ш Ш (дЯ Ф гксУ m ( • M V M I S ! RfcYHUrrS'J*

ht u, 8-00 AL 3214 2 3 .0 6 .2 0 0 5 1 2 0 ,0 0 USD 0 0 ,0 0SOQ ДАЛ о о ю 0 7 .0 5 .2 0 0 5 2 .4 0 0 ,0 0 RR 120 105 0 ,0 0600 ДАЛ 0138 06 .0 S .2 C C 5 3 .1 2 0 ,0 0 RR 0 30 0 ,0 0во о ДАЛ 0138 0 8 .0 5 .2 0 0 5 3 .1 2 0 ,0 0 RR 0 51 0 ,0 0аоо ДАЛ 0223 0 9 .0 5 .2 0 0 5 4 .5 0 0 ,0 0 RR 0 62 0 ,0 0800 ДАВ 0223 1 5 .0 S .2005 4 .5 5 0 ,0 0 PR c 17 3 ,0 0800 САЛ OlZfi 0 4 .0 5 .2 0 0 5 4 .8 1 0 ,0 0 RR 0 35 0 ,0 0

. |в 5 0 С М 0356 1 2 .0 6 .2 0 0 5 1 .8 0 0 ,0 0 RR 36 36 0 ,0 0

...]в»0 САХ 040 $ 0 3 .0 5 .2 0 0 5 3 . S 2 0 ,0 0 PR 0 21 0 ,0 0

рис 2. Заполнение внутренней таблицы actfli (частично)

Page 10: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

carrid connid fldate bookid customid orderdateДАЛ 0010 20050507 001 00000025 2050201САЛ 0356 20050612 002 00000003 2050312AL 3214 10050623 007 00000025 2050201

В этой таблице в составной первичный ключ входят четыре первых поля, а названия полей означают следующее:

bookid - номер записи в регистрационной книге;customid - номер клиента;order date - дата регистрации клиента;

На практике все эти таблицы содержат больше полей, но для целей демонстрации возможностей команд языка АВАР/4 приведенного вполне достаточно.ру> АВ ЛР сп о н а р ь : о т н о ш е н и я п о е *« *ш н е н у кпмЭчу

Объекты СД Обработать Перейти к Утилиты Параметры настройки Ракурс Справ.

& т elelei bihmi в| 244€lllia|Q{lM| ИЙ|^ Входящие Исходящие | Проверочные таблицы |<*Я Таблица внешнего ключа ] 1Ш|

“ Область представления------------------------------- "— ----------------------------------------------- ' — ' — — — —— — — —

рис 3. Связи между внутренними таблицами

Page 11: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

4. Совместная работа с таблицами баз данных и внутренними таблицами.

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

tables customers.select * from customers.

write: / customers-name. endselect.

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

Те же действия можно описать другим образом, tables customers, data s_customer like customers.

select * from customers into s_customer. write: / s-customer-name.

endselect.В этом случае рабочая область явно задана структурой

s_customer, совпадающей со структурой строки таблицы customers. Строки таблицы базы данных последовательно переписываются в эту структуру, а затем уже из нее выводятся на печать.

Page 12: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

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

Ту же операцию можно проделать более эффективно, правда, истратив больше места в оперативной памяти,

tables customers.data t_customer like table of customers with header line.

select * from customers into table t_customer. loop at t_customer.

write: / t-customer-name. endloop.

Теперь для временного хранения данных использована внутренняя таблица. Особенности работы с внутренними таблицами, в том числе и организация цикла loop/endloop , будут подробно рассмотрены в следующем разделе. Здесь следует сказать, что последний пример существенно отличается от первых двух. Если в первых двух примерах из внешней таблицы считывалось по одной строке, и эта строка сразу выводилась на печать, то в последнем случае считывается сразу вся таблица. Затем строки выводятся уже из внутренней таблицы. Если при работе достаточно свободной оперативной памяти, то такая конструкция может выполниться быстрее. Если памяти недостаточно, то можно снизить производительность приложения.

Для отбора строк в процессе считывания, в оператор select можно вставить дополнительную конструкцию с ключевым словом where. В эту конструкцию вносится условие прохождения строк для дальнейшей обработки. Операторы записи условий во многом совпадают с условиями для оператора if, но есть и отличия.

Page 13: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

символыматематических

операций

буквенныесимволы

считывание строки выполняется, если

a=b a eq b а равно ba>b agt b а больше ba<b a It b а меньше b

a<>b а пе b а не равно ba>=b a ge b а не меньше ba<=b a le b а не больше b

нет символа a between b and с интервал между а и b

нет символа like шаблон отборанет символа

.

in(a,b,c,) совпадение с одним из а,Ь,с,.

Допустим из таблицы actfli нужно отобрать все рейсы, вылетающие 12 июня 2005 года. Блок операторов для этой цели будет выглядеть следующим образом.

tables actfli.data t_flight like table of actfli with header line.

select * from actfli into table t_flight where fldate = ‘20050612’. loop.

write: / t_flight-seatsocc. endloop.

В результате будет отпечатано количество свободных мест на тех рейсах, которые отправляются 12 июня 2005 года. Большинство условий из таблицы могут быть использованы совместно через логические операторы and или or.

tables actfli.data t_flight like table of actfli with header line.

Page 14: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

select * from actfli into table t_flight where fldate = ‘20050612’ and carrid = ‘САЛ’. loop.

write: I t_flight-seatsocc. endloop.

В этом случае, из строк отобранных по дате будут исключены те, которые не относятся к компании Сибирские авиалинии.

Шаблон отбора позволяет отобрать нечетко сформулированные значения строчных полей. Например, конструкция ‘С%’ означает, что будут отобраны строки любой длины, начинающиеся с буквы С - Смирнов, Сидоров и так далее. Знак подчеркивания означает, что на этом местеможет находиться любой другой знак. Конструкция '_н’означает, что будут отобраны строки длиной в три знака, последний из которых, буква !н' - тон, лён, но не слон,

tables customers.data t_customer like table of customers with header line.

select * from customers into table t_customer where name like ‘C%’. loop.

write: / t customer-name. endloop.

Если отбор ведется по ключевому полю, то на равенство конкретному значению в условии отбора будет найдена единственная запись. Такой отбор проводится по оператору select single. , а в операторе where указываются все поля первичного ключа. После выполнения операции требуется проверка правильности ее выполнения, поскольку единственная искомая запись может отсутствовать в таблице,

tables customers.select single * from customers

Page 15: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

where id eq ‘00000025’. if sy-subrc = 0.

write: / customers-name.else.

write ‘клиент не найден’.endif.

Следует обратить внимание на то, что в качестве условия отбора с select single используются только логические операторы = или eq. Только они обеспечиваю единственность выбора. Проверка исполнения условия отбора проводится по значению системной переменной sy-subrc. Она принимает нулевое значение, только если операция проведена успешно. В остальных случаях попытка использовать результат отбора может привести к останову из-за системной ошибки.

Оператор select позволяет не только отбирать нужные строки из внешней таблицы, но и упорядочивать отобранные строки по выбранному полю,

tables customers.select * from customers

order by city name.write: / customers- city,

customers-name. endselect.

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

В принципе, возможен другой способ упорядочения строк: переписать все строки во внутреннюю таблицу, а затем упорядочить их. Этот способ использует специфические механизмы языка АВАР/4. Эта технология будет рассмотрена в следующем разделе.

Page 16: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Рассмотренная здесь технология существенно отличается от механизмов систем управления базами данных (СУБД). В данном случае язык АВАР/4 не использует механизмов СУБД. Управление перехватывается методами SAP R/3 с отключением механизмов СУБД.

Если поля будут сортироваться по ключевым полям, то нужно использовать дополнение order by primary key.

5. Использование внутренних таблиц.

5.1. Создание внутренних таблиц.

Внутренние таблицы обычно создаются с помощью ключевого слова data. В этом случае, таблица существует, пока активен модуль, в котором она создана. Внутренняя таблица является динамическим объектом, и содержит столько строк, сколько в нее было считано или создано другим способом.

Описание таблицы отличается от описания структуры наличием ключевого слова occurs, за которым следует параметр. Этот параметр (числовое значение) не имеет отношения к количеству строк в таблице, а влияет только на размер рабочей области в оперативной памяти. Количество строк во внутренней таблице не ограничено, однако, оно должно быть таким, чтобы не превысить объема виртуальной памяти.

tables customers.data t_customer like customers occurs 100.

Внутренние таблицы могут также создаваться с помощью ключевого слова table,

types begin of t_city, name like customer-name, city like customer-city, end of t_city.data vr_city like table of t_city.

Page 17: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Первая из рассмотренных форм декларации таблиц устарела, она была основной до версии 4.0, позднее основной стала форма с использованием слова table. Это изменение в языке связано с появлением нового типа переменных - табличного.

Кроме того, в определении могут присутствовать уточнения, sorted и hashed для сортированных ихешированных таблиц соответственно. Для сортированных таблиц задается порядок сортировки. Доступ к ним обычный, через головную строку или специальную рабочую область,

data vr_city like sorted table of t_city with unique key name.

Такое определение таблицы обязательно должно содержать ссылку на ключ, по которому и будетупорядочиваться таблица. Таблица упорядочивается параллельно с вводом данных.

Хешированные таблицы не имеют головной строки и доступ к ним осуществляется через специальный механизм хеширования, алгоритм которого зашит в системе. Определение должно содержать ссылку на уникальный ключ, types t_city like customer.data vr_city like hashed table of t_city with unique key id.

Внутренние таблицы обычно используются как «моментальные снимки» с таблиц баз данных. Работа с такими снимками ускоряет общую работу системы, если в оперативной памяти хватает места для хранения таблиц. Структура внутренней таблицы может отличаться от внешней. Как правило, во внутренней таблице появляются дополнительные поля для хранения служебной информации. Но внутренние таблицы могут иметь и самостоятельное значение. Внутренние таблицы могут быть глубоко структурированными, т.е. содержат вложенные структуры или даже внутренние таблицы. Работа с такими таблицами делает язык АВАР/4 более гибким и выразительным, чем обычные языки управления реляционными базами данных. Иногда внутренние таблицы создаются вне

Page 18: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

связи с таблицами баз данных. Это делается для решения некоторых технологических задач, например, вывода отчетов.

Большим преимуществом внутренних таблиц оказывается то, что они могут храниться в памяти достаточно долго, не исчезать при потере активности, и к моменту следующего обращения оказываются заполненными старыми данными. Такие таблицы требуют статического распределения памяти и создаются не с помощью ключевого слова data, а с помощью ключевого слова statics. В остальном описание таблицы не отличается от рассмотренного ранее. Статически определенные внутренние таблицы требуют написания специальных процедур для окончания работы и удаления их из памяти,

tables customers.statics t_customer like table of customers.

Как уже отмечалось, для взаимодействия внутренних таблиц с таблицами баз данных и между собой требуется специальная рабочая область, структура которой совпадает со структурой строки таблицы. Чаще всего, в качестве такой области создается специальная структура, называемая «головной строкой таблицы». Головная строка имеет ту же

структуру, что и любая строка таблицы, но ведет себя относительно

самостоятельно, например, при удалении всех

Таблица БД Внутренняя таблица строк в таблице, вРис -4.•Передагш-данных.'черечтолк>вн>’ю*строк\' j головной строке

хранитсяпоследняя считанная строка,

tables customers.data t_customer like table of customers with header line.

№ п о л е a п о л е b п о л е c

1 a1 Ы c l

2 a2

ГЧ_Q

c2

3 a3 b3 c3

4 a4 b4 c4

№ п о л е a п о л е b п о л е с

3 a3 ЬЗ сЗ

№ п о л е а п о л е b п о л е с

1 а1 М d

2 а2 Ь2 с 2

3 аЗ ЬЗ сЗ

Page 19: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Не всякая внутренняя таблица может иметь головную строку. Глубоко структурированная таблица, содержащая

внутренние№ поле а поле b поле с3 аЭ ЬЗ сЗ

№ поле а поле Ь поле с1 а1 м d2 а2 Ь2 с23 аЗ ЬЗ сЗ4 а4 Ь4 с4

Структура

N9 поле а поле Ь поле с1 а1 Ы d2 а2 Ь2 с23 аЗ ЬЗ сЗ

Таблица БД Внутренняя таблица

Р ис.5. Передача данных через буферную структуру.

имеющая явное определение. Работа с идентична работе с головной строкой использование головной строки удобнее более ясным для понимания.

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

создается специальная

структура, такой структурой таблицы. Однако,

и текст становится

Внутренняя таблица с головной строкой имеет следующийвид:carrid connid cityfrom cityto fltime | deptime

Головная строкаСАЛ 0647 i Новосибирск Адлер } 4 056700

Тело таблицыДАЛ ; 0010 Москва Норильск 1 053700САЛ 0356 Томск

НовосибирскСаратов 3 167400

САЛ 0647 Адлер 4 056700AL 3214 Москва Рим 7 004500

Здесь содержание головной строки и одной из строк таблицы совпадают, и сразу видно, какая из строк введена последней. Строки внутренней таблицы заполняются с помощью операторов select, append, insert и move. Большинство из них различают команды, связанные со строками таблицы и с головной строкой. Команда move не

Page 20: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

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

5.2. Заполнение внутренней таблицы.

Строки внутренней таблицы заполняются с помощью операторов append, insert и move. Большинство из них различают команды, связанные со строками таблицы и с головной строкой. Команда move не делает различий между строками таблицы и головной строкой, и нужны специальные средства для пояснений.

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

tables actfli.data tabH like standard table of actfli with header line, select * from actfli into table tabu.

В этом случае все содержимое таблицы БД actfli построчно переписывается во внутреннюю таблицу tab 1. Вся операция проводится одним оператором.

Часто при создании таблицы возникает потребность ввести в нее несколько строк, полученных в результате вычислений или действий оператора. Если расположение строк

Page 21: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

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

data: begin of t_dohod, name(16) type c, t_nurn type i, v dohod type p decimals 2, end of t_dohod. data vr_dohod like standard table of t_dohod with header line.vr_dohod-name = 'Иванов'. vr_dohod-t_num = 15. vr_dohod-v_dohod = '5430'. append vr_dohod.

5.3. Оператор move-corresponding.

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

Для передачи данных между таблицами, структуры которых совпадают не полностью, существует оператор move- corresponding. Этот оператор позволяет переписывать из одной таблицы в другую только те поля, описания которых полностью совпадают. Оператор имеет ограничения в применении, он может использоваться для передачи данных между структурами и, соответственно, между внутренними таблицами с головной строкой. Для передачи данных, из таблиц баз данных нужно явно прописать буферную структуру, совпадающую со строкой

Page 22: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

таблицы БД. Переписать строку туда, а затем оператором move- corresponding во внутреннюю таблицу через головную строку.

В приведенном далее примере оператор move- corresponding обеспечивает перепись только нужных полей в головную строку таблицы short fli из буферной области long fli, структура которой совпадает со структурой таблицы баз данных actfli. Затем из головной строки оператором append to содержимое этих полей переписывается во внутреннюю таблицу. Таким образом, строка во внутренней таблице занимает значительно меньше места, чем в таблице базы данных.

tables actfli.types begin of short_type,

carrid like actfli-carrid, fldate like actfli-fldate,

seatsocc like actfli-seatsocc, end of short_type. data long_fli like actfli.data short_fli table type short_type with header line, select * from actfli into long_fli.

move-corresponding long_fli to short_fli. append short_fli.

endselect. loop at short_fli.

write: / short_fli-carrid, short_fli-fldate, short_fli- seatsocc. endloop.

Команда append вставляет во внутреннюю таблицу строки в порядке их поступления. Не всегда такой порядок следования строк совпадает с планами программиста. В программе можно точно указать место внутренней таблицы, в которое следует вставить очередную строку. Это действие выполняется операцией insert, в которой явным образом прописывается номер строки таблицы, в которую следует поместить строку из 22

Page 23: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

рабочей области. Допустим, в последнем примере мы хотим вставить содержимое рабочей области во вторую строку. Тогда последняя часть примера приобретет вид:

select * from customers into table cust_city.insert work_str into cust_city index 2.

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

Часто возникает потребность ввести в таблицу сразу несколько строк. Программа станет значительно быстрее, если вводить эти строки не по одной, а воспользоваться специальным выражением. Для этого надо иметь дополнительную таблицу.

data: cust_city like table of t_city with header line, dop_str like table of cust_city.

He будем задаваться вопросом, откуда взялись строки в таблице dop_str, но мы можем все их сразу записать в таблицу custcity.

append lines of dop_str to cust_city.В результате все строки из таблицы dop_str будут

записаны в конец таблицы cust_city.Если нужно записать строки не в конец таблицы, а

начиная с заданного места, то следует воспользоваться вариантом оператора insert.

data: cust_city like table of t_city with header line, dop_str like table of cust_city.

И далее:insert lines of dop_str from 7 to 11

Page 24: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

into cust_city index 5.В результате строки с седьмой по одиннадцатую из

таблицы d o p s tr будут записаны в таблицу cust_city, начиная со строки 5. Таким образом, строка, которая раньше стояла на позиции 5, теперь окажется на 10 месте, а места с 5 по 9 будут заняты строками из таблицы dop_str. Скорость такой вставки строк может превышать построчную в 20 раз.

В последней конструкции выражения с ключевыми словами from или to могут быть опущены. Если опущено to, то перепись начнется с указанной строки, а закончится на последней строке таблицы dop_str. Если же опущено from, то перепись начнется с первой строки, а закончится указанной строкой этой таблицы.

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

data: begin of t_dohod, name(16) type c, t_num type i,v_dohod type p decimals 2,

end of t_dohod.data vr_dohod like standard table of t_dohod with header line.data sum_dohod like sorted table of t_dohod with unique key name with header line.

write / 'Фамилия таб.номер к выдаче '.vr_dohod-name = 'Иванов'. vr_dohod-t_num = 15. vrdohod-vdohod = '2354,50'. append vr dohod.

Page 25: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

vr_dohod-name = 'Петров'. vr_dohod-t_num = 18. vr_dohod-v_dohod = '1678,00'. append vrdohod.vr_dohod-name = 'Иванов'. vr_dohod-t_num = 15. vr_dohod-v_dohod = '1487,30*. append vr_dohod.vr_dohod-name = 'Сидоров'. vr_dohod-t_num = 25.vr_dohod-v_dohod = '3600,00'.append vr dohod.collect vr_dohod to sum_dohod.loop at sum_dohod.write: / sum_dohod-name, sum_dohod-t_num,sum_dohod-v_dohod.endloop.

В таблице sum dohod ключевые поля: фамилия (name) и табельный номер сотрудника (t_num). Не ключевое поле v_dohod - текущий доход сотрудника, должно быть числового типа, поскольку по этому полю и будет проводиться суммирование. Если в таблице siim_dohod есть строка, совпадающая по ключу с текущей строкой из таблицы vr_dohod, то новая строка в таблице sum dohod не заводится, а значение не ключевых полей в совпадающей по ключу строке увеличивается на соответствующие значение этих полей. В данном примере, к строке с суммарным доходом сотрудника прибавляется текущее значение дохода из переписываемой строки. Значение системной переменной sy-tabix после этого действия равняется номеру строки, в которую произведена запись.

Принимающая таблица должна быть отсортирована, поэтому в ее декларацию вставлено определение like sorted table of, обеспечивающее ее сортировку по указанному далее ключу.

Пусть таблица vr_dohod, имеет следующий вид:

Page 26: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Ф а м и л и я Т а б е л ь н ы й н о м ер Д о х о д в р у б л я хn a m e t n u m v d o h o d

Иванов 0 0 1 5 2 3 5 4 ,5 0

Петров 0 0 1 8 1 6 7 8 ,0 0

Иванов 0 0 1 5 1 4 8 7 ,3 0

Сидоров 0 0 2 5 3 6 0 0 ,0 0

Тогда после переписи первых двух строк, таблица sum dohod будет иметь вид:Ф а м и л и я Т а б е л ь н ы й н о м ер Д о х о д в р у б л я х

Иванов 0 0 1 5 2 3 5 4 ,5 0

Петров 0 0 1 8 1 6 7 8 ,0 0

Значение системной переменной sy-tabix равно 2. После переписи следующей строки:Ф а м и л и я Т а б е л ь н ы й н ом ер Д о х о д в р у б л я х

Иванов 0 0 1 5 3 8 4 1 ,8 0

Петров 0 0 1 8 1 6 7 8 ,0 0

sy-tabix = 1После переписи последней строки:

Ф а м и л и я Т а б е л ь н ы й н о м ер ! Д о х о д в р у б л я х

Иванов 0 0 1 5 3 8 4 1 ,8 0

Петров 0 0 1 8 1 6 7 8 ,0 0

Сидоров 0 0 2 5 3 6 0 0 ,0 0

sy-tabix = 3Команду collect следует использовать без дополнительных

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

Если возникает потребность продублировать внутреннюю таблицу, то можно воспользоваться простой конструкцией на основе команды move.

Page 27: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

types begin of t_dohod, name(16) type c, t_num type i,v_ dohod type p decimals 2, end of t_dohod.

data vr_dohod like table of t_dohod, dr_dohod like table of t_dohod. move vr_dohod to dr_dohod.

По этой команде все содержимое внутренней таблицы vr_dohod переписывается в таблицу d rdohod . В другом контексте та же самая команда будет означать совсем другое действие.

tables customers.data: t_customer like table of customers with header line.

select single * from customers where id eq ‘00000005’. move customers to t_customer. append t_customer.

Здесь строка с оператором move обеспечивает перепись одной строки из таблицы базы данных в головную строку внутренней таблицы t_customer. Затем эта строка заносится в таблицу t customer командой append.

5.4. Чтение строк из внутренней таблицы.

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

loop at vr_dohod.write / vr dohod-name.

Page 28: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

endloop.Все строки внутренней таблицы будут выведены в том

порядке, в котором к этому моменту они оказались. Если нам надо разместить строки в определенном порядке, то таблицу следует предварительно отсортировать. Команды сортировки рассмотрим позже, а пока познакомимся с особенностями построчного последовательного вывода всех строк таблицы.

Оператор loop at, так же как и select, может иметь уточняющие дополнения. Дополнение начинается с оператора where, за которым следует логическое выражение или шаблон. Это дополнение позволяет отбирать для вывода отдельные строки, удовлетворяющие этому условию,

loop at vr_dohod where t__num<20.

write / vr_dohod-name. endloop.

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

loop at vr_dohodwhere v_dohod>3000 and name cp ‘И%’.

write / vr_dohod-name. endloop.

На это логическое выражение будут выведены начинающиеся с буквы ‘И’ фамилии всех работников, с доходом более 3000 рублей. Возможны и более сложные конструкции, например, вложенные циклы:

data: begin of t_dohod, name(16) type c, t_num type i,v_ dohod type p decimals 2,

Page 29: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

end of t_dohod, begin of t_otdel,

otd type i, name(16) type c, city type c, tel(13) type c, prof type c, end of t_otdel, rab(16) type c.loop at vr_otdel where prof eq ‘инженер’.

rab = vr_otdel-name loop at vr_dohod where name eq rab.

write: / vr_dohod-name, vr_dohod-v_dohod.endloop.endloop.

Пусть таблица vr_otdel, имеет следующий вид:Отдел Ф а м и л и я Город Телефон Должность

otd n a m e c ity te l p r o f

001 Иванов Москва 095-684-48-35 инженер00) Петров Москва 095-684-48-53 менеджер002 Кузнецов Санкт-Петербург 8 I2-334-22-33 инженер00! Сидоров Москва 095-l I l-18-ЗЗ менеджер

В результате работы этого фрагмента, в первом цикле будут отобраны все инженеры из таблицы vr_otdel, а во внутреннем цикле, из таблицы vr_dohod выведены строки с фамилией инженера и его доходом.

Команды сортировки играют важную роль в работе с внутренними таблицами. Во-первых, некоторые операции с внутренними таблицами можно проводить, только если таблица заранее отсортирована. Во-вторых, различные виды сортировки позволяют по-разному взглянуть и разнообразно анализировать

Page 30: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

данные внутренней таблицы. Наконец, скорость некоторых операций после сортировки значительно увеличивается.

Самый очевидный способ сортировки - это использовать команду sort. Например, если применить этот способ к таблице vr_dohod:

types begin of t_dohod, name(16) type c, t_num type i,v_ dohod type p decimals 2, end of t_dohod.

data vr_dohod like table of t_dohod. sort vr_dohod.

то эта таблица будет упорядочена в соответствии с порядком следования полей в структуре таблицы. Сначала по полю name, затем по полю t_num и, наконец, по полю v_dohod, несмотря на то, что табельный номер для сотрудника уникален и не может быть у порядочен. Результат сортировки приведен в следующей таблице:

Фамилия Табельный номер Доход в рубляхname t num v_dohod

Иванов 0015 1487,30Иванов 0015 2354,50Петров 0018 1678,00

Сидоров 0025 3600,00В данном случае правильнее было бы использовать

сортировку по заданному набору полей.data vr_dohod like table of t_dohod.

sort vr_dohod by name v_dohod.Результат сортировки будет такой же, как и в предыдущем

случае, однако, будет исключена бессмысленная сортировка по полю t num.

Page 31: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

В предыдущих сортировках не оговаривался порядок сортировки по выбранным полям. По умолчанию сортировка всегда проводится в сторону возрастания значений в полях. Если нужен обратный порядок сортировки, то следует ввести уточнение descending (в порядке убывания). При следующем задании на сортировку:

data vr_dohod like table of t_dohod. sort vr_dohod by v_dohod descending,

получим такой результат.Фамилия Табельный номер Доход в рублях

name t num vdohodСидоров 0025 3600,00Иванов 0015 2354,50Петров 0018 1678,00Иванов 0015 1487,30

Эту таблицу можно вывести целиком, как было показано ранее, а можно вывести отдельные строки.

Строки из внутренней таблицы считываются с помощью оператора read. Этот оператор обеспечивает поиск нужной строки и чтение ее содержимого. Сведения о правильном выполнении команды read заносятся в системную переменную sy-subrc. Если чтение из таблицы успешно выполнено, то в sy- subrc заносится ноль. Если нужная строка не найдена, то sy- subrc не равно нулю. Перед поиском строки, все строки таблицы должны быть упорядочены в соответствии с ключом, по которому отыскивается строка. Проще всего найти требуемую строку путем прямого указания ее номера,

read table vr_dohod index 4. if sy-subrc = 0.

write / vr_dohod-name.else.

write / ‘нет искомой строки’.endif.

Page 32: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

В данном случае предполагается, что таблица всегда упорядочена по номерам своих строк, и событие ‘sy-subrc не равно нулю’ случается, только если таблица оказалась короче, чем ожидалось. Другое дело, что в содержимое строки с выбранным номером зависит от порядка внутреннего упорядочения таблицы. Если внутренняя таблица не упорядочена, то возможны ошибки при поиске заданной строки.

После целенаправленного чтения строки, перед выполнением каких-либо действий с этой строкой, желательно проверить успешность чтения по системной переменной sy- subrc. Если строка не прочиталась, то выполнение дальнейших действий может привести к системной ошибке.

Для таблиц баз данных самой естественной является сортировка по первичному ключу. Для внутренней таблицы это не характерно, поскольку внутренняя таблица не обязана иметь первичный ключ. Зато для внутренней таблицы возможно упорядочение по любому полю как по ключевому. Это обеспечивает дополнение binary search, если содержимое поля соответствует понятию ключа. Упорядочение внутренней таблицы для бинарного поиска существенно увеличивает скорость выполнения операций, требующих регулярности таблицы. К таким операциям относится чтение строк внутренней таблицы по некоторому критерию, особенно, если таблица большой длины.

Из всех ранее рассмотренных внутренних таблиц, только t_customer имеет уникальный ключ, поэтому возьмем для примера ее.

read table t_customer with key id = ‘00000026’ binarysearch.if sy-subrc = 0.

write / t_customer-name.else.

write / ‘нет искомой строки’.

Page 33: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

endif.В этом примере перед чтением строки проведена бинарная

сортировка, а затем нужная строка найдена быстро и однозначно. Если строка с таким значением ключа отсутствует, то будет выведено сообщение «нет искомой строки». Для организации бинарного поиска не обязательно выбирать поле, полностью соответствующее понятию ключа. Можно взять несколько полей, и организовать бинарный поиск по ним.

types begin of t_dohod, name(16) type c, t_num type i,v_ dohod type p decimals 2, end of t_dohod.

data vr_dohod like table of t_dohod with header line, read vr_dohod with key name = ‘Иванов’ t_num = ‘0015’ v_dohod = ‘2354,50’ binary search, if sy-subrc = 0.

write: / vr_dohod-name, vr_dohod- v_dohod.else.

write / ‘нет искомой строки’.endif.

Команда read предполагает, что внутренняя таблица имеет головную строку или рабочую область для размещения считанной строки. Именно в эту область помещается найденная строка таблицы.

types begin of t_dohod, name(16) type c, t_num type i,v_ dohod type p decimals 2,

Page 34: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

end of t_dohod.data: vr_dohod like table of t_dohod,

work_str like t_dohod. read vr_dohod to work_str with key name = ‘Иванов’ t num * ‘0015’ v_dohod = ‘2354,50’ binary search, if sy-subrc = 0.

write: / vr_dohod-name, vr_dohod- v_dohod.else.

write / ‘нет искомой строки’.endif.

В данном случае, считанная строка помещается в рабочую область work_str. Однако, при переносе выбранной строки в другую таблицу, специальную рабочую область описывать не обязательно, достаточно вместе с оператором read использовать ключевое слово into. В этом случае, рабочая область необходимой структуры выделяется автоматически.

data: vr_dohod like table of t_dohod, s_dohod like table of t_dohod. read vr_dohod to s_dohod with key name - ‘Иванов’ t_num = ‘0015’ v_dohod = ‘2354,50’ binary search.

Тем не менее, выделение специальной области для чтения строки из внутренней таблицы обладает определенными преимуществами перед автоматическими действиями. Когда выбранная строка помещена в рабочую область, с ней возможны различные действия, а не только перепись из одной таблицы в другую.

Page 35: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

5.5. Изменения во внутренней таблице.

Рассмотрим задачу внесения измерений во внутреннюю таблицу. Простейший случай - изменение одной строки. Перед внесением изменений надо убедиться, что такая строка существует. Для этого требуется, что бы строка выбиралась по уникальному ключу, а записи в таблице были по этому ключу упорядочены. Самый простой вариант упорядочения таблицы по ключу, это организация бинарного поиска (binary search) в таблице.

types begin of t_dohod, name(16) type c, t_num type i,v_ dohod type p decimals 2, end of t_dohod.

data vr_dohod like table of t_dohod with header line, read vr_dohod with key t_num = ‘0025’ binary search, if sy-subrc = 0.vr_dohod-name = ‘Кузнецов’. vr_dohod-t_num = ‘0014’. vrdohod-vdohod = ‘2838,50’. insert vr_dohod index sy-tabix. endif.

В данном случае использован тот факт, что после прочтения строки таблицы в системной переменной sy-tabix остается порядковый номер считанной строки. В этом примере порядковый номер 4. Этот номер можно использовать для возвращения вставляемой строки на то место, где находилась считанная строка. Сама эта строка окажется отодвинутой на следующее место. Таблица приобретет следующий вид:

Page 36: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Ф а м и л и я Т а б е л ь н ы й н о м е р Д о х о д в р у б л я х

n a m e t n u m v d o h o d

Иванов 0015 2354,50Петров 0018 1678,00Иванов 0015 1487,30

Кузнецов 0014 2838,50Сидоров 0025 3600,00

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

data: vr_dohod like table of t_dohod with header line, dr_dohod like table of t_dohod with header line.

Если говорить об изменениях в таблицах, то этому понятию больше соответствует внесение изменений в найденную строку. Для этого используется оператор modify:

data vr_dohod like table of t_dohod with header line, read vr_dohod with key tnum = ‘0025’ binary search, if sy-subrc = 0. vr_dohod-name = ‘Сидоров’. vr_dohod-t_num = ‘0024’. vr_dohod-v_dohod = ‘3666,60’. modify vr_dohod index sy-tabix. endif.

Таблица приобретает вид:Ф а м и л и я Т а б е л ь н ы й н о м е р Д о х о д в р у б л я х

n a m e t n u m v d o h o d

Иванов 0015 2354,50Петров 0018 1678,00Иванов 0015 1487,30

Кузнецов 0014 2838,50Сидоров 0025 3666,60

Page 37: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Не всегда для модификации строки таблицы нужно знать ее порядковый номер. Если строка считана в рабочую область или головную строку таблицы в цикле loop/endloop, то после модификации операцией modify строка будет возвращена на свое место. Рассмотрим введенную раньше таблицу vr_otdel. В ней приведены телефоны сотрудников с кодом города. Внесем в эту таблицу изменения, связанные с изменение кода города Москвы с 095 на 495.

data vr_otdei like table of t_otdei with header line, loop at vr_otdel where city = ‘Москва’, replace '095' with '495' into vr_otdel-tel. modify vr_otdel index, endloop.

Таблица vr_otdeI после изменений приобретет следующийвид:Отдел Фамилия Город Телефон Должность

otd name city tel prof001 Иванов Москва 495-684-48-35 инженер001 Петров Москва 495-684-48-53 менеджер002 Кузнецов Санкт-Петербург 812-334-22-33 инженер001 | Сидоров Москва 495-111-18-33 менеджер

Для удаления одной или нескольких строк из внутренней таблицы используется команда delete. Если удаляется одна строка, то ее нужно сначала найти.

data vr_dohod like table of t_dohod with header line, read vr_dohod with key t num = ‘0025’ binary search, if sy-subrc = 0.delete vr_dohod index sy-tabix. endif.

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

data vr_otdel like table of t_otdel dohod with header line.

Page 38: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

delete vr_otdel where otd>001.или

delete vr_otdel where name cp ‘П%’.Если внутренняя таблица определена как static, то после

окончания работы с ней, ее можно удалить из памяти операцией refresh.

refresh vr_otdel.Внутренние таблицы, не распределенные статически,

исчезают из памяти сами, как только работа с ними прекращается.

6. Управление при работе с внутренними таблицами.

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

first - при начальном обращении к таблице; last - при завершении таблицы;new col - если содержимое поля col изменилось на этом

шаге прохода по таблице;end of col - если содержимое поля col должно измениться

на следующем шаге прохода по таблице;Последние два события предполагают, что таблица

упорядочена по полю col. В этом случае, изменение поля col означает, что начала обрабатываться следующая группа записей.

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

Page 39: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

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

types: begin of t__otdel, otd type i, name(16) type c, city type c, tel(13) type c, prof type c, end of t_otdel.data: vr_otdel like sorted table of t_otdel with key otd name,vsego type i. vsego = 0. loop at vr_otdel.

at firstwrite ‘список сотрудников’,

endat. at new otd

write: / ‘отдел ’, otd. endat.at end of otd

write: / ‘всего сотрудников в отделе: vsego. vsego = 0.

endat.vsego = vsego + 1. write: / vsego, ‘. ’, name, endloop.

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

Page 40: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

заголовок ‘отдел 00Г, если, конечно, в этом отделе есть- сотрудники. Затем выводится список сотрудников с номерами, начиная с первого, в алфавитном порядке. В конце списка отдела печатается строка: ‘всего сотрудников в отделе: ’ и их число. Эта строка печатается до появления номера нового отдела, то есть до печати названия следующего отдела. Одновременно обнуляется счетчик числа сотрудников отдела, так что после этой операции снова выводится список сотрудников с номерами, начиная с первого. Итоговая строка печатается и в конце всего списка, поскольку отсутствие нового отдела - это тоже изменение ситуации.

7. Порядок выполнения работы

Для выполнения работы необходимо иметь доступ к программному обеспечению - SAP Applycation Server, установленному на выделенном сервере. На рабочей станции должен быть установлен SAPlogon, настроенный на IP SAP Applycation Server. Доступ к SAP AS может быть реализован по локальной сети, по сети Internet или Intranet (СПД). Пользователь не увидит разницы между этими подключениями. На одном SAPlogon может быть зарегистрировано несколько подключений к разным SAP AS. Для подключения к SAP AS студент должен выбрать строку с именем подключения, нажать кнопку “Регистрация”, в появившемся окне ввести логин и пароль, указанные преподавателем. После подключения к SAP AS студент увидит функциональное меню учебной системы. В этом меню надо выбрать пункты: «Инструменты», «АВАР- инструментальные средства», «Разработка» и, наконец, «АВАР- редактор», или набрать в верхнем окошке имя транзакции SE38. В открывшемся окне выбора программы надо набрать имя создаваемой Вами программы. Обязательное условие: имя программы должно начинаться с буквы z. Затем следует название группы, три буквы фамилии и порядковый номер создаваемой программы. Наконец нажмите кнопку «Создать».

Page 41: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Если программа с таким именем уже есть, то возьмите 4 буквы фамилии.

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

Обращайте внимание на правильную расстановку пробелов, точек, запятых и двоеточий. Начинающие часто не отделяют знак равенства и другие знаки пробелами от идентификаторов, и, наоборот, ставят пробел между именем идентификатора и числом знаков в скобках. Редактор строг к пробелам, а замечания, которые он делает, часто невнятны.

После исправления синтаксических ошибок программу надо активировать. Это можно сделать только после исправления всех ошибок. После активации программа становится доступной всем пользователям системы, и для запуска на исполнение. При внесении исправлений после активации, проверка синтаксических ошибок часто не срабатывает, поскольку система видит текст активированной программы. Но проверка синтаксиса возможна, если попытаться активировать исправленный текст.

При запуске программы на исполнение окно с текстом закрывается результатами, но только в том случае, если в программе предусмотрена печать. Для возвращения к тексту программы надо нажать кнопку с зеленой стрелкой налево.

Для завершения работы нужно в главном меню (наверху экрана) выбрать пункт «Система», а в выпадающем меню - «Выход из системы».

Page 42: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

8. Рабочее задание

Лабораторная работа Ns 3.

Таблицы баз данных и внутренние таблицы.З а д а н и е .

1. Используя средства просмотра АВ АР-словаря,посмотреть структуру и содержимое таблицы баз данных - actfli. Для этого можно использовать транзакции: SE80 и SE16. Создать копии экранов результатов и поместить в отчет.

2. Написать три программы для распечатки содержимоготаблицы баз данных - actfli. Первая - с прямой печатью строк таблицы. Вторая - с печатью через структуру, совпадающую со структурой таблицы баз данных actfli. Третья - считывание содержимоготаблицы баз данных actfli во внутреннюю таблицу и печать из нее. Печатать только заполненные поля таблицы баз данных actfli. Снять копии экранов результатов и поместить в отчет.

3. Отобрать из таблицы баз данных actfli строки всоответствии с условием, заданным в предложенном варианте. (Варианты зависят от набора данных в таблице и предлагаются преподавателем в каждой группе индивидуально.) Создать копии экрановрезультатов и поместить в отчет.

4. Создать внутреннюю таблицу, включающуюотдельные столбцы таблицы баз данных actfli (указанные в варианте). Использовать для заполнения внутренней таблицы оператор move-corresponding. Создать копии экранов результатов и поместить в отчет.

варианты:1 . carrid connid fldate2. carrid fldate price

Page 43: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

3. carrid price currency

4- carrid currency seatsocc5. fldate price currency6. price currency seatsocc7. currency seatsocc fldate8. price currency connid9. connid fldate currency10. connid seatsocc currency

5. Создать внутреннюю таблицу и скопировать в нее данные из таблицы баз данных actfli. Вставить перед строкой 5 дополнительную строку. Содержание строки в соответствии с вариантом. Создать копии экранов результатов и поместить в отчет.

6. Создать внутреннюю таблицу и скопировать в нее данные из таблицы баз данных actfli. Найти строку таблицы в соответствии с вариантом. Вставить перед ней дополнительную строку. Создать копии экранов результатов и поместить в отчет.

Лабораторная работа № 4.

Преобразование внутренних таблиц. З а д а н и е .

1. Создать две внутренних таблицы методом формирования и добавления новых строк. Таблицы имеют следующие атрибуты:

№ ФИО Табельный Должность Город Телефонотдела сотрудника №

вторая:№ п/п ФИО сотрудника j Табельный № [ Должность Зар. плата

Page 44: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

Следует завести 3 отдела, в каждом отделе 3 сотрудника, у каждого сотрудника зарплата за 3 месяца. Телефоны записываются с кодом города. Один из городов - Москва.

Распечатать таблицу после ввода. Этот ввод будет заготовкой для выполнения дальнейших заданий.

2. Отсортировать таблицу 2 по ФИО сотрудников.3. Отсортировать таблицу 2 по должности и ФИО

сотрудников.4. Отсортировать таблицу 2 по ФИО сотрудников в

обратном порядке.5. Отобрать всех сотрудников отдела 2 по таблице 1,

вывести строки с их зарплатой из таблицы 2.6. В таблице 1 заменить код города Москва с 495 на 499

везде, где он встречается.7. Из таблицы 2 создать новую таблицу, в которой все

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

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

Отчет должен содержать:1. Название и цель работы.2. Результаты работы: текст программы на языке АВАР и

скриншоты результатов.3. Пояснения к сделанному выбору программного решения.

10. Литература

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

Page 45: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

1. АВАР

2. АВАР- сло- варь

3. SQL

4. база данных

5. Внут­ренняя табли­ца

АВАР - Advanced Business Application Programming - язык программирования четвертого поколения. Предназначен для развитого программирования бизнес-приложений. АВАР разработан компанией SAP AG, и положен в основу системы R/3 .

АВАР-словарь содержит всю информацию об объектах информационной системы, описанных глобально. Словарь содержит метаданные о данных, записанных в таблицах БД.

Structured Query Language - язык запросов реляционных баз данных. В системе SAP R/3 представлен двумя составляющими: Open SQL и Native SQL. Open SQL - это часть языка АВАР, предназначенная для взаимодействия с базами данных.Он не зависит от платформы базы данных. Native SQL - внутренний язык системы управления базы данных. Он зависит от платформы БД, и передается в систему управления БД без преобразований.

База данных (БД) - это хранилище данных в информационной системе, снабженное системой управления (СУБД). В основе БД SAP могут лежать различные стандарты баз данных: Oracle, MS SQL Server и ряд других. При этом управление данными производится на уровне системы управления SAP. Разработчик программы на АВАР обычно может не задумываться, какая реализация БД размещена в системе.

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

Page 46: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

обработку данных за счет быстрого доступа. Они используются для формирования и накопления данных для вывода на печать.

6. голов- Головная строка внутренней таблицы - этоная специально выделенная буферная область в строка оперативной памяти, предназначенная для

временного хранения записей, поступающих для записи в таблицу или для передачи в другие таблицы. Структура головной строки совпадает со структурой записей таблицы.

7. данные Данными называется любая информация,собранная при управлении предприятием и хранимая в базах данных. Данные используются при текущем управлении предприятием, анализе эффективности управления и прогнозе развития бизнес-процессов.

8. декла- Все переменные, константы и структурырация должны быть продекларированы в программе до

начала их использования. Локальные переменные описываются в процедурах и модулях, там, где они используются. Блок деклараций в АВАР программе выделяется в специальный модуль, и располагается сразу после строки с названием программы.

9. запись Записи - это строки таблицы. Записи(строка внутренней таблицы представляют собой таблиц структуры, причем все записи имеют одну и ту же ы БД) структуру. Записи таблицы БД представляют

собой плоские структуры.10. запрос Запрос - это основное средство общения

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

Page 47: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

11. Инсгру мента­льные сред­ства

12. Инфор­мацией пая систе­ма

13. ключ (перви чный ключ)

возможности предоставляют ракурсы.В комплексное окружение языка АВАР/4

входят инструментальные средства, предоставля­ющие разработчику широкий выбор инструмен­тария для создания, тестирования, регистрации и хранения программных модулей. Эти же средства обеспечивают просмотр, анализ и коррекцию существующих программных элементов. Инстру­ментарий АВАР/4 включает в себя: редактор АВАР, интерфейс к АВАР-словарю, разработчик моделей данных, построитель функций, постро­итель меню, построитель экранов и ряд других.

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

Ключ таблчцы л SAP чомчтаюпервичный ключ в реляционных базах данных. Создание ключа обязательно для сортированных и хешированных таблиц. Стандартные внутренние таблицы могут и не иметь ключа. Этот ключ задается специальным дополнением в строке декларации таблицы. По умолчанию, ключ создается уникальным, но можно создать не уникальный ключ внутренней таблицы.

Page 48: ОСНОВЫ ЯЗЫКА АВАР (часть 2)library.miit.ru/methodics/2786.pdf · 2016-09-21 · УДК 004 Б82 Борчанинов М.Г. Основы языка АВАР. Часть

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

ОСНОВЫ ЯЗЫКА АВАР (часть 2)

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

Подписано в печать 29 . J2. 07. Тираж 100 экз.

уел.-п.л. 3,0 Заказ №?<?#Формат 60x84.16 Изд.№ 203-07

127994 Москва, ул. Образцова, 15. Типография МИИТа