Скрываем столбцы в документах оценки

Заголовок, как мне кажется, избыточен. Добавить нечего. Сегодня мы скрываем столбцы в документах оценки.

0. Вступление

Довольно распространенная задача на проектах, где используется функционал документов оценки, скрывать столбцы в зависимости от роли сотрудника (аттестуемый или аттестующий) и статуса/подстатуса документа оценки. Например, на одном статусе сотрудник, проводящий оценку, должен видеть только «свой» столбец, в то время, как аттестуемый сотрудник — должен видеть только «свой» столбец. Сделать это проще, чем кажется на первый взгляд. На помощь функциональному консультанту в решении данной задачи приходит BAdI HRHAP00_COL_ACCESS, небольшое знание ABAP или же программист, а также чувство юмора, так как не представляю, куда же без него.

1. Задача

Сформулирую перед собой следующую задачу: для документа оценки, в котором используется три столбца

  • ZESS - Employee's Value
  • ZMSS - Manager's Value
  • FAPP - Final Appraisal

Пользовательские столбцы можно определить в транзакции OOHAP_BASIC
Необходимо реализовать следующую логику отображения столбцов:

  1. Для сотрудника, проводящего оценку (руководителя), необходимо отборазить только столбец ZMSS, на статусе 4, подстатусе K
  2. Для сотрудника, являющегося аттестуемым, необходимо отобразить только столбец ZESS, на стаусе 4, подстатусе L
  3. Столбец FAPP должен быть скрыт во всех случаях

Пользовательские статусы также можно определить с помощью транзакции OOHAP_BASIC

2. Решение задачи

Вкратце опишу исходные данные формуляра, который будет упоминаться далее по тексту.

Как было указано выше, в формуляре настроено три столбца:

Рисунок 1.

Также определены следующие статусы

Рисунок 2.

Статусы и столбцы были определены с помощью транзакции OOHAP_BASIC:

Рисунок 3.

Одним из основных действий во всем этом процессе — является создание нового внедрения для BAdI HRHAP00_COL_ACCESS и последующее его определение на уровне формуляра аттестации.

В транзакции SE18 создаем новое внедрение, выбрав в меню Enhancement implementation -> Create

Рисунок 4.

Определите наименование нового внедрения

Рисунок 5.

Метод, который необходимо использовать для реализации выше поставленной задачи- GET_COLUMN_ACCESS

Рисунок 6.

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

Не забудьте активировать метод и само внедрение.

Рисунок 7.

После этого, необходимо добавить вновь созданное внедрение на уровне формуряла. Для того, чтобы это сделать см. заметку Как добавить расширение в документ оценки?

Обратите внимание на то, что новое внедрение BAdI HRHAP00_COL_ACCESS в транзакции OOHAP_BASIC необходимо добавлять для области расширения BAColumn Access

Рисунок 8.

На уровне формуляра, в транзакции PHAP_CATALOG, расширение необходимо определить на закладке Processing, кликнув по кнопке col_access10

Рисунок 9.

И выбрать нужное внедрение BAdI

Рисунок 10.

3. Тестирование

Для тестирования понадобятся два пользователя, один из которых, будет являться проводящим оценку (APPRAISER), другой — аттестуемым (APPRAISEE).

С помощью транзакции PHAP_CREATE создаю новый документ оценки

Рисунок 11.

Перевожу документ оценки на стаус 4, подстатус K. Для заполнения доступен только один столбец. Отлично!

Рисунок 12.

Выбираю значение оценки, и перевожу статус документа оценки на 4, подстатус L.

Захожу в систему под другим пользователем, который присвоен табельному номеру аттестуемого сотрудника (присвоение выполняется через инфо-тип 0105, подтип 0001). Тажке доступен только один столбец.

Рисунок 13.

Требуемый результат был достигнут: руководитель видел только «свой» столбец, сотрудник — только «свой».

4. Небольшое заключение

Как видно из примера — это не высшая математика, тут немного проще. Если не получается написать самому, можно очень вежливо (!) попросить программиста, для которого этого еще проще, чем для нас с вами, то есть функциональных консультантов. Тем не менее, данный пример вполне себе живой и работающий.

Единственное на что хочется обратить ваше внимание: в ABAP коде, приведенном в данной заметке, столбцы, которые я пытаюсь скрыть и отобразить — захардкожены (то есть прописаны напрямую в коде), что является не очень красивым решением для последующего процесса поддержки и настройки формуляра оценки. Например, завтра у вас поменяются идентификаторы столбцов, или удалятся старые и добавятся новые. Чтобы внести изменения, необходимо будет постоянно корректировать реализацию BAdI.

Красивым же решением в данной ситуации — является создание пользовательской таблицы, в которой определяются идентификатор формуляра, наименование роли сотрудника, наименование столбцов, статус, подстатус, видимость. Таким образом, вынеся все переменные данные в настроечную таблицу, можно написать универсальный код, который, при обращении к данной таблице, будет считывать уровень видимости того или иного столбца для сотрудника, работающего с документом оценки. Поддержка такой реализации не доставит много хлопот консультанту, так как внести новые данные в пользовательскую таблицу или наоборот, удалить их, как мне кажется, намного проще, чем постоянно вносить изменения в код. Хотя, конечно, раз на раз не приходится. It depends, как говорят за границей.