Перенос пользователей и их персональных настроек между информационными базами 1С

· 9 мин

Содержание

Скопировать настройки пользователя из одной базы 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 уносит всё: пользователей, хранилища настроек и данные.

  1. В Конфигураторе источника откройте Администрирование → Выгрузить информационную базу и сохраните файл .dt.
  2. В Конфигураторе приёмника выполните Администрирование → Загрузить информационную базу.
  3. Загрузка .dt требует монопольного доступа и полностью заменяет содержимое приёмника.

Загрузка .dt стирает все данные базы-приёмника. Сделайте её резервную копию и убедитесь, что в ней никто не работает: открытые сеансы придётся завершить.

Для файловой базы ещё проще — скопировать файл 1Cv8.1CD, когда база никем не открыта. Пользователи и настройки переедут вместе с ним.

Сложности начинаются, когда в приёмнике уже есть свои данные и затирать их нельзя. Дальше — именно этот случай.

Перенос списка пользователей через таблицу v8users

Это приём из практики администраторов, а не штатная функция. Он работает только при одном условии: конфигурации источника и приёмника должны иметь общее происхождение. Роли в записи пользователя хранятся по внутренним идентификаторам объектов метаданных. Если конфигурации разные, роли не найдутся, и пользователи окажутся без прав.

Клиент-серверная база

  1. Завершите все сеансы в обеих базах и остановите в них работу (блокировка начала сеансов в консоли кластера).
  2. Сделайте резервную копию базы -приёмника средствами СУБД.
  3. Скопируйте содержимое таблицы v8users из базы источника в базу приёмника (средствами СУБД).
  4. В 8.3 сведения о пользователях дублируются в записи users.usr таблицы Params. Её тоже нужно перенести, иначе платформа может не увидеть изменения.
  5. Запустите приёмник и проверьте вход нескольких пользователей.

Файловая база

Внутрь 1Cv8.1CD средствами 1С не попасть. Администраторы пользуются сторонней утилитой Tool_1CD: она умеет выгружать и загружать отдельные таблицы файловой базы. Это неофициальный инструмент. Работайте только с копиями файлов и при закрытой базе.

Если пользователей меньше 15–20, быстрее и безопаснее завести их в приёмнике вручную, а затем перенести только настройки обработкой из следующих разделов.

Выгрузка и загрузка пользователей обработкой

Безопасная альтернатива прямому копированию — внешняя обработка, которая читает пользователей через объект ПользователиИнформационнойБазы и создаёт их в другой базе. Роли ищутся по имени, поэтому подойдут и конфигурации разного происхождения, если имена ролей совпадают.

Пароль переносится через свойство СохраняемоеЗначениеПароля: это хэш, сам пароль обработка не видит.

&НаСервереБезКонтекста
Процедура ВыгрузитьПользователей(ИмяФайла)
    Список = Новый Массив;
    Для Каждого П Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
        Роли = Новый Массив;
        Для Каждого Роль Из П.Роли Цикл
            Роли.Добавить(Роль.Имя);
        КонецЦикла;
        Описание = Новый Структура;
        Описание.Вставить("Имя", П.Имя);
        Описание.Вставить("ПолноеИмя", П.ПолноеИмя);
        Описание.Вставить("Пароль", П.СохраняемоеЗначениеПароля);
        Описание.Вставить("АутСтандартная", П.АутентификацияСтандартная);
        Описание.Вставить("АутОС", П.АутентификацияОС);
        Описание.Вставить("ПользовательОС", П.ПользовательОС);
        Описание.Вставить("ПоказыватьВСписке", П.ПоказыватьВСпискеВыбора);
        Описание.Вставить("Роли", Роли);
        Список.Добавить(Описание);
    КонецЦикла;
    ЗначениеВФайл(ИмяФайла, Список);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗагрузитьПользователей(ИмяФайла)
    Список = ЗначениеИзФайла(ИмяФайла);
    Для Каждого Д Из Список Цикл
        П = ПользователиИнформационнойБазы.НайтиПоИмени(Д.Имя);
        Если П = Неопределено Тогда
            П = ПользователиИнформационнойБазы.СоздатьПользователя();
            П.Имя = Д.Имя;
        КонецЕсли;
        П.ПолноеИмя = Д.ПолноеИмя;
        П.СохраняемоеЗначениеПароля = Д.Пароль;
        П.АутентификацияСтандартная = Д.АутСтандартная;
        П.АутентификацияОС = Д.АутОС;
        П.ПользовательОС = Д.ПользовательОС;
        П.ПоказыватьВСпискеВыбора = Д.ПоказыватьВСписке;
        П.Роли.Очистить();
        Для Каждого ИмяРоли Из Д.Роли Цикл
            Роль = Метаданные.Роли.Найти(ИмяРоли);
            Если Роль <> Неопределено Тогда
                П.Роли.Добавить(Роль);
            КонецЕсли;
        КонецЦикла;
        П.Записать();
    КонецЦикла;
КонецПроцедуры

Обработку запускает пользователь с полными правами через Файл → Открыть. Путь к файлу указывается на машине, где выполняется серверный код: в файловой базе это компьютер пользователя, в клиент-серверной — сервер 1С.

Особенность типовых конфигураций на БСП

В Бухгалтерии, ЗУП и УТ роли выдаются не вручную, а через группы доступа. Пользователь ИБ, созданный кодом, не будет связан с элементом справочника «Пользователи»: у нового пользователя ИБ другой уникальный идентификатор. Порядок для таких баз другой:

  1. Создайте пользователей в приёмнике штатно: Администрирование → Настройки пользователей и прав → Пользователи, с включённым флагом входа в программу.
  2. Включите их в нужные группы доступа — роли назначатся автоматически.
  3. Перенесите персональные настройки обработкой из следующего раздела.
Как переносить пользователей в вашем случае?

Как скопировать настройки интерфейса, форм и отчётов

Персональные настройки читаются и записываются через пять системных хранилищ. В коде они доступны как свойства глобального контекста:

ХранилищеЧто в нём
ХранилищеОбщихНастроекОбщие настройки, в т. ч. значения по умолчанию из конфигурации
ХранилищеСистемныхНастроекВнешний вид, панели, настройки начальной страницы
ХранилищеНастроекДанныхФормКолонки, отборы и сортировки форм и списков
ХранилищеПользовательскихНастроекОтчетовПользовательские настройки отчётов
ХранилищеВариантовОтчетовВарианты отчётов (в БСП переопределено справочником)

У стандартного хранилища есть метод Выбрать() с отбором по пользователю и метод Сохранить() с параметром имени пользователя. Этого достаточно, чтобы выгрузить все настройки одного человека в файл и загрузить их в другую базу.

&НаСервереБезКонтекста
Функция Хранилища()
    Результат = Новый Структура;
    Результат.Вставить("Общие", ХранилищеОбщихНастроек);
    Результат.Вставить("Системные", ХранилищеСистемныхНастроек);
    Результат.Вставить("ДанныеФорм", ХранилищеНастроекДанныхФорм);
    Результат.Вставить("Отчеты", ХранилищеПользовательскихНастроекОтчетов);
    Возврат Результат;
КонецФункции

&НаСервереБезКонтекста
Процедура ВыгрузитьНастройки(ИмяПользователя, ИмяФайла)
    Записи = Новый Массив;
    Для Каждого Элемент Из Хранилища() Цикл
        Попытка
            Выборка = Элемент.Значение.Выбрать(Новый Структура("Пользователь", ИмяПользователя));
        Исключение
            Продолжить; // хранилище переопределено в конфигурации
        КонецПопытки;
        Пока Выборка.Следующий() Цикл
            Запись = Новый Структура;
            Запись.Вставить("Хранилище", Элемент.Ключ);
            Запись.Вставить("КлючОбъекта", Выборка.КлючОбъекта);
            Запись.Вставить("КлючНастроек", Выборка.КлючНастроек);
            Запись.Вставить("Настройки", Выборка.Настройки);
            Записи.Добавить(Запись);
        КонецЦикла;
    КонецЦикла;
    ЗначениеВФайл(ИмяФайла, Записи);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗагрузитьНастройки(ИмяПользователя, ИмяФайла)
    Записи = ЗначениеИзФайла(ИмяФайла);
    Список = Хранилища();
    Для Каждого Запись Из Записи Цикл
        Список[Запись.Хранилище].Сохранить(Запись.КлючОбъекта,
            Запись.КлючНастроек, Запись.Настройки, , ИмяПользователя);
    КонецЦикла;
КонецПроцедуры

Имя пользователя в приёмнике можно указать другое: настройки лягут тому, чьё имя передано в ЗагрузитьНастройки. Так удобно раздать настройки «эталонного» бухгалтера новым сотрудникам.

Загружайте настройки, когда целевой пользователь не в программе. Иначе при выходе он перезапишет загруженное своими текущими настройками.

Ссылки внутри настроек

Отборы и параметры отчётов часто содержат ссылки: организацию, склад, контрагента. Ссылка хранится по уникальному идентификатору. Если базы одного происхождения, ссылки совпадут. Если приёмник заполнялся отдельно, в отборах появится <Объект не найден> — такие отборы придётся выставить заново.

Копирование внутри одной базы

Когда пользователи уже перенесены и нужно лишь раздать одинаковые настройки, обработка не нужна. В конфигурациях на БСП откройте Администрирование → Настройки пользователей и прав и перейдите по ссылке копирования или персональных настроек пользователей (в разных релизах ссылки называются по-разному). Там можно выбрать пользователя-образец, отметить виды настроек и скопировать их выбранным сотрудникам.

Перенос пользователей и настроек в клиент-серверном варианте

В клиент-серверной базе всё то же самое, но меняется несколько практических деталей.

  • 🖥 Файл выгрузки создаётся на сервере 1С. Код с &НаСервереБезКонтекста выполняется рабочим процессом, и путь вида C:\Temp\settings.bin относится к серверу. Учётной записи службы 1С нужны права на запись в эту папку.
  • 🗄 Настройки лежат в таблицах SQL. Их имена начинаются с подчёркивания: _CommSettings, _SystemSettings, _FrmDtSettings, _RepSettings. Прямая правка этих таблиц не поддерживается — используйте обработку.
  • 🔒 Копирование v8users средствами СУБД — только при заблокированном начале сеансов и с резервной копией. Блокировку ставят в консоли кластера в свойствах информационной базы.
  • 🔁 Аутентификация ОС. Если пользователи входят по доменной учётке, проверьте поле ПользовательОС в приёмнике: оно хранится в виде \\ДОМЕН\логин и после переноса должно совпадать с реальной учётной записью.

Если базы на разных серверах, проще всего выгрузить настройки в файл на сервере-источнике, скопировать его на сервер-приёмник и загрузить там. Тянуть одну обработку через два кластера незачем.

Автоматизация через обмен данными и Конвертацию данных

Справочник «Пользователи», группы доступа и варианты отчётов БСП — это данные конфигурации. Их переносят теми же средствами, что и любые справочники.

Универсальный обмен XML

Для разового переноса между базами одной конфигурации подходит обработка «Выгрузка и загрузка данных XML»:

  1. В источнике отметьте справочники «Пользователи», «Группы доступа» и «Варианты отчётов».
  2. Выгрузите их в файл, затем загрузите в приёмник той же обработкой.
  3. После загрузки откройте карточку каждого пользователя и проверьте, что вход в программу разрешён. Связь с пользователем ИБ при таком переносе может потеряться, если пользователь ИБ в приёмнике создавался отдельно.

Конвертация данных

Если конфигурации разные или перенос регулярный (например, из базы-шаблона в базы новых филиалов), правила пишут в Конвертации данных. Правила описывают соответствие справочников пользователей, групп доступа и вариантов отчётов. Персональные настройки из хранилищ Конвертация не переносит — их всё равно загружают обработкой.

Перед переносом пользователей и настроек
Выполнено: 0 / 5

Частые ошибки при переносе

  • ❌ Перенесли пользователей, а прав нет. Таблица v8users скопирована между конфигурациями разного происхождения — идентификаторы ролей не совпали. Назначьте роли заново или используйте обработку, которая ищет роли по имени.
  • ❌ Пользователь есть, но программа не пускает. В конфигурации на БСП пользователь ИБ не связан с элементом справочника «Пользователи». Свяжите их в карточке пользователя.
  • ❌ Настройки загрузились, но пропали. Пользователь был в программе во время загрузки и при выходе сохранил старые.
  • ❌ Обработка выгрузила пустой файл. Имя пользователя передано с ошибкой или по полному имени вместо имени для входа. Отбор работает по полю Имя.
  • ❌ Перенесли варианты отчётов через хранилище, а их не видно. В БСП варианты хранятся в справочнике «Варианты отчётов» — переносите их обменом XML.

Частые вопросы

Переносятся ли пароли пользователей?
Да, если переносить таблицу v8users или свойство СохраняемоеЗначениеПароля. Переносится хэш, сам пароль никто не видит, и пользователь входит со старым паролем.
Можно ли перенести только список баз из окна запуска?
Да. Список баз хранится в файле %APPDATA%\1C\1CEStart\ibases.v8i. Скопируйте его в профиль пользователя на новом компьютере — к настройкам внутри базы это отношения не имеет.
Сохранятся ли настройки после обновления конфигурации?
Да. Обновление конфигурации не трогает хранилища настроек. Отдельные настройки могут сброситься, если в новом релизе изменилась форма или отчёт.
Нужны ли права администратора для переноса?
Да. Читать и записывать чужие настройки и создавать пользователей может только пользователь с полными правами.
Можно ли перенести настройки из файловой базы в клиент-серверную?
Можно: подойдёт и обработка через хранилища, и обмен XML. Проще всего — выгрузка .dt из файловой базы и загрузка в серверную, если данные приёмника не нужны.