При работе с распределенными информационными базами (РИБ) в конфигурации 1С:Бухгалтерия предприятия 3.0 специалисты часто сталкиваются с проблемой: данные (документы, справочники) мигрируют исправно, а вот интерфейс и настройки форм в подчиненных узлах остаются «пустыми». Это создает значительные неудобства, когда сотрудникам из центрального офиса необходимо подключиться к базе филиала (например, через удаленный рабочий стол) и оперативно разобраться в данных, а привычные отчеты и формы там не настроены.
В этой статье мы подробно разберем, почему настройки не переносятся автоматически, где они хранятся в системе и какими способами можно доставить их в периферийную базу.
Проанализируем архитектуру платформы 1С:Предприятие 8.3. Большинство пользовательских настроек (расположение окон, видимость колонок, отборы в списках, настройки рабочего стола) хранятся не в привычных справочниках или регистрах, а в специальных системных хранилищах. Эти хранилища представляют собой внутренние таблицы базы данных, которые не являются объектами метаданных и, как следствие, не включены в планы обмена.
Разберем основные места хранения информации о предпочтениях пользователя:
Если вы только планируете запуск филиала, рассмотрим альтернативный метод создания узла. Вместо стандартного механизма Создать начальный образ, мы можем взять полную копию центральной базы. В этом случае в подчиненный узел сразу попадут все настройки всех пользователей, так как копия базы содержит все системные таблицы.
После развертывания копии нам потребуется выполнить следующие шаги:
ПланыОбмена.УстановитьГлавныйУзел).Этот способ гарантирует 100% перенос интерфейса «как в центре» на момент создания, но он не подходит для оперативной передачи новых настроек в уже работающую базу.
Рассмотрим ситуацию, когда подчиненный узел уже работает и нам нужно передать настройки конкретных пользователей. Выясним, как это сделать с помощью универсального инструмента от разработчиков 1С.
Важное условие: Для того чтобы настройки «прижились», справочник Пользователи в обеих базах должен быть синхронизирован. Настройки в хранилищах жестко привязаны к GUID (уникальному идентификатору) пользователя. Если вы создали пользователя «Иванов» в центре и вручную создали «Иванов» в филиале — это разные объекты для системы, и настройки не подцепятся.
Алгоритм действий следующий:
ХранилищеОбщихНастроекХранилищеНастроекДанныхФормХранилищеПользовательскихНастроекОтчетовПользователь, чтобы не выгружать лишний объем данных.В конфигурации «Бухгалтерия предприятия 3.0» предусмотрен штатный механизм копирования настроек. Рассмотрим подробнее, как его использовать:
Однако помните: этот инструмент работает локально внутри одной базы. Чтобы передать результат в филиал, можно сначала скопировать настройки техническому пользователю, который гарантированно мигрирует через РИБ (если у вас настроен программный перенос хранилищ), либо использовать этот инструмент уже внутри подчиненного узла после того, как вы создали там нужных пользователей.
Если задача стоит в «живой» синхронизации настроек, проанализируем возможность доработки системы. Мы можем создать вспомогательный РегистрСведений, который будет включен в план обмена РИБ.
Посмотрим на пример логики, которую можно реализовать в модуле сеанса или в подписке на событие при сохранении настроек:
// Пример упрощенной логики сохранения настройки в промежуточный регистр
Процедура ПриСохраненииНастройкиВХранилище(ИмяХранилища, КлючОбъекта, КлючНастроек, Настройка, Пользователь)
// Сериализуем настройку в XML для хранения в регистре
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Настройка);
СтрокаНастроек = ЗаписьXML.Закрыть();
// Записываем в регистр, который участвует в обмене РИБ
МенеджерЗаписи = РегистрыСведений.УдаленныйПереносНастроек.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Пользователь = Пользователь;
МенеджерЗаписи.КлючОбъекта = КлючОбъекта;
МенеджерЗаписи.ДанныеНастроек = СтрокаНастроек;
МенеджерЗаписи.Записать();
КонецПроцедуры
В подчиненном узле необходимо создать регламентное задание или обработчик ожидания, который будет считывать данные из этого регистра и записывать их в локальное хранилище методом ХранилищеОбщихНастроек.Сохранить(). Таким образом, настройки будут «прилетать» вместе с обычным обменом данными.
Выясним причину, по которой список «Избранного» (желтая звездочка в интерфейсе) перенести сложнее всего. В файловых версиях 1С эти данные часто хранятся в профиле пользователя операционной системы в файле v8_ib_t.sl. Для клиент-серверных версий они находятся в базе, но доступ к ним через встроенный язык ограничен. Наилучшим способом переноса «Избранного» остается полное копирование папки настроек пользователя 1С (из %AppData%\1C\1cv8\) из одного терминального сеанса в другой, если пользователи работают в одинаковом окружении.
Подведем итоги. Если вам нужно разово настроить рабочие места в магазине или филиале:
Такой комплексный подход позволит вам избежать «джунглей» в интерфейсе и обеспечит комфортную работу бухгалтеров и аналитиков в любом узле распределенной информационной системы.