Как запретить пользователю изменять настройки отчета в 1С?

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

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

Почему нельзя полностью заблокировать типовой вариант отчета базовыми средствами?

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

  1. Создания собственных настроек путем частичного или полного копирования ваших.
  2. Сохранения настроек формы или своего нового варианта отчета в пользовательском режиме.
  3. Возврата к стандартным настройкам через меню Ещё - Стандартные настройки или Ещё - Варианты отчета - Стандартная схема.

Однако, мы можем применить комплексный подход, используя возможности СКД, Библиотеки стандартных подсистем (БСП) и программирования. Рассмотрим подробнее каждый из доступных и эффективных способов.

Способ 1. Ограничение через свойства элементов пользовательских настроек в СКД

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

  1. Откроем Схему компоновки данных нашего отчета в конфигураторе.
  2. Перейдем на закладку Настройки.
  3. В нижней части окна выделим нужный элемент структуры (например, отбор или период).
  4. Откроем окно Свойства элемента пользовательских настроек (значок свойств).
  5. Установим свойство Режим редактирования в значение Недоступный.

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

Способ 2. Настройка прав доступа и ролей (механизмы БСП)

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

Мы можем просто отключить для конкретного пользователя (или целой группы) роль, отвечающую за работу с вариантами. Если у пользователя снять право Разрешить редактировать общие варианты отчетов, он больше не сможет перенастроить и сохранить измененный типовой вариант для всех остальных сотрудников базы. Это базовый, но очень надежный метод административного контроля.

Способ 3. Программное скрытие кнопок в Управляемой форме

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

  1. Добавим новую форму отчета в дерево метаданных конфигуратора, управляя доступом к формам для пользователей.
  2. Назначим ее основной формой для данного отчета.
  3. Перейдем в модуль созданной формы и добавим обработчик события ПриСозданииНаСервере.

Напишем код, который программно отключает видимость кнопок настройки в командной панели:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Скрываем кнопку изменения варианта отчета
    Элементы.ФормаИзменитьВариант.Видимость = Ложь;
    
    // Скрываем кнопку открытия пользовательских настроек
    Элементы.ФормаНастройки.Видимость = Ложь;
КонецПроцедуры

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

Способ 4. Принудительная загрузка настроек при компоновке результата

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

Для этого в модуле объекта отчета мы используем предопределенную платформенную процедуру ПриКомпоновкеРезультата. Посмотрим на пример практической реализации:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Отключаем стандартное автоматическое формирование отчета
    СтандартнаяОбработка = Ложь;
    
    // Загружаем заранее подготовленные фиксированные настройки из схемы
    Настройки = КомпоновщикНастроек.Настройки;
    
    // При необходимости программно очищаем пользовательские отборы
    Настройки.Отбор.Элементы.Очистить();
    
    // Начинаем процесс программной компоновки макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    // Выводим результат пользователю
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры

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

Способ 5. Использование Внешних печатных форм (ВПФ) или внешних отчетов

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

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

Способ 6. Управление вариантами через модуль менеджера в БСП

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

Используем экспортную процедуру НастроитьВариантыОтчетов. В ней мы работаем с параметром НастройкиОтчета и описываем свойства конкретных вариантов. Посмотрим на пример кода:


Процедура НастроитьВариантыОтчетов(Настройки, НастройкиОтчета) Экспорт
    Вариант = НастройкиОтчета.Варианты.Добавить();
    Вариант.Описание = "Жестко зафиксированный вариант отчета";
    
    // Прячем вариант отчета из стандартного подменю для выбора
    Вариант.ПоказыватьВПодменюВариантов = Ложь;
КонецПроцедуры

Способ 7. Регламентное задание для сброса настроек

В исключительных случаях, когда нам необходимо оставить типовой отчет нетронутым в коде, мы напишем отдельное регламентное задание. Данное задание (например, каждую ночь или раз в несколько часов) будет обращаться к системному объекту ХранилищеСистемныхНастроек и принудительно восстанавливать вариант отчета у выбранных пользователей к исходному эталонному состоянию. Это удалит все их "сломанные" эксперименты и вернет отчет в рабочий вид к началу смены.

Итоги

Мы подробно рассмотрели множество рабочих способов ограничения доступа к настройкам отчета в 1С. Выбор конкретного метода всегда зависит от ваших текущих задач: используйте права БСП для быстрого администрирования, программное скрытие кнопок на управляемой форме для визуального контроля, а перехват логики в обработчике ПриКомпоновкеРезультата — для абсолютной защиты данных от случайных или преднамеренных действий пользователей.

← На главную