Учебники

SAP ABAP — Краткое руководство

SAP ABAP — Обзор

ABAP расшифровывается как Advanced Business Application Programming, язык 4GL (4-го поколения). В настоящее время он, наряду с Java, позиционируется как основной язык программирования сервера приложений SAP.

Начнем с архитектуры высокого уровня системы SAP. Трехуровневая архитектура клиент / сервер типичной системы SAP изображена следующим образом.

3-уровневая клиент / серверная архитектура

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

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

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

Таким образом, в отличие от C ++ и Java, программы ABAP не хранятся в отдельных внешних файлах. Внутри базы данных ABAP-код существует в двух формах:

  • Исходный код, который можно просматривать и редактировать с помощью инструментов ABAP.

  • Сгенерированный код , представляющий собой двоичное представление. Если вы знакомы с Java, этот сгенерированный код несколько сравним с байтовым кодом Java.

Исходный код, который можно просматривать и редактировать с помощью инструментов ABAP.

Сгенерированный код , представляющий собой двоичное представление. Если вы знакомы с Java, этот сгенерированный код несколько сравним с байтовым кодом Java.

Систему выполнения можно рассматривать как виртуальную машину, похожую на виртуальную машину Java. Ключевым компонентом системы времени выполнения ABAP является интерфейс базы данных, который превращает независимые от базы данных операторы (Open SQL) в операторы, понимаемые базовой базой данных (Native SQL). SAP может работать с широким спектром баз данных, и одна и та же программа ABAP может работать на всех из них.

SAP ABAP — Среда

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

Привет ABAP

Давайте начнем с общего примера «Hello World».

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

Вам необходимо ввести свой код с помощью редактора ABAP, который входит в состав инструментов ABAP, поставляемых с сервером приложений SAP NetWeaver ABAP (также известным как «AS ABAP»).

«AS ABAP» — это сервер приложений с собственной базой данных, средой выполнения ABAP и инструментами разработки ABAP, такими как ABAP Editor. AS ABAP предлагает платформу разработки, которая не зависит от аппаратного обеспечения, операционной системы и базы данных.

Использование редактора ABAP

Шаг 1 — Запустите транзакцию SE38, чтобы перейти к редактору ABAP (обсуждается в следующей главе). Давайте начнем создавать отчет, который является одним из многих объектов ABAP.

Шаг 2 — На начальном экране редактора укажите название вашего отчета в поле ввода ПРОГРАММА. Вы можете указать имя как ZHELLO1. Предыдущий Z важен для имени. Z гарантирует, что ваш отчет находится в пространстве имен клиента.

Пространство имен клиента включает все объекты с префиксом Y или Z. Оно всегда используется, когда клиенты или партнеры создают объекты (например, отчет), чтобы отличать эти объекты от объектов SAP и предотвратить конфликты имен с объектами.

Шаг 3 — Вы можете ввести имя отчета строчными буквами, но редактор изменит его на прописные. Таким образом, имена объектов ABAP чувствительны к регистру.

Шаг 4 — После указания имени отчета нажмите кнопку СОЗДАТЬ. Появится всплывающее окно ABAP: PROTRAM ATTRIBUTES, и вы предоставите больше информации о своем отчете.

Шаг 5 — Выберите «Исполняемая программа» в качестве типа отчета, введите заголовок «Мой первый отчет ABAP» и затем нажмите «Сохранить», чтобы продолжить. В следующий раз появится окно СОЗДАТЬ КАТАЛОГ ОБЪЕКТА. Выберите кнопку МЕСТНЫЙ ОБЪЕКТ, и всплывающее окно закроется.

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

REPORT ZHELLO1. 
WRITE 'Hello World'.

Начало отчета

Мы можем использовать клавиатуру (Ctrl + S) или значок сохранения (справа от поля команд), чтобы сохранить отчет. Разработка ABAP происходит в AS ABAP.

Запустить отчет так же просто, как сохранить его. Нажмите кнопку ACTIVATION (слева от значка запуска) и запустите отчет, используя значок DIRECT PROCESSING или функциональную клавишу F8. Заголовок «Мой первый отчет ABAP» вместе с выводом «Hello World» также отображается. Вот вывод —

My First ABAP Report 
Hello World 

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

Просмотр существующего кода

Если вы посмотрите на поле Program и дважды щелкните значение ZHELLO1, редактор ABAP отобразит код вашего отчета. Это называется прямой навигацией. Двойной щелчок по имени объекта открывает этот объект в соответствующем инструменте.

SAP ABAP — экранная навигация

Чтобы понять SAP ABAP, вам необходимо иметь базовые знания о таких экранах, как «Вход», «Редактор ABAP», «Выход из системы» и так далее. В этой главе основное внимание уделяется экранной навигации и стандартным функциям панели инструментов.

Экран входа

После входа на сервер SAP на экране входа в систему SAP появится запрос на ввод идентификатора пользователя и пароля. Вам необходимо предоставить действительный идентификатор пользователя и пароль и нажать Enter (идентификатор пользователя и пароль предоставляются системным администратором). Ниже приведен экран входа в систему.

Экран входа в систему SAP

Значок панели инструментов

Ниже приведена панель инструментов экрана SAP.

Панель инструментов экрана SAP

Строка меню — Строка меню — это верхняя строка диалогового окна.

Стандартная панель инструментов — на этой панели инструментов доступны большинство стандартных функций, таких как «Начало страницы», «Конец страницы», «Вверх», «Вниз» и «Сохранить».

Строка заголовка — в строке заголовка отображается название приложения / бизнес-процесса, в котором вы находитесь.

Панель инструментов приложения — здесь доступны параметры меню приложения.

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

ABAP Editor

Вы можете просто запустить транзакцию SE38 (введите SE38 в поле команд), чтобы перейти к редактору ABAP.

ABAP Editor

Стандартные ключи и значки

Клавиши выхода используются для выхода из программы / модуля или для выхода из системы. Они также используются для возврата к последнему доступному экрану.

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

Стандартные значки ключей

Ниже приведены варианты проверки, активации и обработки отчетов.

Активация и обработка отчетов

Выйти

Рекомендуется всегда выходить из редактора ABAP или выходить из системы SAP после завершения работы.

ABAP Editor Logoff

SAP ABAP — основной синтаксис

Заявления

Исходная программа ABAP состоит из комментариев и утверждений ABAP. Каждый оператор в ABAP начинается с ключевого слова и заканчивается точкой, а в ABAP учитывается регистр ‘Not’.

Первая строка без комментариев в программе начинается со слова ОТЧЕТ. Отчет всегда будет первой строкой любой созданной исполняемой программы. За оператором следует имя программы, которая была создана ранее. Затем линия заканчивается полной остановкой.

Синтаксис —

REPORT [Program_Name]. 
 
[Statements…]. 

Это позволяет оператору занимать столько строк в редакторе, сколько ему нужно. Например, ОТЧЕТ может выглядеть так:

REPORT Z_Test123_01. 

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

Давайте напишем код.

В строке ниже оператора REPORT просто введите этот оператор: Напишите «ABAP Tutorial».

REPORT Z_Test123_01.

Write 'This is ABAP Tutorial'. 

Четыре вещи, которые следует учитывать при написании заявлений

  • Оператор write записывает все, что в кавычках, в окно вывода.

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

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

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

Оператор write записывает все, что в кавычках, в окно вывода.

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

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

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

Обозначение двоеточия

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

Ниже приведен пример программы, которая может сохранить некоторые нажатия клавиш —

WRITE 'Hello'. 
WRITE 'ABAP'. 
WRITE 'World'. 

Используя обозначение двоеточия, его можно переписать следующим образом:

WRITE: 'Hello', 
       'ABAP', 
       'World'.

Как и любой другой оператор ABAP, макет не имеет значения. Это одинаково правильное утверждение —

WRITE: 'Hello', 'ABAP', 'World'.

Комментарии

Встроенные комментарии могут быть объявлены в любом месте программы одним из двух способов:

  • Комментарии в полной строке указываются звездочкой (*) в первой позиции строки, и в этом случае вся строка рассматривается системой как комментарий. Комментарии не должны заканчиваться точкой, потому что они не могут занимать более одной строки —

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

* This is the comment line
  • Частичные строчные комментарии обозначаются введением двойной кавычки («) после оператора. Весь текст, следующий за двойной кавычкой, рассматривается системой как комментарий. Вам не нужно заканчивать частичные строчные комментарии точкой, потому что они могут не распространяться на более чем одна строка —

Частичные строчные комментарии обозначаются введением двойной кавычки («) после оператора. Весь текст, следующий за двойной кавычкой, рассматривается системой как комментарий. Вам не нужно заканчивать частичные строчные комментарии точкой, потому что они могут не распространяться на более чем одна строка —

WRITE 'Hello'. "Here is the partial comment

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

Подавление пробелов

Команда NO-ZERO следует за оператором DATA. Он подавляет все ведущие нули числового поля, содержащего пробелы. Вывод, как правило, проще для пользователей.

пример

REPORT Z_Test123_01. 

DATA: W_NUR(10) TYPE N.
      MOVE 50 TO W_NUR.
      WRITE W_NUR NO-ZERO.

Приведенный выше код производит следующий вывод —

50

Примечание — без команды NO-ZERO вывод: 0000000050

Пустые строки

Команда SKIP помогает вставлять пустые строки на страницу.

пример

Сообщение команды выглядит следующим образом —

WRITE 'This is the 1st line'. 
SKIP. 
WRITE 'This is the 2nd line'. 

Приведенная выше команда сообщения создает следующий вывод:

This is the 1st line 
This is the 2nd line

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

SKIP number_of_lines. 

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

SKIP TO LINE line_number. 

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

Вставка строк

Команда ULINE автоматически вставляет горизонтальную линию поперек вывода. Также возможно контролировать положение и длину линии. Синтаксис довольно прост —

ULINE.

пример

Сообщение команды выглядит следующим образом —

WRITE 'This is Underlined'.
ULINE.

Приведенный выше код производит следующий вывод —

This is Underlined (and a horizontal line below this).

Сообщения

Команда MESSAGE отображает сообщения, определенные идентификатором сообщения, указанным в операторе REPORT в начале программы. Идентификатор сообщения представляет собой двухсимвольный код, который определяет, к какому набору из 1000 сообщений программа будет обращаться при использовании команды MESSAGE.

Сообщения пронумерованы от 000 до 999. С каждым номером связан текст сообщения длиной до 80 символов. Когда вызывается номер сообщения, отображается соответствующий текст.

Ниже приведены символы для использования с командой сообщения —

Сообщение Тип последствия
Е ошибка Появляется сообщение, и приложение останавливается в своей текущей точке. Если программа работает в фоновом режиме, задание отменяется, и сообщение записывается в журнал заданий.
W Предупреждение Появится сообщение, и пользователь должен нажать Enter, чтобы приложение продолжило работу. В фоновом режиме сообщение записывается в журнал заданий.
я Информация Откроется всплывающее окно с текстом сообщения, и пользователь должен нажать Enter, чтобы продолжить. В фоновом режиме сообщение записывается в журнал заданий.
Абенд Этот класс сообщений отменяет транзакцию, которую в данный момент использует пользователь.
S успех Это обеспечивает информационное сообщение в нижней части экрана. Отображаемая информация носит положительный характер и предназначена только для отзывов пользователей. Сообщение не препятствует программе в любом случае.
Икс выкинуть Это сообщение прерывает программу и создает короткий дамп ABAP.

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

пример

Когда мы создаем сообщение для сообщения ID AB, команда MESSAGE — MESSAGE E011 дает следующий вывод —

EAB011 This report does not support sub-number summarization.

SAP ABAP — Типы данных

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

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

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

Тип Ключевое слово
Байт поля Икс
Текстовое поле С
целое число я
Плавающая запятая F
Упакованный номер п
Текстовая строка STRING

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

  • байт
  • числовой
  • характер, как

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

Тип Типичная длина Типичный диапазон
Икс 1 байт Любые байтовые значения (от 00 до FF)
С 1 персонаж От 1 до 65535
N (числовой текстовый файл) 1 персонаж От 1 до 65535
D (символьная дата) 8 символов 8 символов
T (символьное время) 6 персонажей 6 персонажей
я 4 байта От -2147483648 до 2147483647
F 8 байт 2,2250738585072014E-308 до 1,7796931348623157E + 308 положительных или отрицательных
п 8 байт [-10 ^ (2len -1) +1] до [+ 10 ^ (2len -1) 1] (где len = фиксированная длина)
STRING переменная Любые буквенно-цифровые символы
XSTRING (байтовая строка) переменная Любые байтовые значения (от 00 до FF)

пример

REPORT YR_SEP_12. 
DATA text_line TYPE C LENGTH 40. 
text_line = 'A Chapter on Data Types'. 
Write text_line. 

DATA text_string TYPE STRING. 
text_string = 'A Program in ABAP'. 
Write / text_string. 

DATA d_date TYPE D. 
d_date = SY-DATUM. 
Write / d_date.

В этом примере у нас есть строка символов типа C с предопределенной длиной 40. STRING — это тип данных, который можно использовать для любой строки символов переменной длины (текстовые строки). Объекты данных типа STRING обычно следует использовать для символьного контента, где фиксированная длина не важна.

Приведенный выше код производит следующий вывод —

A Chapter on Data Types 
A Program in ABAP 
12092015 

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

Сложные и справочные типы

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

Когда элементарные типы сгруппированы вместе, элемент данных может быть доступен как сгруппированный элемент данных или отдельные элементы данных элементарного типа (поля структуры) могут быть доступны. Типы таблиц более известны как массивы в других языках программирования. Массивы могут быть простыми или структурированными. В ABAP массивы называются внутренними таблицами, и их можно объявлять и обрабатывать различными способами по сравнению с другими языками программирования. В следующей таблице приведены параметры, в соответствии с которыми характеризуются внутренние таблицы.

S.No. Параметр и описание
1

Тип линии или строки

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

2

ключ

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

3

Метод доступа

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

Тип линии или строки

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

ключ

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

Метод доступа

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

Ссылочные типы используются для ссылки на экземпляры классов, интерфейсов и элементов данных времени выполнения. Службы ABAP OOP типа времени выполнения (RTTS) позволяют декларировать элементы данных во время выполнения.

SAP ABAP — переменные

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

Вы должны объявить все переменные, прежде чем их можно будет использовать. Основная форма объявления переменной —

DATA <f> TYPE <type> VALUE <val>. 

Здесь <f> указывает имя переменной. Имя переменной может быть длиной до 30 символов. <тип> указывает тип переменной. Любой тип данных с полностью указанными техническими атрибутами известен как <тип>. <Val> указывает начальное значение переменной <f>. Если вы определяете элементарную переменную фиксированной длины, оператор DATA автоматически заполняет значение переменной начальным значением для конкретного типа. Другие возможные значения для <val> могут быть литералом, константой или явным предложением, например Is INITIAL.

Ниже приведены допустимые примеры объявлений переменных.

DATA d1(2) TYPE C.  
DATA d2 LIKE d1.  
DATA minimum_value TYPE I VALUE 10. 

В приведенном выше фрагменте кода d1 — это переменная типа C, d2 — это переменная типа d1, а minimal_value — это переменная целочисленного типа ABAP I.

В этой главе будут описаны различные типы переменных, доступные в ABAP. В ABAP есть три вида переменных:

  • Статические переменные
  • Переменные ссылки
  • Системные переменные

Статические переменные

  • Статические переменные объявляются в подпрограммах, функциональных модулях и статических методах.

  • Время жизни связано с контекстом объявления.

  • С помощью оператора ‘CLASS-DATA’ вы можете объявлять переменные внутри классов.

  • Оператор PARAMETERS может использоваться для объявления элементарных объектов данных, которые связаны с полями ввода на экране выбора.

  • Вы также можете объявить внутренние таблицы, которые связаны с полями ввода на экране выбора, используя оператор SELECT-OPTIONS.

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

Время жизни связано с контекстом объявления.

С помощью оператора ‘CLASS-DATA’ вы можете объявлять переменные внутри классов.

Оператор PARAMETERS может использоваться для объявления элементарных объектов данных, которые связаны с полями ввода на экране выбора.

Вы также можете объявить внутренние таблицы, которые связаны с полями ввода на экране выбора, используя оператор SELECT-OPTIONS.

Ниже приведены соглашения, используемые при именовании переменной:

  • Вы не можете использовать специальные символы, такие как «t» и «,» для именования переменных.

  • Имя предопределенных объектов данных не может быть изменено.

  • Имя переменной не может совпадать с любым ключевым словом или предложением ABAP.

  • Имя переменных должно передавать значение переменной без необходимости дальнейших комментариев.

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

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

Вы не можете использовать специальные символы, такие как «t» и «,» для именования переменных.

Имя предопределенных объектов данных не может быть изменено.

Имя переменной не может совпадать с любым ключевым словом или предложением ABAP.

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

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

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

Эта программа показывает, как объявить переменную с помощью оператора PARAMETERS —

REPORT ZTest123_01. 
PARAMETERS: NAME(10) TYPE C, 
CLASS TYPE I, 
SCORE TYPE P DECIMALS 2, 
CONNECT TYPE MARA-MATNR. 

Здесь NAME представляет параметр из 10 символов, CLASS определяет параметр целочисленного типа с размером по умолчанию в байтах, SCORE представляет параметр упакованного типа со значениями до двух десятичных знаков, а CONNECT относится к типу MARA-MATNF словаря ABAP. ,

Приведенный выше код производит следующий вывод —

ABAP словарь

Переменные ссылки

Синтаксис объявления ссылочных переменных —

DATA <ref> TYPE REF TO <type> VALUE IS INITIAL. 
  • REF TO дополнительно объявляет ссылочную переменную ref.

  • Спецификация после REF TO определяет статический тип ссылочной переменной.

  • Статический тип ограничивает набор объектов, на которые может ссылаться <ref>.

  • Динамический тип ссылочной переменной — это тип данных или класс, к которому она относится в данный момент.

  • Статический тип всегда более общий или такой же, как динамический тип.

  • Добавление TYPE используется для создания привязанного ссылочного типа и в качестве начального значения, и после добавления VALUE можно указать только IS INITIAL.

REF TO дополнительно объявляет ссылочную переменную ref.

Спецификация после REF TO определяет статический тип ссылочной переменной.

Статический тип ограничивает набор объектов, на которые может ссылаться <ref>.

Динамический тип ссылочной переменной — это тип данных или класс, к которому она относится в данный момент.

Статический тип всегда более общий или такой же, как динамический тип.

Добавление TYPE используется для создания привязанного ссылочного типа и в качестве начального значения, и после добавления VALUE можно указать только IS INITIAL.

пример

CLASS C1 DEFINITION. 
PUBLIC SECTION. 
DATA Bl TYPE I VALUE 1. 
ENDCLASS. DATA: Oref TYPE REF TO C1 , 
Dref1 LIKE REF TO Oref, 
Dref2 TYPE REF TO I . 
CREATE OBJECT Oref. 
GET REFERENCE OF Oref INTO Dref1. 
CREATE DATA Dref2. 
Dref2→* = Dref1→*→Bl.
  • В приведенном выше фрагменте кода объявлена ​​ссылка на объект Oref и две переменные ссылки на данные Dref1 и Dref2.

  • Обе ссылочные переменные данных полностью типизированы и могут быть разыменованы с помощью оператора разыменования → * в позициях операнда.

В приведенном выше фрагменте кода объявлена ​​ссылка на объект Oref и две переменные ссылки на данные Dref1 и Dref2.

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

Системные переменные

  • Системные переменные ABAP доступны из всех программ ABAP.

  • Эти поля фактически заполнены средой выполнения.

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

  • Вы можете найти полный список системных переменных в таблице SYST в SAP.

  • Доступ к отдельным полям структуры SYST можно получить с помощью «SYST-» или «SY-».

Системные переменные ABAP доступны из всех программ ABAP.

Эти поля фактически заполнены средой выполнения.

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

Вы можете найти полный список системных переменных в таблице SYST в SAP.

Доступ к отдельным полям структуры SYST можно получить с помощью «SYST-» или «SY-».

пример

REPORT Z_Test123_01. 

WRITE:/'SY-ABCDE', SY-ABCDE,       
      /'SY-DATUM', SY-DATUM, 
      /'SY-DBSYS', SY-DBSYS, 
      /'SY-HOST ', SY-HOST, 
      /'SY-LANGU', SY-LANGU,
      /'SY-MANDT', SY-MANDT,
      /'SY-OPSYS', SY-OPSYS,
      /'SY-SAPRL', SY-SAPRL,
      /'SY-SYSID', SY-SYSID,
      /'SY-TCODE', SY-TCODE,
      /'SY-UNAME', SY-UNAME,
      /'SY-UZEIT', SY-UZEIT.

Приведенный выше код производит следующий вывод —

SY-ABCDE ABCDEFGHIJKLMNOPQRSTUVWXYZ  
SY-DATUM 12.09.2015 
SY-DBSYS ORACLE                   
SY-HOST sapserver 
SY-LANGU EN 
SY-MANDT 800 
SY-OPSYS Windows NT 
SY-SAPRL 700 
SY-SYSID DMO 
SY-TCODE SE38 
SY-UNAME SAPUSER 
SY-UZEIT 14:25:48

SAP ABAP — константы и литералы

Литералы — это безымянные объекты данных, которые вы создаете в исходном коде программы. Они полностью определяются их стоимостью. Вы не можете изменить значение литерала. Константы — это именованные объекты данных, созданные статически с помощью декларативных операторов. Константа объявляется путем присвоения ей значения, которое хранится в области памяти программы. Значение, присвоенное константе, не может быть изменено во время выполнения программы. Эти фиксированные значения также можно рассматривать как литералы. Существует два типа литералов — числовые и символьные.

Числовые литералы

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

Ниже приведены некоторые примеры числовых литералов —

183. 
-97. 
+326.

Символьные литералы

Символьные литералы — это последовательности буквенно-цифровых символов в исходном коде программы ABAP, заключенные в одинарные кавычки. Символьные литералы, заключенные в кавычки, имеют предопределенный тип ABAP C и описываются как литералы текстового поля. Литералы, заключенные в «обратные кавычки», имеют тип ABAP STRING и описываются как строковые литералы. Длина поля определяется количеством символов.

Примечание. В литералах текстовых полей конечные пробелы игнорируются, но в строковых литералах они учитываются.

Ниже приведены некоторые примеры литералов символов.

Текстовые поля литералов

REPORT YR_SEP_12. 
Write 'Tutorials Point'. 
Write / 'ABAP Tutorial'.  

Строковые литералы поля

REPORT YR_SEP_12. 
Write `Tutorials Point `. 
Write / `ABAP Tutorial `. 

Вывод одинаков в обоих вышеуказанных случаях —

Tutorials Point  
ABAP Tutorial

Примечание. Когда мы пытаемся изменить значение константы, может возникнуть синтаксическая ошибка или ошибка времени выполнения. Константы, которые вы объявляете в части объявления класса или интерфейса, относятся к статическим атрибутам этого класса или интерфейса.

ПОСТОЯННОЕ Заявление

Мы можем объявить именованные объекты данных с помощью оператора CONSTANTS.

Ниже приводится синтаксис —

CONSTANTS <f> TYPE <type> VALUE <val>.

Оператор CONSTANTS похож на оператор DATA.

<f> указывает имя для константы. TYPE <тип> представляет константу с именем <f>, которая наследует те же технические атрибуты, что и существующий тип данных <тип>. VALUE <val> присваивает начальное значение объявленному константному имени <f>.

Примечание. Мы должны использовать предложение VALUE в выражении CONSTANTS. Предложение «VALUE» используется для присвоения начального значения константе во время ее объявления.

У нас есть 3 типа констант, таких как элементарные, комплексные и ссылочные константы. Следующий оператор показывает, как определять константы с помощью оператора CONSTANTS —

REPORT YR_SEP_12. 
CONSTANTS PQR TYPE P DECIMALS 4 VALUE '1.2356'. 
Write: / 'The value of PQR is:', PQR.

Выход —

The value of PQR is: 1.2356

Здесь это относится к элементарному типу данных и называется элементарной константой.

Ниже приведен пример для сложных констант:

BEGIN OF EMPLOYEE,  
Name(25) TYPE C VALUE 'Management Team',  
Organization(40) TYPE C VALUE 'Tutorials Point Ltd',  
Place(10) TYPE C VALUE 'India',  
END OF EMPLOYEE.

В приведенном выше фрагменте кода EMPLOYEE представляет собой сложную константу, состоящую из полей Name, Organization и Place.

Следующее утверждение объявляет постоянную ссылку —

CONSTANTS null_pointer TYPE REF TO object VALUE IS INITIAL.

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

SAP ABAP — Операторы

ABAP предоставляет богатый набор операторов для работы с переменными. Все операторы ABAP подразделяются на четыре категории —

  • Арифметические Операторы
  • Операторы сравнения
  • Битовые операторы
  • Операторы символьных строк

Арифметические Операторы

Арифметические операторы используются в математических выражениях так же, как они используются в алгебре. Следующий список описывает арифметические операторы. Предположим, что целочисленная переменная A содержит 20, а переменная B содержит 40.

S.No. Арифметический оператор и описание
1

+ (Дополнение)

Добавляет значения по обе стороны от оператора. Пример: A + B даст 60.

2

— (вычитание)

Вычитает правый операнд из левого операнда. Пример: A — B даст -20.

3

* (Умножение)

Умножает значения по обе стороны от оператора. Пример: A * B даст 800.

4

/ (Отдел)

Делит левый операнд на правый операнд. Пример: B / A даст 2.

5

MOD (Модуль)

Делит левый операнд на правый и возвращает остаток. Пример: B MOD A даст 0.

+ (Дополнение)

Добавляет значения по обе стороны от оператора. Пример: A + B даст 60.

— (вычитание)

Вычитает правый операнд из левого операнда. Пример: A — B даст -20.

* (Умножение)

Умножает значения по обе стороны от оператора. Пример: A * B даст 800.

/ (Отдел)

Делит левый операнд на правый операнд. Пример: B / A даст 2.

MOD (Модуль)

Делит левый операнд на правый и возвращает остаток. Пример: B MOD A даст 0.

пример

REPORT YS_SEP_08. 
DATA: A TYPE I VALUE 150, 
B TYPE I VALUE 50, 
Result TYPE I. 
Result =  A / B. 
WRITE / Result.

Приведенный выше код производит следующий вывод —

3

Операторы сравнения

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

S.No. Оператор сравнения и описание
1

= (тест на равенство). Альтернативная форма EQ.

Проверяет, равны ли значения двух операндов или нет, если да, тогда условие становится истинным. Пример (A = B) не соответствует действительности.

2

<> (Критерий неравенства). Альтернативная форма NE.

Проверяет, равны ли значения двух операндов или нет. Если значения не равны, то условие становится истинным. Пример (A <> B) верный.

3

> (Больше, чем тест). Альтернативная форма GT.

Проверяет, больше ли значение левого операнда, чем значение правого операнда. Если да, то условие становится истинным. Пример (A> B) не соответствует действительности.

4

<(Меньше, чем тест). Альтернативная форма — LT.

Проверяет, меньше ли значение левого операнда, чем значение правого операнда. Если да, то условие становится истинным. Пример (A <B) верный.

5

> = (Больше или равно) Альтернативной формой является GE.

Проверяет, больше ли значение левого операнда или равно значению правого операнда. Если да, то условие становится истинным. Пример (A> = B) не соответствует действительности.

6

<= (Тест меньше или равен). Альтернативная форма — LE.

Проверяет, меньше ли значение левого операнда или равно значению правого операнда. Если да, то условие становится истинным. Пример (A <= B) верен.

7

а1 между а2 и а3 (интервальный тест)

Проверяет, находится ли a1 между a2 и a3 (включительно). Если да, то условие становится истинным. Пример (между B и C) верен.

8

НАЧАЛ

Условие становится истинным, если содержимое переменной не изменилось, и ему автоматически было присвоено начальное значение. Пример (A IS INITIAL) не соответствует действительности

9

НЕ НАЧИНАЕТСЯ

Условие становится истинным, если содержимое переменной изменилось. Пример (А НЕ НАЧАЛ) верен.

= (тест на равенство). Альтернативная форма EQ.

Проверяет, равны ли значения двух операндов или нет, если да, тогда условие становится истинным. Пример (A = B) не соответствует действительности.

<> (Критерий неравенства). Альтернативная форма NE.

Проверяет, равны ли значения двух операндов или нет. Если значения не равны, то условие становится истинным. Пример (A <> B) верный.

> (Больше, чем тест). Альтернативная форма GT.

Проверяет, больше ли значение левого операнда, чем значение правого операнда. Если да, то условие становится истинным. Пример (A> B) не соответствует действительности.

<(Меньше, чем тест). Альтернативная форма — LT.

Проверяет, меньше ли значение левого операнда, чем значение правого операнда. Если да, то условие становится истинным. Пример (A <B) верный.

> = (Больше или равно) Альтернативной формой является GE.

Проверяет, больше ли значение левого операнда или равно значению правого операнда. Если да, то условие становится истинным. Пример (A> = B) не соответствует действительности.

<= (Тест меньше или равен). Альтернативная форма — LE.

Проверяет, меньше ли значение левого операнда или равно значению правого операнда. Если да, то условие становится истинным. Пример (A <= B) верен.

а1 между а2 и а3 (интервальный тест)

Проверяет, находится ли a1 между a2 и a3 (включительно). Если да, то условие становится истинным. Пример (между B и C) верен.

НАЧАЛ

Условие становится истинным, если содержимое переменной не изменилось, и ему автоматически было присвоено начальное значение. Пример (A IS INITIAL) не соответствует действительности

НЕ НАЧИНАЕТСЯ

Условие становится истинным, если содержимое переменной изменилось. Пример (А НЕ НАЧАЛ) верен.

Примечание. Если тип данных или длина переменных не совпадают, выполняется автоматическое преобразование. Автоматическая настройка типа выполняется для одного или обоих значений при сравнении двух значений различных типов данных. Тип преобразования определяется типом данных и порядком предпочтения типа данных.

Ниже приведен порядок предпочтений —

  • Если одно поле имеет тип I, то другое преобразуется в тип I.

  • Если одно поле имеет тип P, то другое преобразуется в тип P.

  • Если одно поле имеет тип D, то другое преобразуется в тип D. Но типы C и N не преобразуются, и они сравниваются напрямую. Аналогично обстоит дело с типом T.

  • Если одно поле имеет тип N, а другое — тип C или X, оба поля преобразуются в тип P.

  • Если одно поле имеет тип C, а другое — тип X, тип X преобразуется в тип C.

Если одно поле имеет тип I, то другое преобразуется в тип I.

Если одно поле имеет тип P, то другое преобразуется в тип P.

Если одно поле имеет тип D, то другое преобразуется в тип D. Но типы C и N не преобразуются, и они сравниваются напрямую. Аналогично обстоит дело с типом T.

Если одно поле имеет тип N, а другое — тип C или X, оба поля преобразуются в тип P.

Если одно поле имеет тип C, а другое — тип X, тип X преобразуется в тип C.

Пример 1

REPORT YS_SEP_08. 

DATA: A TYPE I VALUE 115,
      B TYPE I VALUE 119.
      IF A LT B.
      WRITE: / 'A is less than B'.
      ENDIF

Приведенный выше код производит следующий вывод —

A is less than B 

Пример 2

REPORT YS_SEP_08. 

DATA: A TYPE I.
      IF A IS INITIAL.
      WRITE: / 'A is assigned'.
      ENDIF.

Приведенный выше код производит следующий вывод —

A is assigned.

Битовые операторы

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

S.No. Побитовый оператор и описание
1

BIT-НЕ

Унарный оператор, который переворачивает все биты шестнадцатеричного числа на противоположное значение. Например, применение этого оператора к шестнадцатеричному числу, имеющему значение уровня бита 10101010 (например, «AA»), даст 01010101.

2

BIT-И

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

3

BIT-XOR

Двоичный оператор, который сравнивает каждое поле по битам, используя оператор логического XOR (исключающее ИЛИ).

4

БИТ-ИЛИ

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

BIT-НЕ

Унарный оператор, который переворачивает все биты шестнадцатеричного числа на противоположное значение. Например, применение этого оператора к шестнадцатеричному числу, имеющему значение уровня бита 10101010 (например, «AA»), даст 01010101.

BIT-И

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

BIT-XOR

Двоичный оператор, который сравнивает каждое поле по битам, используя оператор логического XOR (исключающее ИЛИ).

БИТ-ИЛИ

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

Например, ниже приведена таблица истинности, которая показывает значения, сгенерированные при применении логических операторов AND, OR или XOR к двухбитовым значениям, содержащимся в поле A и поле B.

Поле А Поле Б А ТАКЖЕ ИЛИ ЖЕ XOR
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

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

Ниже приведен список операторов символьных строк —

S.No. Строка символов Оператор и описание
1

CO (содержит только)

Проверяет, состоит ли A только из символов в B.

2

CN (не содержит ТОЛЬКО)

Проверяет, содержит ли A символы, которых нет в B.

3

CA (содержит ЛЮБОЙ)

Проверяет, содержит ли A хотя бы один символ B.

4

Нет (не содержит)

Проверяет, не содержит ли A какой-либо символ B.

5

CS (содержит строку)

Проверяет, содержит ли A строку символов B.

6

NS (НЕ содержит строку)

Проверяет, не содержит ли A строку символов B.

7

CP (содержит шаблон)

Он проверяет, содержит ли A шаблон в B.

8

NP (НЕ содержит шаблон)

Он проверяет, не содержит ли A шаблон в B.

CO (содержит только)

Проверяет, состоит ли A только из символов в B.

CN (не содержит ТОЛЬКО)

Проверяет, содержит ли A символы, которых нет в B.

CA (содержит ЛЮБОЙ)

Проверяет, содержит ли A хотя бы один символ B.

Нет (не содержит)

Проверяет, не содержит ли A какой-либо символ B.

CS (содержит строку)

Проверяет, содержит ли A строку символов B.

NS (НЕ содержит строку)

Проверяет, не содержит ли A строку символов B.

CP (содержит шаблон)

Он проверяет, содержит ли A шаблон в B.

NP (НЕ содержит шаблон)

Он проверяет, не содержит ли A шаблон в B.

пример

REPORT YS_SEP_08. 
DATA: P(10) TYPE C VALUE 'APPLE',
      Q(10) TYPE C VALUE 'CHAIR'.
      IF P CA Q.
	
      WRITE: / 'P contains at least one character of Q'.
      ENDIF.

Приведенный выше код производит следующий вывод —

P contains at least one character of Q.

SAP ABAP — Loop Control

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

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

Loop Statement

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

S.No. Тип и описание петли
1 WHILE петля

Повторяет оператор или группу операторов, когда данное условие выполняется. Он проверяет условие перед выполнением тела цикла.

2 Сделать петлю

Оператор DO полезен для повторения определенной задачи определенное количество раз.

3 Вложенная петля

Вы можете использовать один или несколько циклов внутри любого другого цикла WHILE или DO.

Повторяет оператор или группу операторов, когда данное условие выполняется. Он проверяет условие перед выполнением тела цикла.

Оператор DO полезен для повторения определенной задачи определенное количество раз.

Вы можете использовать один или несколько циклов внутри любого другого цикла WHILE или DO.

Заявления о контроле цикла

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

S.No. Контрольное заявление и описание
1 ПРОДОЛЖИТЬ

Заставляет цикл пропустить остаток своего тела и запускает следующий проход цикла.

2 ПРОВЕРЯТЬ

Если условие ложно, то оставшиеся операторы после CHECK просто игнорируются, и система запускает следующий проход цикла.

3 ВЫХОД

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

Заставляет цикл пропустить остаток своего тела и запускает следующий проход цикла.

Если условие ложно, то оставшиеся операторы после CHECK просто игнорируются, и система запускает следующий проход цикла.

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

SAP ABAP — Решения

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

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

Принятие решения

Язык программирования ABAP предоставляет следующие типы решений для принятия решений.

S.No. Заявление и описание
1 ЕСЛИ заявление

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

2 ЕСЛИ .. Еще заявление

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

3 Вложенное IF-выражение

Вы можете использовать один оператор IF или ELSEIF внутри другого оператора IF или ELSEIF.

4 CASE Control Statement

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

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

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

Вы можете использовать один оператор IF или ELSEIF внутри другого оператора IF или ELSEIF.

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

SAP ABAP — Строки

Строки , которые широко используются в программировании ABAP, представляют собой последовательность символов.

Мы используем переменные типа C для хранения буквенно-цифровых символов, с минимальным 1 символом и максимальным 65 535 символами. По умолчанию они выровнены по левому краю.

Создание строк

Следующее объявление и инициализация создает строку, состоящую из слова «Hello». Размер строки соответствует количеству символов в слове «Hello».

Data my_Char(5) VALUE 'Hello'.

Следующая программа является примером создания строк.

REPORT YT_SEP_15. 
DATA my_Char(5) VALUE 'Hello'. 
Write my_Char.

Приведенный выше код производит следующий вывод —

Hello

Длина строки

Чтобы узнать длину символьных строк, мы можем использовать оператор STRLEN . Функция STRLEN () возвращает количество символов, содержащихся в строке.

пример

REPORT YT_SEP_15. 
DATA: title_1(10) VALUE 'Tutorials',
      length_1 TYPE I. 
	
length_1 = STRLEN( title_1 ). 
Write: / 'The Length of the Title is:', length_1.

Приведенный выше код производит следующий вывод —

The Length of the Title is: 9 

ABAP поддерживает широкий спектр операторов, управляющих строками.

S.No. Заявление и цель
1

CONCATENATE

Две строки соединяются, чтобы сформировать третью строку.

2

конденсироваться

Это утверждение удаляет символы пробела.

3

STRLEN

Используется для определения длины поля.

4

ЗАМЕНА

Используется для замены символов.

5

ПОИСК

Для запуска поиска в символьных строках.

6

СДВИГ

Используется для перемещения содержимого строки влево или вправо.

7

ТРЕЩИНА

Используется для разделения содержимого поля на два или более полей.

CONCATENATE

Две строки соединяются, чтобы сформировать третью строку.

конденсироваться

Это утверждение удаляет символы пробела.

STRLEN

Используется для определения длины поля.

ЗАМЕНА

Используется для замены символов.

ПОИСК

Для запуска поиска в символьных строках.

СДВИГ

Используется для перемещения содержимого строки влево или вправо.

ТРЕЩИНА

Используется для разделения содержимого поля на два или более полей.

В следующем примере используются некоторые из вышеупомянутых утверждений:

пример

REPORT YT_SEP_15. 
DATA: title_1(10) VALUE 'Tutorials', 
      title_2(10) VALUE 'Point',
      spaced_title(30) VALUE 'Tutorials  Point  Limited',
      sep,
      dest1(30),
      dest2(30).
	
CONCATENATE title_1 title_2 INTO dest1. 
Write: / 'Concatenation:', dest1. 

CONCATENATE title_1 title_2 INTO dest2 SEPARATED BY sep. 
Write: / 'Concatenation with Space:', dest2. 

CONDENSE spaced_title.
Write: / 'Condense with Gaps:', spaced_title. 

CONDENSE spaced_title NO-GAPS. 
Write: / 'Condense with No Gaps:', spaced_title.

Приведенный выше код производит следующий вывод —

Concatenation: TutorialsPoint 
Concatenation with Space: Tutorials Point 
Condense with Gaps: Tutorials Point Limited 
Condense with No Gaps: TutorialsPointLimited

Примечание

  • В случае конкатенации ‘sep’ вставляет пробел между полями.

  • Оператор CONDENSE удаляет пробелы между полями, но оставляя только 1 символьный пробел.

  • «NO-GAPS» является необязательным дополнением к выражению CONDENSE, которое удаляет все пробелы.

В случае конкатенации ‘sep’ вставляет пробел между полями.

Оператор CONDENSE удаляет пробелы между полями, но оставляя только 1 символьный пробел.

«NO-GAPS» является необязательным дополнением к выражению CONDENSE, которое удаляет все пробелы.

SAP ABAP — дата и время

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

ABAP предоставляет два встроенных типа для работы с датами и временем —

  • Тип данных D
  • Тип данных T

Ниже приведен основной формат —

DATA: date TYPE D, 
      time TYPE T.  
	
DATA: year TYPE I, 
month TYPE I,  
day TYPE I, 
hour TYPE I,  
minute TYPE I, 
second TYPE I.

Оба эти типа являются символьными типами фиксированной длины, которые имеют форму ГГГГММДД и ЧЧММСС соответственно.

Timestamps

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

S.No. Тип данных и описание
1

D

Встроенный тип даты фиксированной длины в форме ГГГГММДД. Например, значение 20100913 представляет дату 13 сентября 2010 года.

2

T

Встроенный тип времени фиксированной длины в формате ЧЧММСС. Например, значение 102305 представляет время 10:23:05.

3

TIMESTAMP (тип P — длина 8 без десятичных знаков)

Этот тип используется для представления коротких временных меток в форме ГГГГММДччммсс. Например, значение 20100913102305 представляет дату 13 сентября 2010 года в 10:23:05.

4

TIMESTAMPL (Тип P — Длина 11 Десятичных знаков 7)

TIMESTAMPL представляет длинные метки времени в формате ГГГГММДЧчммсс, мммууун. Здесь дополнительные цифры ‘mmmuuun’ представляют доли секунды.

D

Встроенный тип даты фиксированной длины в форме ГГГГММДД. Например, значение 20100913 представляет дату 13 сентября 2010 года.

T

Встроенный тип времени фиксированной длины в формате ЧЧММСС. Например, значение 102305 представляет время 10:23:05.

TIMESTAMP (тип P — длина 8 без десятичных знаков)

Этот тип используется для представления коротких временных меток в форме ГГГГММДччммсс. Например, значение 20100913102305 представляет дату 13 сентября 2010 года в 10:23:05.

TIMESTAMPL (Тип P — Длина 11 Десятичных знаков 7)

TIMESTAMPL представляет длинные метки времени в формате ГГГГММДЧчммсс, мммууун. Здесь дополнительные цифры ‘mmmuuun’ представляют доли секунды.

Текущая дата и время

Следующие фрагменты кода извлекают текущую системную дату и время.

REPORT YR_SEP_15. 
DATA: date_1 TYPE D. 

date_1 = SY-DATUM. 
Write: / 'Present Date is:', date_1 DD/MM/YYYY. 

date_1 = date_1 + 06. 
Write: / 'Date after 6 Days is:', date_1 DD/MM/YYYY.

Приведенный выше код производит следующий вывод —

Present Date is: 21.09.2015 
Date after 6 Days is: 27.09.2015

Переменной date_1 присваивается значение текущей системной даты SY-DATUM. Затем мы увеличиваем значение даты на 6. С точки зрения вычисления даты в ABAP это означает, что мы увеличиваем дневной компонент объекта даты на 6 дней. Среда выполнения ABAP достаточно умна, чтобы пролонгировать значение даты всякий раз, когда оно достигает конца месяца.

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

REPORT YR_SEP_15. 
DATA: time_1 TYPE T. 
      time_1 = SY-UZEIT. 

Write /(60) time_1 USING EDIT MASK 
'Now the Time is: __:__:__'. 
time_1 = time_1 + 75. 

Write /(60) time_1 USING EDIT MASK 
'A Minute and a Quarter from Now, it is: __:__:__'.

Приведенный выше код производит следующий вывод —

Now the Time is 11:45:05 
A Minute and a Quarter from Now, it is: 11:46:20

Работа с метками времени

Вы можете получить текущее системное время и сохранить его в переменной метки времени, используя GET TIME STAMP, как показано в следующем коде. Оператор GET TIME STAMP сохраняет временную метку в формате длинной или короткой руки в соответствии с типом используемого объекта данных временной метки. Значение метки времени кодируется с использованием стандарта UTC.

REPORT YR_SEP_12. 
DATA: stamp_1 TYPE TIMESTAMP,
 
stamp_2 TYPE TIMESTAMPL. 
GET TIME STAMP FIELD stamp_1. 
Write: / 'The short time stamp is:', stamp_1 

TIME ZONE SY-ZONLO. 
GET TIME STAMP FIELD stamp_2. 
Write: / 'The long time stamp is:', stamp_2 
TIME ZONE SY-ZONLO.

Приведенный выше код производит следующий вывод —

The short time stamp is: 18.09.2015 11:19:40 
The long time stamp is: 18.09.2015 11:19:40,9370000

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

SAP ABAP — форматирование данных

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

Оператор WRITE — это оператор форматирования, используемый для отображения данных на экране. Существуют разные параметры форматирования для оператора WRITE. Синтаксис оператора WRITE —

WRITE <format> <f> <options>.

В этом синтаксисе <формат> представляет спецификацию выходного формата, которая может быть косой чертой (/), которая указывает на отображение вывода, начинающегося с новой строки. Помимо прямой косой черты, спецификация формата включает номер столбца и длину столбца. Например, оператор WRITE / 04 (6) показывает, что новая строка начинается со столбца 4, а длина столбца равна 6, тогда как оператор WRITE 20 показывает текущую строку со столбцом 20. Параметр <f> представляет переменную данных или пронумерованный текст

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

S.No. Статья и описание
1

Выровнен по левому краю

Указывает, что вывод выровнен по левому краю.

2

ЦЕНТРУ

Обозначает, что вывод центрирован.

3

Выравниваются по правому краю

Указывает, что вывод выровнен по правому краю.

4

ПОД <g>

Вывод начинается прямо под полем <g>.

5

НЕТ-GAP

Указывает, что пробел после поля <f> отклоняется.

6

ИСПОЛЬЗОВАТЬ РЕДАКТИРОВАТЬ МАСКУ <m>

Обозначает спецификацию шаблона формата <m>. Использование маски без правки: указывает, что шаблон формата, указанный в словаре ABAP, деактивирован.

7

НЕТ-НОЛЬ

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

Выровнен по левому краю

Указывает, что вывод выровнен по левому краю.

ЦЕНТРУ

Обозначает, что вывод центрирован.

Выравниваются по правому краю

Указывает, что вывод выровнен по правому краю.

ПОД <g>

Вывод начинается прямо под полем <g>.

НЕТ-GAP

Указывает, что пробел после поля <f> отклоняется.

ИСПОЛЬЗОВАТЬ РЕДАКТИРОВАТЬ МАСКУ <m>

Обозначает спецификацию шаблона формата <m>. Использование маски без правки: указывает, что шаблон формата, указанный в словаре ABAP, деактивирован.

НЕТ-НОЛЬ

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

Ниже приведены параметры форматирования полей числового типа.

S.No. Статья и описание
1

НЕТ-ЗНАК

Указывает, что на экране не отображается ведущий знак.

2

EXPONENT <e>

Указывает, что в типе F (поля с плавающей запятой) показатель степени определяется в <e>.

3

КРУГЛЫЙ

Поля типа P (упакованные числовые типы данных) сначала умножаются на 10 ** (- r), а затем округляются до целочисленного значения.

4

ВАЛЮТА <c>

Обозначает, что форматирование выполняется в соответствии со значением валюты <c>, которое хранится в таблице базы данных TCURX.

5

UNIT <u>

Указывает, что число десятичных разрядов фиксировано в соответствии с единицей <u>, как указано в таблице базы данных T006 для типа P.

6

ДЕСЯТИЧНЫЕ <d>

Указывает, что число цифр <d> должно отображаться после десятичной точки.

НЕТ-ЗНАК

Указывает, что на экране не отображается ведущий знак.

EXPONENT <e>

Указывает, что в типе F (поля с плавающей запятой) показатель степени определяется в <e>.

КРУГЛЫЙ

Поля типа P (упакованные числовые типы данных) сначала умножаются на 10 ** (- r), а затем округляются до целочисленного значения.

ВАЛЮТА <c>

Обозначает, что форматирование выполняется в соответствии со значением валюты <c>, которое хранится в таблице базы данных TCURX.

UNIT <u>

Указывает, что число десятичных разрядов фиксировано в соответствии с единицей <u>, как указано в таблице базы данных T006 для типа P.

ДЕСЯТИЧНЫЕ <d>

Указывает, что число цифр <d> должно отображаться после десятичной точки.

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

Вариант форматирования пример
DD / MM / YY 13/01/15
MM / DD / YY 01/13/15
DD / MM / YYYY 13/01/2015
MM / DD / YYYY 01/13/2015
DDMMYY 130115
MMDDYY 011315
YYMMDD 150113

Здесь DD обозначает дату в двух цифрах, MM обозначает месяц двумя цифрами, YY обозначает год двумя цифрами, а YYYY обозначает год четырьмя цифрами.

Давайте рассмотрим пример кода ABAP, который реализует некоторые из приведенных выше параметров форматирования:

REPORT ZTest123_01.
 
DATA: n(9) TYPE C VALUE 'Tutorials', 
m(5) TYPE C VALUE 'Point'. 

WRITE: n, m. 
WRITE: / n, 
/ m UNDER n. 

WRITE: / n NO-GAP, m. 
DATA time TYPE T VALUE '112538'. 

WRITE: / time, 
/(8) time Using EDIT MASK '__:__:__'.

Приведенный выше код производит следующий вывод —

Tutorials Point 
Tutorials  
Point 
TutorialsPoint 
112538 
11:25:38

SAP ABAP — обработка исключений

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

Исключения предоставляют способ передачи управления из одной части программы в другую. Обработка исключений ABAP построена на трех ключевых словах — RAISE, TRY, CATCH и CLEANUP. Предполагая, что блок вызовет исключение, метод перехватывает исключение, используя комбинацию ключевых слов TRY и CATCH. Вокруг кода помещается блок TRY — CATCH, который может генерировать исключение. Ниже приведен синтаксис использования TRY — CATCH —

TRY.      
Try Block <Code that raises an exception> 
  
CATCH  
Catch Block <exception handler M>  
. . . 
. . . 
. . . 
CATCH  
Catch Block <exception handler R>
   
CLEANUP. 
   Cleanup block <to restore consistent state>
 
ENDTRY.

RAISE — Исключения поднимаются, чтобы показать, что произошла какая-то исключительная ситуация. Обычно обработчик исключений пытается исправить ошибку или найти альтернативное решение.

TRY — блок TRY содержит код приложения, исключения которого должны обрабатываться. Этот блок операторов обрабатывается последовательно. Он может содержать дополнительные управляющие структуры и вызовы процедур или других программ ABAP. За ним следует один или несколько блоков улова.

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

CLEANUP — операторы блока CLEANUP выполняются всякий раз, когда возникает исключение в блоке TRY, который не перехватывается обработчиком той же конструкции TRY — ENDTRY. В предложении CLEANUP система может восстановить объект в согласованное состояние или освободить внешние ресурсы. То есть работа по очистке может быть выполнена для контекста блока TRY.

Возбуждение исключений

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

  • Исключения, поднятые системой времени выполнения ABAP.

    Например, Y = 1 / 0. Это приведет к ошибке времени выполнения типа CX_SY_ZERODIVIDE.

  • Исключения подняты программистом.

    Поднимите и создайте объект исключения одновременно. Создайте исключение с объектом исключения, который уже существует в первом сценарии. Синтаксис: RAISE EXCEPTION exep.

Исключения, поднятые системой времени выполнения ABAP.

Например, Y = 1 / 0. Это приведет к ошибке времени выполнения типа CX_SY_ZERODIVIDE.

Исключения подняты программистом.

Поднимите и создайте объект исключения одновременно. Создайте исключение с объектом исключения, который уже существует в первом сценарии. Синтаксис: RAISE EXCEPTION exep.

Ловить исключения

Обработчики используются для отлова исключений.

Давайте посмотрим на фрагмент кода —

DATA: result TYPE P LENGTH 8 DECIMALS 2, 
exref TYPE REF TO CX_ROOT, 
msgtxt TYPE STRING. 
PARAMETERS: Num1 TYPE I, Num2 TYPE I. 
TRY. 
result = Num1 / Num2. 
CATCH CX_SY_ZERODIVIDE INTO exref. 
msgtxt = exrefGET_TEXT( ). 

CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref. 
msgtxt = exrefGET_TEXT( ).

В приведенном выше фрагменте кода мы пытаемся разделить Num1 на Num2, чтобы получить результат в переменной типа float.

Могут быть сгенерированы два типа исключений.

  • Ошибка преобразования числа.

  • Разделите на ноль исключений. Обработчики ловят исключение CX_SY_CONVERSION_NO_NUMBER, а также исключение CX_SY_ZERODIVIDE. Здесь метод GET_TEXT () класса исключения используется для получения описания исключения.

Ошибка преобразования числа.

Разделите на ноль исключений. Обработчики ловят исключение CX_SY_CONVERSION_NO_NUMBER, а также исключение CX_SY_ZERODIVIDE. Здесь метод GET_TEXT () класса исключения используется для получения описания исключения.

Атрибуты исключений

Вот пять атрибутов и методов исключений —

S.No. Атрибут и описание
1

Textid

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

2

предыдущий

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

3

get_text

Это возвращает текстовое представление в виде строки в соответствии с системным языком исключения.

4

get_longtext

Это возвращает длинный вариант текстового представления исключения в виде строки.

5

get_source_position

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

Textid

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

предыдущий

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

get_text

Это возвращает текстовое представление в виде строки в соответствии с системным языком исключения.

get_longtext

Это возвращает длинный вариант текстового представления исключения в виде строки.

get_source_position

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

пример

REPORT ZExceptionsDemo. 
PARAMETERS Num_1 TYPE I. 

DATA res_1 TYPE P DECIMALS 2. 
DATA orf_1 TYPE REF TO CX_ROOT. 
DATA txt_1 TYPE STRING. 

start-of-selection. 
Write: / 'Square Root and Division with:', Num_1. 
write: /. 

TRY. 
IF ABS( Num_1 ) > 150. 
RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE. 
ENDIF.
  
TRY. 
res_1 = SQRT( Num_1 ). 
Write: / 'Result of square root:', res_1. 
res_1 = 1 / Num_1. 

Write: / 'Result of division:', res_1. 
CATCH CX_SY_ZERODIVIDE INTO orf_1. 
txt_1 = orf_1GET_TEXT( ). 
CLEANUP. 
CLEAR res_1. 
ENDTRY. 

CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1. 
txt_1 = orf_1GET_TEXT( ).

CATCH CX_ROOT INTO orf_1. 
txt_1 = orf_1GET_TEXT( ). 
ENDTRY. 
IF NOT txt_1 IS INITIAL. 
Write / txt_1. 
ENDIF. 
Write: / 'Final Result is:', res_1.

В этом примере, если число больше 150, возникает исключение CX_DEMO_ABS_TOO_LARGE. Приведенный выше код производит следующий вывод для числа 160.

Square Root and Division with: 160 
The absolute value of number is too high 
Final Result is:  0.00

SAP ABAP — словарь

Как вы знаете, SQL можно разделить на две части:

  • DML (язык манипулирования данными)
  • DDL (язык определения данных)

Часть DML состоит из команд запроса и обновления, таких как SELECT, INSERT, UPDATE, DELETE и т. Д., А программы ABAP обрабатывают часть SQL DML. Часть DDL состоит из таких команд, как CREATE TABLE, CREATE INDEX, DROP TABLE, ALTER TABLE и т. Д., А ABAP Dictionary обрабатывает DDL-часть SQL.

ABAP словарь

Словарь ABAP можно рассматривать как метаданные (то есть данные о данных), которые находятся в базе данных SAP вместе с метаданными, поддерживаемыми базой данных. Словарь используется для создания определений данных и управления ими, а также для создания таблиц, элементов данных, доменов, представлений и типов.

Основные типы в словаре ABAP

Основные типы в словаре ABAP следующие:

  • Элементы данных описывают элементарный тип, определяя тип данных, длину и, возможно, десятичные разряды.

  • Структуры с компонентами, которые могут иметь любой тип.

  • Типы таблиц описывают структуру внутренней таблицы.

Элементы данных описывают элементарный тип, определяя тип данных, длину и, возможно, десятичные разряды.

Структуры с компонентами, которые могут иметь любой тип.

Типы таблиц описывают структуру внутренней таблицы.

На различные объекты в среде Dictionary можно ссылаться в программах ABAP. Словарь известен как глобальная область. Объекты в Словаре являются глобальными для всех программ ABAP, и данные в программах ABAP могут быть объявлены посредством ссылки на эти глобальные объекты Словаря.

DBO ABAP словарь

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

Задачи словаря

Словарь ABAP достигает следующего —

  • Обеспечивает целостность данных.
  • Управляет определениями данных без избыточности.
  • Тесно интегрируется с остальными инструментами разработки ABAP.

пример

Любой сложный определяемый пользователем тип может быть построен из 3 основных типов в Словаре. Данные клиента хранятся в структуре «Клиент» с компонентами «Имя», «Адрес» и «Телефон», как показано на следующем рисунке. Имя также является структурой с компонентами, именем и фамилией. Оба эти компонента являются элементарными, потому что их тип определяется элементом данных.

Данные клиентов

Тип компонента Address определяется структурой, компоненты которой также являются структурами, а компонент Telephone определяется типом таблицы, поскольку клиент может иметь более одного телефонного номера. Типы используются в программах ABAP, а также для определения типов параметров интерфейса функциональных модулей.

SAP ABAP — Домены

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

Домен назначается элементу данных, который, в свою очередь, назначается полям таблицы или структурам. Например, область MATNR (номер материала CHAR) назначается элементам данных, таким как MATNR_N, MATNN и MATNR_D, и они назначаются многим полям таблицы и структурам.

Создание доменов

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

Шаг 1 — Перейти к транзакции SE11.

Шаг 2 — Установите переключатель «Домен» на первом экране словаря ABAP и введите имя домена, как показано на следующем снимке экрана. Нажмите кнопку СОЗДАТЬ. Вы можете создавать домены в пространствах имен клиентов, и имя объекта всегда начинается с «Z» или «Y».

Создание домена

Шаг 3 — Введите описание в короткое текстовое поле экрана обслуживания домена. В данном случае это «Клиентский домен». Примечание. Вы не можете ввести любой другой атрибут, пока не введете этот атрибут.

Шаг 4 — Введите тип данных, количество символов и десятичные знаки в блоке «Формат» на вкладке «Определение». Нажмите клавишу на Output Length, и она предложит и отобразит выходную длину. Если вы перезапишете предложенную длину вывода, вы можете увидеть предупреждение при активации домена. Вы можете заполнить Convers. Поля Подпрограмма, Подпись и Строчный регистр, если требуется Но это всегда необязательные атрибуты.

Шаг 5 — Выберите вкладку Диапазон значений. Если домен имеет только фиксированные значения, введите фиксированные значения или интервалы. Определите таблицу значений, если система должна предлагать эту таблицу в качестве контрольной таблицы при определении внешнего ключа для полей, относящихся к этому домену. Но все это необязательные атрибуты.

Смена словаря домена

Шаг 6 — Сохраните ваши изменения. Появится всплывающее окно «Создать запись каталога объектов» с запросом пакета. Вы можете ввести название пакета, в котором вы работаете. Если у вас нет пакета, вы можете создать его в Навигаторе объектов или сохранить свой домен с помощью кнопки «Локальный объект».

Шаг 7 — Активируйте свой домен. Нажмите на значок Активировать (значок спички) или нажмите CTRL + F3, чтобы активировать домен. Появится всплывающее окно, в котором перечислены 2 в настоящее время неактивных объекта, как показано на следующем снимке:

Активный домен

Шаг 8 — На этом этапе должна быть активирована верхняя запись с пометкой «DOMA» с именем ZSEP_18. Как это выделено, нажмите зеленую кнопку галочки. Это окно исчезнет, ​​и в строке состояния появится сообщение «Объект активирован».

Если при активации домена появляются сообщения об ошибках или предупреждения, журнал активации отображается автоматически. Журнал активации отображает информацию о потоке активации. Вы также можете вызвать журнал активации с помощью утилиты (M) → Журнал активации.

SAP ABAP — Элементы данных

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

Элементы данных

Создание элементов данных

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

Ниже приведена процедура создания элемента данных:

Шаг 1 — Перейти к транзакции SE11.

Шаг 2 — Установите переключатель «Тип данных» на начальном экране словаря ABAP и введите имя элемента данных, как показано ниже.

Шаг 3 — Нажмите кнопку СОЗДАТЬ. Вы можете создавать элементы данных в пространствах имен клиентов, а имя объекта всегда начинается с «Z» или «Y».

Создание элементов данных

Шаг 4. Проверьте переключатель «Элемент данных» во всплывающем окне «СОЗДАТЬ ТИП», которое отображается с тремя переключателями.

Радиокнопка «Элементы данных»

Шаг 5 — Нажмите зеленую галочку. Вы будете перенаправлены на экран обслуживания элемента данных.

Шаг 6 — Введите описание в коротком текстовом поле экрана обслуживания элемента данных. В данном случае это «Элемент данных клиента». Примечание. Вы не можете ввести любой другой атрибут, пока не введете этот атрибут.

Элемент данных клиента

Шаг 7 — Назначьте элемент данных с типом. Вы можете создать элементарный элемент данных, проверив элементарный тип, или элемент справочных данных, проверив Тип ссылки. Вы можете назначить элемент данных для Домена или Предопределенного Типа в Элементарном Типе и с именем Ссылочного Типа или Ссылкой на Предопределенный Тип в Ссылочном Типе.

Шаг 8 — Введите поля для краткого текста, среднего текста, длинного текста и заголовка на вкладке «Метка поля». Вы можете нажать Enter, и длина будет автоматически сгенерирована для этих меток.

Поля элементов данных

Шаг 9 — Сохраните ваши изменения. Появится всплывающее окно «Создать запись каталога объектов» с запросом пакета. Вы можете ввести название пакета, в котором вы работаете. Если у вас нет пакета, вы можете создать его в Навигаторе объектов или сохранить свой элемент данных с помощью кнопки «Локальный объект».

Шаг 10 — Активируйте ваш элемент данных. Нажмите значок «Активировать» (значок спички) или нажмите CTRL + F3, чтобы активировать элемент данных. Появится всплывающее окно, в котором перечислены 2 в настоящее время неактивных объекта, как показано на следующем снимке экрана.

Активные элементы данных

Шаг 11 — На этом этапе должна быть активирована верхняя запись с пометкой «DTEL» с именем Z_CUST. Как это выделено, нажмите зеленую кнопку галочки. Это окно исчезнет, ​​и в строке состояния появится сообщение «Объект активирован».

Если при активации элемента данных возникли сообщения об ошибках или предупреждения, журнал активации отображается автоматически. Журнал активации отображает информацию о потоке активации. Вы также можете вызвать журнал активации с помощью утилиты (M) → Журнал активации.

SAP ABAP — Таблицы

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

Таблица может содержать одно или несколько полей, каждое из которых определяется своим типом данных и длиной. Большой объем данных, хранящихся в таблице, распределяется между несколькими полями, определенными в таблице.

Типы полей таблицы

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

S.No. Элементы и описание
1

Имя поля

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

2

Ключ флаг

Определяет, принадлежит ли поле к ключевому полю.

3

Тип поля

Назначает тип данных для поля.

4

Длина поля

Количество символов, которое можно ввести в поле.

5

Десятичные знаки

Определяет количество цифр, допустимых после десятичной точки. Этот элемент используется только для числовых типов данных.

6

Краткий текст

Описывает значение соответствующего поля.

Имя поля

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

Ключ флаг

Определяет, принадлежит ли поле к ключевому полю.

Тип поля

Назначает тип данных для поля.

Длина поля

Количество символов, которое можно ввести в поле.

Десятичные знаки

Определяет количество цифр, допустимых после десятичной точки. Этот элемент используется только для числовых типов данных.

Краткий текст

Описывает значение соответствующего поля.

Создание таблиц в словаре ABAP

Шаг 1 — Перейдите к транзакции SE11, выберите переключатель «Таблица базы данных» и введите имя для создаваемой таблицы. В нашем случае мы ввели имя ZCUSTOMERS1. Нажмите кнопку Создать. Появится экран словарь: ведение таблицы. Здесь по умолчанию выбрана вкладка «Доставка и обслуживание».

Шаг 2 — Введите пояснительный краткий текст в поле «Краткое описание».

Шаг 3 — Щелкните значок справки поиска рядом с полем «Класс доставки». Выберите «A [Таблица приложения (основные данные и данные транзакции)]».

Шаг 4 — Выберите опцию «Отображение / Обслуживание разрешено» в раскрывающемся меню «Просмотр данных / Обслуживание таблицы». Появится экран словаря: таблица обслуживания.

Таблица обслуживания

Шаг 5 — Выберите вкладку Поля. Появится экран, содержащий параметры, связанные с вкладкой «Поля».

Шаг 6 — Введите имена полей таблицы в столбце Поле. Имя поля может содержать буквы, цифры и символы подчеркивания, но оно всегда должно начинаться с буквы и не должно быть длиннее 16 символов.

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

Шаг 7 — Выберите столбец Ключ, если вы хотите, чтобы поле было частью ключа таблицы. Давайте создадим такие поля, как CLIENT, CUSTOMER, NAME, TITLE и DOB.

Шаг 8 — Первое поле является важным, и оно идентифицирует клиента, с которым связаны записи. Введите «Клиент» в качестве поля и «MANDT» в качестве элемента данных. Система автоматически заполняет Тип данных, Длина, Десятичные знаки и Краткое описание. Поле «Клиент» становится ключевым полем, установив флажок «Ключ».

Шаг 9 — Следующее поле — «Клиент». Установите флажок, чтобы сделать его ключевым полем, и введите новый элемент данных «ZCUSTNUM». Нажмите кнопку Сохранить.

Шаг 10. Поскольку элемент данных «ZCUSTNUM» еще не существует, его необходимо создать. Дважды щелкните новый элемент данных, и появится окно «Создать элемент данных». Ответьте «Да» на это, и появится окно «Ведение элемента данных».

Шаг 11 — Введите «Номер клиента» в области «Краткое описание». Элементарный тип данных с именем «Домен» должен быть определен для нового элемента данных. Поэтому введите «ZCUSTD1», дважды щелкните его и согласитесь сохранить внесенные изменения. Выберите «Да», чтобы создать домен, и введите в поле «Краткое описание» описание домена.

Элементарные данные

Вкладка «Определение» открывается автоматически. Первое поле — «Тип данных».

Шаг 12 — Щелкните внутри поля и выберите тип «NUMC» из выпадающего меню. Введите число 8 в № поля символов (максимум 8 символов) и введите 0 в области «Десятичные знаки». Длина выхода 8 должна быть выбрана, а затем нажмите Enter. Описание поля ‘NUMC’ должно появиться снова, подтверждая, что это допустимая запись.

Шаг 13 — Нажмите кнопку Сохранить и активируйте объект.

Шаг 14 — Нажмите F3, чтобы вернуться к экрану «Сохранить / изменить элемент данных». Создайте четыре метки поля, как показано на следующем снимке. После этого сохраните и активируйте элемент.

Изменить элемент данных

Шаг 15 — Нажмите кнопку «Назад», чтобы вернуться к экрану обслуживания стола. Столбец Customer имеет правильный тип данных, длину, десятичные дроби и краткое описание. Это указывает на успешное создание элемента данных, а также используемого домена.

Таблица изменений

Точно так же нам нужно создать три дополнительных поля, таких как NAME, TITLE и DOB.

Шаг 16 — Выберите «Технические настройки» на панели инструментов. Выберите APPL0 для «Класса данных» и первую категорию размера 0 для поля «Размер». В случае вариантов буферизации необходимо выбрать «Буферизация не разрешена».

Шаг 17 — Нажмите Сохранить. Вернитесь к столу и активируйте его. Появится следующий экран.

Активная таблица

Таблица ‘ZCUSTOMERS1’ активирована.

SAP ABAP — Структуры

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

Состав

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

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

Создание структуры

Шаг 1 — Перейти к транзакции SE11.

Шаг 2 — Нажмите «Тип данных» на экране. Введите имя «ZSTR_CUSTOMER1» и нажмите кнопку «Создать».

Шаг 3 — Выберите опцию «Структура» на следующем экране и нажмите Enter. Вы можете увидеть мастер «Сохранить / Изменить структуру».

Шаг 4 — Введите краткое описание, как показано на следующем снимке.

Описание структуры

Шаг 5 — Введите компонент (имя поля) и тип компонента (элемент данных).

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

Шаг 6 — Вам необходимо сохранить, проверить и активировать после предоставления всех компонентов и типов компонентов.

Появится следующий экран —

Активная структура

Шаг 7 — Когда выделено это «ZSTR_CUSTOMER1», нажмите зеленую кнопку галочки. Это окно исчезнет, ​​и в строке состояния появится сообщение «Активен».

Теперь структура активирована, как показано на следующем снимке:

ЗСТР Структура1

SAP ABAP — Представления

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

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

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

Создание представления

Шаг 1 — Установите переключатель «Просмотр» на начальном экране словаря ABAP. Введите имя создаваемого вида и нажмите кнопку «Создать». Мы ввели имя представления как ZVIEW_TEST.

Шаг 2. Выберите переключатель проекционного вида при выборе типа вида и нажмите кнопку «Копировать». Появится экран «Словарь: изменение вида».

Шаг 3. Введите краткое описание в поле «Краткое описание» и имя таблицы, которая будет использоваться в поле «Базовая таблица», как показано в следующем снимке.

Создание представления

Шаг 4 — Нажмите кнопку «Поля таблицы», чтобы включить поля таблицы ZCUSTOMERS1 в проекционное представление.

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

Таблица полей ZCUSTOMERS

Шаг 6 — После нажатия кнопки «Копировать» все выбранные поля для проекционного вида отображаются на экране «Словарь: изменение вида».

Сменить вид

Шаг 7 — Выберите вкладку «Состояние обслуживания», чтобы определить метод доступа. Выберите переключатель «только для чтения» и выберите «Отображение / Обслуживание разрешено с ограничениями» в раскрывающемся меню «Просмотр данных / Обслуживание представления таблицы».

Шаг 8 — Сохраните и активируйте его. На экране «Словарь: изменение вида» выберите «Утилиты» (M)> «Содержимое», чтобы отобразить экран выбора для ZVIEW_TEST.

Шаг 9 — Щелкните значок «Выполнить». Вывод проекционного вида выглядит так, как показано на следующем снимке экрана.

Стол Zview

Таблица ZCUSTOMERS1 состоит из 5 полей. Здесь отображаются 3 поля (Клиент, Номер клиента и Имя) с 4 записями. Номера клиентов от 100001 до 100004 с соответствующими именами.

SAP ABAP — Справка по поиску

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

Создание справки по поиску

Шаг 1 — Перейти к транзакции SE11. Выберите переключатель для поиска справки. Введите название поисковой справки, которая будет создана. Давайте введем имя ZSRCH1. Нажмите на кнопку Создать.

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

Шаг 3 — В методе выбора нам нужно указать, является ли наш источник данных таблицей или представлением. В нашем случае это стол. Таблица ZCUSTOMERS1. Он выбирается из списка выбора.

Шаг 4 — После ввода метода выбора, следующее поле — это тип диалога. Это контролирует внешний вид ограничительного диалогового окна. Есть выпадающий список с тремя вариантами. Давайте выберем опцию «Показывать значения немедленно».

Поиск Помощь Демо

Шаг 5 — Далее идет область параметров. Для каждого параметра или поля справки по поиску эти поля должны быть введены в соответствии с требованиями.

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

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

Поиск Справка Параметр

  • Импорт — это поле является флажком для указания того, является ли параметр справки по поиску параметром импорта. Экспорт или импорт осуществляется со ссылкой на справку по поиску.

  • Экспорт. Это поле является флажком для указания того, является ли параметр справки Поиска параметром экспорта. Экспорт будет переносом значений полей из списка выбора в поля экрана.

  • LPos — его значение определяет физическое положение параметра или поля справки по поиску в списке выбора. Если вы введете значение 1, поле появится в первой позиции в списке выбора и так далее.

  • SPos — управляет физическим положением параметра или поля справки поиска в ограничительном диалоговом окне. Если вы введете значение 1, поле появится в первой позиции в ограничительном диалоговом окне и так далее.

  • Элемент данных. Каждому параметру или полю справки поиска по умолчанию присваивается элемент данных, который был ему назначен в источнике данных (таблица или представление). Это имя элемента данных появляется в режиме отображения.

Импорт — это поле является флажком для указания того, является ли параметр справки по поиску параметром импорта. Экспорт или импорт осуществляется со ссылкой на справку по поиску.

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

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

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

Элемент данных. Каждому параметру или полю справки поиска по умолчанию присваивается элемент данных, который был ему назначен в источнике данных (таблица или представление). Это имя элемента данных появляется в режиме отображения.

Шаг 6 — Выполните проверку непротиворечивости и активируйте помощь поиска. Нажмите F8 для выполнения. Появится экран «Test Search Help ZSRCH1», как показано на следующем снимке экрана.

Справка по тестированию поиска

Шаг 7 — Давайте введем число 100004 в поле экрана ЗАКАЗЧИКА ЗАКАЗЧИКА. Нажмите Ввод.

Ограничить изменение значения

Номер клиента, 100004, и имя «STEPHEN» отображается.

SAP ABAP — Блокировка объектов

Блокировка объекта — это функция, предлагаемая ABAP Dictionary, которая используется для синхронизации доступа к одним и тем же данным несколькими программами. Доступ к данным осуществляется с помощью специальных программ. Объекты блокировки используются в SAP, чтобы избежать несогласованности при вставке или изменении данных в базе данных. Таблицы, записи данных которых должны быть заблокированы, должны быть определены в объекте блокировки вместе с их ключевыми полями.

Механизм блокировки

Ниже приведены две основные функции, выполняемые с помощью механизма блокировки:

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

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

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

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

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

Запрос блокировки

Создание заблокированных объектов

Шаг 1 — Перейти к транзакции SE11. Откроется следующий экран.

Создание заблокированных объектов

Шаг 2 — Нажмите кнопку «Блокировать объект». Введите имя объекта блокировки, начиная с E, и нажмите кнопку «Создать». Здесь мы используем EZLOCK12.

Шаг 3 — Введите поле краткого описания и нажмите на вкладку Таблицы.

Шаг 4 — Введите имя таблицы в поле «Имя» и выберите режим блокировки «Блокировка записи».

Шаг 5 — Нажмите на вкладку параметра блокировки, появится следующий экран.

Вкладка «Блокировка параметров»

Шаг 6 — Сохраните и активируйте. Автоматически генерируются 2 функциональных модуля. Чтобы проверить функциональные модули, мы можем использовать Перейти к → Блокировать модули.

Шаг 7 — Нажмите Lock Modules, и откроется следующий экран.

Блокировка функциональных модулей

Объект блокировки успешно создан.

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

SAP ABAP — Модуляризация

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

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

ABAP-программы состоят из блоков обработки, известных как модулирующие блоки обработки. Они —

  • Блоки обработки, вызываемые извне программы и из среды выполнения ABAP (т. Е. Блоки событий и диалоговые модули).

  • Обработка блоков, вызываемых из программ ABAP.

Блоки обработки, вызываемые извне программы и из среды выполнения ABAP (т. Е. Блоки событий и диалоговые модули).

Обработка блоков, вызываемых из программ ABAP.

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

Модуляризация на уровне исходного кода —

  • Локальные макросы
  • Глобальные программы включения

Модуляризация через блоки обработки, вызываемые из программ ABAP —

  • подпрограммы
  • Функциональные модули

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

SAP ABAP — подпрограммы

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

Подпрограмма многоразового использования

У нас есть программа X с 3 различными блоками исходного кода . Каждый блок имеет одинаковые операторы ABAP. По сути, это одни и те же блоки кода. Чтобы облегчить поддержку этого кода, мы можем инкапсулировать код в подпрограмму. Мы можем вызывать эту подпрограмму в наших программах столько раз, сколько пожелаем. Подпрограмма может быть определена с помощью операторов Form и EndForm.

Ниже приводится общий синтаксис определения подпрограммы.

FORM <subroutine_name>.
  
<statements> 
  
ENDFORM.

Мы можем вызвать подпрограмму с помощью оператора PERFORM. Элемент управления переходит к первому исполняемому оператору в подпрограмме <имя-подпрограммы>. Когда встречается ENDFORM, управление возвращается к оператору, следующему за оператором PERFORM.

пример

Шаг 1 — Перейти к транзакции SE80. Откройте существующую программу и затем щелкните правой кнопкой мыши программу. В данном случае это «ZSUBTEST».

Шаг 2 — Выберите Создать, а затем выберите Подпрограмма. Запишите имя подпрограммы в поле и нажмите кнопку «Продолжить». Имя подпрограммы «Sub_Display», как показано на следующем снимке экрана.

Создать подпрограмму

Шаг 3 — Напишите код в блоке операторов FORM и ENDFORM. Подпрограмма была успешно создана.

Нам нужно включить оператор PERFORM для вызова подпрограммы. Давайте посмотрим на код —

REPORT ZSUBTEST. 
PERFORM Sub_Display.

* Form Sub_Display 
* -->  p1 text 
* <--  p2 text 
 
FORM Sub_Display. 
Write: 'This is Subroutine'. 
Write: / 'Subroutine created successfully'. 
ENDFORM.                    " Sub_Display

Шаг 4 — Сохраните, активируйте и запустите программу. Приведенный выше код производит следующий вывод —

Subroutine Test:
   
This is Subroutine
  
Subroutine created successfully

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

SAP ABAP — Макросы

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

Макросы разработаны на основе заполнителей. Заполнитель работает как указатели на языке Си. Вы можете определить макрос в операторе DEFINE … END-OF-DEFINITION.

Ниже приведен основной синтаксис определения макроса:

DEFINE <macro_name>. <statements> 
END-OF-DEFINITION. 
   ...... 
  
   <macro_name> [<param1> <param2>....].

Необходимо сначала определить макрос, прежде чем вызывать его. <Param1>…. заменяет заполнители & 1 … в инструкциях ABAP, содержащихся в определении макроса.

Максимальное количество заполнителей в определении макроса — девять. То есть, когда программа выполняется, система SAP заменяет макрос соответствующими операторами, а заполнители & 1, & 2,…. & 9 заменяются параметрами param1, param2, …. param9. Мы можем вызвать макрос в другом макросе, но не в том же макросе.

пример

Перейти к транзакции SE38. Создайте новую программу ZMACRO_TEST вместе с описанием в коротком текстовом поле, а также с соответствующими атрибутами, такими как Тип и Состояние, как показано на следующем снимке экрана —

Новая программа ZMACRO

Ниже приведен код —

REPORT ZMACRO_TEST. 
DEFINE mac_test. 
WRITE: 'This is Macro &1'. 
END-OF-DEFINITION. 

PARAMETERS: s1 type C as checkbox. 
PARAMETERS: s2 type C as checkbox. 
PARAMETERS: s3 type C as checkbox default 'X'. 

START-OF-SELECTION. 
IF s1 = 'X'. 
   mac_test 1. ENDIF. 
IF s2 = 'X'. 
   mac_test 2. 
ENDIF.
 
IF s3 = 'X'. 
   mac_test 3. 
ENDIF.

У нас есть 3 флажка. Выполняя программу, давайте установим флажок S2.

Флажок макропрограммы

Приведенный выше код производит следующий вывод —

A Macro Program 
 
This is Macro 2

Если все флажки установлены, код выдает следующий вывод:

A Macro Program 
 
This is Macro 1 This is Macro 2 This is Macro 3

SAP ABAP — функциональные модули

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

Функциональные модули — это подпрограммы, которые содержат набор многократно используемых операторов с параметрами импорта и экспорта. В отличие от программ «Включить», функциональные модули могут выполняться независимо. Система SAP содержит несколько предопределенных функциональных модулей, которые можно вызывать из любой программы ABAP. Функциональная группа действует как своего рода контейнер для ряда функциональных модулей, которые логически связаны друг с другом. Например, функциональные модули для системы начисления заработной платы персонала будут объединены в функциональную группу.

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

Создать функциональный модуль

Результаты поиска будут отображены в новом окне. Функциональные модули отображаются в строках с синим фоном, а их функциональные группы — в розовых линиях. Далее вы можете посмотреть на группу функций ISOC, используя экран Навигатора объектов (Транзакция SE80). Вы можете увидеть список функциональных модулей, а также другие объекты, содержащиеся в функциональной группе. Давайте рассмотрим функциональный модуль SPELL_AMOUNT. Этот функциональный модуль преобразует числовые цифры в слова.

Создание новой программы

Шаг 1 — Перейдите к транзакции SE38 и создайте новую программу с именем Z_SPELLAMOUNT.

Шаг 2 — Введите некоторый код, чтобы можно было установить параметр, в котором значение можно было бы ввести и передать в функциональный модуль. Текстовый элемент text-001 здесь читается как «Введите значение».

Шаг 3 — Чтобы написать код для этого, используйте CTRL + F6. После этого появится окно, в котором «CALL FUNCTION» является первой опцией в списке. Введите «spell_amount» в текстовое поле и нажмите кнопку «Продолжить».

Программа количества заклинаний

Шаг 4 — Некоторый код генерируется автоматически. Но нам нужно усовершенствовать оператор IF, добавив в него код для ЗАПИСИ сообщения на экран: «Функциональный модуль возвратил значение: sy-subrc» и добавление оператора ELSE, чтобы вывести правильный результат, когда функция Модуль успешен. Здесь должна быть установлена ​​новая переменная для хранения значения, возвращаемого функциональным модулем. Назовем это как «результат».

Ниже приведен код —

REPORT Z_SPELLAMOUNT. 
data result like SPELL. 

selection-screen begin of line. 
selection-screen comment 1(15) text-001. 

parameter num_1 Type I. 
selection-screen end of line. 
CALL FUNCTION 'SPELL_AMOUNT' 
EXPORTING 
AMOUNT = num_1 
IMPORTING 
IN_WORDS = result. 

IF SY-SUBRC <> 0. 
   Write: 'Value returned is:', SY-SUBRC. 
else. 
   Write: 'Amount in words is:', result-word. 
ENDIF.

Шаг 5 — переменная, которую возвращает функциональный модуль, называется IN_WORDS. Установите соответствующую переменную в программе под названием «результат». Определите IN_WORDS, используя инструкцию LIKE для ссылки на структуру с именем SPELL.

Шаг 6 — Сохраните, активируйте и запустите программу. Введите значение, как показано на следующем снимке экрана, и нажмите F8.

Сумма правописания

Приведенный выше код производит следующий вывод —

Spelling the Amount 
Amount in words is: 
FIVE THOUSAND SIX HUNDRED EIGHTY

SAP ABAP — Включить программы

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

INCLUDE <program_name>.

Оператор INCLUDE имеет тот же эффект, что и копирование исходного кода включаемой программы <имя_программы> в другую программу. Поскольку включаемая программа не может работать независимо, она должна быть встроена в другие программы. Вы также можете вкладывать включенные программы.

Ниже приведено несколько ограничений при написании кода для программ «Включить».

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

Ниже приведены инструкции по созданию и использованию программы «Включить».

Шаг 1 — Создайте программу (Z_TOBEINCLUDED) для включения в ABAP Editor. Код для включения в ABAP Editor —

PROGRAM Z_TOBEINCLUDED.  
Write: / 'This program is started by:', SY-UNAME,
       / 'The Date is:', SY-DATUM,
       / 'Time is', SY-UZEIT.

Шаг 2 — Установите для типа программы значение ВКЛЮЧИТЬ программу, как показано на следующем снимке экрана.

Включить программы

Шаг 3 — Нажмите кнопку «Сохранить» и сохраните программу в пакете с именем ZINCL_PCKG.

Шаг 4 — Создайте другую программу, в которой должна использоваться программа Z_TOBEINCLUDED. Здесь мы создали другую программу с именем Z_INCLUDINGTEST и назначили тип для программы как Исполняемая программа.

Шаг 5 — Кодирование программы Z_INCLUDINGTEST включает программу Z_TOBEINCLUDED с помощью оператора INCLUDE, как показано в следующем коде.

REPORT Z_INCLUDINGTEST.  
INCLUDE Z_TOBEINCLUDED. 

Шаг 6 — Сохраните, активируйте и запустите программу.

Приведенный выше код производит следующий вывод —

This program is started by: SAPUSER 
The Date is: 06.10.2015 
Time is 13:25:11

SAP ABAP — Обзор открытого SQL

Открытый SQL указывает подмножество операторов ABAP, которые обеспечивают прямой доступ к данным в центральной базе данных текущей AS ABAP. Операторы Open SQL отображают функциональность языка манипулирования данными SQL в ABAP, которая поддерживается всеми системами баз данных.

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

Когда какой-либо из этих операторов используется в программе ABAP, важно проверить, было ли выполненное действие успешным. Если кто-то пытается вставить запись в таблицу базы данных, и она вставлена ​​неправильно, очень важно знать, чтобы в программе могли быть предприняты соответствующие действия. Это можно сделать, используя системное поле, которое уже было использовано, то есть SY-SUBRC. Когда оператор выполняется успешно, поле SY-SUBRC будет содержать значение 0, поэтому его можно проверить, и можно продолжить работу с программой, если она появится.

Оператор DATA используется для объявления рабочей области. Давайте дадим этому имя «wa_customers1». Вместо того, чтобы объявлять один тип данных для этого, можно объявить несколько полей, которые составляют таблицу. Самый простой способ сделать это — использовать оператор LIKE.

ВСТАВИТЬ Заявление

Здесь объявлена ​​рабочая область wa_customers1, как и таблица ZCUSTOMERS1, которая принимает ту же структуру, но не становится самой таблицей. Эта рабочая область может хранить только одну запись. После того, как он был объявлен, оператор INSERT можно использовать для вставки рабочей области и записи, которую он хранит в таблице. Код здесь будет читаться как «INSERT ZCUSTOMERS1 FROM wa_customers1».

Рабочая область должна быть заполнена некоторыми данными. Используйте имена полей из таблицы ZCUSTOMERS1. Это можно сделать, перейдя вперед, дважды щелкнув имя таблицы в коде или открыв новый сеанс и используя транзакцию SE11. Затем поля таблицы можно скопировать и вставить в редактор ABAP.

Ниже приведен фрагмент кода —

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'DAVE'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
INSERT ZCUSTOMERS1 FROM wa_customers1.

Тогда оператор CHECK можно использовать следующим образом. Это означает, что если запись вставлена ​​правильно, система сообщит об этом. Если нет, то будет отображаться код SY-SUBRC, который не будет равен нулю. Ниже приведен фрагмент кода —

IF SY-SUBRC = 0. 
   WRITE 'Record Inserted Successfully'.  
ELSE. 
   WRITE: 'The return code is ', SY-SUBRC. 
ENDIF.

Проверьте программу, сохраните, активируйте код, а затем протестируйте его. Окно вывода должно отображаться как «Запись успешно вставлена».

ЯСНОЕ Заявление

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

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

ОБНОВЛЕНИЕ Заявление

Если вы хотите обновить одну или несколько существующих записей в таблице одновременно, используйте оператор UPDATE. Как и в операторе INSERT, объявлена ​​рабочая область, заполненная новыми данными, которые затем заносятся в запись при выполнении программы. Запись, ранее созданная с помощью оператора INSERT, будет обновлена ​​здесь. Просто отредактируйте текст, хранящийся в полях NAME и TITLE. Затем в новой строке используется та же структура, что и для оператора INSERT, и на этот раз с помощью оператора UPDATE, как показано в следующем фрагменте кода:

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'RICHARD'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
UPDATE ZCUSTOMERS1 FROM wa_customers1.

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

MODIFY Заявление

Оператор MODIFY может рассматриваться как комбинация операторов INSERT и UPDATE. Его можно использовать для вставки новой записи или изменения существующей записи. Он следует синтаксису, аналогичному предыдущим двум операторам, при изменении записи из данных, введенных в рабочую область.

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

Ниже приведен фрагмент кода для создания новой записи:

CLEAR wa_customers1.
 
DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100007'. 
wa_customers1-name = 'RALPH'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19910921'. 
MODIFY ZCUSTOMERS1 FROM wa_customers1.

В этом примере оператор CLEAR используется для того, чтобы в рабочую область можно было вставить новую запись, а затем добавить клиента (номер) 100007. Поскольку это новое уникальное значение ключевого поля, будет вставлена ​​новая запись, и будет выполнена другая проверка достоверности.

Когда это будет выполнено и данные будут просмотрены в Браузере данных, будет создана новая запись для клиента с номером 100007 (RALPH).

Приведенный выше код производит следующий вывод (содержимое таблицы) —

Оператор SQL

SAP ABAP — Обзор собственного SQL

Термин «собственный SQL» относится ко всем операторам, которые могут быть статически перенесены в интерфейс Native SQL интерфейса базы данных. Собственные операторы SQL не входят в языковую область ABAP и не следуют синтаксису ABAP. ABAP просто содержит операторы для изоляции программных разделов, в которых могут быть перечислены собственные операторы SQL.

Собственный оператор SQL

В нативном SQL могут использоваться в основном специфичные для базы данных операторы SQL. Они передаются без изменений из собственного интерфейса SQL в систему базы данных и выполняются. Можно использовать полную область языка SQL соответствующей базы данных, и не нужно объявлять таблицы адресуемой базы данных в словаре ABAP. Существует также небольшой набор специфичных для SAP операторов Native SQL, которые обрабатываются определенным образом собственным интерфейсом SQL.

Чтобы использовать собственный оператор SQL, вы должны добавить к нему оператор EXEC SQL и завершить оператором ENDEXEC.

Ниже приводится синтаксис —

EXEC SQL PERFORMING <form>.  
   <Native SQL statement> 
ENDEXEC.

Эти операторы определяют область в программе ABAP, в которой может быть указан один или несколько операторов Native SQL. Введенные операторы передаются в интерфейс Native SQL, а затем обрабатываются следующим образом:

  • Все операторы SQL, которые действительны для программного интерфейса адресуемой системы баз данных, могут быть перечислены между EXEC и ENDEXEC, в частности операторы DDL (язык определения данных).

  • Эти операторы SQL передаются из интерфейса Native SQL в систему базы данных в основном без изменений. Правила синтаксиса определяются системой базы данных, особенно правила учета регистра для объектов базы данных.

  • Если синтаксис допускает разделение между отдельными операторами, вы можете включить много операторов Native SQL между EXEC и ENDEXEC.

  • Специфичные для SAP родные элементы языка SQL могут быть указаны между EXEC и ENDEXEC. Эти операторы не передаются напрямую из интерфейса Native SQL в базу данных, но они соответствующим образом преобразуются.

Все операторы SQL, которые действительны для программного интерфейса адресуемой системы баз данных, могут быть перечислены между EXEC и ENDEXEC, в частности операторы DDL (язык определения данных).

Эти операторы SQL передаются из интерфейса Native SQL в систему базы данных в основном без изменений. Правила синтаксиса определяются системой базы данных, особенно правила учета регистра для объектов базы данных.

Если синтаксис допускает разделение между отдельными операторами, вы можете включить много операторов Native SQL между EXEC и ENDEXEC.

Специфичные для SAP родные элементы языка SQL могут быть указаны между EXEC и ENDEXEC. Эти операторы не передаются напрямую из интерфейса Native SQL в базу данных, но они соответствующим образом преобразуются.

пример

SPFLI — это стандартная таблица SAP, которая используется для хранения информации о расписании рейсов. Это доступно в системах SAP R / 3 в зависимости от версии и уровня выпуска. Вы можете просмотреть эту информацию, введя имя таблицы SPFLI в соответствующую транзакцию SAP, такую ​​как SE11 или SE80. Вы также можете просмотреть данные, содержащиеся в этой таблице базы данных, используя эти две транзакции.

REPORT ZDEMONATIVE_SQL. 
DATA: BEGIN OF wa,  
      connid  TYPE SPFLI-connid,
      cityfrom TYPE SPFLI-cityfrom,
      cityto  TYPE SPFLI-cityto,  
      END OF wa. 
	
DATA c1 TYPE SPFLI-carrid VALUE 'LH'. 
EXEC SQL PERFORMING loop_output.
   SELECT connid, cityfrom, cityto  
   INTO :wa  
   FROM SPFLI  
   WHERE carrid = :c1 
ENDEXEC. 

FORM loop_output.  
   WRITE: / wa-connid, wa-cityfrom, wa-cityto. 
ENDFORM.

Приведенный выше код производит следующий вывод —

0400  FRANKFURT  NEW YORK 
2402  FRANKFURT  BERLIN 
0402  FRANKFURT  NEW YORK

SAP ABAP — внутренние таблицы

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

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

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

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

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

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

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

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

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

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

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

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

пример

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

SAP ABAP — Создание внутренних таблиц

Оператор DATA используется для объявления внутренней таблицы. В программе нужно указать, где начинается и заканчивается таблица. Так что используйте оператор BEGIN OF, а затем объявите имя таблицы. После этого используется добавление OCCURS, за которым следует число, здесь 0. OCCURS сообщает SAP, что создается внутренняя таблица, а 0 указывает, что изначально она не будет содержать никаких записей. Затем он будет расширяться по мере заполнения данными.

Ниже приводится синтаксис —

DATA: BEGIN OF <internal_tab> Occurs 0,

Давайте создадим поля на новой строке. Например, создайте ‘name’, которое объявлено как LIKE ZCUSTOMERS1-name. Создайте другое поле с именем ‘dob’, LIKE ZCUSTOMERS1-dob. Первоначально полезно давать имена полей во внутренних таблицах тем же именам, что и другим полям, которые были созданы в других местах. Наконец, объявите конец внутренней таблицы с «END OF <internal_tab>.», Как показано в следующем коде —

DATA: BEGIN OF itab01 Occurs 0,
   name LIKE ZCUSTOMERS1-name,
   dob LIKE ZCUSTOMERS1-dob, 
END OF itab01.

Здесь ‘itab01’ обычно используется как сокращение при создании временных таблиц в SAP. Предложение OCCURS используется для определения тела внутренней таблицы путем объявления полей для таблицы. Когда используется предложение OCCURS, вы можете указать числовую константу ‘n’, чтобы определить дополнительную память по умолчанию, если это необходимо. Размер памяти по умолчанию, который используется предложением OCCUR 0, составляет 8 КБ. Структура внутренней таблицы теперь создана, и можно написать код, чтобы заполнить ее записями.

Внутренняя таблица может быть создана с использованием или без использования строки заголовка. Чтобы создать внутреннюю таблицу со строкой заголовка, используйте предложение BEGIN OF перед предложением OCCURS или предложение WITH HEADER LINE после предложения OCCURS в определении внутренней таблицы. Чтобы создать внутреннюю таблицу без строки заголовка, используйте предложение OCCURS без предложения BEGIN OF.

Вы также можете создать внутреннюю таблицу как локальный тип данных (тип данных, используемый только в контексте текущей программы) с помощью оператора TYPES. Этот оператор использует предложение TYPE или LIKE для ссылки на существующую таблицу.

Синтаксис для создания внутренней таблицы как локального типа данных:

TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF 
   <line_type_itab> WITH <key> INITIAL SIZE <size_number>.

Здесь <internal_tab_type> указывает тип таблицы для внутренней таблицы <internal_tab>, а <line_type_itab> указывает тип для строки внутренней таблицы. В операторе TYPES вы можете использовать предложение TYPE, чтобы указать тип строки внутренней таблицы как тип данных, и предложение LIKE, чтобы указать тип строки как объект данных. Указывать ключ для внутренней таблицы необязательно, и если пользователь не указывает ключ, система SAP определяет тип таблицы с произвольным ключом.

INITIAL SIZE <size_number> создает объект внутренней таблицы, выделяя ему начальный объем памяти. В предыдущем синтаксисе предложение INITIAL SIZE резервирует пространство памяти для строк таблицы size_number. Всякий раз, когда объявляется объект внутренней таблицы, размер таблицы не относится к типу данных таблицы.

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

пример

Шаг 1 — Откройте редактор ABAP, выполнив код транзакции SE38. Появится начальный экран ABAP Editor.

Шаг 2 — На начальном экране введите имя программы, установите переключатель «Исходный код» и нажмите кнопку «Создать», чтобы создать новую программу.

Шаг 3 — В диалоговом окне «ABAP: Атрибуты программы» введите краткое описание программы в поле «Заголовок», выберите параметр «Исполняемая программа» в раскрывающемся меню «Тип» в групповом поле «Атрибуты». Нажмите кнопку Сохранить.

Шаг 4 — Напишите следующий код в редакторе ABAP.

REPORT ZINTERNAL_DEMO. 
TYPES: BEGIN OF CustomerLine, 
Cust_ID TYPE C, 
Cust_Name(20) TYPE C, 
END OF CustomerLine. 
 
TYPES mytable TYPE SORTED TABLE OF CustomerLine  
WITH UNIQUE KEY Cust_ID. 
WRITE:/'The mytable is an Internal Table'. 

Шаг 5 — Сохраните, активируйте и запустите программу как обычно.

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

Приведенный выше код производит следующий вывод —

The mytable is an Internal Table.

SAP ABAP — заполнение внутренних таблиц

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

ВСТАВИТЬ Заявление

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

Ниже приведен синтаксис для добавления одной строки во внутреннюю таблицу:

INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.

В этом синтаксисе оператор INSERT вставляет новую строку во внутреннюю таблицу internal_tab. Новую строку можно вставить, используя выражение INTO work_area_itab перед параметром internal_tab. Когда используется выражение INTO work_area_itab, новая строка берется из рабочей области work_area_itab и вставляется в таблицу internal_tab. Однако, когда выражение INTO work_area_itab не используется для вставки строки, строка берется из строки заголовка таблицы internal_tab.

Когда новая строка вставляется во внутреннюю таблицу с помощью предложения INDEX, порядковый номер строк после вставленной строки увеличивается на 1. Если внутренняя таблица содержит <index_num> — 1 строк, новая строка добавляется в конец таблицы. Когда система SAP успешно добавляет строку во внутреннюю таблицу, переменная SY-SUBRC устанавливается в 0.

пример

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

REPORT  ZCUSLIST1. 
DATA: BEGIN OF itable1 OCCURS 4,
      F1 LIKE SY-INDEX,
      END OF itable1.
	
   DO 4 TIMES.
      itable1-F1 = sy-index.
      APPEND itable1.
   ENDDO.
	
itable1-F1 = -96.  
INSERT itable1 INDEX 2.  

LOOP AT itable1.
   Write / itable1-F1.  
ENDLOOP.  

LOOP AT itable1 Where F1  3.
   itable1-F1 = -78.
   INSERT itable1.
ENDLOOP.

Skip.
LOOP AT itable1.
   Write / itable1-F1.
ENDLOOP.

Приведенный выше код производит следующее outp —

		1 
96- 
		2 
		3 
 4  
		1 
96- 
		2 
78- 
 3 
78- 
 4 

В приведенном выше примере цикл DO добавляет к нему 4 строки, содержащие числа от 1 до 4. Компонент строки заголовка itable1-F1 получил значение -96. Оператор вставки вставляет строку заголовка как новую строку в тело перед строкой 3. Существующая строка 3 становится строкой 4 после вставки. Оператор LOOP AT извлекает те строки из внутренней таблицы, у которых значение F1 больше или равно 3. Перед каждой строкой оператор Insert вставляет новую строку из строки заголовка. До вставки компонент F1 был изменен, чтобы содержать -78.

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

При вставке новой строки внутри itable1 внутри цикла в itable1 это не влияет на внутреннюю таблицу мгновенно. Это фактически вступает в силу на следующем проходе цикла. При вставке строки после текущей строки таблица переиндексируется в ENDLOOP. Sy-tabix увеличивается, и следующий цикл обрабатывает строку, на которую указывает sy-tabix. Например, если вы находитесь на втором проходе цикла и вставляете запись перед строкой 3. Когда выполняется endloop, новая строка становится строкой 3, а старая строка 3 становится строкой 4 и так далее. Sy-tabix увеличивается на 1, и следующий проход цикла обрабатывает вновь вставленную запись.

APPEND Заявление

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

APPEND <record_for_itab> TO <internal_tab>.

В этом синтаксисе выражение <record_for_itab> может быть представлено рабочей областью <work_area_itab>, которая может быть преобразована в тип линии или предложением INITIAL LINE. Если пользователь использует рабочую область <work_area_itab>, система SAP добавляет новую строку во внутреннюю таблицу <internal_tab> и заполняет ее содержимым рабочей области. Предложение INITIAL LINE добавляет пустую строку, содержащую начальное значение для каждого поля структуры таблицы. После каждого оператора APPEND переменная SY-TABIX содержит порядковый номер добавленной строки.

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

пример

REPORT  ZCUSLIST1. 
DATA: BEGIN OF linv Occurs 0,
      Name(20) TYPE C,
      ID_Number TYPE I,
END OF linv. 

DATA table1 LIKE TABLE OF linv. 
linv-Name = 'Melissa'. 
linv-ID_Number = 105467. 
APPEND linv TO table1. 
LOOP AT table1 INTO linv. 

Write: / linv-name, linv-ID_Number. 
ENDLOOP.

Приведенный выше код производит следующий вывод —

Melissa		105467 

SAP ABAP — Копирование внутренних таблиц

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

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

Ниже приведен синтаксис для оператора MOVE —

MOVE <table_field> TO <internal_tab_field>.

пример

REPORT  ZCUSLIST1. 
TABLES: ZCUSTOMERS1. 
DATA: BEGIN OF itab01 Occurs 0,
      name LIKE ZCUSTOMERS1-name,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

Select * FROM ZCUSTOMERS1. 
MOVE ZCUSTOMERS1-name TO itab01-name. 
MOVE ZCUSTOMERS1-dob TO itab01-dob. 
ENDSELECT.
 
Write: / itab01-name, itab01-dob.

Приведенный выше код производит следующий вывод —

MARGARET  		02.11.1994 

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

Ниже приведен синтаксис оператора MOVE-CORRESPONDING:

MOVE-CORRESPONDING <table_name> TO <internal_tab>. 

Он сообщает системе переместить данные из полей ZCUSTOMERS1 в соответствующие им поля в itab01.

пример

REPORT  ZCUSTOMERLIST. 
TABLES: ZCUSTOMERS1. 
DATA: Begin of itab01 occurs 0,
      customer LIKE ZCUSTOMERS1-customer,
      name LIKE ZCUSTOMERS1-name,
      title LIKE ZCUSTOMERS1-title,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

SELECT * from ZCUSTOMERS1. 
MOVE-Corresponding ZCUSTOMERS1 TO itab01. 
APPEND itab01. 
ENDSELECT. 
LOOP AT itab01. 
Write: / itab01-name, itab01-dob. 
ENDLOOP. 

Приведенный выше код производит следующий вывод —

MARK           21.05.1981 
JAMES          14.08.1977 
AURIELE        19.06.1990 
STEPHEN        22.07.1985 
MARGARET       02.11.1994 

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

SAP ABAP — чтение внутренних таблиц

Мы можем прочитать строки таблицы, используя следующий синтаксис оператора READ TABLE:

READ TABLE <internal_table> FROM <work_area_itab>.

В этом синтаксисе выражение <work_area_itab> представляет рабочую область, совместимую с типом строки таблицы <internal_table>. Мы можем указать ключ поиска, но не ключ таблицы, в операторе READ, используя предложение WITH KEY, как показано в следующем синтаксисе:

READ TABLE <internal_table> WITH KEY = <internal_tab_field>.

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

Следующий синтаксис оператора READ используется для указания рабочей области или символа поля с помощью предложения COMPARING —

READ TABLE <internal_table> <key> INTO <work_area_itab>
   [COMPARING <F1> <F2>...<Fn>].

При использовании предложения COMPARING указанные поля таблицы <F1>, <F2> …. <Fn> типа структурированной строки сравниваются с соответствующими полями рабочей области перед транспортировкой. Если указано предложение ALL FIELDS, система SAP сравнивает все компоненты. Когда система SAP находит запись на основе ключа, значение переменной SY-SUBRC устанавливается равным 0. Кроме того, значение переменной SY-SUBRC устанавливается равным 2 или 4, если содержимое сравниваемого поля не совпадают или если система SAP не может найти запись. Однако система SAP копирует запись в целевую рабочую область всякий раз, когда находит запись, независимо от результата сравнения.

пример

REPORT  ZREAD_DEMO. 
*/Creating an internal table 
DATA: BEGIN OF Record1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Record1. 

DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP. 
DO 6 Times.
Record1-ColP = SY-INDEX. 
Record1-ColQ = SY-INDEX + 5. 
INSERT Record1 INTO TABLE mytable. 
ENDDO. 

Record1-ColP = 4. 
Record1-ColQ = 12. 
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ. 

WRITE: 'SY-SUBRC =', SY-SUBRC. 
SKIP. 
WRITE: / Record1-ColP, Record1-ColQ.

Приведенный выше код производит следующий вывод —

SY-SUBRC =    2 

4         9

В приведенном выше примере mytable — это внутренняя таблица типа хэшированной таблицы, с Record1 в качестве рабочей области и ColP в качестве уникального ключа. Первоначально mytable содержит шесть строк, где поле ColP содержит значения переменной SY-INDEX, а поле ColQ содержит (SY-INDEX + 5) значения.

Рабочая область Record1 заполняется значениями 4 и 12 в качестве значений для полей ColP и ColQ соответственно. Оператор READ читает строку таблицы после сравнения значения поля ключа ColP со значением в рабочей области Record1 с помощью предложения COMPARING, а затем копирует содержимое строки чтения в рабочей области. Значение переменной SY-SUBRC отображается как 2, потому что, когда значение в поле ColP равно 4, значение в ColQ не 12, а 9.

SAP ABAP — удаление внутренних таблиц

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

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

DELETE TABLE <internal_table> FROM <work_area_itab>.

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

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

DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.

В этом синтаксисе <F1>, <F2> …. <Fn> являются полями внутренней таблицы, а <K1>, <K2> …. <Kn> являются ключевыми полями таблицы. Оператор DELETE используется для удаления записей или строк таблицы <internal_table> на основе выражений <K1> = <F1>, <K2> = <F2> … <Kn> = <Fn>.

Примечание. Если типы данных полей <F1>, <F2> …. <Fn> несовместимы с полями ключей <K1>, <K2> … <Kn>, система SAP автоматически преобразует их в совместимый формат.

пример

REPORT  ZDELETE_DEMO. 
DATA: BEGIN OF Line1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Line1. 
DATA mytable LIKE HASHED TABLE OF Line1  
WITH UNIQUE KEY ColP. 
DO 8 TIMES. 

Line1-ColP = SY-INDEX. 
Line1-ColQ = SY-INDEX + 4. 
INSERT Line1 INTO TABLE mytable. 
ENDDO. 

Line1-ColP = 1. 
DELETE TABLE mytable: FROM Line1, 
WITH TABLE KEY ColP = 3.
LOOP AT mytable INTO Line1. 

WRITE: / Line1-ColP, Line1-ColQ. 
ENDLOOP.

Приведенный выше код производит следующий вывод —

2         6 
4         8 
5         9 
6         10 
7         11 
8         12

В этом примере mytable имеет два поля, ColP и ColQ. Первоначально mytable заполняется восемью строками, где ColP содержит значения 1, 2, 3, 4, 5, 6, 7 и 8. ColQ содержит значения 5, 6, 7, 8, 9, 10, 11 и 12, потому что значения ColP увеличиваются на 4 каждый раз.

Оператор DELETE используется для удаления строк из mytable, где значение поля ключа ColP равно 1 или 3. После удаления поле ColP в mytable содержит значения 2, 4, 5, 6, 7 и 8, как показано на выходе. Поле ColQ содержит значения 6, 8, 9, 10, 11 и 12.

SAP ABAP — объектная ориентация

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

Поскольку решения разрабатываются на основе реальных объектов, программистам и бизнес-аналитикам становится намного проще обмениваться идеями и информацией о дизайне, использующем общий язык предметной области. Эти улучшения в коммуникации помогают выявить скрытые требования, выявить риски и улучшить качество разрабатываемого программного обеспечения. Объектно-ориентированный подход фокусируется на объектах, которые представляют абстрактные или конкретные вещи реального мира. Эти объекты определяются их характером и свойствами, которые представлены их внутренней структурой и их атрибутами (данными). Поведение этих объектов описывается методами (т. Е. Функциональностью).

Давайте сравним процедурное и объектно-ориентированное программирование —

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

ABAP изначально разрабатывался как процедурный язык (точно такой же, как в более раннем процедурном языке программирования, таком как COBOL). Но теперь ABAP адаптировала принципы объектно-ориентированных парадигм с введением объектов ABAP. Объектно-ориентированные концепции в ABAP, такие как класс, объект, наследование и полиморфизм, по существу такие же, как и в других современных объектно-ориентированных языках, таких как Java или C ++.

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

Ключевые особенности ориентации объекта:

  • Эффективная структура программирования.
  • Реальные сущности могут быть смоделированы очень хорошо.
  • Акцент на безопасность данных и доступ.
  • Минимизирует избыточность кода.
  • Абстракция данных и инкапсуляция.

SAP ABAP — Объекты

Объект — это особая переменная, которая имеет различные характеристики и поведение. Характеристики или атрибуты объекта используются для описания состояния объекта, а поведение или методы представляют действия, выполняемые объектом.

Объект — это шаблон или экземпляр класса. Он представляет сущность реального мира, такую ​​как человек или объект программирования, такой как переменные и константы. Например, учетные записи и студенты являются примерами реальных сущностей. Но аппаратные и программные компоненты компьютера являются примерами объектов программирования.

Объект имеет следующие три основные характеристики —

  • Имеет состояние.
  • Имеет уникальную личность.
  • Может или не может отображать поведение.

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

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

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

Создание объекта

Создание объекта обычно включает в себя следующие шаги —

  • Создание ссылочной переменной со ссылкой на класс. Синтаксис для которого —

Создание ссылочной переменной со ссылкой на класс. Синтаксис для которого —

DATA: <object_name> TYPE REF TO <class_name>.
  • Создание объекта из ссылочной переменной. Синтаксис для которого —

Создание объекта из ссылочной переменной. Синтаксис для которого —

CREATE Object: <object_name>.

пример

REPORT ZDEMO_OBJECT. 
CLASS Class1 Definition. 
Public Section. 
DATA: text1(45) VALUE 'ABAP Objects.'. 
METHODS: Display1. 
ENDCLASS. 

CLASS Class1 Implementation. 
METHOD Display1. 
Write:/ 'This is the Display method.'. 
ENDMETHOD. 
ENDCLASS. 

START-OF-SELECTION. 
DATA: Class1 TYPE REF TO Class1. 
CREATE Object: Class1. 
Write:/ Class1->text1. 
CALL METHOD: Class1->Display1.

Приведенный выше код производит следующий вывод —

ABAP Objects. 
This is the Display method.

SAP ABAP — Классы

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

Определение и реализация класса

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

Следующий синтаксис показывает, как определить класс —

CLASS <class_name> DEFINITION. 
.......... 
.......... 
ENDCLASS.

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

CLASS <class_name> IMPLEMENTATION. 
........... 
.......... 
ENDCLASS.

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

Атрибуты

Атрибуты — это поля данных класса, которые могут иметь любой тип данных, например C, I, F и N. Они объявлены в объявлении класса. Эти атрибуты можно разделить на 2 категории: экземпляры и статические атрибуты. Атрибут экземпляра определяет специфическое для экземпляра состояние объекта. Состояния разные для разных объектов. Атрибут экземпляра объявляется с помощью оператора DATA.

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

методы

Метод — это функция или процедура, которая представляет поведение объекта в классе. Методы класса могут получить доступ к любому атрибуту класса. Определение метода может также содержать параметры, так что вы можете указывать значения этих параметров при вызове методов. Определение метода объявлено в объявлении класса и реализовано в части реализации класса. Операторы METHOD и ENDMETHOD используются для определения части реализации метода. Следующий синтаксис показывает, как реализовать метод —

METHOD <m_name>. 
.......... 
.......... 
ENDMETHOD.

В этом синтаксисе <m_name> представляет имя метода. Примечание. Вы можете вызвать метод с помощью оператора CALL METHOD.

Доступ к атрибутам и методам

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

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

  • Атрибуты и методы, объявленные в разделе Public в классе, могут быть доступны для этого класса и любого другого класса, подкласса программы.

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

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

Атрибуты и методы, объявленные в разделе Public в классе, могут быть доступны для этого класса и любого другого класса, подкласса программы.

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

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

пример

Report ZAccess1. 
CLASS class1 Definition.
   PUBLIC Section.
      Data: text1 Type char25 Value 'Public Data'.
      Methods meth1.
		
   PROTECTED Section.
      Data: text2 Type char25 Value 'Protected Data'.
		
   PRIVATE Section.     
      Data: text3 Type char25 Value 'Private Data'. 
ENDCLASS.
 
CLASS class1 Implementation.   
   Method meth1.     
      Write: / 'Public Method:',   
             / text1,
             / text2,
             / text3.
      Skip.
   EndMethod.
ENDCLASS. 

Start-Of-Selection.   
   Data: Objectx Type Ref To class1.
   Create Object: Objectx.
   CALL Method: Objectxmeth1.
   Write: / Objectxtext1.

Приведенный выше код производит следующий вывод —

Public Method: 
Public Data 
Protected Data 
Private Data
  
Public Data

Статические Атрибуты

Статический атрибут объявляется с оператором CLASS-DATA. Все объекты или экземпляры могут использовать статический атрибут класса. Статические атрибуты доступны напрямую с помощью имени класса, например class_name⇒name_1 = ‘Some Text’.

пример

Ниже приводится программа, в которой мы хотим напечатать текст с номерами строк от 4 до 8 раз. Мы определяем класс class1 и в открытом разделе объявляем CLASS-DATA (статический атрибут) и метод. После реализации класса и метода мы напрямую обращаемся к статическому атрибуту в событии Start-Of-Selection. Затем мы просто создаем экземпляр класса и вызываем метод.

Report ZStatic1. 
CLASS class1 Definition.   
   PUBLIC Section.
      CLASS-DATA: name1 Type char45,
                  data1 Type I.
   Methods: meth1. 
ENDCLASS. 

CLASS class1 Implementation.   
   Method meth1.
      Do 4 Times.
         data1 = 1 + data1.
         Write: / data1, name1.
      EndDo.
      Skip.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
   class1name1 = 'ABAP Object Oriented Programming'.
   class1data1 = 0.
   Data: Object1 Type Ref To class1,
         Object2 Type Ref To class1.
			
   Create Object: Object1, Object2.
   CALL Method: Object1meth1, 
                Object2meth1.

Приведенный выше код производит следующий вывод —

Статические Атрибуты

Конструкторы

Конструкторы — это специальные методы, которые вызываются автоматически при создании объекта или при доступе к компонентам класса. Конструктор запускается всякий раз, когда создается объект, но нам нужно вызвать метод, чтобы вызвать общий метод. В следующем примере мы объявили два открытых метода method1 и constructor. Оба эти метода имеют разные операции. При создании объекта класса метод конструктора запускает его работу.

пример

Report ZConstructor1. 
CLASS class1 Definition.
   PUBLIC Section.
      Methods: method1, constructor.
ENDCLASS. 

CLASS class1 Implementation.
   Method method1.
      Write: / 'This is Method1'.
   EndMethod.
	
   Method constructor.
      Write: / 'Constructor Triggered'.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection.
   Data Object1 Type Ref To class1.
   Create Object Object1.

Приведенный выше код производит следующий вывод —

Constructor Triggered

Оператор ME в методах

Когда вы объявляете переменную любого типа в публичной секции класса, вы можете использовать ее в любой другой реализации. Переменная может быть объявлена ​​с начальным значением в публичном разделе. Мы можем объявить переменную снова внутри метода с другим значением. Когда мы пишем переменную внутри метода, система напечатает измененное значение. Чтобы отразить предыдущее значение переменной, мы должны использовать оператор «ME».

В этой программе мы объявили открытую переменную text1 и начали со значения. Мы снова объявили одну и ту же переменную, но создали ее с другим значением. Внутри метода мы записываем эту переменную с оператором ‘ME’, чтобы получить ранее инициированное значение. Мы получим измененное значение, объявив напрямую.

пример

Report ZMEOperator1. 
CLASS class1 Definition.
   PUBLIC Section. 
	
Data text1 Type char25 Value 'This is CLASS Attribute'.
   Methods method1. 
ENDCLASS. 

CLASS class1 Implementation.
   Method method1. 
	
Data text1 Type char25 Value 'This is METHOD Attribute'.
   Write: / MEtext1,
          / text1.
   ENDMethod.
ENDCLASS. 

Start-Of-Selection.
   Data objectx Type Ref To class1.
   Create Object objectx.
   CALL Method objectxmethod1.

Приведенный выше код производит следующий вывод —

This is CLASS Attribute 
This is METHOD Attribute

SAP ABAP — Наследование

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

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

  • Объект одного класса может приобретать свойства другого класса.

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

  • Основным преимуществом наследования является возможность повторного использования.

Объект одного класса может приобретать свойства другого класса.

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

Основным преимуществом наследования является возможность повторного использования.

Отношения наследования задаются с помощью дополнения INHERITING FROM к выражению определения класса.

Ниже приводится синтаксис —

CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

пример

Report ZINHERITAN_1. 
CLASS Parent Definition. 
PUBLIC Section. 
Data: w_public(25) Value 'This is public data'. 
Methods: ParentM. 
ENDCLASS. 

CLASS Child Definition Inheriting From Parent. 
PUBLIC Section. 
Methods: ChildM. 
ENDCLASS. 

CLASS Parent Implementation. 
Method ParentM. 
Write /: w_public. 
EndMethod. ENDCLASS. 

CLASS Child Implementation. 
Method ChildM. 
Skip. 
Write /: 'Method in child class', w_public.
EndMethod. 
ENDCLASS. 

Start-of-selection. 
Data: Parent Type Ref To Parent, 
Child Type Ref To Child. 
Create Object: Parent, Child. 
Call Method: ParentParentM, 
childChildM.

Приведенный выше код производит следующий вывод —

This is public data 
Method in child class 
This is public data

Контроль доступа и наследование

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

Доступ общественного защищенный Частный
Та же кальс да да да
Производный класс да да нет
Вне класса да нет нет

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

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

  • Защищенное наследование — При наследовании от защищенного суперкласса публичные и защищенные члены суперкласса становятся защищенными членами подкласса.

  • Частное наследование — При наследовании от частного суперкласса публичные и защищенные члены суперкласса становятся частными членами подкласса.

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

Защищенное наследование — При наследовании от защищенного суперкласса публичные и защищенные члены суперкласса становятся защищенными членами подкласса.

Частное наследование — При наследовании от частного суперкласса публичные и защищенные члены суперкласса становятся частными членами подкласса.

Переопределение методов в подклассе

Методы суперкласса могут быть повторно реализованы в подклассе. Несколько правил переопределения методов —

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

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

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

  • Псевдо-ссылка super может использоваться только в переопределенных методах.

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

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

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

Псевдо-ссылка super может использоваться только в переопределенных методах.

пример

Report Zinheri_Redefine. 
CLASS super_class Definition. 
Public Section. 
Methods: Addition1 importing g_a TYPE I
                             g_b TYPE I
		   exporting g_c TYPE I.
ENDCLASS. 

CLASS super_class Implementation. 
Method Addition1. 
g_c = g_a + g_b. 
EndMethod. 
ENDCLASS. 

CLASS sub_class Definition Inheriting From super_class. 
Public Section. 
METHODS: Addition1 Redefinition. 
ENDCLASS. 

CLASS sub_class Implementation. 
Method Addition1. 
g_c = g_a + g_b + 10. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Parameters: P_a Type I, P_b TYPE I. 
Data: H_Addition1 TYPE I. 
Data: H_Sub TYPE I. 
Data: Ref1 TYPE Ref TO sub_class. 
Create Object Ref1. 
Call Method Ref1Addition1 exporting g_a = P_a 
                                     g_b = P_b
		           Importing g_c = H_Addition1. 
Write:/ H_Addition1.

После выполнения F8, если мы введем значения 9 и 10, приведенный выше код выдаст следующий вывод:

Повторно реализованный OS Sub Class

Redefinition Demo 
29

SAP ABAP — Полиморфизм

Термин полиморфизм буквально означает «много форм». С объектно-ориентированной точки зрения полиморфизм работает в сочетании с наследованием, чтобы сделать возможным взаимозаменяемое использование различных типов в дереве наследования. То есть полиморфизм возникает, когда существует иерархия классов, и они связаны наследованием. Полиморфизм ABAP означает, что вызов метода приведет к выполнению другого метода в зависимости от типа объекта, который вызывает метод.

Следующая программа содержит абстрактный класс «class_prgm», 2 подкласса (class_procedural и class_OO) и класс тестового драйвера «class_type_approach». В этой реализации метод класса ‘start’ позволяет нам отображать тип программирования и его подход. Если вы внимательно посмотрите на сигнатуру метода ‘start’, вы заметите, что он получает параметр импорта типа class_prgm. Однако в событии Start-Of-Selection этот метод вызывался во время выполнения с объектами типа class_procedural и class_OO.

пример

Report ZPolymorphism1. 
CLASS class_prgm Definition Abstract. 
PUBLIC Section. 
Methods: prgm_type Abstract, 
approach1 Abstract. 
ENDCLASS. 

CLASS class_procedural Definition 
Inheriting From class_prgm. 
PUBLIC Section. 
Methods: prgm_type Redefinition, 
approach1 Redefinition. 
ENDCLASS. 

CLASS class_procedural Implementation. 
Method prgm_type. 
Write: 'Procedural programming'. 

EndMethod. Method approach1. 
Write: 'top-down approach'. 

EndMethod. ENDCLASS. 
CLASS class_OO Definition 
Inheriting From class_prgm. 
PUBLIC Section. 
Methods: prgm_type Redefinition, 
approach1 Redefinition. 
ENDCLASS. 

CLASS class_OO Implementation. 
Method prgm_type. 
Write: 'Object oriented programming'. 
EndMethod. 

Method approach1. 
Write: 'bottom-up approach'.
EndMethod. 
ENDCLASS. 

CLASS class_type_approach Definition. 
PUBLIC Section. 
CLASS-METHODS: 
start Importing class1_prgm 
Type Ref To class_prgm. 
ENDCLASS. 

CLASS class_type_approach IMPLEMENTATION. 
Method start. 
CALL Method class1_prgmprgm_type. 
Write: 'follows'. 

CALL Method class1_prgmapproach1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data: class_1 Type Ref To class_procedural, 
class_2 Type Ref To class_OO. 

Create Object class_1. 
Create Object class_2. 
CALL Method class_type_approachstart 
Exporting 

class1_prgm = class_1. 
New-Line. 
CALL Method class_type_approachstart 
Exporting 
class1_prgm = class_2.  

Приведенный выше код производит следующий вывод —

Procedural programming follows top-down approach  
Object oriented programming follows bottom-up approach

Среда выполнения ABAP выполняет неявное сужение приведения во время назначения импортирующего параметра class1_prgm. Эта функция помогает методу start запускаться в общем. Информация динамического типа, связанная с переменной ссылки на объект, позволяет среде выполнения ABAP динамически связывать вызов метода с реализацией, определенной в объекте, на который указывает переменная ссылки на объект. Например, параметр импорта «class1_prgm» для метода «start» в классе «class_type_approach» относится к абстрактному типу, который никогда не может быть создан сам по себе.

Всякий раз, когда метод вызывается с конкретной реализацией подкласса, такой как class_procedural или class_OO, динамический тип ссылочного параметра class1_prgm привязывается к одному из этих конкретных типов. Следовательно, вызовы методов ‘prgm_type’ и ‘подхода1’ ссылаются на реализации, предоставленные в подклассах class_procedural или class_OO, а не на неопределенные абстрактные реализации, представленные в классе ‘class_prgm’.

SAP ABAP — Инкапсуляция

Инкапсуляция — это концепция объектно-ориентированного программирования (ООП), которая связывает воедино данные и функции, которые манипулируют данными, и защищает как от внешнего вмешательства, так и от неправильного использования. Инкапсуляция данных привела к важной ООП-концепции сокрытия данных. Инкапсуляция — это механизм связывания данных и функций, которые их используют, а абстракция данных — это механизм, представляющий только интерфейсы и скрывающий детали реализации от пользователя.

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

Инкапсуляция интерфейсом

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

Давайте рассмотрим инкапсуляцию по интерфейсу. Интерфейс используется, когда нам нужно создать один метод с разными функциональными возможностями в разных классах. Здесь название метода не нужно менять. Один и тот же метод должен быть реализован в разных реализациях классов.

пример

Следующая программа содержит интерфейс inter_1. Мы объявили атрибут и метод method1. Мы также определили два класса, такие как Class1 и Class2. Таким образом, мы должны реализовать метод ‘method1’ в обеих реализациях класса. Мы реализовали метод method1 по-разному в разных классах. В начале выбора мы создаем два объекта Object1 и Object2 для двух классов. Затем мы вызываем метод различными объектами, чтобы получить функцию, объявленную в отдельных классах.

Report ZEncap1. 
Interface inter_1.
   Data text1 Type char35.
   Methods method1.
EndInterface.

CLASS Class1 Definition.
   PUBLIC Section.
      Interfaces inter_1.
ENDCLASS. 

CLASS Class2 Definition.
   PUBLIC Section.
      Interfaces inter_1. 
ENDCLASS.

CLASS Class1 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 1 Interface method'.
      Write / inter_1~text1.
   EndMethod. 
ENDCLASS.
 
CLASS Class2 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 2 Interface method'.
      Write / inter_1~text1.
   EndMethod. 
ENDCLASS.
 
Start-Of-Selection.
   Data: Object1 Type Ref To Class1,
      Object2 Type Ref To Class2.
		
   Create Object: Object1, Object2.
   CALL Method: Object1inter_1~method1,
                Object2inter_1~method1. 

Приведенный выше код производит следующий вывод —

Class 1 Interface method 
Class 2 Interface method

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

Разработка стратегии

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

SAP ABAP — Интерфейсы

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

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

Ниже приведен общий формат для создания интерфейса:

INTERFACE <intf_name>. 
DATA..... 
CLASS-DATA..... 
METHODS..... 
CLASS-METHODS..... 
ENDINTERFACE.

В этом синтаксисе <intf_name> представляет имя интерфейса. Операторы DATA и CLASSDATA могут использоваться для определения экземпляра и статических атрибутов интерфейса соответственно. Операторы METHODS и CLASS-METHODS могут использоваться для определения экземпляра и статических методов интерфейса соответственно. Поскольку определение интерфейса не включает в себя класс реализации, нет необходимости добавлять предложение DEFINITION в объявление интерфейса.

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

Мы используем следующий синтаксис в части реализации класса —

INTERFACE <intf_name>. 

В этом синтаксисе <intf_name> представляет имя интерфейса. Обратите внимание, что этот синтаксис должен использоваться в открытом разделе класса.

Следующий синтаксис используется для реализации методов интерфейса внутри реализации класса:

METHOD <intf_name~method_m>. 
<statements>. 
ENDMETHOD.

В этом синтаксисе <intf_name ~ method_m> представляет полностью объявленное имя метода интерфейса <intf_name>.

пример

Report ZINTERFACE1. 
INTERFACE my_interface1. 
Methods msg. 
ENDINTERFACE. 

CLASS num_counter Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods add_number. 
PRIVATE Section. 
Data num Type I. 
ENDCLASS. 

CLASS num_counter Implementation. 
Method my_interface1~msg. 
Write: / 'The number is', num. 
EndMethod. 

Method add_number. 
ADD 7 TO num. 
EndMethod. 
ENDCLASS. 

CLASS drive1 Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods speed1.
PRIVATE Section.
Data wheel1 Type I. 
ENDCLASS. 

CLASS drive1 Implementation.
Method my_interface1~msg.
Write: / 'Total number of wheels is', wheel1. 
EndMethod. 

Method speed1. 
Add 4 To wheel1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data object1 Type Ref To num_counter. 
Create Object object1. 

CALL Method object1add_number.
CALL Method object1my_interface1~msg.

Data object2 Type Ref To drive1. 
Create Object object2.
 
CALL Method object2speed1. 
CALL Method object2my_interface1~msg. 

Приведенный выше код производит следующий вывод —

The number is 7 
Total number of wheels is 4

В приведенном выше примере my_interface1 — это имя интерфейса, содержащего метод msg. Далее, два класса, num_counter и drive1 определены и реализованы. Оба эти класса реализуют метод «msg», а также специальные методы, которые определяют поведение их соответствующих экземпляров, такие как методы add_number и speed1.

Примечание . Методы add_number и speed1 относятся к соответствующим классам.

SAP ABAP — События объекта

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

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

Событие класса может вызвать метод-обработчик события того же класса с помощью инструкции RAISE EVENT. Для события метод обработчика события может быть определен в том же или другом классе с помощью предложения FOR EVENT, как показано в следующем синтаксисе:

FOR EVENT <event_name> OF <class_name>.

Подобно методам класса, событие может иметь интерфейс параметров, но оно имеет только выходные параметры. Выходные параметры передаются в метод обработчика событий с помощью оператора RAISE EVENT, который получает их в качестве входных параметров. Событие динамически связано с методом-обработчиком в программе с помощью оператора SET HANDLER.

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

пример

REPORT ZEVENT1. 
CLASS CL_main DEFINITION. 
PUBLIC SECTION. 
DATA: num1 TYPE I. 
METHODS: PRO IMPORTING num2 TYPE I. 
EVENTS: CUTOFF. 
ENDCLASS. 

CLASS CL_eventhandler DEFINITION. 
PUBLIC SECTION. 
METHODS: handling_CUTOFF FOR EVENT CUTOFF OF CL_main. 
ENDCLASS. 

START-OF-SELECTION. 
DATA: main1 TYPE REF TO CL_main. 
DATA: eventhandler1 TYPE REF TO CL_eventhandler. 

CREATE OBJECT main1. 
CREATE OBJECT eventhandler1. 

SET HANDLER eventhandler1handling_CUTOFF FOR main1. 
main1PRO( 4 ).
CLASS CL_main IMPLEMENTATION.
METHOD PRO.
num1 = num2.
IF num2  2. 
RAISE EVENT CUTOFF.
ENDIF. 
ENDMETHOD.
ENDCLASS.

CLASS CL_eventhandler IMPLEMENTATION.
METHOD handling_CUTOFF.
WRITE: 'Handling the CutOff'. 
WRITE: / 'Event has been processed'. 
ENDMETHOD. ENDCLASS.

Приведенный выше код производит следующий вывод —

Handling the CutOff 
Event has been processed

SAP ABAP — Программирование отчетов

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

Классический отчет создается с использованием выходных данных в операторе WRITE внутри цикла. Они не содержат никаких подчиненных отчетов. SAP также предоставляет некоторые стандартные отчеты, такие как RSCLTCOP, который используется для копирования таблиц между клиентами, и RSPARAM, который используется для отображения параметров экземпляра.

Эти отчеты состоят только из одного экрана. Мы можем использовать различные события, такие как INITIALIZATON & TOP-OF-PAGE, для создания классического отчета, и каждое событие имеет свою важность при создании классического отчета. Каждое из этих событий связано с определенным действием пользователя и запускается только тогда, когда пользователь выполняет это действие.

Ниже приведена таблица с описанием событий и описаниями.

S.No. Описание события
1

INITIALIZATON

Срабатывает перед отображением экрана выбора.

2

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

Срабатывает после обработки пользовательского ввода на экране выбора. Это событие проверяет пользовательский ввод до выполнения программы. После обработки пользовательского ввода экран выбора остается в активном режиме.

3

START-OF-ВЫБОР

Запускается только после окончания обработки экрана выбора; то есть когда пользователь нажимает значок «Выполнить» на экране выбора.

4

END-OF-ВЫБОР

Срабатывает после выполнения последнего оператора в событии START-OF-SELECTON.

5

ВЕРХ СТРАНИЦЫ

Инициируется первым оператором WRITE для отображения данных на новой странице.

6

END-OF-ПААГ

Запускается для отображения текста в конце страницы в отчете. Обратите внимание, что это событие является последним событием при создании отчета и должно сочетаться с предложением LINE-COUNT оператора REPORT.

INITIALIZATON

Срабатывает перед отображением экрана выбора.

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

Срабатывает после обработки пользовательского ввода на экране выбора. Это событие проверяет пользовательский ввод до выполнения программы. После обработки пользовательского ввода экран выбора остается в активном режиме.

START-OF-ВЫБОР

Запускается только после окончания обработки экрана выбора; то есть когда пользователь нажимает значок «Выполнить» на экране выбора.

END-OF-ВЫБОР

Срабатывает после выполнения последнего оператора в событии START-OF-SELECTON.

ВЕРХ СТРАНИЦЫ

Инициируется первым оператором WRITE для отображения данных на новой странице.

END-OF-ПААГ

Запускается для отображения текста в конце страницы в отчете. Обратите внимание, что это событие является последним событием при создании отчета и должно сочетаться с предложением LINE-COUNT оператора REPORT.

пример

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

REPORT ZREPORT2 
LINE-SIZE 75 
LINE-COUNT 30(3) 
NO STANDARD PAGE HEADING. 
Tables: MARA. 
TYPES: Begin of itab, 

MATNR TYPE MARA-MATNR, 
MBRSH TYPE MARA-MBRSH, 
MEINS TYPE MARA-MEINS, 
MTART TYPE MARA-MTART, 

End of itab. 

DATA: wa_ma TYPE itab,
      it_ma TYPE STANDARD TABLE OF itab.
		
SELECT-OPTIONS: MATS FOR MARA-MATNR OBLIGATORY. 
INITIALIZATION. 
MATS-LOW = '1'. 
MATS-HIGH = '500'. 

APPEND MATS. 
AT SELECTION-SCREEN. .
IF MATS-LOW = ' '. 
MESSAGE I000(ZKMESSAGE). 
ELSEIF MATS-HIGH = ' '. 
MESSAGE I001(ZKMESSAGE). 
ENDIF. 

TOP-OF-PAGE. 
WRITE:/ 'CLASSICAL REPORT CONTAINING GENERAL MATERIAL DATA  
FROM THE TABLE MARA' COLOR 7. 
ULINE. 
WRITE:/ 'MATERIAL' COLOR 1, 

24 'INDUSTRY' COLOR 2, 
38 'UNITS' COLOR 3, 
53 'MATERIAL TYPE' COLOR 4. 
ULINE. 
END-OF-PAGE. 

START-OF-SELECTION. 
SELECT MATNR MBRSH MEINS MTART FROM MARA  
INTO TABLE it_ma WHERE MATNR IN MATS. 
LOOP AT it_ma into wa_ma. 
WRITE:/  wa_ma-MATNR, 

25 wa_ma-MBRSH, 
40 wa_ma-MEINS, 
55 wa_ma-MTART. 
ENDLOOP. 
END-OF-SELECTION. 

ULINE. 
WRITE:/ 'CLASSICAL REPORT HAS BEEN CREATED' COLOR 7.
ULINE. 
SKIP. 

Приведенный выше код создает следующий вывод, содержащий общие данные материала из стандартной таблицы MARA —

Программирование отчетов

SAP ABAP — диалоговое программирование

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

Вот основные компоненты диалоговых программ —

  • Экраны
  • Модульные бассейны
  • подпрограммы
  • меню
  • операции

Набор инструментов

Toolset

Диалоговые программы должны разрабатываться браузером объектов (транзакция: SE80), чтобы все объекты становились связанными с основной программой без необходимости явно указывать каждый объект. Продвинутые методы навигации улучшают процесс перехода от одного объекта к другому.

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

Создание новой диалоговой программы

Шаг 1 — В транзакции SE80 выберите «Программа» из выпадающего списка и введите имя Z для своей пользовательской программы SAP как «ZSCREENEX».

Шаг 2 — Нажмите Enter, выберите «With TOP INCL» и нажмите кнопку «Да».

Создание новой диалоговой программы

Шаг 3 — Введите название вашего топа, включающее «ZSCRTOP», и нажмите зеленую галочку.

Шаг 4 — На экране атрибутов просто введите заголовок и нажмите кнопку сохранения.

Добавление экрана в программу диалога

Шаг 1. Чтобы добавить экран в программу, щелкните правой кнопкой мыши имя программы и выберите «Создать» → «Экран».

Шаг 2 — Введите номер экрана как «0211» и нажмите зеленую галочку.

Добавить экран в диалог

Шаг 3 — На следующем экране введите короткий заголовок, установите обычный тип экрана и нажмите кнопку «Сохранить» на верхней панели инструментов приложения.

Расположение экрана и добавление текста «Hello World»

Шаг 1 — Нажмите кнопку макета на панели инструментов приложения, и появится окно Screen Painter.

Шаг 2 — Добавьте текстовое поле и введите текст, например «Hello World».

Добавить Hello World

Шаг 3 — Сохраните и активируйте экран.

Создание транзакции

Шаг 1 — Чтобы создать код транзакции для вашей программы, просто щелкните правой кнопкой мыши на имени программы и выберите опцию Создать → Транзакция и введите код транзакции как «ZTRANEX».

Создание транзакции

Шаг 2. Введите текст транзакции, программу и экран, который вы только что создали (ZSCREENEX & 0211), и отметьте флажок «SAPGUI для Windows» в разделе «Поддержка GUI».

Выполнение программы

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

Выполнение программы

SAP ABAP — Smart Forms

Инструмент SAP Smart Forms можно использовать для печати и отправки документов. Этот инструмент полезен при разработке форм, файлов PDF, электронных писем и документов для Интернета. Инструмент предоставляет интерфейс для построения и поддержки макета и логики формы. SAP также предоставляет выбор форм для бизнес-процессов, таких как те, которые используются в Управлении взаимоотношениями с клиентами (CRM), Сбыте (SD), Финансовом учете (FI) и Кадрах (HR).

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

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

Ниже приведены некоторые примеры стандартных смарт-форм, доступных в системе SAP.

  • SF_EXAMPLE_01 представляет счет-фактуру с выходной таблицей для бронирования рейса для клиента.

  • SF_EXAMPLE_02 представляет счет-фактуру, аналогичный SF_EXAMPLE_01, но с промежуточными итогами.

  • SF_EXAMPLE_03 указывает счет-фактуру, подобный счету SF_EXAMPLE_02, но тот, в котором несколько клиентов могут быть выбраны в прикладной программе.

SF_EXAMPLE_01 представляет счет-фактуру с выходной таблицей для бронирования рейса для клиента.

SF_EXAMPLE_02 представляет счет-фактуру, аналогичный SF_EXAMPLE_01, но с промежуточными итогами.

SF_EXAMPLE_03 указывает счет-фактуру, подобный счету SF_EXAMPLE_02, но тот, в котором несколько клиентов могут быть выбраны в прикладной программе.

Создание формы

Давайте создадим форму с помощью инструмента SAP Smart Forms. Вы также узнаете, как добавить узел в смарт-форму и протестировать форму в этом руководстве. Здесь мы начнем с создания копии формы SF_EXAMPLE_01. Форма SF_EXAMPLE_01 — это стандартная интеллектуальная форма, доступная в системе SAP.

Шаг 1 — Smart Form Builder — это основной интерфейс, используемый для создания Smart Form. Он доступен на первом экране SAP Smart Forms. Нам нужно ввести код транзакции «SMARTFORMS» в поле «Команда», чтобы открыть начальный экран SAP Smart Forms. На этом экране введите имя формы SF_EXAMPLE_01 в поле «Форма».

Шаг 2. Выберите «Умные формы» → «Копировать» или щелкните значок «Копировать», чтобы открыть диалоговое окно «Копировать форму или текст».

Шаг 3 — В поле Целевой объект введите имя для новой формы. Имя должно начинаться с буквы Y или Z. В этом случае имя формы — «ZSMM1».

SAP Smart Form

Шаг 4 — Щелкните значок «Продолжить» или нажмите клавишу ВВОДА в диалоговом окне «Копировать форму или текст», чтобы форма ZSMM1 была создана как копия предварительно определенной формы SF_EXAMPLE_01.

Шаг 5 — Нажмите значок Сохранить. Имя формы отображается в поле «Форма» на первом экране SAP Smart Forms.

Шаг 6 — Нажмите кнопку Создать на начальном экране SAP Smart Forms. Форма ZSMM1 появится в построителе форм.

Шаг 7 — Первая черновая страница создается с ОСНОВНЫМ окном. Все компоненты новой формы основаны на предопределенной форме SF_EXAMPLE_01. Вы можете просто щелкнуть узел в меню навигации, чтобы просмотреть его содержимое.

SAP Form Builder

Создание текстового узла в форме

Шаг 1 — Откройте форму в режиме изменения экрана SAP Form Builder, щелкните правой кнопкой мыши опцию «Главное окно» в узле «Первая страница» и выберите «Создать» → «Текст» в контекстном меню.

Шаг 2 — Измените текст в поле «Текст» на «My_Text», а текст в поле «Значение» на «Text_Demo». Введите текст «Hello TutorialsPoint …..» в поле для редактирования текста в центральной рамке Form Builder, как показано на следующем снимке —

Создать текстовый узел

Шаг 3 — Нажмите кнопку Сохранить, чтобы сохранить узел.

Шаг 4 — Активируйте и протестируйте узел, нажав значки «Активировать» и «Тест», соответственно. Появится начальный экран Function Builder.

Шаг 5 — Активируйте и протестируйте функциональный модуль, нажав значки «Активировать и выполнить». Параметры функционального модуля отображаются на начальном экране Function Builder.

Шаг 6 — Запустите функциональный модуль, щелкнув значок «Выполнить». Откроется диалоговое окно «Печать».

Шаг 7 — Укажите устройство вывода как «LP01» и нажмите кнопку «Предварительный просмотр».

Вышеуказанные шаги приведут к следующему выводу:

Предварительный просмотр

SAP ABAP — SAP-скрипты

Инструмент SAPscript системы SAP можно использовать для создания и управления такими бизнес-формами, как счета и заказы на покупку. Инструмент SAPscript предоставляет множество шаблонов, которые в значительной степени упрощают проектирование бизнес-формы.

Система SAP поставляется со стандартными формами SAPscript, которые поставляются со стандартным клиентом SAP (как правило, как клиент 000). Ниже приведены несколько примеров стандартных форм SAPscript, поставляемых с клиентом 000 —

S.No. Название формы и описание
1

RVORDER01

Форма подтверждения заказа клиента

2

RVDELNOTE

Товарная накладная

3

RVINVOICE01

Счет-фактура

4

MEDRUCK

Заказ на покупку

5

F110_PRENUM_CHCK

Предварительно пронумерованный чек

RVORDER01

Форма подтверждения заказа клиента

RVDELNOTE

Товарная накладная

RVINVOICE01

Счет-фактура

MEDRUCK

Заказ на покупку

F110_PRENUM_CHCK

Предварительно пронумерованный чек

Структура формы SAPscript состоит из 2 основных компонентов:

Контент — это может быть текст (бизнес-данные) или графика (логотип компании).

Макет — это определяется набором окон, в которых отображается содержимое формы.

SAPscript — Инструмент для рисования форм

Инструмент Form Painter предоставляет графический макет формы SAPscript и различные функции для управления формой. В следующем примере мы собираемся создать форму счета-фактуры после копирования ее структуры макета из стандартной формы SAPscript RVINVOICE01 и отобразить ее макет с помощью инструмента Form Painter.

Шаг 1 — Откройте форму Painter. Вы можете запросить экран либо с помощью меню SAP, либо с помощью кода транзакции SE71.

Шаг 2. В окне «Создание формы» на экране запроса введите имя и язык для формы SAPscript в полях «Форма» и «Язык» соответственно. Давайте введем ‘RVINVOICE01’ и ‘EN’ соответственно в этих полях.

Форма Painter Request

Шаг 3 — Установите переключатель «Макет страницы» в групповом поле «Подобъекты».

Шаг 4 — Выберите Утилиты → Скопировать из клиента, чтобы создать копию формы RVINVOICE01. Появится экран «Копировать формы между клиентами».

Шаг 5 — На экране «Копировать формы между клиентами» введите оригинальное имя формы «RVINVOICE01» в поле «Имя формы», номер исходного клиента «000» в поле «Исходный клиент» и имя целевая форма как «ZINV_01» в поле «Целевая форма». Убедитесь, что другие настройки остаются без изменений.

Скопировать форму между клиентом

Шаг 6 — Затем нажмите значок «Выполнить» на экране «Копирование форм между клиентами». Откроется диалоговое окно «Создать запись каталога объектов». Нажмите значок Сохранить.

Форма ZINV_01 копируется из формы RVINVOICE01 и отображается на экране «Копировать формы между клиентами», как показано на следующем снимке:

Скопировать форму между клиентом

Шаг 7 — Дважды щелкните значок «Назад» и вернитесь к экрану «Исполнитель форм: Запрос», который содержит имя скопированной формы ZINV_01.

Шаг 8 — После нажатия кнопки «Показать» откроется окно «Форма ZINV_01: макет страницы ПЕРВАЯ» и экран «Форма: Изменить макет страницы: ZINV_01», как показано на следующем снимке экрана.

Макет страницы

Шаг 9 — Окно «Форма ZINV_01: Макет страницы ПЕРВЫЙ» показывает начальный макет формы. Макет формы содержит пять окон: HEADER, ADDRESS, INFO, INFO1 и MAIN. Описание этих окон доступно в редакторе ПК.

Например, просто выбрав ОСНОВНОЕ окно и щелкнув значок «Текст» на экране «Форма: Изменить макет страницы: ZINV_01», вы можете просмотреть все значения полей, как показано на следующем снимке экрана:

Изменить макет страницы

SAP ABAP — клиентские выходы

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

Клиентские выходы для стандартных транзакций

Ниже приведены шаги по поиску клиентских выходов в отношении стандартных транзакций. Давайте определим клиентские выходы, доступные в MM01 (Создание основной записи материала).

Создание Материального Мастера

Шаг 1 — Перейдите к транзакции MM01 и определите имя программы MM01, выбрав Строка меню → Система → Состояние, как показано на снимке экрана выше.

Шаг 2 — Получить название программы из всплывающего экрана. Название программы — «SAPLMGMM».

Шаг 3 — Перейдите к транзакции SE38, введите имя программы и нажмите «Показать».

Шаг 4 — Перейдите в Перейти к → Свойства и найдите пакет с названием этой программы.

Функциональный бассейн

Название пакета — «MGA».

Шаг 5 — Перейдите к коду транзакции SMOD, который обычно используется для определения выхода клиента. Перейдите к Утилиты → Найти (или), вы можете напрямую нажать Ctrl + F на код транзакции SMOD.

Шаг 6 — После перехода на экран «Найти выходы» введите имя пакета, которое мы получили ранее, и нажмите кнопку F8 (Выполнить).

Найти выходы

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

Найти выход

SAP ABAP — пользовательские выходы

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

Чтобы получить доступ к тем выходам, которые доступны в каждой области продаж, перейдите к IMG, используя этот путь: IMG → Сбыт → Модификации системы → Выход пользователя. Документация для каждого выхода в области SD подробно объясняется.

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

S.No. Выход пользователя и описание
1

USEREXIT_FIELD_MODIFICATION

Используется для изменения атрибутов экрана.

2

Userexit_save_document

Помогает в выполнении операций, когда пользователь нажимает Сохранить.

3

USEREXIT_SAVE_DOCUMENT_PREPARE

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

4

USEREXIT_MOVE_FIELD_TO_VBAK

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

5

USEREXIT_MOVE_FIELD_TO_VBAP

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

USEREXIT_FIELD_MODIFICATION

Используется для изменения атрибутов экрана.

Userexit_save_document

Помогает в выполнении операций, когда пользователь нажимает Сохранить.

USEREXIT_SAVE_DOCUMENT_PREPARE

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

USEREXIT_MOVE_FIELD_TO_VBAK

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

USEREXIT_MOVE_FIELD_TO_VBAP

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

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

пример

REPORT ZUSEREXIT1. 
TABLES:   
   TSTC, TSTCT,
   TADIR, TRDIR, TFDIR, ENLFDIR,
   MODSAPT, MODACT. 
	
DATA:   
   JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE,
   field1(30),
   v_devclass LIKE TADIR-devclass. 
	
PARAMETERS:
   P_TCODE LIKE TSTC-tcode OBLIGATORY. 
	
SELECT SINGLE *
   FROM TSTC
   WHERE tcode EQ P_TCODE. 
	
IF SY-SUBRC EQ 0.
   SELECT SINGLE *
   FROM TADIR
	
   WHERE pgmid = 'R3TR' AND 
         object = 'PROG' AND
         obj_name = TSTC-pgmna.
		
   MOVE TADIR-devclass TO v_devclass.
	
   IF SY-SUBRC NE 0.
   SELECT SINGLE * 
      FROM TRDIR
      WHERE name = TSTC-pgmna.
		
   IF TRDIR-subc EQ 'F'.
      SELECT SINGLE *
         FROM TFDIR
         WHERE pname = TSTC-pgmna.
			
      SELECT SINGLE *
         FROM ENLFDIR 
         WHERE funcname = TFDIR-funcname.
			
      SELECT SINGLE * 
         FROM TADIR
         WHERE pgmid = 'R3TR' AND
               object = 'FUGR' AND 
               obj_name EQ ENLFDIR-area.
         MOVE TADIR-devclass TO v_devclass.
      ENDIF.
   ENDIF.
	
   SELECT *
      FROM TADIR
      INTO TABLE JTAB
		
      WHERE pgmid = 'R3TR' AND
            object = 'SMOD' AND
            devclass = v_devclass.
			
   SELECT SINGLE *
      FROM TSTCT
      WHERE sprsl EQ SY-LANGU AND
            tcode EQ P_TCODE.
			
   FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
   WRITE:/(19) 'Transaction Code - ', 
      20(20) P_TCODE,
      45(50) TSTCT-ttext.
   SKIP.
	
   IF NOT JTAB[] IS INITIAL.
      WRITE:/(95) SY-ULINE.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.
		
      WRITE:/1 SY-VLINE, 
            2 'Exit Name',
            21 SY-VLINE , 
            22 'Description',
            95 SY-VLINE.
			
      WRITE:/(95) SY-ULINE.
      LOOP AT JTAB.
         SELECT SINGLE * FROM MODSAPT
         WHERE sprsl = SY-LANGU AND
               name = JTAB-obj_name.
				
         FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
         WRITE:/1 SY-VLINE,
               2 JTAB-obj_name HOTSPOT ON,
               21 SY-VLINE ,
               22 MODSAPT-modtext,
               95 SY-VLINE.
      ENDLOOP.
		
      WRITE:/(95) SY-ULINE.
      DESCRIBE TABLE JTAB.
      SKIP.
      FORMAT COLOR COL_TOTAL INTENSIFIED ON.
      WRITE:/ 'No of Exits:' , SY-TFILL.
		
   ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(95) 'User Exit doesn’t exist'.
   ENDIF. 
ELSE.

   FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
   WRITE:/(95) 'Transaction Code Does Not Exist'. 
ENDIF.
 
AT LINE-SELECTION.
   GET CURSOR FIELD field1.
   CHECK field1(4) EQ 'JTAB'.
   SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
   CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN. 

Во время обработки введите код транзакции «ME01» и нажмите кнопку F8 (Выполнить). Приведенный выше код производит следующий вывод —

Код транзакции ‘ME01

SAP ABAP — бизнес-надстройки

В некоторых случаях специальные функции должны быть предварительно определены в программном приложении для улучшения функциональности различных приложений. Существует множество надстроек Microsoft Excel для улучшения функциональности MS Excel. Аналогично, SAP облегчает некоторые предопределенные функции, предоставляя бизнес-надстройки, известные как BADI.

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

Техника BADI отличается от других техник улучшения двумя способами:

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

Техника улучшения

Вы также можете создать фильтры BADI, что означает, что BADI определяются на основе отфильтрованных данных, что невозможно при использовании методов улучшения. Концепция BADI была переопределена в SAP Release 7.0 со следующими целями:

  • Расширение стандартных приложений в системе SAP путем добавления двух новых элементов на языке ABAP, а именно «GET BADI» и «CALL BADI».

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

Расширение стандартных приложений в системе SAP путем добавления двух новых элементов на языке ABAP, а именно «GET BADI» и «CALL BADI».

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

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

Следовательно, BADI может рассматриваться как метод расширения, использующий объекты ABAP для создания «предопределенных точек» в компонентах SAP. Эти предопределенные пункты затем реализуются отдельными отраслевыми решениями, вариантами стран, партнерами и клиентами в соответствии с их конкретными требованиями. SAP фактически внедрила технику улучшения BADI в Выпуске 4.6A, и этот метод был повторно реализован в Выпуске 7.0.

SAP ABAP — Web Dynpro

Web Dynpro (WD) для ABAP — это стандартная технология пользовательского интерфейса SAP, разработанная SAP AG. Его можно использовать при разработке веб-приложений в среде SAP ABAP, в которой используются инструменты и концепции разработки SAP. Он предоставляет интерфейсный веб-интерфейс пользователя для прямого подключения к внутренним системам SAP R / 3 для доступа к данным и функциям для составления отчетов.

Web Dynpro для ABAP состоит из среды выполнения и графической среды разработки со специальными инструментами разработки, интегрированными в ABAP Workbench (транзакция: SE80).

Архитектура Web Dynpro

На следующем рисунке показана общая архитектура Web Dynpro —

Web Dynpro

Вот несколько моментов, которые следует иметь в виду относительно Web Dynpro:

  • Web Dynpro — это модель программирования SAP NetWeaver для пользовательских интерфейсов.

  • Все приложения Web Dynpro структурированы в соответствии с моделью программирования Model View Controller (MVC).

  • Модель определяет интерфейс с основной системой, и приложение Web Dynpro может иметь доступ к системным данным.

  • Представление отвечает за отображение данных в веб-браузере.

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

Web Dynpro — это модель программирования SAP NetWeaver для пользовательских интерфейсов.

Все приложения Web Dynpro структурированы в соответствии с моделью программирования Model View Controller (MVC).

Модель определяет интерфейс с основной системой, и приложение Web Dynpro может иметь доступ к системным данным.

Представление отвечает за отображение данных в веб-браузере.

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

преимущества

Web Dynpro предлагает следующие преимущества для разработчиков приложений —

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

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

  • Расположение и навигация легко изменяются с помощью инструментов Web Dynpro.

  • Доступность интерфейса пользователя поддерживается.

  • Полная интеграция в среду разработки ABAP.

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

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

Расположение и навигация легко изменяются с помощью инструментов Web Dynpro.

Доступность интерфейса пользователя поддерживается.

Полная интеграция в среду разработки ABAP.

Компонент и окно Web Dynpro

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

По крайней мере одно окно Web Dynpro содержится в каждом компоненте Web Dynpro. Окно Web Dynpro встраивает все представления, отображаемые в интерфейсном веб-приложении. Окно обрабатывается в оконных редакторах ABAP Workbench.

Заметка

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

Приложение Web Dynpro является независимым объектом в списке объектов ABAP Workbench. Взаимодействие между окном и приложением создается интерфейсным представлением данного окна.