Перенос пользовательских настроек между базами 1С:Предприятие — задача, с которой рано или поздно сталкивается каждый администратор или разработчик.hether это миграция на новую версию платформы, объединение нескольких информационных баз или просто необходимость дублировать рабочую среду для тестирования. В отличие от переноса справочников или документов, настройки пользователей (права доступа, персональные отчеты, формы, сохраненные варианты отчетов) часто остаются "за бортом" стандартных механизмов выгрузки-загрузки.
Проблема усложняется тем, что 1С не предоставляет универсального инструмента для такого переноса — каждый случай требует индивидуального подхода. В этой статье мы разберем все актуальные методы: от ручного копирования через конфигуратор до автоматизированных скриптов на встроенном языке. Особое внимание уделим скрытым настройкам, которые не видны в интерфейсе, но критически важны для работоспособности (например, параметры отчетов в UserSettingsStorage).
1. Какие настройки пользователя можно и нужно переносить
Прежде чем приступать к переносу, важно четко определить, какие именно данные относятся к пользовательским настройкам в контексте 1С. Их можно разделить на три основные категории:
- 🔐 Права доступа и роли — привязка пользователей к ролям, ограничения по объектам метаданных, настройки RLS (Row-Level Security).
- 📊 Персональные настройки интерфейса — расположение панелей, сохраненные варианты отчетов, настройки форм (включая Управляемые формы и Обычные формы).
- ⚙️ Скрытые системные параметры — данные из виртуальных таблиц
ПользовательскиеНастройкиХраненияиПользовательскиеДанные, которые хранят, например, последнюю использованную организацию или фильтры в справочниках.
Особую сложность представляют динамические настройки, которые создаются "на лету" в процессе работы пользователя. Например:
- 📌 Сохраненные фильтры в отчетах (
СКД) - 🔄 История выбранных значений в полях ввода (автозаполнение)
- 🖥️ Размеры и положение окон (для Управляемого приложения)
⚠️ Внимание: Настройки, хранящиеся вUserSettingsStorage, не экспортируются стандартными средствами выгрузки данных (например, черезВыгрузкаДанныхXML). Их придется переносить отдельно!
| Тип настроек | Где хранятся | Можно ли перенести стандартными средствами | Риски при переносе |
|---|---|---|---|
| Права доступа (роли) | Конфигурация → Пользователи | Да (через выгрузку/загрузку) | Конфликт идентификаторов пользователей |
| Сохраненные варианты отчетов | Виртуальная таблица ИнформационнаяБаза.PользовательскиеНастройкиОтчетов |
Нет (требуется скрипт) | Потеря привязки к пользователю |
| Настройки форм (размеры, положение) | ПользовательскиеНастройкиХранения |
Нет | Несовместимость версий платформы |
| RLS (ограничения по данным) | Конфигурация → Роли | Да (частично) | Нарушение логики доступа |
Перед началом работ обязательно составьте полный список настроек, которые нужно перенести. Для этого:
- Проведите опрос ключевых пользователей о их персональных настройках.
- Изучите журнал изменений конфигурации (
Конфигуратор → Администрирование → Журнал регистрации). - Проанализируйте содержимое таблицы
ПользовательскиеНастройкиХранениячерез запрос:
ВЫБРАТЬ
ПользовательскиеНастройкиХранения.Пользователь,
ПользовательскиеНастройкиХранения.ИмяНастройки,
ПользовательскиеНастройкиХранения.Значение
ИЗ
ПользовательскиеНастройкиХранения
2. Подготовка к переносу: резервное копирование и анализ совместимости
Перенос настроек — это всегда риск потерять критические данные или нарушить работоспособность базы. Поэтому первый шаг — создание резервной копии обеих баз (источника и приемника). При этом:
- 💾 Для файловой базы достаточно скопировать файл
1Cv8.1CD. - 🗄️ Для клиент-серверной базы сделайте бэкап через
SQL Server Management Studioилиpg_dump(для PostgreSQL). - 🔄 Проверьте целостность резервной копии тестовым восстановлением на отдельном сервере.
Далее необходимо проанализировать совместимость версий платформы и конфигураций. Например:
- 🔄 Если переносите настройки из 1С:Предприятие 8.3.18 в 8.3.20, некоторые параметры форм могут оказаться несовместимыми.
- 📋 При переносе между разными конфигурациями (например, из УТ 11 в КА 2.5) часть настроек просто не найдет своих объектов.
⚠️ Внимание: Если в целевой базе уже есть пользователи с теми же именами, что и в источнике, их идентификаторы (УникальныйИдентификатор) могут конфликтовать. Это приведет к перезаписи настроек!
Для проверки совместимости выполните тестовый запрос к метаданным обеих баз:
// Проверка версий платформы
Сообщить("Версия платформы: " + ВерсияПлатформы());
// Сравнение конфигураций
Если Метаданные.ЭтоОбъектМетоданных("Справочник.Номенклатура") Тогда
Сообщить("Справочник Номенклатура существует");
КонецЕсли;
Если версий платформы различаются, используйте промежуточный формат для переноса (например, JSON или XML), который можно адаптировать под целевую версию.
Создать резервные копии обеих баз|Проверить совместимость версий платформы|Составить список переносимых настроек|Протестировать права доступа в целевой базе|Подготовить скрипты для преобразования данных-->
3. Метод 1: Ручной перенос через конфигуратор (для небольших баз)
Самый простой, но и самый трудоемкий способ — ручное копирование настроек через конфигуратор. Он подходит для небольших баз (до 10-15 пользователей) или когда нужно перенести только часть настроек.
Алгоритм действий:
- Откройте исходную базу в
Конфигураторе(режим "1С:Предприятие" должен быть закрыт). - Перейдите в
Администрирование → Пользователи. - Для каждого пользователя:
- Скопируйте имя, полное имя, аутентификацию.
- Запомните привязанные роли (они должны существовать в целевой базе!).
- Экспортируйте персональные настройки через
Файл → Сохранить данные пользователя(если доступно).
Файл → Загрузить данные пользователя.Для переноса сохраненных вариантов отчетов используйте обработку "Управление сохраненными настройками" (доступна в типовой конфигурации 1С:ERP и УТ 11):
- Откройте отчет, вариант которого нужно перенести.
- В меню отчета выберите
Все действия → Сохраненные настройки → Сохранить в файл. - В целевой базе загрузите файл через
Все действия → Сохраненные настройки → Загрузить из файла. - ✅ Не требует программирования.
- ✅ Минимальный риск ошибок (если делать внимательно).
- ❌ Очень трудоемко для большого количества пользователей.
- ❌ Не переносятся скрытые настройки (нужны дополнительные действия).
- 📤 Пользователи и их роли (таблица
v8usersв SQL или объектПользователиИнформационнойБазы). - 📤 Настройки форм и отчетов (таблица
ПользовательскиеНастройкиХранения). - 📤 Сохраненные варианты отчетов (таблица
ИнформационнаяБаза.PользовательскиеНастройкиОтчетов). - 🌐 Инфостарт (раздел "Обработки для администрирования")
- 🌐 1С:ИТС (в составе типового ПО для некоторых конфигураций)
- 📄 Универсальный формат обмена (через
Планы обмена). - 📤 Выгрузка/загрузка XML (объекты
ЗаписьXML/ЧтениеXML). - 🔄 EDI (Электронный документооборот) для интеграции с внешними системами.
⚠️ Внимание: При ручном переносе легко пропустить скрытые настройки, такие как история выбранных значений в полях ввода. Они хранятся в таблице ПользовательскиеДанные и требуют отдельного переноса через запрос!
Преимущества метода:
Недостатки:
Если в целевой базе уже есть пользователи с такими же именами, временно переименуйте их (добавьте префикс "OLD_"), чтобы избежать конфликтов при импорте.
4. Метод 2: Автоматизированный перенос с помощью скриптов
Для крупных баз (50+ пользователей) или регулярных переносов необходимо автоматизировать процесс с помощью скриптов на встроенном языке. Основные этапы:
1. Экспорт данных из исходной базы:
2. Преобразование данных (если версии платформы различаются).
3. Импорт в целевую базу.
Пример скрипта для экспорта пользователей и их ролей:
// Экспорт пользователей в JSON
Результат = Новый Структура();
СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого Пользователь Из СписокПользователей Цикл
ДанныеПользователя = Новый Структура();
ДанныеПользователя.Вставить("Имя", Пользователь.Имя);
ДанныеПользователя.Вставить("ПолноеИмя", Пользователь.ПолноеИмя);
ДанныеПользователя.Вставить("Аутентификация", Пользователь.Аутентификация);
// Получаем роли пользователя
Роли = Пользователь.ПолучитьРоли();
СписокРолей = Новый Массив();
Для Каждого Роль Из Роли Цикл
СписокРолей.Добавить(Роль.Имя);
КонецЦикла;
ДанныеПользователя.Вставить("Роли", СписокРолей);
Результат.Вставить(Пользователь.Имя, ДанныеПользователя);
КонецЦикла;
// Сохраняем в файл
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписьJSON.Записать(Результат);
ТекстJSON = ЗаписьJSON.Закрыть();
ЗаписатьФайл("C:\Temp\Пользователи.json", ТекстJSON);
Для импорта в целевую базу используйте обратный скрипт:
// Импорт пользователей из JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ПолучитьТекстИзФайла("C:\Temp\Пользователи.json"));
Данные = ЧтениеJSON.Прочитать();
Для Каждого ИмяПользователя Из Данные.Ключи() Цикл
ДанныеПользователя = Данные[ИмяПользователя];
// Создаем пользователя
НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
НовыйПользователь.Имя = ДанныеПользователя.Имя;
НовыйПользователь.ПолноеИмя = ДанныеПользователя.ПолноеИмя;
НовыйПользователь.Аутентификация = ДанныеПользователя.Аутентификация;
НовыйПользователь.Записать();
// Назначаем роли
Для Каждого ИмяРоли Из ДанныеПользователя.Роли Цикл
Роль = Роли.НайтиПоИмени(ИмяРоли);
Если Роль <> Неопределено Тогда
НовыйПользователь.ДобавитьРоль(Роль);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для переноса сохраненных настроек отчетов используйте запрос к виртуальной таблице:
ВЫБРАТЬ
ПользовательскиеНастройкиОтчетов.Пользователь,
ПользовательскиеНастройкиОтчетов.ИмяОтчета,
ПользовательскиеНастройкиОтчетов.ИмяНастройки,
ПользовательскиеНастройкиОтчетов.ДанныеНастройки
ИЗ
ПользовательскиеНастройкиОтчетов
⚠️ Внимание: При переносе между разными конфигурациями имена отчетов могут отличаться. В этом случае потребуется ручное сопоставление или преобразование через регулярные выражения.
Готовые обработки для автоматизированного переноса можно найти на порталах:
Как перенести настройки RLS (Row-Level Security)?
Для переноса RLS необходимо экспортировать не только роли пользователей, но и ограничения доступа к данным, которые хранятся в объектах конфигурации. Используйте следующий подход:
1. Экспортируйте конфигурацию исходной базы в файл .cf.
2. Откройте целевую конфигурацию и сравните объекты с ограничениями (через Конфигуратор → Сравнить конфигурации).
3. Вручную перенесите настройки RLS для каждого объекта метаданных (справочников, документов).
Это трудоемкий процесс, но он гарантирует корректную работу ограничений в новой базе.
5. Метод 3: Перенос через обмен данными (Универсальный формат, EDI, XML)
Если базы находятся в разных информационных системах или требуется регулярный обмен, наиболее надежный способ — настройка обмена данными через универсальные форматы. В 1С для этого предусмотрены:
Для переноса настроек пользователей через обмен:
- Создайте план обмена в обеих базах (
Конфигуратор → Объекты → Планы обмена). - Настройте правила обмена для объекта
Пользователь(если он есть в конфигурации) или создайте обработку, которая будет формировать данные для обмена. - Добавьте в правила обмена виртуальные таблицы:
ПользовательскиеНастройкиХраненияПользовательскиеНастройкиОтчетов
Узлы обмена или вручную через файлы.Пример кода для выгрузки настроек в XML:
// Выгрузка пользовательских настроек в XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Temp\UserSettings.xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("ПользовательскиеНастройки");
// Выгружаем настройки из виртуальной таблицы
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПользовательскиеНастройкиХранения.Пользователь КАК Пользователь,
| ПользовательскиеНастройкиХранения.ИмяНастройки КАК ИмяНастройки,
| ПользовательскиеНастройкиХранения.Значение КАК Значение
|ИЗ
| ПользовательскиеНастройкиХранения";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Настройка");
ЗаписьXML.ЗаписатьАтрибут("Пользователь", Выборка.Пользователь);
ЗаписьXML.ЗаписатьАтрибут("Имя", Выборка.ИмяНастройки);
ЗаписьXML.ЗаписатьЗначение(Выборка.Значение);
ЗаписьXML.ЗаписатьКонецЭлемента(); // Настройка
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента(); // ПользовательскиеНастройки
ЗаписьXML.Закрыть();
Для загрузки используйте обратный процесс с ЧтениеXML.
Преимущества метода:
- ✅ Подходит для регулярного обмена.
- ✅ Можно интегрировать с другими системами.
- ✅ Поддерживает версионность данных.
Недостатки:
- ❌ Требует настройки плана обмена.
- ❌ Возможны конфликты при синхронизации.
⚠️ Внимание: При обмене через Планы обмена не переносятся пароли пользователей (даже в зашифрованном виде). Их придется сбросить или задать заново в целевой базе.
Используйте обмен данными через XML/EDI, если нужно переносить настройки регулярно или интегрироваться с внешними системами. Для разового переноса проще использовать скрипты.
6. Типичные ошибки и как их избежать
Даже опытные администраторы 1С сталкиваются с проблемами при переносе пользовательских настроек. Вот наиболее распространенные ошибки и способы их предотвращения:
| Ошибка | Причина | Как избежать |
|---|---|---|
| Пользователи не видят свои настройки после переноса | Не совпадают УникальныйИдентификатор пользователей в старой и новой базе |
Используйте сопоставление по имени пользователя, а не по ID |
| Ошибки при открытии отчетов | Перенесены настройки для отчетов, которых нет в новой конфигурации | Предварительно проверьте наличие отчетов по именам |
| Настройки форм сбрасываются | Разные версии платформы (например, 8.3.18 → 8.3.20) | Используйте промежуточный формат (JSON/XML) с адаптацией структуры |
| Потеряны сохраненные варианты отчетов | Не перенесена таблица ПользовательскиеНастройкиОтчетов |
Добавьте экспорт этой таблицы в скрипт |
| Ошибки доступа после переноса | Не перенесены настройки RLS или роли | Проверьте права доступа через Администрирование → Роли |
Чтобы минимизировать риски:
- Всегда тестируйте перенос на копии рабочей базы.
- Используйте журнал регистрации для отслеживания ошибок:
ЖурналРегистрации.ОткрытьФорму(); - Создайте чек-лист контрольных точек (см. виджет ниже).
Проверка резервных копий|Сопоставление версий платформы|Тестовый перенос на копии базы|Проверка прав доступа после импорта|Сверка количества перенесенных настроек-->
Если после переноса пользователи жалуются на:
- 🔄 "Отчеты открываются с ошибкой" → проверьте соответствие имен отчетов в новой конфигурации.
- 👁️ "Не вижу свои сохраненные фильтры" → экспортируйте таблицу
ПользовательскиеНастройкиХраненияотдельно. - 🔒 "Нет доступа к документам" → проверьте настройки RLS и привязку ролей.
7. Перенос настроек в облачные решения (1С:Fresh, 1С:EDO)
Если целевая база находится в облаке (1С:Fresh, 1С:EDO), процесс переноса имеет свои особенности:
- 🌐 Ограниченный доступ к SQL — нельзя напрямую работать с таблицами
v8usersилиUserSettingsStorage. - 🔐 Аутентификация через 1С:ID — пользователи должны быть зарегистрированы в сервисе 1С:Коннект.
- 📡 Обмен через веб-сервисы — вместо прямого доступа к базе используются API.
Алгоритм переноса в 1С:Fresh:
- Экспортируйте пользователей и их настройки из локальной базы (как описано в Методе 2).
- В облачной базе:
- Создайте пользователей через
Администрирование → Пользователи и права. - Привяжите их к учетным записям 1С:Коннект.
- Создайте пользователей через
HTTPСервис.Пример кода для работы с API 1С:Fresh:
// Подключение к API 1С:Fresh
АдресСервиса = "https://api.fresh.1c.ru/...";
Заголовки = Новый Соответствие();
Заголовки.Вставить("Authorization", "Bearer " + ПолучитьТокенДоступа());
HTTPЗапрос = Новый HTTPЗапрос(АдресСервиса, Заголовки);
HTTPЗапрос.УстановитьТекст("{
""user"": ""ИвановИИ"",
""settings"": {
""reportVariants"": {...}
}
}");
Ответ = Новый HTTPСоединение().ПослатьДляОбработки(HTTPЗапрос);
Ограничения облачных решений:
- ❌ Нет доступа к
ПользовательскиеНастройкиХранения— часть настроек придется перенастраивать вручную. - ❌ Ограниченный функционал RLS — некоторые настройки безопасности могут не перенестись.
- ❌ Нет возможности прямого SQL-запроса — все операции через API.
⚠️ Внимание: В 1С:Fresh не поддерживается перенос сохраненных вариантов отчетов через стандартные механизмы. Используйте обработку "Перенос пользовательских настроек" от 1С или разрабатывайте собственное решение на основе API.
8. Оптимизация и ускорение процесса переноса
Перенос настроек для большого количества пользователей (100+) может занять часы. Чтобы ускорить процесс:
- ⚡ Параллельная обработка — разбивайте пользователей на группы и переносите их параллельно в разных сеансах.
- ⚡ Используйте SSB (Server-Side Processing) для крупных баз:
// Пример оптимизированного запроса для SQLВЫБРАТЬ РАЗРЕШЕННЫЕ
Пользователь,
ИмяНастройки,
Значение
ИЗ
ПользовательскиеНастройкиХранения
ГДЕ
Пользователь В (&СписокПользователей)
- ⚡ Кэширование данных — если переносите между несколькими базами, сохраняйте промежуточные результаты в
JSONилиSQLite.
Для ускорения переноса сохраненных вариантов отчетов используйте обработку массовой выгрузки:
// Массовая выгрузка вариантов отчетов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПользовательскиеНастройкиОтчетов.Пользователь КАК Пользователь,
| ПользовательскиеНастройкиОтчетов.ИмяОтчета КАК ИмяОтчета,
| ПользовательскиеНастройкиОтчетов.ИмяНастройки КАК ИмяНастройки,
| ПользовательскиеНастройкиОтчетов.ДанныеНастройки КАК ДанныеНастройки
|ИЗ
| ПользовательскиеНастройкиОтчетов";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ИмяФайла = "C:\Temp\Reports\" + Выборка.