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