Как в УПП 1.3 установить отбор по текущему пользователю в отчете Валовая прибыль?

Программист 1С v8.3 (Обычные формы) Управленческий учет IT и автоматизация бизнеса
← На главную

При настройке типового отчета «Валовая прибыль» в конфигурации «1С:Управление производственным предприятием 1.3» часто возникает задача ограничить видимость данных для менеджеров: отчет должен автоматически открываться с отбором по текущему пользователю, не позволяя просматривать показатели коллег. Разберем, как технически правильно реализовать установку такого отбора, какие подводные камни существуют в структуре данных и как надежно защитить информацию.

Анализ источников данных для отбора

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

  1. ЗаказПокупателя.Ответственный — популярный вариант, однако он работает корректно только в том случае, если все отгрузки оформляются строго по предварительным заказам покупателей. Если в базе оформляются прямые документы реализации без заказа, измерение ЗаказПокупателя остается незаполненным, и такие продажи пропадут из отчета.
  2. Регистратор.Ответственный — позволяет получить автора конкретного документа отгрузки (например, документа РеализацияТоваровУслуг), независимо от наличия заказа.
  3. Проект — типовой реквизит конфигурации, позволяющий закреплять продажи и коммерческие затраты за конкретным направлением или менеджером без жесткой привязки к автору первичного документа.
  4. ДоговорКонтрагента.Владелец.ОсновнойМенеджерПокупателя — используется в случаях, когда первичку в базу вводит бэк-офис (операторы), а аналитику необходимо собирать по менеджеру, ведущему клиента.

Программная установка отбора в Универсальном отчете

Типовые отчеты на базе «Универсального отчета» в УПП 1.3 работают через специальную объектную модель. Частая ошибка разработчиков заключается в попытке напрямую обратиться к реквизитам отчета через точку (например, Отчет.ЗаказПокупателя), что вызывает исключение Поле объекта не обнаружено, либо в передаче строкового имени пользователя вместо ссылки на справочник Пользователи.

В конфигурации УПП 1.3 ссылка на текущего пользователя хранится в глобальном контексте. Для получения ссылки используется функция глЗначениеПеременной("глТекущийПользователь").

Рассмотрим пример кода для процедуры инициализации или настройки отчета:


ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");

// Установка отбора по ответственному из заказа
УниверсальныйОтчет.ДобавитьОтбор(
    "ЗаказПокупателя.Ответственный",
    Истина,
    ВидСравнения.Равно,
    ТекущийПользователь
);

Синтаксис метода ДобавитьОтбор принимает имя поля построителя, флаг использования отбора (Истина), вид сравнения и само значение ссылки.

Методы ограничения доступа и защита от изменения отбора

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

Разберем три варианта решения этой задачи:

  1. Блокировка строки отбора в построителе. Чтобы пользователь сохранил возможность настраивать группировки, поля и сортировки, но не мог отключить фильтр по себе, находят нужную строку в коллекции ПостроительОтчета.Отбор и устанавливают свойство Доступность = Ложь.
  2. Принудительное наложение отбора перед формированием. В модуле объекта отчета в процедуре ПередФормированиемОтчета() или СформироватьОтчет() проверяются роли пользователя. Если у пользователя нет административных прав, в структуру отбора программно перезаписывается условие равенства текущему пользователю. Любые ручные изменения, внесенные в форме настроек, будут переопределены перед выполнением запроса.
  3. Настройка прав на уровне записей (RLS). Наиболее надежный способ защиты данных на уровне платформы. Ограничение видимости только через форму отчета оставляет возможность посмотреть данные через другие отчеты, консоль запросов или универсальные обработки. Настройка RLS на чтение регистров продаж или документов отгрузки автоматически отсекает чужие данные во всех отчетах системы без изменения программного кода форм.

Почему не следует удалять командные панели и кнопку «Настройка»

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

← На главную