:::: МЕНЮ ::::
Просмотр публикаций в рубрике: Динамическое программирование

Сериализация данных и типов данных

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

  • В формате XML через CALL TRANSFORMATION
  • В формате JSON через класс /UI2/CL_JSON
  • В кластер данных через оператор EXPORT

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

Читать дальше…

Доступ к приватным атрибутам класса

В языке ABAP есть реализация паттерна «снимок» (Memento), цель которого сохранять и восстанавливать состояния объектов. Под состоянием понимается значения всех его атрибутов. Используя данный паттерн можно считать PROTECTED и PRIVATE атрибуты и изменять из значения в произвольном объекте.

Читать дальше…

Определение имени поля по его значению

В функциях (пригодных для повторного применения) анализа и обработки данных во внутренних таблиц необходимо знать лишь часть данных о таблицах: саму таблицу и имена тех полей, которые нужно обрабатывать. Возникает вопросы: «Каким должен быть интерфейс функции?» и «Как типизировать параметры?». Интерфейсы для внутренних таблиц еще не изобрели, поэтому в параметрах функции должна передаваться обрабатываемая таблица и названия полей для обработки.
Передача имена полей через параметры через параметры накладывает ряд ограничений. Любые действия с изменением структуры (переименование или удаление полей) будет требовать особой осторожности, так как в журнале использования поля отображаться не будут. Эта задача является примером, когда требуется определить названия поля структуры.
В общем случае постановка задачи звучит следующим образом: имеется структура LS_STRUCT. Требуется написать функцию, которая по значению поля будет возвращать его имя. То есть, при LS_STRUCT-SOME_FIELD вернет строку с содержимым SOME_FIELD.
Читать дальше…


Z-программа для редактирования таблиц БД

В предыдущем посте рассматривались стандартные способы редактирования таблиц БД. Однако, политика некоторых компаний категорически запрещает использовать стандартные механизмы редактирования таблиц за исключением создания ракурсов ведения. Работая в одной транспортной компании я испытывал подобные трудности. Мне часто приходилось редактировать настроечные таблицы без ракурсов ведения. Установка флагов GD-EDIT и GD-SAPEDIT в SE16N не давало результата, функциональный модуль SE16N_INTERFACE был закрыт для использования. Эти ограничения мотивировали меня написать аналог SE16N.
Экран выбора таблицы
Экран выбора таблицы
Ограничение начальных данных
Ограничение начальных данных
Сохранение данных
Сохранение изменённых записей

Читать дальше…


Автоматический пересчет данных в разрезе выбранных полей ALV Grid

ALV Grid позволяет пользователю отображать отчет в желаемом виде. Пользователю доступны такие операции как: отображение или скрытие указанных полей, изменение порядка вывода столбцов. Зачастую, при изменении списка отображаемых полей, заказчик хочет видеть пересчет данных в разрезе отображаемых столбцов. Ниже описан способ автоматического пересчета данных в таблице, на основе каталога полей ALV Grid.
Читать дальше…


Динамическая генерация селекционного экрана

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


Заполнение справочных полей таблицы по ключу

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

Поля таблицы можно классифицировать на справочные и не справочные. К первой группе относятся: bukrs_txt, werks_txt, matnr_txt. Ко второй остальные. Для каждого справочного поля имеется соответствующий ключ, по которому можно однозначно определить значение справочного поля. Например, ключом поля bukrs_txt будет bukrs, т.к. для определения наименования БЕ необходимо знать код БЕ. Как правило, заполнение справочных полей значениям происходит в последнюю очередь.
Задача: заполнить справочные поля по соответствующим ключам, используя при этом минимальные ресурсные затраты.
Читать дальше…


Динамическая проверка процедуры на существование

Сразу скажу что такая задача возникает крайне редко. Проверить процедуру на существование можно путем ее вызова и анализа последующего исключения. Вызов процедуры осуществляется командой PERFORM (proc) IN PROGRAM (prog), а чтобы при вызове не выполнять ее код, необходимо вызвать ее с заведомо ложной сигнатурой.
Читать дальше…