Скрываем столбцы в документах оценки
Заголовок, как мне кажется, избыточен. Добавить нечего. Сегодня мы скрываем столбцы в документах оценки.
0. Вступление
Довольно распространенная задача на проектах, где используется функционал документов оценки, скрывать столбцы в зависимости от роли сотрудника (аттестуемый или аттестующий) и статуса/подстатуса документа оценки. Например, на одном статусе сотрудник, проводящий оценку, должен видеть только «свой» столбец, в то время, как аттестуемый сотрудник — должен видеть только «свой» столбец. Сделать это проще, чем кажется на первый взгляд. На помощь функциональному консультанту в решении данной задачи приходит BAdI HRHAP00_COL_ACCESS, небольшое знание ABAP или же программист, а также чувство юмора, так как не представляю, куда же без него.
1. Задача
Сформулирую перед собой следующую задачу: для документа оценки, в котором используется три столбца
- ZESS - Employee's Value
- ZMSS - Manager's Value
- FAPP - Final Appraisal
Пользовательские столбцы можно определить в транзакции OOHAP_BASIC
Необходимо реализовать следующую логику отображения столбцов:
- Для сотрудника, проводящего оценку (руководителя), необходимо отборазить только столбец ZMSS, на статусе 4, подстатусе K
- Для сотрудника, являющегося аттестуемым, необходимо отобразить только столбец ZESS, на стаусе 4, подстатусе L
- Столбец FAPP должен быть скрыт во всех случаях
Пользовательские статусы также можно определить с помощью транзакции OOHAP_BASIC
2. Решение задачи
Вкратце опишу исходные данные формуляра, который будет упоминаться далее по тексту.
Как было указано выше, в формуляре настроено три столбца:
Также определены следующие статусы
Статусы и столбцы были определены с помощью транзакции OOHAP_BASIC:
Одним из основных действий во всем этом процессе — является создание нового внедрения для BAdI HRHAP00_COL_ACCESS и последующее его определение на уровне формуляра аттестации.
В транзакции SE18 создаем новое внедрение, выбрав в меню Enhancement implementation -> Create
Определите наименование нового внедрения
Метод, который необходимо использовать для реализации выше поставленной задачи- GET_COLUMN_ACCESS
Ниже привожу пример ABAP-кода, позволяющий достичь необходимого результата в рамках данной заметки.
Не забудьте активировать метод и само внедрение.
После этого, необходимо добавить вновь созданное внедрение на уровне формуряла. Для того, чтобы это сделать см. заметку Как добавить расширение в документ оценки?
Обратите внимание на то, что новое внедрение BAdI HRHAP00_COL_ACCESS в транзакции OOHAP_BASIC необходимо добавлять для области расширения BA - Column Access
На уровне формуляра, в транзакции PHAP_CATALOG, расширение необходимо определить на закладке Processing, кликнув по кнопке
И выбрать нужное внедрение BAdI
3. Тестирование
Для тестирования понадобятся два пользователя, один из которых, будет являться проводящим оценку (APPRAISER), другой — аттестуемым (APPRAISEE).
С помощью транзакции PHAP_CREATE создаю новый документ оценки
Перевожу документ оценки на стаус 4, подстатус K. Для заполнения доступен только один столбец. Отлично!
Выбираю значение оценки, и перевожу статус документа оценки на 4, подстатус L.
Захожу в систему под другим пользователем, который присвоен табельному номеру аттестуемого сотрудника (присвоение выполняется через инфо-тип 0105, подтип 0001). Тажке доступен только один столбец.
Требуемый результат был достигнут: руководитель видел только «свой» столбец, сотрудник — только «свой».
4. Небольшое заключение
Как видно из примера — это не высшая математика, тут немного проще. Если не получается написать самому, можно очень вежливо (!) попросить программиста, для которого этого еще проще, чем для нас с вами, то есть функциональных консультантов. Тем не менее, данный пример вполне себе живой и работающий.
Единственное на что хочется обратить ваше внимание: в ABAP коде, приведенном в данной заметке, столбцы, которые я пытаюсь скрыть и отобразить — захардкожены (то есть прописаны напрямую в коде), что является не очень красивым решением для последующего процесса поддержки и настройки формуляра оценки. Например, завтра у вас поменяются идентификаторы столбцов, или удалятся старые и добавятся новые. Чтобы внести изменения, необходимо будет постоянно корректировать реализацию BAdI.
Красивым же решением в данной ситуации — является создание пользовательской таблицы, в которой определяются идентификатор формуляра, наименование роли сотрудника, наименование столбцов, статус, подстатус, видимость. Таким образом, вынеся все переменные данные в настроечную таблицу, можно написать универсальный код, который, при обращении к данной таблице, будет считывать уровень видимости того или иного столбца для сотрудника, работающего с документом оценки. Поддержка такой реализации не доставит много хлопот консультанту, так как внести новые данные в пользовательскую таблицу или наоборот, удалить их, как мне кажется, намного проще, чем постоянно вносить изменения в код. Хотя, конечно, раз на раз не приходится. It depends, как говорят за границей.