При настройке типового отчета «Валовая прибыль» в конфигурации «1С:Управление производственным предприятием 1.3» часто возникает задача ограничить видимость данных для менеджеров: отчет должен автоматически открываться с отбором по текущему пользователю, не позволяя просматривать показатели коллег. Разберем, как технически правильно реализовать установку такого отбора, какие подводные камни существуют в структуре данных и как надежно защитить информацию.
Отчет «Валовая прибыль» построен на базе типового механизма «Универсальный отчет» и обращается к данным регистров накопления Продажи и ПродажиСебестоимость. Перед программной установкой отбора выясним, по какому именно полю следует фильтровать данные:
ЗаказПокупателя остается незаполненным, и такие продажи пропадут из отчета.РеализацияТоваровУслуг), независимо от наличия заказа.Типовые отчеты на базе «Универсального отчета» в УПП 1.3 работают через специальную объектную модель. Частая ошибка разработчиков заключается в попытке напрямую обратиться к реквизитам отчета через точку (например, Отчет.ЗаказПокупателя), что вызывает исключение Поле объекта не обнаружено, либо в передаче строкового имени пользователя вместо ссылки на справочник Пользователи.
В конфигурации УПП 1.3 ссылка на текущего пользователя хранится в глобальном контексте. Для получения ссылки используется функция глЗначениеПеременной("глТекущийПользователь").
Рассмотрим пример кода для процедуры инициализации или настройки отчета:
ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
// Установка отбора по ответственному из заказа
УниверсальныйОтчет.ДобавитьОтбор(
"ЗаказПокупателя.Ответственный",
Истина,
ВидСравнения.Равно,
ТекущийПользователь
);
Синтаксис метода ДобавитьОтбор принимает имя поля построителя, флаг использования отбора (Истина), вид сравнения и само значение ссылки.
Если цель доработки — запретить менеджеру просматривать чужую валовую прибыль, простой установки значения по умолчанию при открытии формы недостаточно. Пользователь может снять флаг отбора или выбрать другого менеджера в настройках.
Разберем три варианта решения этой задачи:
ПостроительОтчета.Отбор и устанавливают свойство Доступность = Ложь.ПередФормированиемОтчета() или СформироватьОтчет() проверяются роли пользователя. Если у пользователя нет административных прав, в структуру отбора программно перезаписывается условие равенства текущему пользователю. Любые ручные изменения, внесенные в форме настроек, будут переопределены перед выполнением запроса.Попытки программно заблокировать доступ к форме настроек через удаление кнопок панели (например, обращением к КоманднаяПанельФормы.Кнопки) приводят к ошибкам времени выполнения и полностью лишают пользователей возможности гибко работать с отчетом: менять группировки, добавлять необходимые колонки и настраивать оформление. Корректный подход всегда заключается в управлении условиями отбора данных в момент выполнения запроса, а не в блокировке интерфейсных элементов формы.