Как установить уникальный идентификатор 1С — база, список баз и объекты
Содержание
Уникальный идентификатор (УИД) в 1С 8.3 вручную почти никогда не «устанавливают»: платформа создаёт его сама — при регистрации базы в кластере, при добавлении базы в список запуска и при записи каждого нового объекта. Задать УИД руками имеет смысл в двух случаях: исправить строку ID= в файле ibases.v8i и присвоить заранее известный GUID новому элементу через УстановитьСсылкуНового() при обмене данными.
Всё остальное — это не установка, а правильный ответ программе на вопрос «это копия или перенос?» и контроль префиксов в распределённой базе. Ниже каждый уровень разобран отдельно, с командами и кодом.
Какие идентификаторы есть в 1С и за что каждый отвечает
Под «УИД 1С» администраторы и программисты понимают разные вещи. Путаница начинается, когда меняют не тот идентификатор, который нужно.
| Уровень | Где хранится | Кто создаёт | Можно ли задать вручную |
|---|---|---|---|
| 🖥 Идентификатор базы в кластере | реестр кластера сервера 1С | сервер при создании базы | нет |
| 📋 ID записи в списке баз | файл ibases.v8i пользователя | окно запуска при добавлении базы | да, правкой файла |
| 🔁 Код узла плана обмена и префикс | данные самой базы | при настройке синхронизации | да, в настройках |
| 🧾 GUID ссылки объекта | поле ссылки справочника или документа | платформа при записи | да, кодом до первой записи |
| 🛡 Идентификатор базы для подсистем БСП | константа в базе | типовая конфигурация | нет, только реакция на копию |
Каждый уровень живёт своей жизнью. Новый ID в ibases.v8i не меняет идентификатор базы на сервере. Копия базы через .dt получит новый идентификатор в кластере, но GUID всех справочников и документов внутри останутся прежними.
Что 1С генерирует сама при создании базы
Клиент-серверная база
Когда вы создаёте базу в консоли администрирования серверов или через окно запуска, кластер присваивает ей UUID вида 2f6a1c3e-8b9d-4e2a-9c71-5d0e4a3b1f20. По нему сервер различает базы, сеансы и соединения. Имя базы (Ref в строке подключения) — для людей, UUID — для кластера.
Изменить этот UUID нельзя. Если удалить базу из кластера и зарегистрировать ту же базу СУБД заново, она получит новый идентификатор. Для пользователей это незаметно, а вот скрипты, которые обращаются к базе по старому UUID, перестанут работать.
Файловая база
У файловой базы нет кластерного идентификатора. Её однозначно определяет путь к каталогу с файлом 1Cv8.1CD. Перенесли каталог — для платформы это та же база по новому адресу.
Запись в списке баз
При нажатии «Добавить» в окне запуска 1С пишет в ibases.v8i новую секцию и генерирует для неё GUID в строке ID=. По этому GUID на компьютере пользователя называются каталоги кэша:
- 📁
%APPDATA%\1C\1cv8\<ID> - 📁
%LOCALAPPDATA%\1C\1cv8\<ID>
Поэтому две записи с одинаковым ID на одном компьютере начинают делить кэш и пользовательские настройки. Это самый частый «конфликт УИД», с которым сталкивается администратор.
Объекты внутри базы
Каждый элемент справочника, документ, бизнес-процесс получают GUID при первой записи. Он не зависит от кода и номера: код можно перенумеровать, а ссылка останется прежней. Получить GUID в коде можно так:
ГУИД = Строка(Ссылка.УникальныйИдентификатор());
Ручная настройка идентификаторов в распределённой базе
В распределённой информационной базе (РИБ) и обменах между разными базами важны три вещи: уникальные коды узлов, уникальные префиксы и совпадение GUID одних и тех же объектов.
Префикс базы
Префикс попадает в номера документов и коды справочников. Если у главной базы и у филиала один префикс, документы будут создаваться с одинаковыми номерами, и при обмене вы получите дубли номеров.
В Бухгалтерии 3.0 и других конфигурациях на БСП префикс задают в разделе Администрирование → Синхронизация данных. Правило простое:
- Перед настройкой обмена назначьте каждой базе свой префикс из 2 символов, например
ЦОдля центрального офиса иФ1,Ф2для филиалов. - Запишите соответствие в регламент, чтобы новый филиал не получил занятый префикс.
- Не меняйте префикс у работающей базы без необходимости: старые документы сохранят прежние номера, новые пойдут с новым префиксом.
Коды узлов плана обмена
Каждая база в обмене видит себя предопределённым узлом «этот узел», а остальные — обычными узлами. Коды узлов должны быть уникальны в пределах схемы обмена. Типовые конфигурации формируют их сами при настройке синхронизации, ручная правка нужна только в нетиповых обменах.
Не создавайте филиал копированием каталога или .dt главной базы. У копии будет тот же «этот узел» и тот же префикс. Подчинённый узел РИБ создают из главной базы через помощник настройки синхронизации — так он получает собственный код.
Принудительная установка GUID объекта
Когда объект нужно создать в базе-приёмнике с тем же GUID, что и в базе-источнике, используют метод УстановитьСсылкуНового(). Так работают правила обмена, и так же можно поступить в своей обработке загрузки.
ИдентификаторСтрокой = "3f2a9c10-7b4e-4d61-a2c5-8e9f0d1b2c34";
НовыйИД = Новый УникальныйИдентификатор(ИдентификаторСтрокой);
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(НовыйИД);
Объект = Ссылка.ПолучитьОбъект();
Если Объект = Неопределено Тогда
// Элемента с таким GUID в базе ещё нет — создаём с заданной ссылкой
Объект = Справочники.Номенклатура.СоздатьЭлемент();
Объект.УстановитьСсылкуНового(Ссылка);
КонецЕсли;
Объект.Наименование = "Бумага офисная А4";
Объект.Записать();
Ключевые моменты:
- 🔑
УстановитьСсылкуНового()работает только для нового, ещё не записанного объекта. Сменить GUID у существующего элемента нельзя. - 🔑
ПолучитьОбъект()вернётНеопределено, если по ссылке ничего нет. Эта проверка защищает от повторного создания. - 🔑 Если в базе уже лежит «битая ссылка» с этим GUID в других документах, после записи элемента они автоматически начнут на него указывать.
Последний пункт — рабочий приём восстановления: в отчётах видно <Объект не найден> (123:a2c58e9f0d1b2c34...), вы берёте GUID из источника или из данных битой ссылки и создаёте элемент с этим GUID. Документы «оживают» без перепроведения ссылок.
Командная строка и файлы: как посмотреть и поправить идентификаторы
Идентификатор базы на сервере через rac
Утилита rac лежит в каталоге bin установленной платформы и работает через сервер администрирования ras. Сначала узнайте UUID кластера, затем список баз:
rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
Во втором выводе строка infobase — это и есть уникальный идентификатор базы в кластере, рядом name и descr. Если на кластере задан администратор, добавьте параметры авторизации — точный синтаксис покажет rac help infobase.
Этот UUID нужен для скриптов: завершение сеансов конкретной базы, блокировка регламентных заданий, выгрузка списка соединений.
ID записи в ibases.v8i
Файл списка баз пользователя лежит в %APPDATA%\1C\1CEStart\ibases.v8i. Секция выглядит так:
[Бухгалтерия предприятия]
Connect=Srvr="srv1c";Ref="bp_main";
ID=9b6f2d41-3c7a-4e85-b0d2-6a1f8e4c7d93
Folder=/
Новый GUID для строки ID= удобно получить в PowerShell:
[guid]::NewGuid()
Порядок правки:
- Закройте все окна 1С на этом компьютере.
- Сделайте копию
ibases.v8i. - Замените значение
ID=на новый GUID у дублирующейся записи. - Сохраните файл в той же кодировке, в какой он был открыт (обычно UTF-8 с BOM).
- Запустите 1С: для записи с новым ID создастся свой каталог кэша, база откроется с чистыми пользовательскими настройками окна.
💡 Если список баз раздаётся всем через общий файл .v8i на сетевом ресурсе или через 1CEStart.cfg, генерируйте ID один раз в эталонном файле. Тогда у всех сотрудников кэш конкретной базы будет называться одинаково, и его проще чистить скриптом.
Конфликты идентификаторов: симптомы и решения
Почему ответ «копия или перенос» так важен
Ошибка в этом диалоге стоит дорого. Ответите «перемещена» на тестовой копии — копия начнёт выгружать данные в рабочие узлы обмена, отправлять письма контрагентам и забирать выписки из банка. Ответите «копия» на рабочей базе после переезда — замолчат обмены и регламентные задания, и это заметят через день-два.
Перед первым запуском восстановленной копии сначала проверьте, что открываете именно копию, и только потом отвечайте на вопрос. Если ошиблись, блокировку работы с внешними ресурсами можно снять или включить позже в разделе Администрирование — ищите настройку регламентных операций и блокировки внешних ресурсов.
Восстановление узла РИБ из резервной копии
Узел обмена помнит номера отправленных и принятых сообщений. После отката узла на вчерашнюю копию номера расходятся с тем, что ждёт другая сторона. Признак — обмен перестаёт принимать сообщения или повторно присылает уже загруженные данные.
Порядок действий: выполните обмен с главного узла, затем в подчинённом узле загрузите свежий пакет. Если обмен не восстанавливается, подчинённый узел проще пересоздать из главного, чем вручную выравнивать номера сообщений.
Облачные сервисы и аренда 1С: что меняется
В облаке на модели сервиса (например, 1С:Фреш) идентификаторы базы и кластера пользователю недоступны. База — это область данных с номером, а кластер, СУБД и UUID обслуживает провайдер. Задавать там ничего не нужно и нельзя.
Ситуации, где облако всё же касается УИД:
- ☁️ Выгрузка из облака в локальную базу. При первом запуске локальной копии БСП увидит новую строку соединения и спросит, копия это или перенос. Если облачная база продолжает работать — это копия.
- ☁️ Обмен локальной базы с облачной. Синхронизация настраивается типовыми средствами, коды узлов и префиксы задаются так же, как между двумя локальными базами. Префиксы должны различаться.
- ☁️ Аренда сервера (IaaS, RDP). Это обычный кластер, просто чужое железо. Если провайдер дал доступ к консоли кластера,
racи идентификаторы работают как на своём сервере. - ☁️ Перенос базы от одного провайдера к другому через
.dt. На новом сервере база получит новый UUID кластера, GUID объектов сохранятся. Сообщите новому провайдеру, что это перенос, а не копия.