При работе с внешними обработками в системе 1С:Предприятие 8 часто возникает ситуация, когда один пользователь настраивает сложные фильтры, группировки или параметры отчета, сохраняет их, но другой пользователь под своей учетной записью эти настройки не видит. Разберем, почему так происходит, и проанализируем способы реализации «общих» настроек, чтобы ими могли пользоваться все сотрудники организации.
В системе 1С:Предприятие механизмы сохранения настроек (будь то стандартное сохранение значений в обычных формах или использование Хранилища настроек в управляемых) жестко привязаны к идентификатору текущего пользователя. Проанализируем причину: это сделано для того, чтобы личные предпочтения одного сотрудника не загромождали рабочее пространство другого. Однако для внешних обработок, выполняющих функции общих инструментов (например, печать прайс-листа или массовое изменение документов), такая изоляция становится препятствием. Выясним, какими способами можно обойти это ограничение.
Если вы разрабатываете обработку на управляемых формах, наиболее правильным путем будет использование объекта ХранилищеОбщихНастроек. В отличие от стандартного хранилища, оно позволяет управлять правами доступа к данным. Рассмотрим алгоритм реализации программного сохранения настроек для всех пользователей.
Для того чтобы настройки были видны всем, при записи и чтении необходимо указывать пустую строку вместо имени пользователя или использовать фиксированный ключ. Разберем пример кода для сохранения настроек:
// Процедура сохранения настроек для всех
Процедура СохранитьОбщиеНастройки(СтруктураНастроек)
КлючОбъекта = "МояВнешняяОбработка_ОбщиеНастройки";
КлючНастройки = "ОсновнаяНастройка";
// Передаем пустую строку в качестве пользователя, чтобы настройка стала общей
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастройки, СтруктураНастроек, , "");
КонецПроцедуры
Соответственно, при открытии формы или загрузке настроек нам нужно обратиться к тому же ключу. Проанализируем код загрузки:
// Процедура загрузки общих настроек
Функция ЗагрузитьОбщиеНастройки()
КлючОбъекта = "МояВнешняяОбработка_ОбщиеНастройки";
КлючНастройки = "ОсновнаяНастройка";
// Загружаем настройку, игнорируя привязку к текущему пользователю
Возврат ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастройки, , "");
КонецФункции
В старых конфигурациях (например, УПП 1.3 или УТ 10.3) часто используется ПостроительОтчета. Посмотрим на ситуацию, описанную в обсуждении: пользователю требуется сделать настройки видимыми для всех в обработке печати прайс-листа. В этом случае стандартный механизм СохраняемыеЗначения не всегда удобен.
Выясним, как модифицировать код, чтобы настройки подхватывались корректно. Как отмечают эксперты, для работы с ПостроителемОтчета вместо метода КомпоновщикНастроек.ЗагрузитьНастройки (используемого в СКД) следует применять метод УстановитьНастройки. Рассмотрим пример реализации:
// В модуле обработки необходимо объявить переменную
Перем мТекущаяНастройка Экспорт;
Процедура ВосстановитьНастройкиНаФорме()
// Если используется ПостроительОтчета
Если мТекущаяНастройка <> Неопределено Тогда
ПостроительОтчета.УстановитьНастройки(мТекущаяНастройка);
КонецЕсли;
КонецПроцедуры
Важный нюанс: Чтобы настройки стали доступны, переменную мТекущаяНастройка необходимо сделать экспортной. Это позволит форме обработки обращаться к ней напрямую или передавать данные между модулями при загрузке из внешних источников.
Если ваша конфигурация построена на БСП (что характерно для большинства современных решений, таких как ERP, КА 2, УТ 11), наиболее эффективным способом будет использование механизма дополнительных отчетов и обработок. Рассмотрим, как это работает:
ХранилищеВариантовОтчетов с пустым идентификатором пользователя.Проанализируем преимущество этого метода: вам не нужно писать код. Система сама управляет правами доступа и видимостью настроек в зависимости от прав пользователя на саму обработку.
Иногда требуется, чтобы пользователи видели настройки друг друга, но при этом сохранялась возможность иметь и личные настройки. В этом случае мы можем программно изменять КлючНастройки. Разберем ситуацию: мы добавляем на форму флажок «Общая настройка».
Процедура ПередСохранениемНастроек(Отказ, СтруктураНастроек)
Если Объект.ФлажокОбщаяНастройка Тогда
// Подменяем стандартный механизм сохранения
КлючОбъекта = "ОбщийКлючДляВсехПользователей";
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, "ИмяНастройки", СтруктураНастроек);
Отказ = Истина; // Отменяем стандартное сохранение
КонецЕсли;
КонецПроцедуры
Этот метод позволяет гибко управлять логикой: важные настройки (например, утвержденные шаблоны цен) сохранять как общие, а мелкие фильтры оставлять персональными.
При реализации механизмов общего доступа к настройкам важно помнить о правах (RLS). Даже если вы программно прописали чтение настроек другого пользователя, система может выдать ошибку или вернуть пустую структуру, если у текущего пользователя нет роли СохранениеДанныхПользователя или прав на чтение системных таблиц настроек. Проанализируйте состав ролей пользователей перед внедрением решения.
Подведем итог: для реализации видимости настроек во внешней обработке вы можете либо использовать Хранилище общих настроек с пустым именем пользователя, либо (для старых систем) вручную управлять объектом ПостроительОтчета через экспортные переменные. Выбор метода зависит от архитектуры вашей конфигурации и используемых форм.