Тонкости в ABAP-редакторе
Исправление регистра
В редакторе кода есть кнопка “Структурная печать”.
По умолчанию она выправляет отступы в тексте, однако там есть ещё опция преобразования регистра. Если душа лежит к одному из этих подходов – вперёд и с песней.
Вот наблюдаем некоторый бардак:
А вот что стало после обработки:
Хитрый поиск
В окне поиска есть галочка “Регулярные выражения”:
По регулярным выражениям можно учебники писать, однако краткая вводная информация доступна по пумпочке справа от искомого текста. Можете дополнительно полистать документацию, но не обязательно саповскую – регулярные выражения (Regular Expressions, RegExp, регэкспы) используются в огромном количестве других систем в разных вариациях.
Вот несколько примеров, которые обычным поиском просто не решаются:
Поиск всех слов, начинающихся на букву Z:
\<Z\w*\>
Поиск всех “слов” из трёх знаков:
\<…\>
Поиск строк – любых вариантов из списка (bsis, bsas, bsik, bsak, bsid, bsad):
bs[ia][dks]
Внесистемная группировка данных
В практике программирования бывает необходимость выделить несколько однородных карточек в особую группу. Счета главной книги для особого использования, группа контрагентов входящих в особый “холдинг”, список материалов-синонимов и так далее.
Хорошо, если такую группировку получается легко реализовать на базе самих карточек.
Один из универсальных подходов – применение наборов (используются в Report Writer). Здесь особо без разницы, какие именно карточки хотите сгруппировать – тип данных можно указать вручную.
Ccылки на транзакции и настройки из браузера
Немного хитрости и смекалки позволяют делать прямые ссылки на транзакции и объекты настроек в SAP.
Стоит только щёлкнуть по ссылке на сайте или в документе, и в SAPGUI открывается нужная транзакция или раздел.
Баловство без реальной необходимости, хотя…
Вот ниже вполне работоспособные ссылки (на моём компьютере):
Параметры в ABAP
Параметры можно рассматривать как некоторый способ неявной передачи данных из одной программы в другую. Нечто вроде “MEMORY ID”, только с более человеческим лицом.
Справочники большие и маленькие
Отдельная таблица
Целый спектр возможность открывается, если использовать Z-таблицы в качестве справочников. Однако, если дать разработчикам полную свободу, то засилье Z-таблиц рано или поздно приведёт к “мусорке”, в которой трудно найти что-либо нужное.
Здесь самое главное предварительно определиться, действительно ли нужен отдельный справочник в конкретном случае. Во многих случая допустимо:
Управление городами
Справочник городов является настроечными данными. Новые создаваемые города попадают в запрос.
Основной таблицей этого справочника является ADRCITY. Средство поиска для собственного употребления – например: CITY_NAME.
В SPRO есть раздел Города в Управлении адресами – SPRO:F999CC4C918CD21197EA0060B0672A3C
Основные транзакции по созданию/изменению/просмотру городов – это SR10/SR11/SR12.
Вот пример, как выглядит окно изменения:
Надо только определиться с диапазоном номеров (подобрать оптимальный подход) – внешний(согласовать формат) или внутренний.
Если вдруг вам нужно удалить город, то тут не всё так просто – есть отчёт SE38:RSADRLSM01, который удаляет в рамках страны все данные (города, индексы, улицы).
Определение корреспонденции в главной книге
Сталкивался с ручной интерпретацией определения корреспонденции.
- Для определения допустимой и запрещённой корреспонденции
- Для получения отчётов по корреспонденции (журнал-ордер)
- Для передачи документов в систему, в которой используются только пары Дт-Кт
До этого такие функции я видел только в Z-разработках, но есть, оказывается, в стандарте кое-что вокруг этого.
Пример с радио-группами
Сегодня — формулировка об унификации селективных экранов. О, да… это тоже борьба с энтропией.
Исключающие параметры
Часто бывает, что некоторые параметры образуются в некоторые взаимоисключающие группы. То есть в данном примере: следует заполнять или первое+второе поле, или третье+четвёртое поле.
В дополнение к таком селективному экрану можно написать обработчик, который будет выдавать ошибку вида “параметры А и Б не следует заполнять при заполненных параметрах В и Г”. Вариант суров и неоднозначен.
В качестве более красивого решения можно предложить разбавить эти параметры с помощью радиогруппы.
Параметры к параметру
Вот чуть-чуть другой пример. Радиогруппа уже есть, но некоторые параметры имеют смысл только для определённых пунктов.
Реализация
Во-первых, следует сделать пару добавок в описание селективного экрана:
Добавка “USER-COMMAND flag” требуется только для первого элемента в группе. Цель этой добавки – срабатывание PBO при выборе опции (щелчок мыши).
Добавка “MODIF ID OP1” требуется для группировки полей, чтобы “отвязаться” от количества и имён полей в обработчике экрана.
А во-вторых, добавляем обработчик экрана:
Этот обработчик по сути говорит:
- Для группы полей OP1: При включенной опции rg_opt1 – требуется включить ввод, иначе — выключить ввод
- Для группы полей OP2: При включенной опции rg_opt2 – требуется включить ввод, иначе — выключить ввод
Ничего сложного, а пользователю, надеюсь, будет немного понятней.
Впрочем, это только один из вариантов…
Кодекс чести
Перевод статьи Code of Honour за авторством Jens Steckhan (SAP).
Что общего между самураем, клингонцем и работником SAP?
Кодекс чести.
Я хочу написать об элементах, которые приносят удовлетворение и радость в мою жизнь разработчика.
Я открыл для себя, что большинство людей, с которыми я имел честь работать, придерживаются неписанного кодекса, немного похожего на Кодекс самурая. Позвольте мне его изложить: