Оперативный запрос. Пользовательские поля

Продолжаем раскрывать тему оперативных запросов. Во второй заметке, относящейся к этой животрепещущей теме, поговорим про добавление пользовательских полей в уже настроенный запрос. Устраиваемся поудобнее: Оперативный запрос. Пользовательские поля

0. Intro

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

См. заметку Оперативный запрос

В данной заметке я планирую рассмотреть одну полезную, если можно так сказать, опцию _расширения _уже настроенного оперативного запроса. Расширение это заключается в добавлении дополнительного поля. Кроме того, для этого поля возможно «навесить» какую-то логику, используя знакомый всем ABAP. Но об этом я расскажу чуть дальше.

Задача: добавить в уже созданный оперативный запрос, работающий с основными данными по персоналу, поле с наименованием Absence Status, в которое требуется выводить информацию либо по фактическому отсутствию работника, либо по запланированному. Например, если у сотрудника в инфо-типе **2001 **заведено отсутствие, пересекающее текущую дату (sy-datum), необходимо вывести текст вида «Absent from XX.XX.XXXX till XX.XX.XXX», если же в инфо-типе 2001 заведено отсутствие позже текущей даты (sy-datum), необходимо вывести текст вида «Will be Absent from XX.XX.XXXX till XX.XX.XXX». Иначе — ничего не выводить. Ну и конечно же отсутствие не должно быть заблокированным.

1. Исходные данные

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

Рисунок 1.

Запрос построен на инфо-наборе ZDEMO_INFOSET, в котором используется три инфо-типа:

  • 0000 - Actions
  • 0001 - Organizational Assignment
  • 0002 - Personal Data

Рисунок 2.

Как раз инфо-набор ZDEMO_INFOSET я и буду изменять.

2. Добавление дополнительного поля в инфо-набор

Последовательность добавления дополнительных полей в оперативные запросы следующая:

  1. Создание/определение дополнительного поля на уровне инфо-набора
  2. Определение логики для дополнительного поля (то есть создание ABAP-кода для нового поля)
  3. «Активация» дополнительного поля для последующей возможности его выбора в оперативных запросах
  4. Генерация инфо-набора
  5. «Активация» дополнительного поля в оперативном запросе
    Создайте поле Absence Status на уровне инфо-набора. Для этого измените существующий инфо-набор с помощью транзакции SQ02

Рисунок 3.

В группе полей Organizational Assignment P0001 кликните правой кнопкой мыши по Additional Fields и выберите Create

Рисунок 4.

Введите техническое наименование нового поля. Я буду использовать наименование Z_ABSENCE. Также активируйте радиокнопку Additional field

Рисунок 5.

Введите дополнительную информацию по создаваемому полю

Рисунок 6.

Сохраните внесенные изменения.

3. Определение логики для дополнительного поля

Раскройте узел Additional fields

Рисунок 7.

Обратите внимание на новое поле, которое было только что добавлено. Кликните по нему правой кнопкой и выберите в меню опцию Field Code

Рисунок 8.

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

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

Обратите внимание на то, что я ищу только два типа отсутствия у работников. А именно: 0100 и 0150. Сгенерируйте инфо-набор нажатием на кнопку 

Рисунок 9.

4. Активация дополнительного поля для возможности его выбора в оперативных запросах

Находясь на том же экране нажмите на кнопку . В правой части экрана вам станут доступны поля, которые можно использовать для последующего выбора в оперативных запросах. Перетащите новое поле в область Field groups/data fields

Рисунок 10.

Для этого, выделите новое дополнительное поле из узла Additional Fields и перетащите его на узел Organizational Assignment

Рисунок 11.

Сгенерируйте инфо-набор еще раз.

5. Активация дополнительного поля в оперативном запросе

С помощью транзакции SQ01 выберите запрос, который создан на базе измененного инфо-набора, и нажмите на кнопку 

Рисунок 12.

В соответствующей группе полей активируйте свойство Output для созданного дополнительного поля

Рисунок 13.

Запустите отчет

Рисунок 14.

Ниже скриншоты инфо-типа 2001 двух сотрудников, по которым было заполнено нового поле:

Рисунок 15.

Относительно даты запуска отчета (sy-datum = 26.10.2016), у одного из них есть отсутствие вида 0100, пересекающее текущую дату, что подходит под условие задачи, поставленной выше, у второго — отсутствие вида 0150, заведенное позже даты формирования отчета, что также удовлетворяет поставленное условие. У остальных сотрудников в инфо-типе 2001 никаких записей нет, поэтому значения в новом поле для них пустое. Поставленная выше задача успешно решена.

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

Read more