моделирование сетями Петри   ОКМ   ДМ   экономическая информатика   4GL   Теория и практика обработки информации

Компьютерный язык ABAP/4

Программирование на языке ABAP/4 системы SAP

  1. Обзор системы SAP R/3
  2. Архитектура системы SAP R/3
  3. Навигация в системе SAP R/3
  4. Системный ландшафт, обзор ABAP инструментальных средств
  5. Cловарь данных системы R/3
  6. Таблицы словаря данных
  7. Ракурсы данных
  8. Средства поиска
  9. Обзор языка ABAP/4 системы SAP R/3
  10. Основные возможности языка ABAP/4
  11. Структура и виды программ, среда разработки
  12. Концепция синтаксиса языка ABAP/4
  13. Определение данных в языке ABAP/4
  14. Элементарные типы данных
  15. Сложные типы
  16. Операторы языка ABAP/4
  17. РАБОТА С ВНУТРЕННИМИ ТАБЛИЦАМИ
  18. Создание подпрограмм и функциональных модулей
  19. ПОДПРОГРАММЫ И ФУНКЦИИ
  20. Выборка данных в системе R/3 с использованием Open SQL, Native SQL
  21. ЧТЕНИЕ ТАБЛИЦ БАЗЫ ДАННЫХ
  22. Техники программирования отчетов на языке ABAP/4 системы R/3
  23. Создание интерактивных отчетов
  24. Создание отчетов с помощью элементов управления ALV
  25. SAP Control Framework
  26. ALV Grid Control
  27. Создание отчетов с использованием генератора отчетов SAP SmartForms
  28. Создание диалоговых программ в системе SAP R/3
  29. Экраны SAP R/3
  30. ЭКРАНЫ ВЫБОРА
  31. Логика ДинПро (Dynamic Programs)
  32. Технологии расширений функциональности системы SAP R/3
  33. SAP-расширения (User Exits, Customer Exits)
  34. Загрузка данных в систему R/3
  35. Работа с файлами
  36. РАБОТА С ФАЙЛАМИ, НАХОДЯЩИМИСЯ НА СЕРВЕРЕ ПРИЛОЖЕНИЙ
  37. Технология пакетного ввода (Batch Input, Call Transaction)
  38. Технология BAPI
  39. Полезные ссылки по SAP ERP и ABAP/4

Обзор системы SAP R/3

Архитектура системы SAP R/3

Система R/3 представляет собой набор приложений, написанных исключительно на языке ABAP/4 и поэтому не зависящих от конкретной платформы. Язык ABAP/4 занимает центральное место в программном обеспечении связного уровня, что позволяет сделать программу независимой от аппаратуры, операционной системы и СУБД.
Система R/3, разработанная на базе трехуровневой архитектуры, предназначена для реализации распределенных вычислений в среде клиент/сервер. R/3 содержит 3 логических уровня:

Каждая из этих служб может быть распределена и исполняться на различных аппаратных устройствах.
Интерфейс презентации SAPGUI (GUI - графический интерфейс пользователя) осуществляет выполнение специфичных для платформы функций ввода и вывода в системе R/3. SAPGUI главным образом ориентирован на Windows Style Guide и доступен для нескольких платформ с предоставлением аналогичных функций для них.
В настоящее время администрирование больших объемов данных обычно осуществляется посредством систем управления реляционными базами данных (СУРБД). Эти системы сохраняют данные и связь между ними в двумерных таблицах, которые известны своей логической простотой. Определения данных, таблиц и отношений между таблицами хранятся в словаре данных реляционной СУРБД.
Сервер приложений обеспечивает поддержку следующих типов рабочих процессов: (диалоговая обработка (D), обновление (V: от немецкого в??Verbuchungв??), управление блокировками (E), фоновая обработка (B), спул (S)) исполняющаяся система R/3 предоставляет два дополнительных сервиса для внутренней и внешней связи (ниже приведены ограничения по количеству рабочих процессов).
Система обеспечивает разные варианты масштабирования R/3 - от самых малых систем (одноуровневой для небольшого числа пользователей) до крупномасштабных вычислительных сред (трехуровневых систем для многих тысяч пользователей).
Инстанция это административная единица, объединяющая компоненты системы Базис R/3 предоставляющая один или несколько сервисов. Сервисы, предоставляемые инстанцией, запускаются и останавливаются одновременно. Для установки параметров всех компонентов инстанции необходимо использовать общий профиль инстанции.
Существует 3 вида конфигурации базисной системы R/3:

Базисная система (R/3 Basis) системы состоит из следующих компонентов:

Функции базисной системы SAP R/3:

Архитектура базисной SAP-системы наилучшим образом подходит для конфигурации по принципу клиент-сервер.

Навигация в системе SAP R/3

Система R/3 является системой, поддерживающей концепцию мандантов. Концепция мандантов позволяет нескольким разным, не зависящим друг от друга предприятиям выполнять совместные операции в одной системе. При каждом пользовательском сеансе возможен доступ только к данным манданта, выбранного при регистрации в системе.
Мандант - это организационно независимая часть в системе R/3. Каждый мандант имеет собственную среду данных, т.е. собственные основные и переменные данные, присвоенные основные записи пользователей, планы счетов и специфические параметры настройки.
Для обеспечения возможности регистрации пользователя в системе, в ней должна быть создана основная запись пользователя, связанная с соответствующим мандантом.
SAP-системы доступны на целом ряде языков. Поле ввода Язык используется при начале каждого сеанса работы для выбора языка регистрации.
SAP Easy Access - это стандартный первый экран, появляющийся после выполнения регистрации в системе.
Навигация по системе может осуществляться с помощью компактной древовидной структуры, которую можно настроить в соответствии с индивидуальными пожеланиями пользователя.
Роль описывает набор логически взаимосвязанных транзакций. Эти транзакции представляют собой набор типичных функций, используемых тем или иным пользователем с его рабочей станции.
Группы операций (роли пользователей) должны быть настроены через генератор профилей для того, чтобы пользователи системы SAP могли работать с меню, соответствующими роду их деятельности. Полномочия на операции из меню также присваиваются пользователям через группы операций. С версии 4.6 стандартная система содержит предварительно определенные группы операций (роли пользователей) для каждой прикладной сферы.
Для получения справки по полям, меню, функциям и сообщениям используется F1.
Для получения информации по допустимым значениям ввода используется справка F4. К справке F4 можно также обратиться, нажав кнопку у правой границы выбранного поля.
Если в определенном поле ввода стоит маленькая галочка, то переход к следующему экрану приложения возможен только после ввода в это поле разрешенного значения.

Системный ландшафт, обзор ABAP инструментальных средств

Данные в системе R/3 подразделяются на:

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

Модификации клиента или расширения (объекты клиента, включенные в стандартную поставку SAP-системы) вносят изменения в репозитарий. В стандартной поставке системы SAP предоставляет интерфейсы для этих расширений.
Модификации изменяют такие объекты SAP, как отчеты и определители таблиц. Репозитарий поставляемый SAP не только расширен, но и изменен. Именно поэтому модификации должны быть откорректированы в соответствии с новым репозитарием, инсталлированным в ходе последней смены версии R/3. Процедура корректировки может занять некоторое время.
Для обеспечения согласованности и непротиворечивости системы SAP рекомендует установить системную среду, состоящую из трех систем. Эти три системы включают в себя "продуктивные" манданты (для разработки, настройки и производственной эксплуатации) и любые другие необходимые манданты (для обучения, тестовый мандант и др.
Системы внутри системной среды должны иметь уникальные трехзначные имена.
Объекты репозитария создаются и редактируются посредством ABAP-инструментальных средств.
При редактировании объектов репозитария можно непосредственно вызвать ABAP-инструментальные средства, а затем выбрать соответствующий объект репозитария, либо при просмотре объектов репозитария напрямую перейти к инструментальным средствам.
Браузер репозитария предоставляет доступ к объектам репозитария.
ABAP-инструментальные средства содержат все инструменты для поддержки полного цикла разработки ПО.
С помощью ABAP-инструментальных средств разработчики могут без каких-либо проблем создавать приложения клиент/сервер при этом нет необходимости рассматривать вопросы связи и дистрибуции.
ABAP-словарь предназначен для создания и управления определениями данных. Он позволяет описать все данные, используемые в системе, взаимоотношения между ними, а также обеспечивает централизованное и упорядоченное хранение этих данных. Механизм активации гарантирует, что любые изменения выполненные в ABAP-словаре, будут немедленно задействованы во всех релевантных системных компонентах.
Наиболее важными инструментами разработок являются:

Cловарь данных системы R/3

ABAP-словарь предназначен для создания и управления определениями данных. Он позволяет описать все данные, используемые в системе, взаимоотношения между ними, а также обеспечивает централизованное и упорядоченное хранение этих данных. Механизм активации гарантирует, что любые изменения выполненные в ABAP-словаре, будут немедленно задействованы во всех релевантных системных компонентах.
ABAP-словарь является интегрированным и активным словарем, т.е. он полностью интегрирован в среду разработок SAP. Любое определение в словаре создается только один раз и затем автоматически становится доступным в любом месте системы. Любая информация, созданная или измененная в активном ABAP-словаре, доступна автоматически, что обеспечивает актуализацию динамических объектов, непротиворечивость и защиту данных.
Интеграция ABAP-словаря с процессом выполнения программы основывается на интерпретирующей среде выполнения R/3. ABAP-процессор не использует исходные ABAP-программы. Он интерпретирует динамические объекты, созданные из текстов программ, перед тем, как программа выполняется впервые. Если процедура сравнения метки времени определила разницу между программой и ABAP-словарем, осуществляется автоматическая регенерация динамического объекта перед его выполнением.
Вся информация, критичная для производительности системы, хранится в динамических объектах (программах, масках и т.п.). Система гарантирует, что в момент выполнения эта информация всегда будет актуальной.
Наиболее важными объектами ABAP Словаря являются:

Таблицы словаря данных

Таблица представляет собой двумерную матрицу. Она имеет имя и атрибуты, такие как тип таблицы. Каждая таблица-образец имеет первичный ключ, состоящий из комбинации столбцов, которые однозначно идентифицируют запись таблицы. Это означает, что в таблице не может находится две записи с одинаковым первичным ключем.
Поле имеет имя и атрибуты. Например, оно может быть полем первичного ключа. Поле зависит от таблицы и поэтому не является самостоятельным объектом и его ведение осуществляется только внутри таблицы. Поле таблицы определяется доменами и элементами данных.
Домен используется для определения технических атрибутов поля таблицы и содержит технические свойства поля таблицы, такие, как длина поля, тип поля, атрибуты вывода и все ограничения на основании значений по умолчанию.
Элемент данных представляет собой семантическое определение поля таблицы и может содержать краткое описание поля, например, при нажатии функциональной клавиши F1. Начиная с версии 4.6 технические атрибуты поля могут быть определены в элементе данных и нет неободимости использовать домен.
Ведение таблиц, элементов данных и доменов осуществляется централизованно в ABAP-словаре. При активации поля оно сохраняется в базе данных под тем же самым именем.
Двухуровневая концепция доменов позволяет определять и вести технические атрибуты полей на уровне домена. Домен может описывать технические атрибуты любого количества полей, вследствие чего при изменении технических атрибутов полей необходимо выполнить изменения только в домене, а не в отдельных полях. Такой механизм гарантирует также то, что если домены идентичны, значения полей можно сравнивать без каких-либо преобразований.
Существует несколько видов таблиц в ABAP словаре:

На рисунке 1отображены основные характеристики различных видов таблиц.

Рисунок SEQ Рисунок \* ARABIC 1. Основные характеристики различных видов таблиц
Прозрачные таблицы в основном используются для хранения данных прикладных приложений, а также основных данных бизнес-объектов.
Таблицы пула состоят из большого количества небольших таблиц и служат для хранения истории и статистических данных.
Кластерные таблицы служат для хранения данных с пересекающимися по данным первичными ключами. Это позволяет увеличить скорость считывания данных.
В большинстве случаев при разработке используются прозрачные таблицы.
При создании прозрачных таблиц необходимо указывать следующие характеристики:

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

Ракурсы данных

Несмотря на тесную логическую связь между моделью данных SAP и ABAP-словарем, может понадобиться распределение типов сущностей по нескольким таблицам ABAP-словаря или объединение нескольких типов сущностей в одной таблице. Для этого в ABAP-словаре определены ракурсы. Эти ракурсы организуют связь между типами сущностей в модели данных и в таблицах АВАР-словаря.
Ракурс является логическим отображением одной или нескольких таблиц. Данные для ракурсов не хранятся физически, они извлекаются из одной или нескольких таблиц, при осуществлении доступа к ракурсу. Если в таблице содержится слишком большое количество полей, но необходимо обращаться только к нескольким полям, можно определить ракурс в котором будут отображаться только те поля таблицы, в которых заинтересован пользователь. Ракурсы позволяют организовать быстрый доступ к определенным данным.
Ракурсы определяются в ABAP-словаре. Можно использовать следующие операторы сравнения: оператор соединения (JOIN), оператор проекции (PROJECTION) и оператор ограничения (SELECTION). Оператор JOIN определяет связь между базисными таблицами, используемыми в ракурсе. Оператор PROJECTION определяет, какие столбцы базисных таблиц необходимо отобразить в ракурсе. Оператор SELECTION определяет, какие записи таблиц необходимо отобразить в ракурсе.
ABAP-словарь содержит несколько видов ракурсов, отличающихся по своим задачам и объему выводимых данных. Начиная с версии 4.0, можно также буферизировать данные ракурсов на уровне SAP-приложения.
Основные виды ракурсов ABAP словаре следующие:

Средства поиска

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

Если количество допустимых значений определенного поля очень велико, пользователь может сократить количество предоставляемых значений посредством задания дополнительных ограничений. Справка по допустимым значениям ввода предоставляет на экране дополнительную информацию для полей, где введены значения, которые не предлагаются в списке допустимых значений.
Справку по допустимым значениям ввода можно программировать в ABAP или определить в АВАР-словаре. Начиная с версии 4.0, справка по допустимым значениям ввода, определенная в АВАР-словаре, рассматривается как средство поиска. Средство поиска определяется в ABAP-словаре и присваивается различным типам полей таблицы. Поля экрана с такими типами определения полей таблицы автоматически предоставляют справку F4.
Начиная с версии 4.6, пользователи могут добавлять к средству поиска SAP свои собственные пути поиска при этом нет необходимости модифицировать систему.

Обзор языка ABAP/4 системы SAP R/3

Основные возможности языка ABAP/4

Язык ABAP/4 возник на основе языка макро-ассемблера для создания отчетов в 70х годах. В середине 80-х вошел в состав интерпретатора для создания отчетов и диалогового программирования в системе SAP R/2. Компилятор языка и виртуальная машина были реализованы на языке ассемблера для мэйнфреймов. Известный как язык Advanced Business Application Programming (ABAP) стал языком программирования для системы R/3 в середине 90-х годов. Компилятор и виртуальная машина реализованы на языке C, в качестве ядра системы SAP R/3. В конце 90-х годов был расширен реализацией объектно-ориентированного программирования известного как ABAP Objects. В настоящее время написано уже более 100 миллионов продуктивных строк кода на языке ABAP/4.
ABAP/4 в?" развитый язык программирования коммерческих приложений 4в?" го поколения. Он является основой системы R/3. Все приложения R/3 и даже части базовой системы были разработаны на ABAP/4. ABAP/4 относится к разряду языков, в которых реализуется управление событиями. Важной особенностью языка является концепция применения внутренних таблиц, суть которой в отображении постоянных таблиц базы данных на объекты, существующие во время выполнения программы и наоборот. Приложения, написанные на АВАP/4, поддерживают различные СУБД и ОС.
В отличие от других языков программирования программы на ABAP/4 можно читать, как обычный текст, написанный на английском языке.
Текст программы строится из операторов, заканчивающихся обычной точкой. Оператор начинается с зарезервированного ключевого слова, за которым следуют дополнительные параметры и объекты данных. Можно объединять последовательность операторов, имеющих одинаковые начальные части в один оператор, используя символы ' : ' и в??,в?? и располагая идентичную часть оператора перед символом в?? : в??.
Основными возможностями языка ABAP/4 являются:

Функции объектно-ориентированного программирования включают в себя поддержку:

Язык ABAP/4 является разновидностью интерпретатора. Компилятор ABAP/4 генерирует промежуточный код (byte-код), который потом выполняется системой.
Язык ABAP/4 является платформенно-независимым, и может использоваться с различными комбинациями БД, и ОС.

Структура и виды программ, среда разработки

Индивидуальные компоненты прикладных программ хранятся в специальной секции базы данных названной R/3 Репозитарием. R/3 Репозитарий служит центральным хранилищем для всех объектов разработки в системе R/3.
Внутри системы R/3 ABAP/4 имеет собственную среду разработки. Среда разработки ABAP/4 состоит из следующих основных компонентов и прикладных приложений в системе R/3:

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

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

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

Логика обработки данных
Компоненты прикладных программ, которые являются ответственными за обработку данных в системе R/3 - ABAP программы. ABAP программы, выполняются ABAP процессором в контексте рабочего процесса. Они получают данные экрана от процессора экрана перед обработкой и посылают их процессору экрана после обработки. Доступ к базе данных осуществляется, используя интерфейс базы данных. ABAP содержит специальный набор команд по имени Open SQL. Данный набор позволяет считывать и записывать данные в базу данных независимо от типа используемой базы данных. Интерфейс базы данных преобразовывает команды Open SQL в команды используемой базы данных. Вы можете также использовать команды Native SQL, которые передаются базе данных без преобразований. При работе с экранами, ABAP программы играют более пассивную роль, действуя как контейнер для набора модулей, которые можно вызвать из логики ДинПро (см. Рисунок 1).
ABAP/4 был разработан специально для разработки диалоговых программ взаимодействующих с БД. ABAP программы ответственны за обработку данных в пределах индивидуальных шагов диалога прикладной программы. Это означает, что программа не может быть построена как отдельная последовательная единица, а должна быть разделена на секции, которые могут быть назначены для обработки индивидуальных шагов диалога. ABAP программы имеют модульную структуру. Каждый модуль называют блоком обработки. Блок обработки состоит из набора строк ABAP кода. Блоки обработки не могут быть вложены.

К блокам обработки относятся:
Диалоговые модули (не могут иметь локальных данных)
Модули обработки событий
Подпрограммы (методы классов, формы, и функциональные модули)
Другие интерфейсы
SAP GUI
Логика ДинПро
(экраны)
Логика обработки данных (ABAP программы)
Интерфейс БД
Рабочий процесс

Рисунок SEQ Рисунок \* ARABIC 2. Взаимодействие компонентов SAP R/3
Каждая ABAP программа состоит из следующих двух частей:
Объявления глобальных данных, классов и экранов выбора
Глобальные данные видимы во всех внутренних блоках обработки, как и определения параметров экранов выбора. Объявления внутри диалоговых модулей являются глобальными. Объявления внутри подпрограмм, функциональных модулей и методов являются локальными.
Реализация блоков обработки
Принимая во внимание то, что тело модуля диалога или подпрограммы заключены между ключевыми словами ABAP, которые их определяют, блоки обработки событий начинаются ключевыми словами событий и заканчиваются неявно в месте начала следующего блока обработки.
Все операторы языка ABAP (кроме декларативных) являются частью блоков обработки. Операторы, не заключенные в блоки обработки по умолчанию принадлежат к блоку обработки события START-OF-SELECTION.
Вызов блоков обработки может производиться либо извне ABAP программы (ABAP процессором или процессором экрана) либо операторами ABAP, которые сами являются частью блока обработки (вызов подпрограмм). Диалоговые модули и модули обработки событий вызываются неявно ABAP процессором.
Среда выполнения
Экран
SAP GUI
Процессор
Процессор
Процессор
Логика Динпро
ABAP программа
Логика PBO
Логика PAI

Глобальные объявления
Блок обработки
Блок обработки
Блок обработки

Рисунок SEQ Рисунок \* ARABIC 3. Схема выполнения блоков обработки
В системе R/3 есть различные типы программы ABAP. Тип программы определяет основные технические атрибуты программы. Тип программы устанавливается при создании. Основное различие между различными типами программы в?" способ вызова блоков обработки.
Существуют следующие типы ABAP программ:
Тип 1
Программы типа 1 не нуждаются в использовании экранов для управления диалогом с пользователем. Управление вызовами блоков обработки контролируется процессорами среды выполнения, которая вызывает список блоков обработки в четко определенной последовательности. Программы данного типа ориентированы в основном на создание отчетов. Программа типа 1 может вызываться с помощью кода транзакции (транзакция отчета).
Тип М
Наиболее важный технический атрибут программ типа М это то, что они могут управляться только с помощью логики ДинПро. Они могут запускаться на выполнения только с использованием кода транзакции, который привязан к программе и одному из её экранов. Ещё одна особенность программ типа М в том, что для неё необходимо создавать собственные экраны диалога с пользователем (с использованием Редактора Экранов). Программа типа М может также иметь начальный экран выбора. Программы типа М называются пулами модулей и предназначены для разработки диалоговых программ с большим набором экранов и насыщенной логикой ДинПро.
Тип F
Программы типа F являются контейнерами для функциональных модулей и не могут быть запущены с использованием кода транзакции или ввода имени напрямую. Функциональные модули в?" это специальные подпрограммы, которые можно вызывать из других ABAP программ. Программы типа F называются группами функций. Группы функций и функциональные модули создаются с использованием редактора функций.
Тип K
Программы типа К не могут быть запущены с использованием кода транзакции или имени программы. Они являются контейнерами для глобальных классов. Они так же известны под названием определений классов. Программы типа K создаются с использованием построителя классов.
Тип J
Программы типа J не могут быть запущены с использованием кода транзакции или имени программы. Они являются контейнерами для глобальных интерфейсов. Они так же известны под названием определений интерфейсов. Программы типа J создаются с использованием построителя классов.
Тип S
Программы типа S не могут быть запущены с использованием кода транзакции или имени программы. Они являются контейнерами для подпрограмм, которые можно вызывать из других программ. Программы типа S не могут содержать экранов.
Тип I
Программы типа I называются includes. Они позволяют разбивать программу на более мелкие модули. Программу типа I можно вставить в любом месте любой программы с использованием оператора INCLUDE <Имя программы типа I>. Среда разработки ABAP/4 имеет механизм для автоматического разбиения пулов модулей и функциональных групп на несколько программ типа I.
Пример: Создание программы типа 1 с использованием ABAP/4 редактора (транзакция se38) в локальном классе разработки.
Для создания программы необходимо выполнить следующие шаги:
Запустить транзакцию se38.
Ввести имя программы, начинающееся с символа Y или Z.
Нажать кнопку Создать.
Ввести поясняющий текст в поле заголовок
Выбрать в??Выполняемая программав?T в поле тип.
Нажать кнопку в??Cохранитьв?T.
В появившемся окне нажать кнопку в??Локальный объектв?T.

Концепция синтаксиса языка ABAP/4

ABAP программа состоит из набора операторов, каждый из которых начинается с ключевого слова и заканчивается точкой.
Пример:

PROGRAM FIRST_PROGRAM.
WRITE 'Моя первая программа'.
Структура операторов такова:

<Оператор><операнд><дополнение1><операнд><дополнение2>в?¦
Пример:

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

Вариант 2.

Возможна краткая запись нескольких одинаковых операторов с указанием одного оператора, двоеточия в??:в?T и цепочки операндов с дополнениями.
Пример:

Комментарии в программах можно описывать с помощью символов в?? * в??, в?? " в??
Пример:

Определение данных в языке ABAP/4

Элементарные типы данных

ABAP/4 обеспечивает набор элементарных типов, таких как символьный, целый и дата и поддерживает 2 концепции конструирования (с помощью записей и внутренних таблиц), которые помогают строить сложные типы и объекты данных.
Можно также создавать неэлементарные типы и структуры данных и хранить их определения в словаре ABAP/4 Dictionary, чтобы впоследствии использовать их во всех компонентах системы.
Элементарные типы используются в ABAP/ 4 так же, как и в других языках.
В ABAP/4 используются следующие элементарные типы:
Characters. Поддерживаются два символьных типа:
С (собственно символьный) и N (текст, состоящий из цифр).
Numbers. Поддерживается три цифровых типа:
I (целые числа), P (упакованные числа) и F (числа с плавающей запятой).
Date. Поддерживается один тип даты:
D (дата).
Time. Поддерживается один тип для задания времени:
T (время).
Hexadecimal.
Поддерживается один шестнадцатеричный тип: X (шестнадцатеричный).
Каждое поле определяется с помощью ключевого слова DATA и ссылки на элементарный тип.
Пример:

DATA:
name(25)  TYPE C,
z_code(5) TYPE N,
counter   TYPE I VALUE 1.

Длина поля определяется числом в круглых скобках, которое следует после имени поля. Если размер поля в операторе data не задан, ABAP/4 использует значение размера поля по умолчанию. Ключевое слово value позволяет задать начальное значение переменной counter.
Каждый элементарный тип обладает своим значением по умолчанию, которое применяется в тех случаях, когда до выполнения программы не было задано начальное значение переменной.
Аналогично полям задаются неэлементарные типы. Понятие тип (TYPE) не связано с выделением памяти, а для полей, описанных как DATA, память всегда выделяется.
Пример:

TYPES 
 t_flag  TYPE С.
DATA add_flag  TYPE t_flag VALUE в??Xв?T.

Для всех типов в качестве значений можно задавать константы:
Пример:

CONSTANTS:
 company_name(3) TYPE C VALUE в??sapв?T,
 max_counter     TYPE I VALUE 9999.

Константы нельзя изменять. Любой оператор, изменивший константу, вызовет сообщение об ошибке при синтаксической проверке или во время выполнения.
Константы используются для определения начальных значений:
Пример:
DATA:
counter TYPE I VALUE max_counter.
Если тип не указан, по умолчанию используется тип С(1). Если поле и соответствующее ему значение литерала или константы имеют разные размеры, это начальное значение или усекается или дополняется пробелами справа (если оно меньше).
Переменные типа N содержат текстовые строки, состоящие из цифр. С их помощью записываются цифры, которые используются для идентификации и сортировки внутренних таблиц. Начальные значения полей типа C заполняются пробелами справа, а поля типа N - цифрой 0 слева. Размер поля типа N по умолчанию равен 1, а начальное значение состоит из соответствующего длине числа нулей.
Поле дата (DATA) имеют тип D с фиксированным размером поля в 8 знаков. Внутреннее представление поля date: YYYYMMDD (Y в?" год, М в?" месяц, D в?" день). Начальное значение поля: 00000000.
Язык АВАР/4 поддерживает несколько выходных форматов записи поля типа date, отличающихся от внутреннего представления. Разрешается задавать специальный формат даты, добавляя дополнительные параметры в оператор WRITE.
Можно выполнять вычисления, используя поля типа DATE:
Пример:

DATE: 
ultimo  TYPE D.
ulyimo = sy-datum.
ultimo+6(2) = в??01в?T.
SUBTRACT  1  from  ultimo.
Поля для задания времени имеют фиксированную длину 6 и формат HHMMSS (часы, минуты, секунды).

Сложные типы

Кроме полей ABAP/4 поддерживает специальные конструкции для сложных (или составных) объектов данных: записи и внутренние таблицы.
Структуры содержат фиксированное число объектов данных (компонентов структуры), определяемых с помощью ключевых слов DATA BEGIN OF и DATA END OF. Можно определить структуру со следующими полями.
Пример:

DATA: BEGIN OF customer,
        id(8)    TYPE n,
        name(25),
        telephone(12),
      END OF customer.
После того как структура определена, можно работать и с отдельными компонентами и со всей структурой.
Пример:

DATA vendor LIKE customer.
 customer-id = в??87654321в?T.
 customer-name = в??Greenв?T.
 customer-telephone = в??211-22-34в?T.
  MOVE customer  TO vendor.
В приведенном примере дополнительное ключевое слово LIKE определяет структуру vendor, имеющую такой же формат, как и структура customer.
В отличие от таблиц базы данных, внутренние таблицы существуют только во время выполнения программы. Они используются в качестве моментальных снимков таблиц базы данных или контейнеров для временного хранения данных в программе. Внутренние таблицы могут содержать любое количество строк или элементов одинакового типа.

Внутренние таблицы можно определять с помощью ключевого слова OCCURS, за которым следует число, определяющее верхний предел числа строк в таблице. Однако параметр числа строк OCCURS влияет исключительно на производительность и не накладывает никаких ограничений на максимальный размер внутренней таблицы. ABAP/4 автоматически выделяет новую область памяти при добавлении строк к таблице.
Как и для структуры, тип строки внутренней таблицы может быть задан с помощью ссылки на элементарный и неэлементарный тип. В следующем примере определяется неэлементарный тип personal_data:
Пример:

TYPES: BEGIN OF personal_data,
         name(25),
         city(25),
         street(30),
       END OF personal_data.
Этот тип можно использовать для определения внутренней таблицы people, каждая строка которой имеет тот же тип.
Пример:
DATA people TYPE personal_data OCCURS 100.
Многие операции с таблицами (такие, как добавление новой строки) требуют дополнительной записи для размещения новой информации. Используя дополнительные ключевые слова HEADER LINE в операторе DATA, при построении таблицы можно добавлять к ней объект данных того же типа. Этот объект HEADER LINE называется строкой заголовка и используется по умолчанию как запись для хранения текущей, добавляемой к таблице, записи.
Поля и типы могут иметь ссылки на элементарные типы или на объекты Dictionary.
Разработчик может начинать с элементарных типов и полей, а затем, применяя в любом порядке описанные выше правила, строить вложенные структуры записей и таблиц.
Пример:

TYPES: BEGIN OF address,
         city(25),
         street(30),
       END OF address,
       BEGIN OF person,
         name(25),
         address  type address,
       END OF person.
DATA: receiver TYPE person.
DATA: receiver_tab LIKE receiver OCCURS 0 
  WITH HEADER LINE.
DATA: target  LIKE receiver OCCURS 0 WITH HEADER LINE.
После определения объектов данных в операторе data, их можно использовать в любом месте программы. Обычно определение данных размещается в начале программы. Большие программы часто имеют файл типа INCLUDE, содержащий список с определениями всех данных. Данные программы доступны в любой подпрограмме и их разрешено переопределять в подпрограмме. Локальные объекты данных в подпрограмме являются приоритетными по сравнению с глобальными переменными, имеющими идентичные имена. Переменные программы для всех других программ недоступны. Их можно добавить в файл INCLUDE, который содержит определения данных других программ, а также определить их как глобальные переменные в словаре Dictionary,автоматически доступном для всех программ ABAP/4.
ABAP/4 поддерживает несколько системных полей, доступных любой программе, написанной на ABAP/4. Системные поля принадлежат к структуре Dictionary c именем SYST и содержат общую информацию о состоянии системы и объектах программы в данный момент времени. Например, в поле sy-datum cодержится текущая дата. Значения многих системных полей устанавливается во время выполнения программы после определённых операций. Taк, при выполнении цикла в поле SY-TABIX находится номер текущей строки внутренней таблицы.

Операторы языка ABAP/4

MOVE и COMPUTE.
Команда MOVE всегда копирует исходное поле в целевое.
MOVE: исходное TO целевое.
COMPUTE целевое = исходное.
Ключевое слово COMPUTE в?" единственное, которое разрешается опускать в операторах языка.
Если у исходного и целевого полей разный тип и размер данных, ABAP/4 всегда преобразует содержимое исходного поля к формату целевого. Ошибка выполнения происходит только в том случае, когда преобразование приводит к потере информации.
Так как ABAP/4 поддерживает различные типы и размеры данных, которые можно комбинировать, используя команды move и compute, существует множество комбинаций возможных преобразований: цифры внутри символьного поля могут рассматриваться как число, целевое поле заполняться пробелами, исходное - усекаться, числа в?" преобразовываться в дату и наоборот и т. д.
C помощью команды move можно копировать структурированные объекты типа записей или внутренних таблиц.
Пример:

MOVE: receiver TO receiver_tab.
MOVE: receiver_tab TO target.

Если исходный и конечный объекты данных относятся к одному и тому же типу (например, к внутренней таблице), в операторе MOVE их содержимое копируется за одну операцию.
Команда MOVE-CORRESPONDING копирует из одной записи в другую компоненты с одинаковыми именами. Поля с одинаковыми именами копируются независимо от их позиции внутри записи.
ОПЕРАЦИИ С СИМВОЛЬНЫМИ СТРОКАМИ.
Символьные строки объединяются с помощью команды CONCATENATE.
Пример:

DATA: str1(3) VALUE 'Red',
      str2(6) VALUE 'Yellou',
      str3(6) VALUE 'Green',
      str4(50).
CONCATENATE str1 str2 str3 INTO str4 SEPARATED BY ','.

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

DATA: 
list(40) VALUE 'Edison, Smith, Jon Green, Yang, Black',
name1(20), name2(20), name3(20), name4(20), name5(20).
SPLIT list AT ',' INTO name1  name2 name3  name4 name5.

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

DATA names LIKE name1 OCCURS 100.
SPLIT list AT ',' INTO TABLE names.

Сдвинуть символьную строку можно командой SHIFT.
Пример:

SHIFT name1 BY 3 places.
SHIFT name2 RIGHT.
SHIFT  name3 UP TO в??Jonв?T.

Для замены определённых символов в строке используется оператор REPLACE, который замещает первую встретившуюся подстроку внутри строки.
Пример:

REPLACE в??Eв?T WITH в??Maв?T INTO list.
Для замены всех символов в??,в?T на в??.в?T используется команда TRANSLATE.
Пример:

TRANSLATE  list USING  в??,.в?T.

Поиск символьных строк в полях или внутренних таблицах осуществляется по команде SEARCH. Системное поле sy-fdpos содержит сдвиг найденной строки относительно начала.
Пример:

SEARCH list FOR в??Greenв?T.
IF sy-subrc NE 0.
 WRITE в??Not foundв?T.
ENDIF.

РАБОТА С ВНУТРЕННИМИ ТАБЛИЦАМИ

Чтение строки из внутренней таблицы осуществляется оператором READ TABLE.
READ TABLE <вн.табл.> FROM <раб.обл.> INTO <результат>.
В случае, безуспешного поиска системное поле sy-subrc устанавливается в отличное от нуля значение и в 0 в случае успеха.
Вставка записи во внутреннюю таблицу осуществляется с помощью операторов INSERT или APPEND.
INSERT < раб.обл.> INTO <вн. таблица>.
APPEND < раб.обл.> TO <вн. таблица>.
Пример:
DATA: BEGIN OF line,col1 type i,col2 type i,END OF line.
DATA ITAB like TABLE OF Line.
DO 4 TIMES.  line-col1 = sy-index.  line-col2 = sy-index ** 2.  INSERT line INTO TABLE itab.ENDDO.
line-col1 = 2. line-col2 = 3.
READ TABLE itab FROM line INTO line.
WRITE: 'sy-subrc =', sy-subrc.SKIP.WRITE: / line-col1, line-col2.
СОБЫТИЯ ABAP/4
ABAP/4 относится к языкам, управляемым событиями, то есть действия пользователя или системные события управляют выполнением программы. Концепция событий в ABAP/4 позволяет разрабатывать диалоговые программы, так как система автоматически обрабатывает события. События, инициируемые пользователем или системой, образуют внешнее управление программой.
Cобытия, инициализируемые системой INITIALIZATION
AT SELECTION- SCREEN
START-OF-SELECTION
GET
END-OF-SELECTION
Cобытия, инициализируемые пользователем AT LINE-SELECTION
AT PFN
AT USER-COMMAND
События, инициализируемые программой TOP-OF-PAGE
END-OF-PAGE
При возникновении события система выполняет все операторы между ключевым словом данного события и ключевым словом следующего события. Порядок операторов событий в исходном тексте программы не имеет значения, а порядок их обработки определяется пользователем или действиями системы.
Используя такие управляющие структуры, как IF/ELSE/ENDIF и DO/ENDDO можно выполнить различные ветви программы в зависимости от результатов проверки условий внутри самой программы. Их принято называть внутренним управлением.
ВНУТРЕННЕЕ УПРАВЛЕНИЕ: УСЛОВИЯ И ЦИКЛЫ
Пример программы, иллюстрирующей работу операторов: IF/ELSEIF/ELSE/ENDIF , DO/ENDDO , CASE/WHEN/ENDCASE.
Пример:
REPORT ZELSEIF .
DATA RESULT TYPE I.
DATA: ONE TYPE I VALUE 1,
THREE TYPE P VALUE 3,
FOUR TYPE P VALUE 4.
DATA: BEGIN OF WORD,
ONE VALUE 'E',
TWO VALUE 'X',
THREE VALUE 'A',
FOUR VALUE 'M',
FIVE VALUE 'P',
SIX VALUE 'L',
SEVEN VALUE 'E',
EIGHT VALUE '!',
END OF WORD,
LETTER1, LETTER2.
DATA COUNT TYPE I.
DATA: SEARCH_ME TYPE I,
MIN TYPE I VALUE 0,
MAX TYPE I VALUE 1000,
TRIES TYPE I,
NUMBER TYPE I.
RESULT = 1.
IF RESULT < 0.
WRITE / 'RESULT LESS THAN ZERO'.
ELSEIF RESULT = 0.
WRITE / 'RESULT EQUAL ZERO'.
ELSE.
WRITE / 'RESULT GREATER THAN ZERO'.
ENDIF.
DO 4 TIMES.
CASE SY-INDEX.
WHEN ONE.

WRITE / 'THAT IS'.
WHEN 2.
WRITE 'A'.
WHEN THREE.
WRITE 'GOOD'.
WRITE 'EXAMPLE'.
WHEN OTHERS.
WRITE '!'.
ENDCASE.
ENDDO.
SKIP.
DO VARYING LETTER1 FROM WORD-ONE NEXT WORD-THREE
VARYING LETTER2 FROM WORD-TWO NEXT WORD-FOUR.
WRITE: LETTER1, LETTER2.
IF LETTER2 = '!'.
EXIT.
ENDIF.
ENDDO.
SKIP.
WRITE: / 'COUNT_INIT = ', COUNT.
DO 10 TIMES.
ADD SY-INDEX TO COUNT.
ENDDO.
WRITE: / 'COUNT = ', COUNT.
SEARCH_ME = 23.
WHILE NUMBER <> SEARCH_ME.
ADD 1 TO TRIES.
NUMBER = ( MIN + MAX ) / 2.
IF NUMBER > SEARCH_ME.
MAX = NUMBER - 1.
ELSE.
MIN = NUMBER + 1.
ENDIF.
ENDWHILE.
SKIP.
WRITE: / 'NUMBER = ', NUMBER, 'MAX = ', M AX, 'MIN = ', MIN.

Создание подпрограмм и функциональных модулей

ПОДПРОГРАММЫ И ФУНКЦИИ

ABAP/4 предлагает три типа модулей:
cобытия;
подпрограммы;
функции.
Формы (подпрограммы) в?" программные модули, локализованные в конкретной программе.
Функции в?" глобальные программные компоненты, которые могут вызываться из разных программ.
ПОДПРОГРАММЫ
Поскольку формы являются внутренними модулями, они имеют доступ к глобальным данным вызывающей программы. Функции вызываются из различных программ, поэтому к ним применяются более жёсткие интерфейсные правила, позволяющие изменять только их параметры и локальные данные. Формы языка ABAP/4 не возвращают значений.
Форма или подпрограмма определяется парой операторов FORM/ENDFORM и вызывается из основной программы с помощью оператора PERFORM.
При необходимости объединить и локализовать данные, принадлежащие только этой подпрограмме, следует определить эту локальную переменную внутри формы обычным образом, c помощью ключевого слова DATA.
Применение локальных переменных улучшают читабельность исходных текстов. Напротив, работа с глобальными данными в подпрограмме может привести к ошибкам и затруднённому анализу текста программ.
Статические переменные STATICS применяются, когда необходимо сохранить содержимое локального объекта данных от однго вызова подпрограммы до другого, (то есть внутри неё).
Возвращаемая из формы информация передаётся с помощью параметров интерфейса.
Иногда для выполнения подпрограммы необходимо передать туда параметры, которым при каждом вызове присваиваются необходимые фактические значения.
В ABAP/4 поддерживаются различные способы передачи параметров. Параметры интерфейса бывают 2-х типов:
только для чтения (USING);
изменяемые (CHANGING).
По способам передачи их можно классифицировать так:
передаваемые по значению (BY VALUE)
передаваемые по ссылке (BY REFERENCE)
Параметры, описанные как using, не могут изменяться внутри формы, однако при выполнении программы различий между определениями USING и CHANGING нет. Чтобы облегчить чтение программы, рекомендуется по-разному обозначать входные (USING) и выходные (CHANGING) параметры, передаваемые по ссылке.
Дополнение TABLES itab1, itab2, в?¦ позволяет передавать в подпрограмму внутренние таблицы. Они могут передаваться со строкой заголовка (HEADER LINE) или без. Если внутренняя таблица передаётся без header line, то после имени внутренней таблицы должны стоять []: itab[]. Параметры таблицы всегда передаются по ссылке.
Подпрограммы можно также вызывать из других программ. Например:
PERFORM FORM IN PROGRAM PROG [IF FOUND].
ФУНКЦИИ
В отличие от подпрограмм функции обычно применяются во множестве различных программ, и поэтому данные в функции могут изменяться только через её интерфейс. Аргументы функции определяются с помощью имён, а не по их расположению в списке параметров, как в подпрограмме. Кроме того, функции обеспечивают удобную обработку исключений.
Функции определяются парой операторов в?" FUNCTION и ENDFUNCTION и вызывается с помощью оператора CALL FUNCTION. Имя функции записывается прописными буквами.
Функциональная группа представляет собой контейнер, включающий одну или несколько связанных между собой функций. В частности, все функции в функциональной группе, используют одни и те же формы, которые определены в этой группе. Кроме того совместно используемые подпрограммы и функции в функциональной группе могут обращаться к общим глобальным данным группы.
C точки зрения техники программирования функциональная группа представляет собой программу, состоящую из нескольких файлов типа INCLUDE, каждый из которых соответствует отдельной функции. Когда при выполнении программы вызывается одна из функций, вся функциональная группа загружается в память и функция выполняется. После этого функциональная группа остаётся в памяти, то есть она повторно не загружается головной программой текущего процесса при вызове другой функции группы.
ИНТЕРФЕЙСНЫЕ ПАРАМЕТРЫ
Формальные параметры функции подразделяются на импортируемые, экспортируемые и изменяемые. В операторе CALL FUNCTION описание формальных параметров располагается слева от знака =, а фактических в?" справа. Фактические параметры идентифицируются по имени формальных. Значение дополнения IMPORTING и EXPORTING зависит от того, где они употребляются: в вызывающей или в вызываемой функции.
Передача параметров по значению и по ссылке синтаксически различается по дополнениям VALUE(P) и REFERENCE(P).
Для любого параметра можно задать тип, указав ссылку на структуру или на поле в Dictionary, или применить прямую ссылку на тип.
Импортируемые и изменяемые параметры могут быть отнесены к разряду необязательных.
В интерфейсе функции разрешено использовать внутренние таблицы, которые всегда вызываются по ссылке.
ИСКЛЮЧЕНИЯ
Так как функции обычно вызываются несколькими программами, в них не всегда можно предусмотреть обобщённую обработку ошибок или непредсказуемых событий. Вместо этого в подобных случаях выполнение функции прекращается, а в вызывающую программу поступает сообщение. Данная технология реализована с помощью исключений.
Исключения можно задать, используя команду RAISE в?" прекратить выполнение с ошибкой. Как только эта команда начинает обрабатываться, выполнение функции немедленно прекращается. Также для задания исключений можно использовать команду MESSAGE в?¦ RAISING в?" выводится сообщение, информирующее об исключении.
В конце списка исключений можно использовать ключевое слово OTHERS для указания на оставшиеся исключения. Номер исключения возвращает в вызывающую программу функция SY-SUBRC. Если SY-SUBRC = 0 в?" нет исключений.
В вызывающей программе можно определить исключение по его номеру и в соответствии с этим определить, как продолжить работу. В противном случае происходит ошибка выполнения, и вызывающая программа не реагирует на событие.
ВЛОЖЕННЫЕ ВЫЗОВЫ И ЗАВЕРШЕНИЯ ПОДПРОГРАММ И ФУНКЦИЙ
Вызовы подпрограмм и функций могут быть вложенными. В них разрешено использовать локальные данные. Однако применение вложенных определений форм и функций не допускается. Если оператор form одной программы располагается до завершения другой подпрограммы, то есть до оператора ENDFORM, то синтаксический контроль выдаёт ошибку.
Для создания функции с помощью средств Development Workbench необходимо вызвать транзакцию SE37 в?" Function Builder.
Пример:
DATA: NUMBER_I TYPE I VALUE 5,
NUMBER_P TYPE I VALUE 4,
BEGIN OF PERSON,
NAME(10) VALUE 'Paul',
AGE TYPE I VALUE 28,
END OF PERSON,
ALPHA(10) VALUE 'abcdefghij'.
FIELD-SYMBOLS <POINTER> TYPE ANY.
ASSIGN NUMBER_P TO <POINTER>.
DATA: HHH TYPE I.
WRITE: / NUMBER_I, NUMBER_P, <POINTER>,
PERSON-NAME, PERSON-AGE, ALPHA.
DO 5 TIMES.
PERFORM CHANGE USING 1
NUMBER_I
NUMBER_P
<POINTER>
PERSON
ALPHA+NUMBER_I(<POINTER>).
WRITE: / NUMBER_I, NUMBER_P, <POINTER>,
PERSON-NAME, PERSON-AGE, ALPHA.
enddo.
*-----------------------------------------------------
CALL FUNCTION 'MY_FUNC' EXPORTING X = 23
Y = 40
IMPORTING Z = HHH
EXCEPTIONS CRASH = 1.
WRITE: / HHH.
CALL FUNCTION 'MY_FUNC' EXPORTING X = 0
Y = 0
IMPORTING Z = HHH
EXCEPTIONS CRASH = 1.
WRITE: / HHH.
FORM CHANGE USING VALUE(PAR_1)
PAR_NUMBER_I
PAR_NUMBER_P
PAR_POINTER
PAR_PERSON STRUCTURE PERSON
PAR_PART_OF_ALPHA.
STATICS I TYPE I.
I = I + 1.
ADD PAR_1 TO PAR_NUMBER_I.
PAR_NUMBER_P = 0.
PAR_PERSON-NAME+4(1) = ALPHA.
PAR_PERSON-AGE = NUMBER_P + 25.
ADD NUMBER_I TO PAR_POINTER.
PAR_PART_OF_ALPHA = SPACE.
WRITE: /'I = ', I.
ENDFORM.

Выборка данных в системе R/3 с использованием Open SQL, Native SQL

ЧТЕНИЕ ТАБЛИЦ БАЗЫ ДАННЫХ

Для чтения таблиц базы данных используется оператор SELECT. Она является частью Open SQL, который интегрирован в состав языка ABAP/4.
Ниже приводится обзор синтаксиса оператора SELECT языка Open SQL.
Чтение списка всех полей всех записей таблицы в рабочую область таблицы.
Пример:
SELECT * FROM MARA.
в?¦

ENDSELECT.
Чтение списка всех полей всех записей таблицы во внутреннюю таблицу.
Пример:
SELECT * FROM MARA INTO INTTAB.
в?¦
ENDSELECT.
Копирование содержимого всей таблицы во внутреннюю таблицу.
Пример:
SELECT * FROM MARA INTO TABLE INTTAB.
Выборка подмножества записей, удовлетворяющих определенному условию.
Пример:
SELECT * FROM MARA WHERE (MATNR < 5).
в?¦
ENDSELECT.
Комбинация нескольких условий для выборки.
Пример:
SELECT * FROM MARA
WHERE (MATNR < 5) AND ( MTART = в??ABCDв?T).
в?¦
ENDSELECT.
Использование в условиях шаблона для поиска.
Пример:
SELECT * FROM MARA WHERE (MATNR LIKE в??_M%в?T) .
в?¦
ENDSELECT.
Чтение единственного элемента таблицы.
Пример:
SELECT SINGLE * FROM MARA.
Извлечение единственного поля.
Пример:
SELECT MATNR INTO I_MATNR FROM MARA.
в?¦
ENDSELECT.
Получение статистической информации о данных в таблице.
Пример:
DATA:
COUNT TYPE I, SUM TYPE P DECIMALS 2, AVG TYPE F.
SELECT COUNT( * ) SUM( LUGGWEIGHT ) AVG( LUGGWEIGHT )
INTO (COUNT, SUM, AVG)
FROM SBOOK.
Упорядочение результатов запроса.
Пример:
SELECT * FROM MARA GROUP BY MTART.
Получение данных из нескольких таблиц с помощью вложенных циклов SELECT.
SELECT * FROM MARA.
SELECT SINGLE MAKTX INTO TEXT
FROM MAKT WHERE MATNR = MARA-MATNR.
WRITE: / MARA-MATNR, TEXT.
ENDSELECT.
Получение данных из нескольких таблиц с помощью дополнения JOIN:


ИЗМЕНЕНИЕ ТАБЛИЦ БАЗЫ ДАННЫХ
Часто требуется не только считывать данные из таблиц базы, но и сохранять новые или измененные данные в базе данных, если они могут понадобиться в дальнейшем. Основные команды для изменения таблиц базы данных: INSERT, UPDATE, MODIFY, DELETE. Все они являются частью Open SQL, который интегрирован в состав языка ABAP/4.
Вставка отдельной строки с помощью команды INSERT:

Вставка нескольких строк с помощью команды INSERT:

Изменение таблиц базы данных с помощью команды UPDATE:

Изменение отдельного элемента с помощью команды UPDATE:

Изменение нескольких элементов с помощью команды UPDATE:

Модификация элемента с помощью команды MODIFY:

Удаление элементов таблицы базы данных с помощью команды DELETE:

Пример:

REPORT ZASDFGHJ.
TABLES ZGAN01.
* SELECTION-SCREEN:
SELECTION-SCREEN COMMENT 1(20) TXT-001.
PARAMETERS: 
NNAME  LIKE ZGAN01-NNAME,
DAT    LIKE ZGAN01-DAT.
SELECTION-SCREEN BEGIN OF BLOCK BLK1 
WITH FRAME TITLE TEXT-005.
  SELECTION-SCREEN SKIP.
  SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 10(20) TEXT-002 
USER-COMMAND SAVE.
SELECTION-SCREEN PUSHBUTTON 30(20) TEXT-003 
USER-COMMAND DELETE.
SELECTION-SCREEN PUSHBUTTON 50(20) TEXT-004 
USER-COMMAND MODIFY.
  SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLK1.
* Обработка событий
AT SELECTION-SCREEN.
  CASE SY-UCOMM.
    WHEN 'SAVE'.
      PERFORM INSERT_REC USING NNAME DAT.
    WHEN 'DELETE'.
      PERFORM DELETE_REC USING NNAME DAT.
    WHEN 'MODIFY'.
      PERFORM MODIFY_REC USING NNAME DAT.
  ENDCASE.
* Отобразить данные из таблицы
START-OF-SELECTION.
  SORT.
  FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
  SELECT * FROM ZGAN01.
    WRITE : / ZGAN01-NNAME HOTSPOT ON 
 COLOR COL_HEADING, ZGAN01-DAT.
  ENDSELECT.
  FORMAT COLOR OFF.
END-OF-SELECTION.
* Вставить запись
FORM INSERT_REC
USING PNNAME LIKE ZGAN01-NNAME
      PDAT  LIKE ZGAN01-DAT.
  ZGAN01-NNAME = PNNAME.
  ZGAN01-DAT = PDAT.
  INSERT ZGAN01.
ENDFORM.
* Удалить запись
FORM DELETE_REC
USING PNNAME LIKE ZGAN01-NNAME
      PDAT  LIKE ZGAN01-DAT.
  DELETE FROM ZGAN01
    WHERE NNAME = PNNAME OR DAT = PDAT.
ENDFORM.
* Обновить запись
FORM MODIFY_REC
USING PNNAME LIKE ZGAN01-NNAME
      PDAT  LIKE ZGAN01-DAT.
  SELECT SINGLE * FROM ZGAN01 WHERE NNAME = PNNAME.
  ZGAN01-NNAME = PNNAME.
  ZGAN01-DAT   = PDAT.
  MODIFY ZGAN01.
ENDFORM.

Техники программирования отчетов на языке ABAP/4 системы R/3

Создание интерактивных отчетов

Простейшим видом отчетов, существующих в языке ABAP/4 являются отчеты, полученные путем вывода списка необходимых данных, которые были предварительно получены из БД, с помощью оператора WRITE.
Операторы WRITE распечатыают выходную страницу, которая направляется на экран или принтер. Выходные страницы, построенные с помощью команд WRITE, называются в ABAP/4 списками.
В ABAP/4 предусмотрены специальные опции для определения формата, цвета или положения поля. Если формат не задан в явном виде с помощью одной из опций, содержимое поля выводится в форме, соответствующей типу поля.
Если позиция поля в строке не задана в явном виде, выходные поля разделяются одиночными пробелами. Если в текущей стрке не хватает позиций, выходное поле переносится в начало следующей строки.
Длина строки может быть установлена в явном виде с помощью дополнения LINE-SIZE команды NEW-PAGE. В противном случае применяется значение по умолчанию (84 символа). В общем случае оператор NEW-PAGE начинает новую страницу списка и может быть использован без дополнительных опций.
Дополнение no standard page heading в конце оператора program удаляет стандартный заголовок страницы, в качестве которого использован заголовок программы, задаваемый на экране атрибутов.
Выходная информация может выводиться с новой строки, для чего служит команда NEW-LINE. Тот же результат можно получить с помощью дополнения для формата команды WRITE или оператора SKIP.
Задать положение поля в списке можно с помощью дополнения AT оператора WRITE иил команды POSITION, которая определяет положение следующего выходного поля.
Выходной размер поля определяется его типом, однако эту длину можно динамически изменить, используя дополнение AT оператора WRITE.
Относительное положение может быть задано с помощью дополнения UNDER, позволяющего привязать позицию к уже выведенному на экран полю. Тогда выходное поле записывается в той же колонке, что и поле, к которому оно привязано.
Оператор WRITE переходит на другую страницу вывода, так как страница имеет некоторую логическую длину. По умолчанию задается только одна выходная страница бесконечной длины. Разделитель страниц разрешено задавать в явном виде посредством команды NEW-PAGE. Заголовки и нижние колонтитулы выводятся при возникновении событий TOP-OF-PAGE и END-OF-PAGE.
Улучшение компоновки страницы может производиться с помощью:
- символов и пиктограмм;
- цветов;
- опций вывода, зависящих от типа поля.
Для улучшения представления выходной информации на экране можно настроить процедуру вывода. Допускается использовать в списках такие графические элементы, как символы или пиктограммы. С помощью дополнения COLOR операторов WRITE или FORMAT задается цвет фона поля или части списка. Наконец, можно выбрать опции вывода, которые связаны с типом, например, визуализацию знака числа или число десятичных знаков в числовом поле.
ABAP/4 имеет более 200 предварительно определенных символов и пиктограмм, которые можно выводить на экран, используя дополнения AS SYMBOL или AS ICON команды WRITE. Имена символов и пиктограмм являются предварительно определенными константами, которые включены в команды INCLUDE <SYMBOL> и INCLUDE <ICON> соответственно.
Пример:
INCLUDE <SYMBOL>.
DATA DN(15).
DATA VAR(10) VALUE 'EXPERIMENT'.
CALL FUNCTION 'RH_GET_DATE_DAYNAME'
EXPORTING
LANGU = SY-LANGU
DATE = SY-DATUM
IMPORTING
DAYTXT = DN.
WRITE: / SYM_RIGHT_HAND AS SYMBOL, 'TODAY IS', DN, '.'.
Дополнение COLOR оператора WRITE позволяет задать цвет фона для каждого поля.

По умолчанию весь текст выводится в цвете col_background. Если цвет задается в команде WRITE, он действует только на текущее поле. Допускается также изменять интенсивность цвета, уменьшая его яркость (по умолчанию цвет яркий). Формат, заданный в операторе FORMAT, остается в силе до тех пор, пока не будет задан новый.
ABAP/4 предлагает специальные опции для вывода полей, связанные с типом последних:
NO-SIGN - не выводится знак
CURRENCY - задается формат валюты
DECIMALS - устанавливается число десятичных знаков
USING EDIT MASK - задается шаблон формата
NO-GAP - удаляются промежутки между полями в строке
Полный перечень опций и результатов их выполнения можно получить из оперативной справки ABAP/4 Help в контексте описания команды WRITE.
ПОДДЕРЖКА НЕСКОЛЬКИХ ЯЗЫКОВ
Если программу предполагается применять в другой стране со своим национальным языком, то текст списка-результата должен быть переведен на этот язык. Для того, чтобы текст выводился на языке, задаваемом пользователем во время регистрации в системе, нет необходимости изменять программу. Для этого нужно просто присоединить определитель (символ) текста к выходному литералу. Его можно указать также не контекста литерала:
ЗАГОЛОВКИ И НИЖНИЕ КОЛОНТИТУЛЫ СТРАНИЦ

Кроме стандартных зависящих от языка пользователя заголовков страниц, для списков отчета разрешается определять специальные заголовки страниц и нижние колонтитулы. Для отказа от стандартного заголовка в определении отчета указывается дополнение NO STANDARD PAGE HEADING. Для этого используются события TOP-OF-PAGE и END-OF-PAGE, характеризующие запись первой строки новой страницы и переход на последнюю строку текущей страницы. Новая логическая страница создается с помощью команды NEW-PAGE. (Событие TOP-OF-PAGE может быть вызвано командой NEW-PAGE.) При пролистывании списка отчета заголовок страницы всегда находится в верхней строке экрана.
Заголовок и число строк страницы особенно важны в том случае, если список нужно распечатать на принтере. Количество строк на странице можно установить с помощью дополнения LINE-COUNT, которое указывается в определении REPORT. Используя событие END-OF-PAGE вместе с LINE-COUNT, можно сформировать нижний колонтитул.
ФРЕЙМЫ
Для вывода на экран табличного списка, разделенного горизонтальными и вертикальными линиями (фрейма), используются системные поля SY-VLINE и SY-ULINE и команда ULINE. Углы фрейма, являющиеся пересечением вертикальных и горизонтальных линий, автоматически <прорисовываются> системой.
СОЗДАНИЕ ИНТЕРАКТИВНЫХ СПИСКОВ
Иногда пользователей может интересовать подробная информация о каждой записи отчета, однако обзорный список не должен быть перегружен подробностями. Поэтому целесообразно разработать программу-отчет с возможностями детализации так, чтобы пользователь мог получить дополнительную информацию о записи, например, дважды щелкнув мышью на его имени в списке.
Для реализации возможностей детализации необходимо обеспечить пользователю доступ к таким инструментам, как кнопки и функции меню. Кроме того, программа должна реагировать на действия пользователя (например, на нажатие кнопки).
ABAP/4 относится к языкам, управляемым событиями. Событие AT LINE-SELECTION дает возможность программереагировать на двойной щелчок мыши, указывающий на выбор пользователем одного из элементов списка. Событие AT USER-COMMAND дает возможность программе реагировать на нажатие пользователем функциональной клавиши или экранной кнопки, причем реакция на это событие может программироваться. С помощью команд WINDOW и СALL SCREEN вывести на экран другой список или всплывающий экран.
Наборы элеменов меню, функций меню, инструментальных линеек и экранных кнопок, которые позволяют программе взаимодействовать с пользователем, носят общее название статуса графического интерфейса пользователя (GUI). Статус GUI является центральным элементом интерфейса пользователя с программой ABAP/4.
ДВОЙНОЙ ЩЕЛЧОК МЫШЬЮ: СОБЫТИЕ AT LINE-SELECTION
Основным приемом детализации объекта является двойной щелчок мышью на объекте экрана, что соответствует событию AT LINE-SELECTION. По умолчанию аналогичное событие возникает при нажатии функциональной клавиши F2.
Следующий пример иллюстрирует обработку события AT LINE-SELECTION в ответ на двойной щелчок мыши:
Пример:
START-OF-SELECTION.
WRITE в??BASIC LISTв?T.
AT LINE-SELECTION.]
WRITE в??NEW LIST AFTER DOUBLE-CLICKв?T.
Вначале по событию START-OF-SELECTION на экран выводится базовый список. С помощью команды WRITE при возникновении события AT LINE-SELECTION строится новый список, который перекрывает на экране начальный список. Новый список <помещается> в стек списков и называется стековым списком. Стековый список отображается на полном экране, если не заданы координаты окна в команде WINDOW.
При построении нового списка старый список не уничтожается, и к нему можно вернуться, используя одну из стандартных функций: нажатие на кнопку BACK (функциональная клавиша F3) или кнопку CANCEL (клавиша F12). В обоих случаях стековый список уничтожается. Нажатие на кнопку EXIT (клавиша F15) позволяет вернуться назад на экран выбора отчета с одновременной очисткой стека.
Активные зоны (Hotspots) в?" это элементы, предназначенные для указания возможных действий пользователя. Они представляют собой области списка, в которых курсор появляется в виде символа с изображением поднятой вверх правой руки. Если пользователь указывает на эту область (и курсор активен), то одинарный щелчок приводит к тем же последствиям, что и двойной в обычной ситуации. Списки с активными зонами строятся с использованием дополнения HOTSPOT в операторе WRITE.
Активные зоны поддерживаются, начиная с версии R/3 3.0C.
ДЕЙСТВИЯ ПОЛЬЗОВАТЕЛЯ ОБЩЕГО ТИПА: AT USER-COMMAND
Если пользователь нажимает на функциональную клавишу или щелкает мышью на экранной кнопке, то возникает событие AT USER-COMMAND. Каждый элемент меню, экранная кнопка или функциональная клавиша имеет в системе функциональный код, который можно получить из системного поля SY-UCOMM после действий пользователя.
Пример:
AT USER-COMMAND.
IF SY-UCOMM = в??FREEв?T.
в?¦
ENDIF.
ПОЛОЖЕНИЕ КУРСОРА И СКРЫТАЯ ИНФОРМАЦИЯ (команда HIDE, команда GET CURSOR)
При использовании событий AT LINE-SELECTION и AT USER-COMMAND разработчику, как правило, необходима дополнительная информация о выбранном элементе списка, чтобы найти и вывести на экран в форме всплывающего окна или стекового списка подробную информацию об элементе.
К такой дополнительной информации относятся:
Поля, принадлежащие выбранной строке.
Название и содержимое поля, на котором находился курсор во время двойного щелчка мыши.
В языке ABAP/4 существует несколько методов для получения этой информации. Возможно использование двух альтернатив:
Сохранение содержимого поля с помощью HIDE.
Использование команды GET CURSOR с дополнениями FIELD и VALUE.
Вывод на экран списка с невидимыми идентификаторами.
Пример:
LOOP AT I_TABLE.
WRITE / I_TABLE-NAME.
HIDE I_TABLE-ID.
ENDLOOP.
Команда HIDE временно сохраняет содержимое поля в контролируемой системой области памяти, называемой HIDE AREA. При интерактивном событии, связанном с действиями пользователя, содержимое поля восстанавливается из HIDE AREA, и программа далее сможет использовать этот номер, например, в качестве ключа для извлечения подробных данных из внутренней таблицы:
Пример:
AT LINE-SELECTION.
READ TABLE I_TABLE WITH KEY ID = I_TABLE-ID.
WRITE:/ в??DETAIL INFORMATION:в?T,
I_TABLE-NAME, I_TABLE-CITY, I_TABLE-PHONE.
Если для однозначного определения необходимой строки недостаточно сохраненной информации (например, при создании строк различного типа), то рекомендуется использовать команду GET CURSOR. Команда GET CURSOR возвращает имя поля, на которе указывает курсор, передавая его в дополнительное поле, определенное после дополнения FIELD. Значение поля передается в другое поле, определенное после дополнения VALUE.
Пример:
DATA: FIELDNAME(30),
FIELDVALUE LIKE MARA-MATNR.
START-OF-SELECTION.
SELECT * FROM MARA
WRITE / MARA-MATNR.
ENDSELECT.
AT LINE-SELECTION.
GET CURSOR FIELD FIELDNAME VALUE FIELDVALUE.
IF SY-SUBRC = 0 AND FIELDNAME = в??MARA-MATNRв?T.
WRITE: в??SELECTED MATERIAL:в?T, FIELDVALUE.
ENDIF.
Содержимое поля fieldname должно указываться прописными буквами, даже если в таблице использованы строчные, т.к. для имен полей внутреннее представление системы использует заглавные буквы.

Создание отчетов с помощью элементов управления ALV

SAP Control Framework

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

Рисунок 3.
SAPgui (Sapgui.Application) функционирует как контейнер для специальных управляющих элементов во внешнем интерфейсе (frontend). Специальным управляющим элементом может быть ActiveX элементом или JavaBean.
Control Framework поддерживает элементы управления (ActiveX и JavaBeans) которые реализованы в пределах SAPGUI.
Контроллер Автоматизации связывается с единственным элементом управления (Sapgui.Application), который непосредственно является контейнером для других элементов управления.
Контроллер Автоматизации выполнен на ABAP с использованием классов CL_GUI_CFW, CL_GUI_OBJECT, и CL_GUI_CONTROL. Они позволяют создавать и уничтожать специализированное средство управления, устанавливать и получать атрибуты, и вызывать их методы.
Чтобы обеспечивать адекватную производительность в среде клиент-сервер, система обеспечивает механизм буферизации называемый очередью автоматизации, которая буферизует ряд вызовов методов различных экземпляров элементов управления и посылает все за один шаг.
Связь между Контроллером Автоматизации и ABAP Objects Control Framework использует GUI RFC вызовы (см. Рисунок 4).

Рисунок SEQ Рисунок \* ARABIC 4. Связь контроллера автоматизации с Control Framework
Чтобы минимизировать нагрузку на сеть между сервером приложений и клиентом (между внутренним и внешний интерфейсом), вызовы между ними буферизуются и посылаются клиенту одним пакетом в определенных точках синхронизации. Точка синхронизации происходит, когда используется вызов метода, который не буферизирован или явно вызываете универсальный метод синхронизации (CALL METHOD cl_gui_cfw=>flush).
Статический метод set_focus используется для установки фокуса в элемент управления.
Пример:

CALL METHOD cl_gui_control=>set_focus      EXPORTING  control           = control      EXCEPTIONS cntl_error        = 1                 cntl_system_error = 2.
Где control ссылка на объект ( TYPE REF TO CL_GUI_CONTROL ) управления на который устанавливается фокус.
Иерархия наследования классов ABAP, работающих с Control Framework приведена а рисунке 5.

ALV Grid ControlALV Grid Control

(ALV = SAP List Viewer) в?" гибкий инструмент для отображения списков. Grid Control использует controls technology для того, чтобы добиться современного экранного отображения (см. рисунок 6).

Рисунок SEQ Рисунок \* ARABIC 5. Иерархия наследования классов ABAP, работающих с Control Framework

Рисунок SEQ Рисунок \* ARABIC 6. Вывод данных в элемент управления ALV
Controls (элементы управления) в?" программные компоненты, установленные на локальном компьютере. Для того, чтобы связаться с этими компонентами все control wrappers используют методы Control Framework.
Обзор функций предоставляемый ALV Grid Control:
Отображение неиерархических списков последовательно с современным дизайном
Использование типичных функции списка в?" таких, как сортировка и фильтрация - без дополнительной работы по программированию
Адаптирование предопределенных функций списка и их расширения
Одинаковая реакция программы на пользовательские действия (типа двойного нажатия на строке).
Связь с интерфейсом отчет/отчет
Ограничения.
ALV Grid Control не позволяет отобразить блок или иерархические списки. В настоящее время, простые списки могут быть отображены только в однострочном формате.
СОЗДАНИЕ ЭЛЕМЕНТА УПРАВЛЕНИЯ ALV GRID
Экземпляры класса определяются как ссылка на класс CL_GUI_ALV_GRID:
Пример:
DATA <NAME OF REFERENCE VARIABLE> TYPE REF TO CL_GUI_ALV_GRID.
Иерархия наследования класса CL_GUI_ALV_GRID изображена на рисунке 7.

Рисунок SEQ Рисунок \* ARABIC 7. Иерархия наследования класса CL_GUI_ALV_GRID
Класс CL_GUI_ALV_GRID содержит как методы элемента управления так и методы OO Control Framework
Специфические методы класса CL_GUI_ALV_GRID:
Метод Применение
сonstructor Создает экземпляр ALV Grid Control
set_table_for_first_display Выводит и отображает таблицу
refresh_table_display Обновляет отображенные данные
Основные методы класса CL_GUI_CFW:
inst_cl_gui_cfw=>dispatch
inst_cl_gui_cfw=>flush
inst_cl_gui_cfw=>get_living_dynpro_controls
inst_cl_gui_cfw=>set_new_ok_code
inst_cl_gui_cfw=>update_view
Методы класса CL_GUI_OBJECT:
inst_cl_gui_object ->free
inst_cl_gui_object ->is_valid
Методы класса CL_GUI_CONTROL
constructor
inst_cl_gui_control->finalize
inst_cl_gui_control->get_focus
inst_cl_gui_control->get_height
inst_cl_gui_control->get_registered_events
inst_cl_gui_control->get_width
inst_cl_gui_control->is_alive
inst_cl_gui_control->set_alignment
inst_cl_gui_control->set_focus
inst_cl_gui_control->set_position
inst_cl_gui_control->set_visible
Приведенный график показывает необходимые шаги для отображения списка с помощью ALV Grid Control:

Рисунок SEQ Рисунок \* ARABIC 8. Отображение списка с помощью ALV Control
Для отображения данных как минимум должны быть предоставлены следующие два типа информации чтобы отобразить данные:
внутренняя таблица с данными для отображения в?" называемая таблицей выходных данных;
описание структуры этих данных объявленной в ALV Grid Control через каталог полей или через соответствующую структуру словаря данных.
Каталог полей - таблица, которая содержит информацию относительно полей, которые будут отображены. Например, ALV использует эту таблицу, чтобы идентифицировать тип поля.


Рисунок SEQ Рисунок \* ARABIC 9. Механизмы обработки событий и передачи данных элемента ALV
ОБРАБОТКА СОБЫТИЙ
События, вызванные пользователем на внешнем интерфейсе (frontend) обрабатываются на внутреннем (backend) с использованием ABAP Objects обработки событий. Для каждого случая, на который необходимо отреагировать, должен существовать метод -обработчик события.
Для создания обработчика в приложении определяется локальный класс перед событием START-OF-SELECTION. В классе определяются методы для реакции на интересующие события.
Пример:
DATA:
GRID1 TYPE REF TO CL_GUI_ALV_GRID,
CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
*--------------------------------------------------------
* PREDEFINE A LOCAL CLASS FOR EVENT HANDLING
*--------------------------------------------------------
* CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
*--------------------------------------------------------
* START OF SELECTION
*--------------------------------------------------------
START-OF-SELECTION.
* Делать что-либо
*--------------------------------------------------------
* END OF SELECTION
*--------------------------------------------------------
END-OF-SELECTION.
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN.
PRIVATE SECTION.
ENDCLASS.
*--------------------------------------------------------
* LOCAL CLASSES: IMPLEMENTATION
*--------------------------------------------------------
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
*--------------------------------------
METHOD HANDLE_DOUBLE_CLICK.
DATA: LT_ROWS TYPE LVC_T_ROW.
* GET SELECTED ROW
CALL METHOD GRID1->GET_SELECTED_ROWS
IMPORTING ET_INDEX_ROWS = LT_ROWS.
CALL METHOD CL_GUI_CFW=>FLUSH.
IF NOT LT_ROWS IS INITIAL.
****
ELSE.
MESSAGE I004(02) WITH TEXT-IO1.
ENDIF.
ENDMETHOD.
ENDCLASS.
*-------------------------------------------------------*
* MODULE PBO_XXXX OUTPUT
*-------------------------------------------------------*
MODULE PBO_XXXXX OUTPUT.
SET HANDLER
LCL_EVENT_RECEIVER=>handle_double_click FOR GRID1.
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING CONTROL = GRID1.
ENDMODULE.
Контейнерные элементы управления экземпляры глобальных классов SAP Control Framework. Глобальный класс для custom controls - CL_GUI_CUSTOM_CONTAINER. Чтобы связать custom control с container control нужно передать имя custom control в параметре CONTAINER_NAME конструктора container control. Конструктор создает, инициализирует и позиционирует элемент управления. Конструктор вызывается когда задана инструкция create object custom_container с необходимыми параметрами.
Пример:
CREATE OBJECT CUSTOM_CONTAINER
  EXPORTING    PARENT = PARENT    CONTAINER_NAME = CONTAINER_NAME    STYLE = STYLE    DYNNR = DYNNR    REPID = REPID    LIFETIME = LIFETIME
  EXCEPTIONS    CNTL_ERROR = 1    CNTL_SYSTEM_ERROR = 2    CREATE_ERROR = 3    LIFETIME_ERROR = 4    LIFETIME_DYNPRO_DYNPRO_LINK = 5.
где,
dynnr в?" номер экрана,
repid в?" Report ID, программа с которой связывается элемент управления
КАТАЛОГ ПОЛЕЙ
Каталог полей это таблица типа LVC_T_FCAT, которая содержит информацию об отображаемых полях.
Каталог полей содержит более 60 полей, некоторые из которых для внутреннего использования.
Как правило рекомендуется заполнить эти поля в каталоге перед тем, как список будет отображен первый раз и передать в метод SET_TABLE_FOR_FIRST_DISPLAY. Чтобы настроить каталог сгенерированный ALV для специфических условий перед выводом списка используется функциональный модуль LVC_FIELDCATALOG_MERGE.
Методы get_frontend_fieldcatalog и set_frontend_fieldcatalog позволяют изменить каталог после вывода списка.
ГЕНЕРИРОВАНИЕ КАТАЛОГА ПОЛЕЙ
В основном, необходим каталог полей для каждого списка отображаемого в ALV.
Есть несколько опций для генерирования каталога.
Автоматический по структуре Data Dictionary;
Ручной из ABAP программы;
Полуавтоматический комбинированием указанных выше способов.
АВТОМАТИЧЕСКОЕ ГЕНЕРИРОВАНИЕ КАТАЛОГА ПОЛЕЙ
Если структура выходной таблицы корреспондирует со структурой из Data Dictionary (DDIC), ALV Grid Control может использовать эту информацию, чтобы генерировать каталог полей автоматически. В этом случае все поля из DDIC будут отображены в списке.
Чтобы передать эту структуру в ALV Grid Control необходимо:
Сослаться на нее используя LIKE, или включить в другую используя INCLUDE STRUCTURE
Передать структуру в метод set_table_for_first_display в параметре i_structure_name (cм рисунок 10).

Рисунок SEQ Рисунок \* ARABIC 10. Создание каталога полей ALV Grid вручную

ГЕНЕРИРОВАНИЕ КАТАЛОГА ПОЛЕЙ ВРУЧНУЮ
В случае, когда данные которые необходимо отобразить не представлены или только частично представлены в Data Dictionary можно использовать поля каталога для описания структуры выходной таблицы.
Каталог полей определен в Data Dictionary как таблица типа LVC_T_FCAT. Каждая строка которой описывает поле в выходной таблице. В зависимости от того существует ли ссылающиеся структура в DDIC или нет, необходимо по крайней мере заполнить следующие поля в каталоге.
Обязательные для заполнения поля каталога полей приведены в таблице.
Поля каталога полей без ссылки на словарь Поля каталога полей без ссылки на словарь Пояснение
FIELDNAME FIELDNAME Имя выводимого поля внутренней таблицы
REF_TABNAME Имя ссылочной структуры в словаре
REF_FIELDNAME Ссылочное поле в словаре данных (необходимо только в случае несовпадения fieldname)
INTTYPE Внутренний ABAP тип данных поля в выходной таблице
OUTPUTLEN Ширина колонки
COLTEXT Текст заголовка

Рисунок SEQ Рисунок \* ARABIC 11. Генерирование каталога полей вручную
ПОЛУАВТОМАТИЧЕСКОЕ ГЕНЕРИРОВАНИЕ ПОЛЕЙ
При генерировании Каталога Полей полуавтоматически можно комбинировать информацию о структуре из словаря данных и собственной информацией о структуре.
В этой ситуации есть возможность:
Модифицировать описание структуры;
Добавить описание структуры новых полей в каталог, сгенерированный автоматически.
Чтобы генерировать каталог полей полуавтоматически необходимо:
Объявить внутреннюю таблицу типа LVC_T_FCAT.
Вызвать функцию LVC_FIELDCATALOG_MERGE и передайте DDIC структуру выходной таблицы и структуру внутренней таблицы. Эта функция генерирует каталог полей и заполняет внутреннюю таблицу соответственно.
Читая строки вы можете соответственно изменять и адаптировать. Если выходная таблица содержит больше полей, чем содержится в DDIC, нужно добавить по одной строке для каждого нового поля.

Создание отчетов с использованием генератора отчетов SAP SmartForms

SMARTFORMS" это средство быстрой разработки сложных графических выходных форм. Каждый формуляр описывается иерархической структурой. На каждом уровне иерархии задаются необходимые параметры вывода формуляра. Для вывода формуляра автоматически генерируется функциональный модуль. Данные в формуляр передаются через параметры функционального модуля. Формуляры предоставляют возможность вывода текстовых, графических элементов, вывод шаблонов и таблиц.
Для начала работы вызывается транзакция SMARTFORMS.
На стартовом экране выбирается тип объекта из списка:
Форма;
Стиль;
Текстовый модуль.
При выборе пункта Формуляр запускается построитель формуляров (SAP Form Builder). Формуляры можно просматривать, редактировать, переименовывать, копировать.
ОБЛАСТИ ЭКРАНА
Экран редактора формуляров делится на три области:
Дерево навигации(слева). Представляет структуру формуляра. Отдельные элементы формуляра (страница или окно) включает набор узлов (текст, команда)
Экран ведения(в центре). Содержит несколько закладок, на котовых задаются атрибуты текущего узла формуляра.
Графический редактор(справа, может быть скрыт). Позволяет задавать параметры элементов страницы(размер и положение) путем drag and drop техники.
ДЕРЕВО НАВИГАЦИИ
Каждый элемент формуляра представлен узлом в дереве навигации.
Подэлементы наследуют атрибуты верхних уровней (например стиль) . Если уровень не обрабатывается то и все подуровни не обрабатываются.
Верхний узел формуляра включает узлы.
ГЛОБАЛЬНАЯ НАСТРОЙКА
Включает разделы:
Атрибуты формуляра. Общая информации и опции вывода;
Интерфейс формуляра. Здесь определяются поля для передачи данных;
Глобальные определения. Здесь определяются дополнительные поля для обработки формуляра;
Страницы и окна.
АТРИБУТЫ ФОРМУЛЯРА
Включают не только название и описание но и состояние формуляра (активный не активный). Формуляр может иметь две версии активную и неактивную. Программ вызывает только активную версию формуляра. Для активации выбирается кнопка в?" АКТИВИРОВАТЬ.
В атрибутах также указывается класс разработки и возможность по переводу формуляра.
Класс разработки может быть изменен с начального экрана <Перейти-Запись каталога объектов>
АТРИБУТЫ ВЫВОДА
На закладке опции вывода устанавливаются следующие атрибуты
Формат страницы
Знаков на дюйм - оставить по умолчанию
Строк на дюйм - оставить по умолчанию
Стиль. Стиль формуляра включает набор шрифтов и форматов абзаца. Создается транзакцией SMARTSTYLES.
XSF. Режим вывода . Можно активировать вывод не в спулл а через XSF (SAP Smart Forms XML) интерфейс.
XSF. Устройство вывода.
СТРАНИЦЫ
Каждый формуляр содержит хотя бы 1 страницу. Страницы можно создавать, изменять, копировать, удалять. При удалении узла все подчиненные узлы также удаляются.
Наименование страницы (как и любого узла) должно состоять из цифр, букв и подчеркиваний. Первый символ в?" буква. SAP использует % для формирования автоматических наименований. Поэтому вам не стоит его использовать. Можно определить несколько страниц в формуляре. Первой обрабатывается верхняя страница. Затем обрабатывается страница, указанная как следующая в настройке текущей страницы. В зависимости от количества данных страница может быть использована несколько раз.
Каждая страница имеет следующие атрибуты.
Общие свойства. Здесь указывается следующая страница;
Опции вывода;
Фон.

Создание диалоговых программ в системе SAP R/3

Экраны SAP R/3

ЭКРАНЫ ВЫБОРА

При создании отчета первым рабочим экраном является экран, который позволяет задавать критерии выборки. Использование критериев выборки, вводимых с экрана, помогает разработчику писать простые и эффективные предложения WHERE оператора SELECT.
В ABAP/4 существует 2 типа полей ввода для стандартного экрана выбора:
PARAMETERS - единичные поля
SELECT-OPTIONS - внутренние таблицы для задания составных критериев выборки (рекомендуется для динамических предложений where и операторов select)
Определение критерия как параметра или составного критерия выборки автоматически задает соответствующее поле ввода на экране выбора, а также структуру данных в программе для сохранения введенной пользователем информации.
ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ ДЛЯ ЭКРАНА ВЫБОРА
Определение параметров осуществляется почти так же, как и определение полей, которое использует оператор DATA:
Пример:
DATA:
d_matnr LIKE MARA-MATNR VALUE в?¦ .
PARAMETERS:
p_matnr LIKE MARA-MATNR VALUE в?¦ .
Параметр определяет поле, которое может использоваться программой-отчетом как обычное поле, определенное с помощью оператора data. После ввода значения в поле ввода данного параметра на экране выбора и нажатия кнопки EXECUTE, это значение заносится в соответствующее поле, определенное параметром.
При вводе значений параметров или составных критериев выборки количество извлекаемых данных автоматически не ограничивается. В предложении WHERE оператора SELECT соответствующие параметры следует размещать так же, как и обычные поля.
Поскольку параметры выполняют роль интерфейсных объектов экрана выбора, то в синтаксисе определения parameters и data есть небольшие различия:
1) Начальное значение параметра определяется с помощью дополнения default (а не value, как для data). Однако это дополнение не является обязательным.
2) Структурированные параметры не поддерживаются (типа записей, задаваемых с помощью операторов BEGIN OF / END OF).
3) Параметры типа C длиной 1 могут выводиться на экран в виде переключателя, если использовать дополнение as checkbox в определении параметра. При выборе поля значение параметра будет равно Х, в противном случае он будет пустым.
Каждый параметр связан со своей определяемой на естественном языке меткой (или названием поля), которая отображается на экране перед полем ввода. Эту метку можно изменить или перевести на другой язык без изменения исходного текста программы.
СОСТАВНЫЕ КРИТЕРИИ ВЫБОРКИ
Составные критерии выборки (SELECT-OPTIONS) обычно применяются при задании сложной выборки (например, диапазона значений, исходного шаблона или их сочетания). Стандартная форма SELECT-OPTIONS на экране выбора имеет 2 поля ввода, позволяющих задать единственное значение или интервал.
Пример:
RANGES: R_MATNR FOR MARA-MATNR DEFAULT в?¦ .
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR DEFAULT в?¦ .
ABAP/4 автоматически сохраняет введенную информацию во внутренней, стандартно структурированной таблице, которая может использоваться в динамическом предложении WHERE оператора SELECT.
Задание составного критерия выборки в диалоговом окне
COMPLEX SELECTIONS:

Как и параметр, составной критерий имеет на экране выбора связанную с ним, определяемую на естественном языке метку. Эта метка отображается перед полем ввода составного критерия и может изменяться или переводиться на другой язык без изменения исходного текста программы. Доступ к меткам параметров и составных критериев обеспечивается через Goto -> Text elements:
Иногда внутрення структура Select-Option и содержимое внутренней таблицы должны обрабатываться в явном виде. Например, при необходимости заполнить составной критерий значениями по умолчанию до появления экрана выбора допускается добавить одну или несколько строк во внутреннюю таблицу, содержащую значения этого критерия.

Внутренняя таблица, соответствующая составному критерию SELECT-OPTION, всегда состоит из 4 столбцов: SIGN (признак), OPTION (операция), LOW (нижнее значение), HIGH (верхнее значение).
Каждая строка этой таблицы соответствует определенному условию выборки. Поля LOW и HIGH содержат используемые при сравнении значения и связаны с соответствующими полями таблицы: они должны иметь одинаковые тип и длину. Поле HIGH применяется только для задания диапазона значений, в противном случае оно сохраняет начальное значение.
При выполнении программы внутренняя таблица, связанная с составным критерием, автоматически заполняется данными, введенными пользователем на экране выбора. Однако ее можно заполнить значениями по умолчанию до отображения этого экрана, а также работать с ней, как с обычной таблицей (например, проверять введенные пользователем данные на корректность или правдоподобность).
Выполнение таких проверок лучше всего организовать на основе событий экрана выбора. Если какое-нибудь условие проверки не удовлетворяется, на экран выбора можно вывести соответствующее сообщение, после чего обновить экран и разрешить новый ввод данных в поля.
СОБЫТИЯ ЭКРАНА ВЫБОРА
В ABAP/4 предусмотрены события, обеспечивающие задание значений на экране выбора и присвоение критерию выборки этих значений:
INITIALIZATION в?" выполняется сразу после начала создания отчета и до обработки значений, заданных на экране выбора
AT SELECTION-SCREEN OUTPUT в?" выполняется до того, как будет выведен экран выбора
AT SELECTION-SCREEN ON P/S в?" выполняется после задания пользователем параметра p или составного критерия s
AT SELECTION-SCREEN в?" выполняется после ввода всех критериев выборки
Событие INITIALIZATION происходит только однажды, а событие AT SELECTION-SCREEN OUTPUT в?" при каждом нажатии Enter, если экран выборки активен. После обработки всех перечисленных событий ABAP/4 продолжает выполнение события START-OF-SELECTION, обрабатывая самый верхний уровень вложения выборки из базы данных.
События AT SELECTION-SCREEN и AT SELECTION-SCREEN ON P/S рекомендуется использовать для проверки введенных пользователем данных на допустимость значений и правдоподобие.
Каждое сообщение об ошибке, получаемое по событию AT SELECTION-SCREEN, немедленно останавливает программу-отчет и обновляет экран выбора. При этом можно изменить все критерии выборки. Если используется дополнение on p/s, то после события разрешается ввод только данного параметра или составного критерия. Текст сообщения об ошибке создается или изменяется двойным щелчком мыши на поле текста и хранится в системной таблице, содержащей информацию, определяемую на естественном языке.
Для ускорения получения отчета следует запретить неограниченные запросы к базе данных. Во избежание этого в составном критерии можно указать количество строк, которое следует использовать в предложении WHERE оператора SELECT.
Если внутренняя таблица, содержащая составной критерий, пуста, а пользователь не указал никакого критерия, то желательно выводить на экран сообщение об ошибке.
Пример:
REPORT ZQWERTY .
TABLES: MARA.
DATA: BEGIN OF ITBL OCCURS 10,
MATNR LIKE MARA-MATNR,
MTART LIKE MARA-MTART,
END OF ITBL.
DATA C1 TYPE I VALUE 0.
SELECTION-SCREEN COMMENT 1(16) TEXT-001.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF BLOCK BLK1
WITH FRAME TITLE TEXT-002.
PARAMETERS:
R1 RADIOBUTTON GROUP GR1,
R2 RADIOBUTTON GROUP GR1,
R3 RADIOBUTTON GROUP GR1 DEFAULT 'X'.
SELECTION-SCREEN SKIP 1.
PARAMETERS: CHK AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2
WITH FRAME TITLE TEXT-003.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS RR1 RADIOBUTTON GROUP GR2.
SELECTION-SCREEN COMMENT 3(4) TEXT-001.
SELECTION-SCREEN POSITION 10.
PARAMETERS RR2 RADIOBUTTON GROUP GR2.
SELECTION-SCREEN COMMENT 12(4) TEXT-001.
SELECTION-SCREEN POSITION 20.
PARAMETERS CHK2 AS CHECKBOX DEFAULT ' '.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLK2.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME.
SELECTION-SCREEN PUSHBUTTON 10(20) TEXT-004
USER-COMMAND CODE1.
SELECTION-SCREEN PUSHBUTTON 50(20) TEXT-005
USER-COMMAND CODE2.
SELECTION-SCREEN END OF BLOCK BLK3.
INITIALIZATION.
AT SELECTION-SCREEN.
CASE SY-UCOMM.
WHEN 'CODE1'.
MOVE 1 TO C1.
MESSAGE I001(ZZ) WITH TEXT-006.
WHEN 'CODE2'.
MOVE 2 TO C1.
MESSAGE S002(ZZ) WITH '2'.
ENDCASE.
START-OF-SELECTION.
WRITE / C1.
ЭКРАНЫ ДИАЛОГА
Экран в?" общий тип пользовательского диалога. Он определяется не в программе, а в Screen Painter. Экраны можно объединять в набор (последовательность) экранов. Экраны вызываются либо путем ввода транзакции SAP или командой CALL SCREEN. В общем случае экран - это набор полей ввода/вывода и логики ДинПро.
Для создания и модификации экранов используется транзакция SE51.
Вызов Редактора Экранов в?" транзакция SE51.
Экран состоит из следующих компонентов:
атрибуты экрана;
элементы экрана;
поля экрана
описание логики ДИНПРО (Process Beforе Output, Process After Input, Process On-Help request, Process On-Value request).
Экран обладает следующими атрибутами:
Программа:
1-report
M-module pool
F-function pool
Номер экрана:
( 1000-1010 в?" зарезервировано для ABAP Словаря, > 9000 в?" SAP)
Тип экрана:
Стандарт (Normal)-на все окно
Модальное Диалог. Окно (Modal dialog box)-поверх существующего окна с захватом фокуса
Экран выбора (Selection screen)
Подэкран (Subscreen)
Следующий экран (Next screen)-номер вызываемого экрана.
Позиция курсора (Cursor position) -элемент экрана на котором будет позиционирован курсор.
Группа экранов (Screen group)- 4 цифры помещаемые в SY-DYNGR при обработке экрана. Используется для массового изменения элементов экрана входящих в данную группу.
Хранить данные (Hold data) -для помощи пользователю при неоднократном вводе информации в элементы экрана.
Элементы экрана (Screen elements):
Текстовые поля (Text fields)-отображаемый текст.
Поля ввода/вывода (Input/output fields)-поля ввода/вывода.
Выпадающий список (Dropdown list boxes)-помощь пользователю выбрать 1 значение из предложенного списка.
Независимы кнопки (Checkboxes)-в??Xв??-выбор элемента.
Зависимые кнопки (Radio buttons)
Переключатели (Pushbuttons)-элемент на экране для переключения PAI-события и вызова какого-либо действия в программе (если этому элементу присвоен функциональный код).
Рамка (Box)-для визуализации и логической группировки полей ввода/вывода
Подэкраны (Subscreens)-область экрана в которую может быть помещен другой экран.
Экранные таблицы (Table controls)-область экрана для вывода информации в виде таблицы.
Картотеки (Tabstrip controls) -область на экране в виде нескольких закладок.
Контейнер (Custom control) - контейнерный элемент.
Иконки Статуса (Status icons) - элемент для отображения статуса программы.
Код возврата (OK_CODE) -20 символьное поле, не отображаемое на экране. Служит для передачи в программу кодов нажатых клавиш или осуществленных действий.

Логика ДинПро (Dynamic Programs)

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

Рисунок SEQ Рисунок \* ARABIC 12. Логика работы модулей экрана
Логика ДинПро - это язык управления логикой работы экрана. Имеет синтаксис похожий на ABAP.
Логика ДинПро не содержит объявлений данных.
Основные блоки обработки в логике ДинПро:
PROCESS BEFORE OUTPUT
PROCESS AFTER INPUT
PROCESS ON HELP-REQUEST. в?" событие для выбора значений по F4...
PROCESS ON VALUE-REQUEST. в?" событие для вывода справки по F1
Основной синтаксис описан в таблице.
Ключевое слово Назначение
MODULE Вызывает диалоговый модуль в ABAP программе
FIELD Обозначает точку переноса содержимого поля
ON Используется в сочетании с FIELD
VALUES Используется в сочетании c FIELD
CHAIN Стартует цепочку обработки полей
ENDCHAIN Завершает цепочку обработки полей
CALL Вызывает подэкран
LOOP Цикл обработки экранной таблицы
ENDLOOP Завершает цикл обработки экранной таблицы
Пример:
PROCESS BEFORE OUTPUT.
MODULE INIT_SCREEN_100.
MODULE STATUS_0100.
LOOP AT ITAB WITH CONTROL
MODULE SET_VALUES.
ENDLOOP.
PROCESS AFTER INPUT.
MODULE CLEAR_OK_CODE.
MODULE CANCEL AT EXIT-COMMAND.
LOOP AT ITAB.
MODULE GET_DATA.
FIELD F1 MODULE CHECK_F1.
CHAIN.
FIELD F2, F3.
MODULE CHECK_FIELDS1.
FIELD F4, F5.
MODULE CHECK_FIELDS2.
ENDCHAIN.
ENDLOOP.
MODULE USER_COMMAND_0100.
PROCESS ON HELP-REQUEST.
PROCESS ON VALUE-REQUEST.
Обработка событий на экране осуществляется через обработку OK_CODE в модуле PAI (POH, POV).
Вызов ABAP диалоговых модулей.
Пример:
В логике ДиПро:
MODULE <mod>.
В ABAP программе:
MODULE <mod> OUTPUT.
ENDMODULE.
КОНТРОЛЬ ПЕРЕДАЧИ ДАННЫХ.

Данные от элементов экрана передаются в программу или сразу при выполнении PAI или в определенный разработчиком момент.
Синтаксис в логике ДинПро:
FIELD <f>.
ПРИНУДИТЕЛЬНЫЙ ВЫЗОВ МОДУЛЯ.
Существует вызов модуля для кода функции типа E. Это обычно клавиши Назад, Выход или Отменить. При этом не происходит вызовов других модулей, а вызывается модуль, описанный в Логике ДинПро как:
MODULE <NAME> AT-EXIT COMMAND.
Передачи данных с экрана в программу также не происходит. Если модулей MODULE <NAME> AT-EXIT COMMAND будет несколько, то работает только первый.
Вызов модуля по условию.
Синтаксис в логике ДинПро:
FIELD <f> MODULE <mod> ON INPUT|REQUEST|*-INPUT.
ON INPUT-модуль вызывается, если поле содержит значение отличное от INITIAL.
ON REQUEST-модуль вызывается, если пользователь ввел в поле какое-либо значение (даже если и INITIAL).
ON *-INPUT-модуль вызовется, если пользователь ввел в поле в??*в??. При этом это поле должно содержать атрибут в??*-entryв?? в редакторе экранов.
Для проверки нескольких полей используется следующий синтаксис в логике ДинПро:
CHAIN.
  FIELD: <f1>, <f 2>,...
  MODULE <mod1> ON CHAIN-INPUT|CHAIN-REQUEST.
  FIELD: <g1>, <g 2>,...
  MODULE <mod2> ON CHAIN-INPUT|CHAIN-REQUEST. 
ENDCHAIN.
Следующий модуль вызывается по user-command CS и function type S. Обычно такой код присваивается клавише F2 и так же срабатывает по mouse double-click. Модуль обрабатывается в порядке присутствия во Flow Logic и не пропускает проверок по input.
MODULE <MOD> AT CURSOR-SELECTION.
ПЕРЕДАЧА ДАННЫХ МЕЖДУ ABAP ПРОГРАММАМИ И ЭКРАНАМИ
Поле на экране может быть одного имени с программным (например, имя поля внутренней таблицы) или иметь ссылку на Словарь. Тогда оно наследует все свойства такого поля (check input value, check value range, help ).
Другая задача обработки экранных элементов - верификация введенной информации. Это делается автоматически (если элемент ссылается на Словарь) или программным путем.
Виды проверки:
Автоматические
Внутри логики ДинПро
Синтаксис:
FIELD <f> VALUES (<v1>, <v2>,...).
FIELD <f>
SELECT   *
   FROM  <dbtab>
  WHERE <k1> = <f1> AND <k2> = <f2> AND...
  [INTO  <g>]
      WHENEVER [NOT] FOUND SEND ERRORMESSAGE|WARNING
      [<num> [WITH <h1>... <h 4>]].
ПРОВЕРКА В ДИАЛОГОВЫХ МОДУЛЯХ
Синтаксис:
Для проверки одного поля
FIELD <F> MODULE <MOD>.
Для проверки нескольких полей:
CHAIN.
  FIELD: <f1>,<f2>,...
   MODULE <mod1>.
  FIELD: <g1>, <g2>,
  MODULE <mod2>.
ENDCHAIN.
ТИПЫ СООБЩЕНИЙ ОБ ОШИБКАХ
Существуют следующие типы сообщений:
A (termination) - прервать обработку и перезапустить транзакцию
Х (exit) - так же как и А, только с short dump.
Е (error) - прервать обработку. User должен исправить введенное значение
W (warning) - прервать обработку. User должен исправить введенное значение. Подтвердить сообщение User должен нажатием Enter.
I (information) - прервать обработку. Продолжить ее после нажатия Enter.
S (success) - информационное сообщение на следующем экране.
Синтаксис:
MESSAGE E<number>(<message class>) WITH TEXT-T01.
Транзакция SE91 используется для Создания сообщений.

Технологии расширений функциональности системы SAP R/3

SAP-расширения (User Exits, Customer Exits)

Персонализация
Роли:
Варианты пользователя
Модификация
Нерегистрируемые модификации
Вспомогательные модификации
User exits
Расширение
ABAP dictionary
- Таблицы
- Field exit
Customer exits
-Function module exits
- Menu exits
- Screen exits
Business transaction events
Business Add-Ins
Стандарт R/3 (бизнес приложения)
Доработки

Вы можете изменить систему SAP R/3 для ваших нужд следующими способами:
Настройка. Внедрение специфических бизнес-функций и процессов в соответствии с планом внедрения. Средства и процедуры для этого уже разработаны SAP. Настройка производится в специальном дереве транзакций настройки (транзакция SPRO)
Персонализация. Создание меню транзакций и вариантов запуска транзакций для конкретной роли пользователя в системе. Это позволяет создать наиболее дружественный и гибкий интерфейс с пользователем.
Модификация. Существует возможность изменять объекты SAP и сохранять эти изменения при обновлении системы. Эта процедура автоматизирована в SAP при помощи Modification Assistant
Расширение. Создание новых (пользовательских) объектов в системе, ссылающихся на объекты, уже существующие (SAP Repositary)
Пользовательские разработки. Создание объектов уникальных для конкретного заказчика (реализации проекта) в специфическом пространстве имён (Z, Y)
1. Модификации в?" это изменение объектов SAP в системе заказчика.
Существует возможность расширить систему на следующих уровнях:
В ABAP программах (function module exits). Изменения производятся в функциональном модуле с чётко определённым интерфейсом.
В GUI интерфейсах (menu exits). Изменения производятся в специальных функциях или методах класса (например для контекстного меню CL_CONTEXT_)
На экранах в?" вставляя свой экран в специальный подэкран, предусмотренный расширением SAP (screen exits)
На экранах, обрабатывая customer code который ссылается на поле на экране (field exits)
В таблицах или структурах ABAP Dictionary (репозитария) в?" через команду APPEND STRUCTURE в транзакции SE11 или через добавление CI_ include структуры
Управление функциями расширения производится транзакциями SMOD (системные расширения), CMOD (проекты пользовательских расширений)
Чтобы бытро найти Customer modification нужно в текте программы найти вызов CALL CUSTOMER-FUNCTION. Зная имя функции можно найти её в транзакциях управления расширениями, включить в пользовательский проект расширений и активировать его.
2. USER EXITS в отличии от CUSTOMER EXITS позволяет получать доступ и модифицировать программные компоненты (program components) и объекты данных (data objects) в стандартной системе (транзакции SAP ).
При upgrade User exit остается неизменным (логично в?"это специфика бизнес-процессов заказчика ) и существует возможность проверки каждого User exit на соответствие стандартной системе (при upgrade системы).
В стандартной программе точки в которых могут быть вызваны расширения User exits содержат префикс в?? USEREXIT в??. Реально выполняющимся User exits соответствует в программе include, который включает конкретный модуль (вставлены заготовки модулей которые всегда обрабатываются в стандартной программе при ее выполнении).
Впервые техника User Exits была использована в компонента модуля SD. Вы можете найти описания существующих User exits в транзакции SPRO. Запустите и выберите небходимую тему.
Если щелкнуть мышью по кнопке то вызывается help установленный на локальной машине и можно почитать о назначении User exits.
Еще дополнительные способы поиска User exits:
Используя транзакцию SE38 открыть программу в которой необходимо вносить изменения и произвести поиск по префиксу в?? USEREXIT в?? .
Соответствие кода транзакции и имени программы можно посмотреть в таблице TSTC .
Используя транзакцию SE37 ввести в поле для поиска объекта EXIT_(name of program)* или EXIT_* .
Для поиска User exits, используемых для управления предопределенных процедур Customizing-а (access sequence) используйте транзакцию NACE.
Если нажать на кнопку справа от подсвеченного в??желтымв?T то появится следующее окно После этого необходимо выбрать строку в этом окне (в??коричневымв?T подсвеченная строка), а после чего нажать кнопку. В результате Вы увидите User exit типа в??User exits которые используют таблицыв?T, который используется для управления выполнением стандартных программ посредством Настройки.
Пример:
FORM KOBEV_601.
* Счетчик срабатываний создания NEW DELIVERY
DATA ZZ_ND_COUNTER TYPE I.
IF SY-TCODE eq 'VA01' or SY-TCODE eq 'VA02'.
IMPORT ZZ_ND_COUNTER from MEMORY ID 'NEW_DELIVERY'.
IF SY-SUBRC = 0 AND ZZ_ND_COUNTER > 0.
FREE MEMORY ID 'NEW_DELIVERY'.
SY-SUBRC = 0.
ELSE.
SY-SUBRC = 4.
ENDIF.
ENDIF.
ENDFORM.
Обычно в аналогичных User exit при выходе необходимо присвоить код возврата SY-SUBRC . SY-SUBRC =0 обычно соответствует тому, что процедура будет выполнена. . SY-SUBRC = 4 в?" обычно соответствует отказу от выполнения процедуры. В моем случае в качестве customizing-овой процедуры использовалась посылка сообщения по SAPmail.
Транзакция SMOD.
SE80. Имена Include c User exits содержат 8 позиций и содержат 'FZ*' .
РЕКОМЕНДАЦИИ ПО ПРОГРАММИРОВАНИЮ USER EXITS:
Для написания и первоначальной отладки кода используйте конструкцию
IF SY-UNAME = 'USER'.
ВАШ КОД.
ENDIF.
Вместо 'USER' должно быть имя пользователя под которым вы входите в SAP.

User exits типа в?? INCLUDEs в?? (которые включены в стандартную транзакцию) активизируются сразу после сохранения. Поэтому берегите нервы зарубежных партнеров и наших коллег, которые работают с этой транзакцией, и проверяйте ваш код, а только потом сохраняйте.
User exits типа в??User exits которые используют таблицыв?? надо обязательно активировать иначе ваши последние изменения не будут работать.
Программную точку останова в программе можно сделать так:
IF SY-UNAME = 'User'.
BREAK-POINT.
ENDIF.
Самая информативная утилита для нахождения дополнительной информации это отладчик. В нем можно найти необходимые структуры данных и поля. Проверить область видимости и т.п.
В случае необходимости передать значения между user exit- ми (они часто имеют разные области видимости) используйте механизмы EXPORT в?"IMPORT.
ТРАНЗАКЦИОННЫЕ МОДИФИКАЦИИ
Специальные транзакции, при помощи которых производится вмешательство в бизнес-процесс SAP. Например транзакция бухгалтерского замещения OBBH (модуль FI) в?" позволяет изменить данные бухгалтерского документа при его проводке. Срабатывает по определённому правилу, отмеченному в транзакции. Позволяет подставить пользовательский код.
BUSINESS TRANSACTION EVENT (BTE)
BTE позволяют присоединить дополнительный компонент, в виде функционального модуля, в системе SAP R/3
BTE использует следующие интерфейсы:
Publish & Subscribe
Этот интерфейс передаёт информацию за пределы системы SAP R3 (во внешние системы) о событиях произошедших в системе и передаёт необходимые данные. Внешние приложения при этом не могут возвратить данные в SAP R/3.
Process
Этот интерфейс используется для контроля бизнес-процессов образом, отличным от стандартного. Это вмешательство в стандартный процесс и передача изменённых данных приложению SAP R/3.
В программах SAP функциональные модули BTE вызываются с именем "OPEN_FI_PERFORM_<no>_E" для интерфейсов Publish & Subscribe и именем "OPEN_FI_PERFORM_<no>_P" для интерфейсов Process. Таким образом можно осуществлять их поиск в транзакциях SAP R/3.
Транзакция управления BTE в?" в??FIBFв??
BUSINESS ADD-INS. (BADI)
В отличии от всех предыдущих модификаций, данный способ основан на вызове методов классов. В данный момент каждый из BAdI содержит программные расширения и расширения меню. В дальнейшем все другие компоненты, доступные в customer-modification станут доступны и в BAdI.
Для их использования применяется транзакция SE19 (Tools -> ABAP Workbench -> Utilities -> Business Add-Ins ->Implementation).
Большинство имён BAdI начинается с CL_ для класса и IM_ для экземпляра класса (инстанции)
Для создания BAdI используется BAdI Builder (Tools -> ABAP Workbench -> Utilities -> Business Add-Ins -> Definition).
WS_UPLOAD (UPLOAD)в?" для загрузки размещенного на сервере представления данных файла во внутреннюю таблицу
Пример:
DATA: BEGIN OF DAT OCCURS 10,
STR(80),
END OF DAT.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = 'c:/setup.log'
TABLES
DATA_TAB = dat
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
LOOP AT DAT.
WRITE: / DAT-STR.
ENDLOOP.
Существует 2 пути ввода информации в систему SAP R/3 через бизнес-транзакции:
использование пакетного ввода
вызов транзакции с использованием оператора CALL TRANSACTION.
Эти методы используют одни и те же данные для обработки (сформированные программой записи транзакции). Отличие методов заключается в моменте обработки данных и в возможности вмешательства оператора в процесс обработки данных.
Данные, сформированные программой для пакетного ввода (BATCH INPUT) , ставятся в системную очередь, выполнением которой управляет система. Оператор не может вмешаться в процесс обработки данных, он может потом проверить результаты обработки данных.
Данные, сформированные программой для CALL TRANSACTION, обрабатываются непосредственно в самой программе в момент работы программы. Оператор может внести коррективы в обрабатываемую информацию (такую возможность ему может предоставить разработчик программы).
Система SAP R/3 имеет возможность генерации программного кода, в котором по умолчанию присутствуют все необходимые параметры и процедуры для обоих путей ввода информации (BATCH INPUT и CALL TRANSACTION).
Для получения и дальнейшего использования программного кода необходимо выполнить следующие действия.
Перед записью транзакции рекомендуется выполнить пройти необходимую бизнес-транзакцию до конца с тестовыми данными, чтобы знать, в какой момент, на каком экране и какие данные вводить. Кроме того, бывает полезно сравнить вид и последовательность экранов бизнес-транзакции с видом и последовательностью экранов бизнес-транзакции при записи. После этого можно приступать к процессу записи. Для этого используется транзакция SHDB, где указывается код записываемой транзакции (например, MMBE).

Технология BAPI

BAPI в?" это строго определенный интерфейс для процессов и данных для прикладных приложений, реализованный в качестве методов объектов.
Бизнес-объекты формируют основу для связи на высоких (удобных для пользователя) уровнях сети. Например, они позволяют системе R/3 функционировать через Интернет или осуществлять связь с программами на настольных ПК. Целью объектно-ориентированной SAP-стратегии является интеграция объектов на хозяйственном, а не на чисто техническом уровне.
Бизнес-объекты:
создают основу для четко определенной связи между системами клиент/сервер;
ориентированы на хозяйственную деятельность: например, существуют такие объекты, как "дебитор", "заказ" или "сотрудник";
предоставляют бизнес-функции (методы). Например, для объекта "дебитор" существуют такие методы, как "Создание дебитора" и "Просмотр дебитора". Названия таких методов позволяют программировать понятно и, следовательно, без ошибок;
управляются централизованно в системе R/3, в репозитарии бизнес-объектов (РВО).
Интерфейсы BAPI (Business Application Programming Interfaces) являются функциональными интерфейсами. Они используют бизнес-функции, определенные для бизнес-объектов. Интерфесы BAPI можно вызвать как из системы R/3, так и вне ее.
Для поиска BAPI используется транзакция BAPI.

моделирование сетями Петри   ОКМ   ДМ   экономическая информатика   4GL   Теория и практика обработки информации

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

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution