Найти пересечения периодов. Оператор PROVIDE

Очень часто в HR необходимо найти все пересечения ИТ т.е. те периоды в которых данные ТН остаются неизменны. Для этого существует оператор PROVIDE .

PROVIDE FIELDS {*|{comp1 comp2 ...}}
               FROM itab1 INTO wa1 VALID flag1
               BOUNDS intliml1 AND intlimu1
               [WHERE log_exp1]
        FIELDS {*|{comp1 comp2 ...}}
               FROM itab2 INTO wa2 VALID flag2
               BOUNDS intliml2 AND intlimu2
               [WHERE log_exp2]
               ...
        BETWEEN extliml AND extlimu
        [INCLUDING GAPS].
  ...
ENDPROVIDE.

Читать далее «Найти пересечения периодов. Оператор PROVIDE»

Совместно используемые объекты ABAP Shared Object

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

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

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

Транзакция SHMA - работа с областями Общей памяти.

Читать далее «Совместно используемые объекты ABAP Shared Object»

Сравнение версий объекта в разных системах

Столкнулся с тем, что не все знают как это делать. Ну, что же, возможно, кому-то пригодится.

  1. Заходим в наш объект, например, в программу в SE38

2. Попадаем на вкладку с версиями. Здесь мы можем Сравнивать версии объекты, восстанавливать прошлые.
Для того чтобы произвести сравнение с другой системой нужно нажать кнопку "Remote-сравнение"

3. В открывшемся окошке выбираем целевую систему из списка

Далее откроется окно с выбором версий в целевой системе. Выбираем нужную и еще раз жмем "Remote-сравнение"

4. Получаем примерно такую штуку

Как видно, смотреть различия не очень удобно, но если нажать кнопку "В 1 столбец\Параллельно" все будет в более удобном виде

Дамп по тайм ауту

Если программа вываливается по тайм ауту, то один из способов устранения проблемы( считаем, что оптимизация не возможна) является использование ФМ TH_REDISPATCH .

Также можно изменить параметр 'rdisp/max_wprun_time' в транзакции RZ11. Параметр применяется без перезагрузке сервера.

Пробежать по одинаковым столбцам структуры. Оператор DO – VARYING

Порой возникает необходимость пробежаться по повторяющимся столбцам структуры. Особенно часто эта необходимость бывает при обработке ИТ 0008 и 0041. В таком случае можем использовать оператор DO - VARYING
Для разработчиков в HR это довольно привычный оператор, в других модулях используются гораздо реже. Собственно поэтому и делаю заметку, может быть для кого-нибудь будет полезным.

Много писать не буду, вот пример кода:

Остальное легко найдете в справке.

 

Ошибка в отладчике при одинаковом наименовании глобальных и локальных переменных.

Сегодня прилетел дамп по одной старой разработке. Собственно ошибка была понятна по описанию, суть не в ней. Но чтобы убедиться точно, в правильности выводов по ошибке, решил поставить точку в коде недалеко от строки дампа и посмотреть что да как.
Каково же было мое удивление, что находясь внутри цикла  LOOP AT gt_data ASSIGNING <fs_data>. Field-symbol в отладчике отображался как еще не присвоенный, при этом было видно, что на самом деле с ним было все в порядке. Т.е. проблема была именно в отладчике и именно с <fs_data>. Остальные Field-symbol работали корректно, инклуд активировался без ошибок.

Читать далее «Ошибка в отладчике при одинаковом наименовании глобальных и локальных переменных.»

Пустая таблица в FOR ALL ENTRIES IN

Не все знают и не все помнят, что случается когда таблица указанная в FOR ALL ENTRIES IN окажется пустой. А этот момент очень важно учитывать, как в целях корректной выборки данных, так и в целях оптимизации. Собственно, вся информация есть в справке, но кто ее читает))

Читать далее «Пустая таблица в FOR ALL ENTRIES IN»

JOIN Трех таблиц. Небольшая особенность

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

Прикинув получаем вот такой запрос:

Получаем вот такую выборку:

Как видно из выборки, для строки 8 мы не нашли запись в таблице VEPO. Но так как у нас LEFT JOIN  она все равно попала в выборку.

Теперь, допустим, нам необходимо немного ограничить выборку из таблицы VEPO  и мы делаем INNER JOIN таблиц VEPO И VEKP. При этом, казалось бы строка 8 должна остаться в выборке т.к. соединение таблиц MSPR и VEPO  осталось без изменений и в данном случае, что там у нас случилось с  VEPO,  вообще не должно играть роли. Однако это не так. Как мы видим  в результате, запись с пустым  не найденным VEPO не выбралась.

 

 

AMC – ABAP Messaging Channels

ABAP Messaging Channels - метод связи между ABAP программами с помощью сообщений.

Каналы обмена сообщениями ABAP реализованы в виде объектов репозитория, к которым можно обращаться в программах отправителя и получателя с использованием интерфейса на основе классов (API). Классы и интерфейсы API используют соглашение об именах CL_AMC _... и IF_AMC _... соответственно.

Любой объект данных может быть отправлен путем сериализации в XML отправителем и десериализации получателем.

Длина сообщений, которые могут быть отправлены ограничена примерно 30000 байтами. Символьные строки преобразуются в формат UTF-8.

Читать далее «AMC – ABAP Messaging Channels»

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

 

В предыдущей статье мы рассмотрели SCDO — лог для Z* таблицы было рассмотрено создание логера для отслеживания изменений. Для этого был создан специальный ФМ, который и сохраняет изменения. Однако при ведении через сгенерированные ракурсы ведения он не вызывается. Добавим его туда. Для этого мы будем использовать события в ракурсах.

Добавим в ракурс ведения ZTEST_PAU логирование при добавлении записи.

Читать далее «Логирование изменений таблиц в стандартных ракурсах. События в ракурсах.»