Найти пересечения периодов. Оператор 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»

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

Если программа вываливается по тайм ауту, то один из способов устранения проблемы( считаем, что оптимизация не возможна) является использование ФМ 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»

cl_reca_gui_f4_popup – класс для создания справки

cl_reca_gui_f4_popup -   класс обертка позволяющая  быстро выводить средство поиска. Можно использовать как один из вариантов для f4

 

cl_salv_table – быстрый вывод ALV

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

Пример: