Перенос пользователей и их персональных настроек между информационными базами 1С
Содержание
Скопировать настройки пользователя из одной базы 1С в другую штатной кнопкой нельзя: в 1С 8.3 они хранятся не в конфигурации и не в профиле Windows, а в служебных таблицах самой информационной базы. Поэтому переносят их тремя путями: целиком с базой через .dt, внешней обработкой через хранилища настроек или обменом данных, если речь про справочник «Пользователи» и варианты отчётов.
Частое заблуждение — что достаточно скопировать папку %APPDATA%\1C\1cv8. Там лежат кэш и локальные служебные файлы, а панели, колонки списков, отборы и настройки отчётов живут на стороне базы. Перенос папки ничего из этого не даст.
Где 1С хранит пользователей и их настройки
Перед переносом стоит понять, что именно вы копируете. Это два разных слоя.
- 👤 Пользователи информационной базы — имя, пароль (в виде хэша), роли, способ аутентификации. Хранятся в таблице
v8users. В файловой базе она внутри файла1Cv8.1CD, в клиент-серверной — отдельной таблицей в базе SQL. - 🗂 Справочник «Пользователи» — есть в типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11). Это обычные данные: ФИО, физлицо, группы доступа. Справочник связан с пользователем ИБ по уникальному идентификатору.
- ⚙️ Персональные настройки — внешний вид, настройки форм и списков, пользовательские настройки отчётов. Лежат в системных хранилищах настроек и привязаны к имени пользователя.
- 📊 Варианты отчётов — в конфигурациях на БСП сохранённые варианты хранятся в справочнике «Варианты отчётов», то есть тоже как данные.
Из этого следует главное правило. Конфигурация (.cf) не содержит ни пользователей, ни их настроек. Сравнение и объединение конфигураций, загрузка .cf или обновление их не переносят.
| Что переносим | Где лежит | Чем переносить |
|---|---|---|
| Пользователи ИБ, роли, пароли | v8users | .dt, обработка, копирование таблицы |
| Справочник «Пользователи», группы доступа | Данные конфигурации | Обмен XML, Конвертация данных |
| Внешний вид, формы, списки | Хранилища настроек | Внешняя обработка |
| Варианты отчётов (БСП) | Справочник «Варианты отчётов» | Обмен XML |
Самый простой случай: база-приёмник — копия источника
Если новая база создаётся из старой, ничего изобретать не нужно. Выгрузка в .dt уносит всё: пользователей, хранилища настроек и данные.
- В Конфигураторе источника откройте
Администрирование → Выгрузить информационную базуи сохраните файл.dt. - В Конфигураторе приёмника выполните
Администрирование → Загрузить информационную базу. - Загрузка
.dtтребует монопольного доступа и полностью заменяет содержимое приёмника.
Загрузка .dt стирает все данные базы-приёмника. Сделайте её резервную копию и убедитесь, что в ней никто не работает: открытые сеансы придётся завершить.
Для файловой базы ещё проще — скопировать файл 1Cv8.1CD, когда база никем не открыта. Пользователи и настройки переедут вместе с ним.
Сложности начинаются, когда в приёмнике уже есть свои данные и затирать их нельзя. Дальше — именно этот случай.
Перенос списка пользователей через таблицу v8users
Это приём из практики администраторов, а не штатная функция. Он работает только при одном условии: конфигурации источника и приёмника должны иметь общее происхождение. Роли в записи пользователя хранятся по внутренним идентификаторам объектов метаданных. Если конфигурации разные, роли не найдутся, и пользователи окажутся без прав.
Клиент-серверная база
- Завершите все сеансы в обеих базах и остановите в них работу (блокировка начала сеансов в консоли кластера).
- Сделайте резервную копию базы -приёмника средствами СУБД.
- Скопируйте содержимое таблицы
v8usersиз базы источника в базу приёмника (средствами СУБД). - В 8.3 сведения о пользователях дублируются в записи
users.usrтаблицыParams. Её тоже нужно перенести, иначе платформа может не увидеть изменения. - Запустите приёмник и проверьте вход нескольких пользователей.
Файловая база
Внутрь 1Cv8.1CD средствами 1С не попасть. Администраторы пользуются сторонней утилитой Tool_1CD: она умеет выгружать и загружать отдельные таблицы файловой базы. Это неофициальный инструмент. Работайте только с копиями файлов и при закрытой базе.
Если пользователей меньше 15–20, быстрее и безопаснее завести их в приёмнике вручную, а затем перенести только настройки обработкой из следующих разделов.
Выгрузка и загрузка пользователей обработкой
Безопасная альтернатива прямому копированию — внешняя обработка, которая читает пользователей через объект ПользователиИнформационнойБазы и создаёт их в другой базе. Роли ищутся по имени, поэтому подойдут и конфигурации разного происхождения, если имена ролей совпадают.
Пароль переносится через свойство СохраняемоеЗначениеПароля: это хэш, сам пароль обработка не видит.
&НаСервереБезКонтекста
Процедура ВыгрузитьПользователей(ИмяФайла)
Список = Новый Массив;
Для Каждого П Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
Роли = Новый Массив;
Для Каждого Роль Из П.Роли Цикл
Роли.Добавить(Роль.Имя);
КонецЦикла;
Описание = Новый Структура;
Описание.Вставить("Имя", П.Имя);
Описание.Вставить("ПолноеИмя", П.ПолноеИмя);
Описание.Вставить("Пароль", П.СохраняемоеЗначениеПароля);
Описание.Вставить("АутСтандартная", П.АутентификацияСтандартная);
Описание.Вставить("АутОС", П.АутентификацияОС);
Описание.Вставить("ПользовательОС", П.ПользовательОС);
Описание.Вставить("ПоказыватьВСписке", П.ПоказыватьВСпискеВыбора);
Описание.Вставить("Роли", Роли);
Список.Добавить(Описание);
КонецЦикла;
ЗначениеВФайл(ИмяФайла, Список);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗагрузитьПользователей(ИмяФайла)
Список = ЗначениеИзФайла(ИмяФайла);
Для Каждого Д Из Список Цикл
П = ПользователиИнформационнойБазы.НайтиПоИмени(Д.Имя);
Если П = Неопределено Тогда
П = ПользователиИнформационнойБазы.СоздатьПользователя();
П.Имя = Д.Имя;
КонецЕсли;
П.ПолноеИмя = Д.ПолноеИмя;
П.СохраняемоеЗначениеПароля = Д.Пароль;
П.АутентификацияСтандартная = Д.АутСтандартная;
П.АутентификацияОС = Д.АутОС;
П.ПользовательОС = Д.ПользовательОС;
П.ПоказыватьВСпискеВыбора = Д.ПоказыватьВСписке;
П.Роли.Очистить();
Для Каждого ИмяРоли Из Д.Роли Цикл
Роль = Метаданные.Роли.Найти(ИмяРоли);
Если Роль <> Неопределено Тогда
П.Роли.Добавить(Роль);
КонецЕсли;
КонецЦикла;
П.Записать();
КонецЦикла;
КонецПроцедуры
Обработку запускает пользователь с полными правами через Файл → Открыть. Путь к файлу указывается на машине, где выполняется серверный код: в файловой базе это компьютер пользователя, в клиент-серверной — сервер 1С.
Особенность типовых конфигураций на БСП
В Бухгалтерии, ЗУП и УТ роли выдаются не вручную, а через группы доступа. Пользователь ИБ, созданный кодом, не будет связан с элементом справочника «Пользователи»: у нового пользователя ИБ другой уникальный идентификатор. Порядок для таких баз другой:
- Создайте пользователей в приёмнике штатно:
Администрирование → Настройки пользователей и прав → Пользователи, с включённым флагом входа в программу. - Включите их в нужные группы доступа — роли назначатся автоматически.
- Перенесите персональные настройки обработкой из следующего раздела.
Как скопировать настройки интерфейса, форм и отчётов
Персональные настройки читаются и записываются через пять системных хранилищ. В коде они доступны как свойства глобального контекста:
| Хранилище | Что в нём |
|---|---|
ХранилищеОбщихНастроек | Общие настройки, в т. ч. значения по умолчанию из конфигурации |
ХранилищеСистемныхНастроек | Внешний вид, панели, настройки начальной страницы |
ХранилищеНастроекДанныхФорм | Колонки, отборы и сортировки форм и списков |
ХранилищеПользовательскихНастроекОтчетов | Пользовательские настройки отчётов |
ХранилищеВариантовОтчетов | Варианты отчётов (в БСП переопределено справочником) |
У стандартного хранилища есть метод Выбрать() с отбором по пользователю и метод Сохранить() с параметром имени пользователя. Этого достаточно, чтобы выгрузить все настройки одного человека в файл и загрузить их в другую базу.
&НаСервереБезКонтекста
Функция Хранилища()
Результат = Новый Структура;
Результат.Вставить("Общие", ХранилищеОбщихНастроек);
Результат.Вставить("Системные", ХранилищеСистемныхНастроек);
Результат.Вставить("ДанныеФорм", ХранилищеНастроекДанныхФорм);
Результат.Вставить("Отчеты", ХранилищеПользовательскихНастроекОтчетов);
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Процедура ВыгрузитьНастройки(ИмяПользователя, ИмяФайла)
Записи = Новый Массив;
Для Каждого Элемент Из Хранилища() Цикл
Попытка
Выборка = Элемент.Значение.Выбрать(Новый Структура("Пользователь", ИмяПользователя));
Исключение
Продолжить; // хранилище переопределено в конфигурации
КонецПопытки;
Пока Выборка.Следующий() Цикл
Запись = Новый Структура;
Запись.Вставить("Хранилище", Элемент.Ключ);
Запись.Вставить("КлючОбъекта", Выборка.КлючОбъекта);
Запись.Вставить("КлючНастроек", Выборка.КлючНастроек);
Запись.Вставить("Настройки", Выборка.Настройки);
Записи.Добавить(Запись);
КонецЦикла;
КонецЦикла;
ЗначениеВФайл(ИмяФайла, Записи);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗагрузитьНастройки(ИмяПользователя, ИмяФайла)
Записи = ЗначениеИзФайла(ИмяФайла);
Список = Хранилища();
Для Каждого Запись Из Записи Цикл
Список[Запись.Хранилище].Сохранить(Запись.КлючОбъекта,
Запись.КлючНастроек, Запись.Настройки, , ИмяПользователя);
КонецЦикла;
КонецПроцедуры
Имя пользователя в приёмнике можно указать другое: настройки лягут тому, чьё имя передано в ЗагрузитьНастройки. Так удобно раздать настройки «эталонного» бухгалтера новым сотрудникам.
Загружайте настройки, когда целевой пользователь не в программе. Иначе при выходе он перезапишет загруженное своими текущими настройками.
Ссылки внутри настроек
Отборы и параметры отчётов часто содержат ссылки: организацию, склад, контрагента. Ссылка хранится по уникальному идентификатору. Если базы одного происхождения, ссылки совпадут. Если приёмник заполнялся отдельно, в отборах появится <Объект не найден> — такие отборы придётся выставить заново.
Копирование внутри одной базы
Когда пользователи уже перенесены и нужно лишь раздать одинаковые настройки, обработка не нужна. В конфигурациях на БСП откройте Администрирование → Настройки пользователей и прав и перейдите по ссылке копирования или персональных настроек пользователей (в разных релизах ссылки называются по-разному). Там можно выбрать пользователя-образец, отметить виды настроек и скопировать их выбранным сотрудникам.
Перенос пользователей и настроек в клиент-серверном варианте
В клиент-серверной базе всё то же самое, но меняется несколько практических деталей.
- 🖥 Файл выгрузки создаётся на сервере 1С. Код с
&НаСервереБезКонтекставыполняется рабочим процессом, и путь видаC:\Temp\settings.binотносится к серверу. Учётной записи службы 1С нужны права на запись в эту папку. - 🗄 Настройки лежат в таблицах SQL. Их имена начинаются с подчёркивания:
_CommSettings,_SystemSettings,_FrmDtSettings,_RepSettings. Прямая правка этих таблиц не поддерживается — используйте обработку. - 🔒 Копирование
v8usersсредствами СУБД — только при заблокированном начале сеансов и с резервной копией. Блокировку ставят в консоли кластера в свойствах информационной базы. - 🔁 Аутентификация ОС. Если пользователи входят по доменной учётке, проверьте поле
ПользовательОСв приёмнике: оно хранится в виде\\ДОМЕН\логини после переноса должно совпадать с реальной учётной записью.
Если базы на разных серверах, проще всего выгрузить настройки в файл на сервере-источнике, скопировать его на сервер-приёмник и загрузить там. Тянуть одну обработку через два кластера незачем.
Автоматизация через обмен данными и Конвертацию данных
Справочник «Пользователи», группы доступа и варианты отчётов БСП — это данные конфигурации. Их переносят теми же средствами, что и любые справочники.
Универсальный обмен XML
Для разового переноса между базами одной конфигурации подходит обработка «Выгрузка и загрузка данных XML»:
- В источнике отметьте справочники «Пользователи», «Группы доступа» и «Варианты отчётов».
- Выгрузите их в файл, затем загрузите в приёмник той же обработкой.
- После загрузки откройте карточку каждого пользователя и проверьте, что вход в программу разрешён. Связь с пользователем ИБ при таком переносе может потеряться, если пользователь ИБ в приёмнике создавался отдельно.
Конвертация данных
Если конфигурации разные или перенос регулярный (например, из базы-шаблона в базы новых филиалов), правила пишут в Конвертации данных. Правила описывают соответствие справочников пользователей, групп доступа и вариантов отчётов. Персональные настройки из хранилищ Конвертация не переносит — их всё равно загружают обработкой.
Частые ошибки при переносе
- ❌ Перенесли пользователей, а прав нет. Таблица
v8usersскопирована между конфигурациями разного происхождения — идентификаторы ролей не совпали. Назначьте роли заново или используйте обработку, которая ищет роли по имени. - ❌ Пользователь есть, но программа не пускает. В конфигурации на БСП пользователь ИБ не связан с элементом справочника «Пользователи». Свяжите их в карточке пользователя.
- ❌ Настройки загрузились, но пропали. Пользователь был в программе во время загрузки и при выходе сохранил старые.
- ❌ Обработка выгрузила пустой файл. Имя пользователя передано с ошибкой или по полному имени вместо имени для входа. Отбор работает по полю
Имя. - ❌ Перенесли варианты отчётов через хранилище, а их не видно. В БСП варианты хранятся в справочнике «Варианты отчётов» — переносите их обменом XML.
Частые вопросы
Переносятся ли пароли пользователей?
v8users или свойство СохраняемоеЗначениеПароля. Переносится хэш, сам пароль никто не видит, и пользователь входит со старым паролем.Можно ли перенести только список баз из окна запуска?
%APPDATA%\1C\1CEStart\ibases.v8i. Скопируйте его в профиль пользователя на новом компьютере — к настройкам внутри базы это отношения не имеет.Сохранятся ли настройки после обновления конфигурации?
Нужны ли права администратора для переноса?
Можно ли перенести настройки из файловой базы в клиент-серверную?
.dt из файловой базы и загрузка в серверную, если данные приёмника не нужны.