При работе в конфигурации «Управление торговлей 10.3» (которая базируется на обычных формах платформы 1С:Предприятие 8.2 или 8.3) разработчики и пользователи часто сталкиваются с проблемой сохранения вариантов отчетов. Отчеты, разработанные на системе компоновки данных (СКД), по умолчанию сохраняют свои настройки только для текущего активного пользователя. Попытка поделиться настроенным вариантом отчета с коллегами вызывает трудности: другие пользователи просто не видят сохраненный вариант в своем списке, а привычные механизмы копирования настроек не срабатывают.
В этой статье мы подробно разберем, почему так происходит, и проанализируем четыре практических метода решения этой задачи: от использования штатного функционала платформы до программной реализации синхронизации настроек.
Выясним причину, почему другие пользователи не видят сохраненный вариант. По умолчанию платформа сохраняет варианты отчетов в системное хранилище с флагом приватности. Чтобы сделать ваш вариант доступным для остальных сотрудников, выполним следующие шаги прямо в пользовательском режиме:
Рассмотрим ситуацию, когда отчет распространяется как внешний файл (.erf) или подключен через справочник «Внешние обработки». В этом случае пользователи часто сталкиваются с ошибкой: «Свойство отчета 'Хранилище вариантов' не заполнено», из-за чего первый метод становится недоступен.
Для решения этой проблемы нам понадобится запустить Конфигуратор и внести небольшое изменение в свойства внешнего отчета. Пройдем по шагам этот процесс:
ХранилищеВариантовОтчетов.После выполнения этой несложной настройки платформа начнет полноценно сохранять варианты отчета в базу данных, и вы сможете раздавать права пользователям так же, как описано в первом методе.
В конфигурации «Управление торговлей 10.3» стандартные отчетостроения (например, построенные на базе «Универсального отчета») используют для хранения параметров регистр сведений СохраненныеНастройки. Если вы хотите централизованно управлять настройками СКД-отчетов через административную панель «Сохраненные настройки», мы можем реализовать программную выгрузку настроек компоновщика в этот регистр.
Разберем по шагам, как сериализовать настройки компоновщика СКД в ХранилищеЗначения и записать их в регистр программным путем. Посмотрим на пример кода, который можно разместить в модуле формы отчета:
// Процедура для сохранения настроек СКД в регистр СохраненныеНастройки
Процедура СохранитьНастройкуВРегистр(ИмяНастройки, ПользовательПолучатель = Неопределено)
// Получаем текущие настройки компоновщика СКД
НастройкиДляСохранения = КомпоновщикНастроек.ПолучитьНастройки();
// Помещаем настройки в ХранилищеЗначения для возможности записи в базу данных
ОбъектХранилища = Новый ХранилищеЗначения(НастройкиДляСохранения);
// Создаем запись в регистре СохраненныеНастройки
МенеджерЗаписи = РегистрыСведений.СохраненныеНастройки.СоздатьМенеджерЗаписи();
// Если пользователь не указан, настройка будет доступна ВСЕМ пользователям
Если ПользовательПолучатель = Неопределено Тогда
МенеджерЗаписи.Пользователь = Справочники.Пользователи.ПустаяСсылка();
Иначе
МенеджерЗаписи.Пользователь = ПользовательПолучатель;
КонецЕсли;
МенеджерЗаписи.ИмяОбъекта = ЭтотОбъект.Метаданные().Имя;
МенеджерЗаписи.НаименованиеНастройки = ИмяНастройки;
МенеджерЗаписи.СохраненнаяНастройка = ОбъектХранилища;
МенеджерЗаписи.ИспользоватьПриОткрытии = Ложь;
Попытка
МенеджерЗаписи.Записать(Истина);
Сообщить("Настройка успешно сохранена в общую базу настроек.");
Исключение
ВызватьИсключение "Не удалось сохранить настройку: " + ОписаниеОшибки();
КонецПопытки;
КонецПроцедуры
Для обратной загрузки настроек при открытии отчета другими пользователями мы можем применить следующий программный код:
// Процедура восстановления настроек СКД из регистра
Процедура ВосстановитьНастройкуИзРегистра(ИмяНастройки)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СохраненныеНастройки.СохраненнаяНастройка
|ИЗ
| РегистрСведений.СохраненныеНастройки КАК СохраненныеНастройки
|ГДЕ
| СохраненныеНастройки.ИмяОбъекта = &ИмяОбъекта
| И СохраненныеНастройки.НаименованиеНастройки = &НаименованиеНастройки";
Запрос.УстановитьПараметр("ИмяОбъекта", ЭтотОбъект.Метаданные().Имя);
Запрос.УстановитьПараметр("НаименованиеНастройки", ИмяНастройки);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
// Извлекаем настройки из ХранилищаЗначения
ВосстановленныеНастройки = Выборка.СохраненнаяНастройка.Получить();
Если ВосстановленныеНастройки <> Неопределено Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(ВосстановленныеНастройки);
Сообщить("Настройки отчета успешно загружены.");
КонецЕсли;
Иначе
Предупреждение("Настройка с таким именем не найдена в базе данных.");
EndIf;
КонецПроцедуры
Используя этот подход, вы полностью контролируете хранение настроек ваших отчетов, обходя ограничения стандартного системного хранилища вариантов платформы 1С.
Рассмотрим еще одну частую ситуацию: пользователю срочно нужно передать сложную настройку отчета коллеге, но у него нет прав администрирования, а конфигурацию изменять нельзя. В этом случае отлично сработает ручной файловый обмен схемами настроек СКД:
my_report_settings.xml).Таким образом, мы детально разобрали все доступные способы совместного использования вариантов отчетов в 1С:Управление торговлей 10.3. Выбирайте наиболее подходящий метод в зависимости от ваших задач: штатную настройку прав доступа для стандартных отчетов, доработку внешних отчетов в Конфигураторе или гибкую программную интеграцию через регистры сведений.