Уникальный идентификатор базы данных GUID в 1С:Предприятие — это ключевой параметр, который часто требуется для настройки обменов, интеграций, резервного копирования или отладки. Без него невозможно корректно идентифицировать базу в кластере серверов 1С, настроить репликацию или подключить внешние обработки. Однако далеко не все администраторы знают, где именно хранится этот идентификатор и как его быстро извлечь.
В этой статье мы разберём 5 проверенных способов получения GUID базы — от стандартных методов через конфигуратор до скриптов на PowerShell и прямых запросов к SQL. Каждый метод подходит для разных сценариев: одни работают только на клиент-серверных базах, другие универсальны для файлового и серверного вариантов. Вы узнаете, где физически хранится GUID в файлах 1С, как его извлечь без доступа к конфигуратору, и почему иногда идентификатор может меняться после переноса базы.
Особое внимание уделим скрытым нюансам работы с GUID в кластерных конфигурациях, где один физический сервер может содержать десятки баз с одинаковыми именами, но разными идентификаторами. Эти знания критичны для администраторов, занимающихся миграцией данных или настройкой распределённых систем.
Что такое GUID базы 1С и зачем он нужен
GUID (Globally Unique Identifier) в контексте 1С:Предприятие — это 128-битный уникальный код, который присваивается базе данных при её создании. Он используется системой для однозначной идентификации базы в следующих случаях:
- 🔄 Обмен данными между базами (например, через Универсальный формат обмена или РИБ). GUID гарантирует, что данные не перепутаются между разными базами с одинаковыми именами.
- 🖥️ Кластерное администрирование. Сервер 1С:Предприятие использует GUID для маршрутизации запросов к конкретной базе в многопользовательском режиме.
- 🔧 Резервное копирование и восстановление. При переносе базы на другой сервер GUID может измениться, что потребует корректировки настроек интеграций.
- 🔗 Внешние обработки и расширения. Многие сторонние модули требуют указания GUID для привязки к конкретной базе.
Важно понимать, что GUID не совпадает с:
- 🆔 Именем базы (которое видно в списке баз при запуске 1С).
- 📌 Идентификатором информационной базы (IB) в кластере (это отдельный параметр, который можно увидеть в консоли администрирования сервера 1С).
- 🔑 Идентификатором сеанса (который генерируется при каждом подключении пользователя).
GUID хранится в 1CV8.1CD (для файлового варианта) или в системных таблицах SQL-базы (для клиент-серверного варианта). Его формат — строка из 32 шестнадцатеричных символов, разделённых дефисами, например: 123e4567-e89b-12d3-a456-426614174000.
⚠️ Внимание: В распределённых информационных базах (РИБ) у каждой узловой базы будет свой уникальный GUID, даже если они синхронизируются между собой. При настройке обменов необходимо использовать именно GUID целевой базы, а не исходной.
Способ 1: Получение GUID через конфигуратор 1С
Самый простой и универсальный метод — использование встроенного функционала конфигуратора. Он работает для всех типов баз (файловых, клиент-серверных, SQL) и не требует дополнительных инструментов.
Инструкция:
- Запустите 1С:Предприятие в режиме Конфигуратор (для этого выберите нужную базу в списке и удерживайте
Shiftпри запуске). - В меню конфигуратора перейдите в
Администрирование → Публикация на веб-сервере(даже если вам не нужна публикация). - В открывшемся окне в поле Идентификатор информационной базы вы увидите GUID в формате
{123e4567-e89b-12d3-a456-426614174000}.
Если у вас 1С:Предприятие 8.3.20+, можно использовать альтернативный путь:
- 🔧 Откройте
Файл → Открыть. - 📂 В диалоговом окне выберите вашу базу (для файлового варианта) или подключитесь к серверу.
- 🔍 В строке подключения (внизу окна) будет отображаться GUID после параметра
File=илиSrvr=.
Для клиент-серверных баз в конфигураторе также можно выполнить запрос к системной таблице:
ВЫБРАТЬ
ИдентификаторКакСтрока() КАК GUID
ИЗ
ИнформационнаяБаза.СвойстваОбъекта()
⚠️ Внимание: В некоторых версиях 1С:Предприятие 8.2 GUID может отображаться без фигурных скобок. При использовании этого идентификатора в скриптах или конфигурациях скобки можно добавлять или убирать — система распознаёт оба формата.
Запустить 1С в режиме Конфигуратор|Проверить права доступа (нужны права администратора)|Убедиться, что база не заблокирована другими пользователями|Скопировать GUID в буфер обмена для дальнейшего использования-->
Способ 2: Извлечение GUID из файла 1Cv8.1CD (для файлового варианта)
Если у вас файловая база (не клиент-серверная), GUID хранится непосредственно в основном файле базы — 1Cv8.1CD. Его можно извлечь без запуска 1С, используя специализированные утилиты или скрипты.
Самый надёжный инструмент для этой задачи — утилита 1Cv8dt (входит в комплект поставки 1С:Предприятие). Она позволяет прочитать метаданные файла, включая GUID.
Шаги для извлечения:
- Откройте командную строку (
Win + R→ введитеcmd). - Перейдите в каталог с утилитой 1Cv8dt (обычно это
C:\Program Files\1cv8\<версия>\bin\). - Выполните команду:
1Cv8dt.exe INFO "Путь\к\вашей\базе.1CD" /FGuidНапример:
1Cv8dt.exe INFO "D:\Bases\Trade.1CD" /FGuid
Альтернативный метод — использовать PowerShell. Следующий скрипт считывает GUID из файла 1Cv8.1CD:
$path = "D:\Bases\Trade.1CD"
$fs = New-Object System.IO.FileStream($path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read)
$br = New-Object System.IO.BinaryReader($fs)
$fs.Seek(0x20, [System.IO.SeekOrigin]::Begin) | Out-Null
$guidBytes = $br.ReadBytes(16)
$guid = New-Object Guid($guidBytes)
Write-Output $guid
$br.Close()
$fs.Close()
Результат выполнения скрипта — GUID в стандартном формате, например: 123e4567-e89b-12d3-a456-426614174000.
| Метод | Требуемые права | Работает для SQL-баз? | Примечания |
|---|---|---|---|
| 1Cv8dt | Доступ к файлу 1CD |
❌ Нет | Самый быстрый способ для файлового варианта |
| PowerShell | Доступ к файлу 1CD |
❌ Нет | Требует знания смещений в файле |
| Конфигуратор | Права администратора 1С | ✅ Да | Универсальный, но требует запуска 1С |
Если утилита 1Cv8dt не найдена, проверьте путь к бинарникам 1С в переменной окружения PATH или укажите полный путь к утилите в команде.
Способ 3: Получение GUID для клиент-серверной базы через SQL-запрос
Для баз, работающих на Microsoft SQL Server или PostgreSQL, GUID хранится в системных таблицах. Его можно извлечь напрямую через SQL Management Studio или любую другую утилиту для работы с базами данных.
Для Microsoft SQL Server выполните следующий запрос:
SELECT
CAST(InfoBaseID AS UNIQUEIDENTIFIER) AS GUID
FROM
v8users
Для PostgreSQL (используется в 1С:Предприятие 8.3 начиная с версии 8.3.10):
SELECT
encode(infobaseid, 'hex') AS GUID
FROM
v8users
LIMIT 1
Если у вас несколько баз на одном сервере, можно уточнить запрос, добавив фильтрацию по имени:
SELECT
CAST(InfoBaseID AS UNIQUEIDENTIFIER) AS GUID,
InfoBaseName AS BaseName
FROM
v8users
WHERE
InfoBaseName = 'ИмяВашейБазы'
В результате вы получите таблицу с GUID и именем базы. Обратите внимание, что в PostgreSQL идентификатор возвращается в шестнадцатеричном формате без дефисов. Чтобы привести его к стандартному виду, можно использовать функцию regexp_replace:
SELECT
regexp_replace(encode(infobaseid, 'hex'),
'^(.{8})(.{4})(.{4})(.{4})(.{12})$',
'\1-\2-\3-\4-\5') AS GUID
FROM
v8users
⚠️ Внимание: В кластерных установках 1С на одном SQL-сервере может храниться несколько баз с одинаковыми именами, но разными GUID. Всегда проверяйте, что вы подключились к нужному экземпляру сервера (например,SRV-1C\INSTANCE_1вместоSRV-1C\DEFAULT).
Способ 4: Использование командной строки и утилит 1С
Для автоматизации извлечения GUID (например, в скриптах развёртывания или резервного копирования) удобно использовать командную строку и встроенные утилиты 1С. Этот метод подходит для любых типов баз, но требует прав администратора на сервере.
Для клиент-серверных баз используйте утилиту rac (Remote Administration Console):
rac infobase --cluster=<имя_кластера> summary list
В выводе будет столбец infobase-id с нужным GUID.
Для файлового варианта подойдёт утилита 1cv8 с параметром /D (вывод информации о базе):
1cv8.exe DESIGNER /D"Путь\к\базе.1CD" /Out"output.txt"
В файле output.txt будет строка с GUID (ищите ИдентификаторИнформационнойБазы).
Для баз на SQL Server можно использовать sqlcmd:
sqlcmd -S <сервер> -d <база_данных> -Q "SELECT CAST(InfoBaseID AS UNIQUEIDENTIFIER) AS GUID FROM v8users"
Пример скрипта на PowerShell для автоматического извлечения GUID всех баз на сервере:
$clusters = rac cluster list
foreach ($cluster in $clusters) {
$bases = rac infobase --cluster=$cluster summary list
$bases | ForEach-Object {
Write-Output "База: $($_.Name), GUID: $($_.InfobaseID)"
}
}
Как проверить, что утилита rac подключается к правильному кластеру?
По умолчанию rac подключается к локальному кластеру на порту 1541. Если у вас несколько кластеров, укажите нужный явно:
rac --server=имя_сервера --port=1545 cluster list
Чтобы увидеть все доступные кластеры, используйте команду rac cluster list --all.
Способ 5: Программное получение GUID через встроенный язык 1С
Если вам нужно получить GUID изнутри самой базы (например, для динамической настройки обменов или логирования), можно использовать встроенный язык 1С. Этот метод работает только при наличии прав на чтение метаданных.
Код для получения GUID текущей базы:
ИдентификаторБазы = МетодГлобальногоКонтекста("ИдентификаторИнформационнойБазы");
Сообщить("GUID текущей базы: " + ИдентификаторБазы.УникальныйИдентификатор());
Для получения GUID в формате строки (например, для передачи во внешнюю систему):
Функция ПолучитьGUIDБазы()
ИдБазы = МетодГлобальногоКонтекста("ИдентификаторИнформационнойБазы");
Возврат Строка(ИдБазы.УникальныйИдентификатор());
КонецФункции
// Пример использования:
GUIDСтрока = ПолучитьGUIDБазы();
ЗаписатьЛог(Новый Структура("Событие,Данные", "ПолучениеGUID", GUIDСтрока));
Если вам нужно получить GUID другой базы (например, для настройки обмена), используйте объект ИнформационныеБазы:
Попытка
ДругиеБазы = Новый ИнформационныеБазы;
Для Каждого База Из ДругиеБазы Цикл
Если База.Имя = "ИмяНужнойБазы" Тогда
Сообщить("GUID базы " + База.Имя + ": " + База.УникальныйИдентификатор);
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Ошибка при получении списка баз: " + ОписаниеОшибки());
КонецПопытки;
Этот код можно вставить в обработку или внешнюю печатную форму, чтобы быстро получать GUID без доступа к конфигуратору.
⚠️ Внимание: При работе с распределёнными базами (РИБ) методИнформационныеБазывернёт GUID только для текущего узла. Чтобы получить GUID центральной базы, используйте свойства объектаПланОбмена.
Программное получение GUID через встроенный язык — единственный способ доступа к идентификатору из тонкого клиента или веб-клиента без прав администратора.
Частые ошибки и проблемы при работе с GUID
Даже опытные администраторы иногда сталкиваются с трудностями при работе с идентификаторами баз. Вот наиболее распространённые проблемы и их решения:
- 🔄 GUID изменился после переноса базы. Это нормальное поведение — при создании новой базы (даже на основе резервной копии) генерируется новый идентификатор. Чтобы сохранить старый GUID, используйте утилиту 1Cv8dt с параметром
/RestoreIBи ключом/UseExistIB. - 🔍 Не удаётся найти GUID в SQL-базе. Проверьте, что вы подключились к правильной базе данных (не к
masterилиtempdb). В 1С имя базы данных на сервере может отличаться от имени в списке баз. - 🚫 Ошибка доступа при чтении файла 1CD. Убедитесь, что файл не заблокирован процессом 1С (закройте все сеансы) и у вашей учётной записи есть права на чтение.
- 🔗 Обмен данными не работает после изменения GUID. Обновите настройки обмена в обеих базах, указав новые идентификаторы. В некоторых случаях потребуется пересоздать узлы обмена.
Особое внимание уделите следующим нюансам:
- 📋 В 1С:Предприятие 8.2 GUID мог храниться в другом формате (без дефисов). При миграции на 8.3 приведите его к стандартному виду.
- 🔄 При восстановлении базы из резервной копии через 1Cv8dt используйте ключ
/PreserveIBID, чтобы сохранить оригинальный GUID:1Cv8dt.exe RESTOREIB /F"backup.dt" /IBName:"ИмяБазы" /IBDir:"Путь" /PreserveIBID - 🔐 В облачных решениях (например, 1C:Fresh) GUID базы можно получить только через API или личный кабинет — прямого доступа к файлам или SQL нет.
Если вы работаете с репликацией, помните:
- Каждый узел РИБ имеет свой GUID, даже если они синхронизируются.
- При добавлении нового узла его GUID автоматически регистрируется в центральной базе.
- При удалении узла его GUID остаётся в истории обменов и может конфликтовать при повторном добавлении.
FAQ: Частые вопросы о GUID в 1С
Можно ли вручную изменить GUID базы 1С?
Технически это возможно, но крайне не рекомендуется. GUID жёстко привязан к внутренним механизмам 1С, и его изменение может привести к:
- 🔄 Потере связи в распределённых базах (РИБ).
- 🔗 Разрыву интеграций с внешними системами.
- 📋 Ошибкам при восстановлении из резервных копий.
Если вам необходимо сохранить старый GUID при переносе базы, используйте утилиту 1Cv8dt с ключом /PreserveIBID.
Почему после обновления 1С изменился GUID базы?
Само обновление платформы 1С не должно влиять на GUID. Однако идентификатор может измениться в следующих случаях:
- 🔄 Вы выполнили выгрузку/загрузку базы через
dt-файл без сохранения идентификатора. - 📋 База была пересоздана (например, через
Создать информационную базув конфигураторе). - 🖥️ Произошло автоматическое восстановление после сбоя (в некоторых версиях).
Чтобы избежать потери GUID, всегда используйте резервное копирование через 1Cv8dt с ключом /PreserveIBID.
Как получить GUID базы, если нет доступа к конфигуратору?
Есть несколько способов:
- Для файловой базы: Используйте утилиту 1Cv8dt (см. Способ 2).
- Для SQL-базы: Подключитесь к серверу через SQL Management Studio и выполните запрос к таблице
v8users(см. Способ 3). - Для облачной базы (1C:Fresh): Обратитесь в техническую поддержку или используйте API 1С (требуется токен доступа).
Если у вас есть доступ к тонкому клиенту, можно выполнить код на встроенном языке (см. Способ 5).
Где хранится GUID в распределённой информационной базе (РИБ)?
В РИБ каждый узел имеет свой уникальный GUID, который хранится:
- 📋 В центральной базе — в плане обмена (объект
ПланОбмена.Узлы). - 🖥️ В узловой базе — в свойствах плана обмена (можно получить через
ПланыОбмена.Найти("ИмяПлана").Узел.УникальныйИдентификатор). - 🔄 В регистрационных записях обмена (таблица
_1SJOURNв SQL-базе).
При настройке обменов всегда используйте GUID узла-назначения, а не текущей базы.
Можно ли использовать GUID для идентификации базы в скриптах автоматического резервного копирования?
Да, это один из самых надёжных способов. Пример скрипта на PowerShell для резервного копирования с учётом GUID:
$guid = "123e4567-e89b-12d3-a456-426614174000" # Замените на ваш GUID
$backupDir = "D:\Backups\$guid\"
$date = Get-Date -Format "yyyyMMdd_HHmmss"
$backupPath = "$backupDir\backup_$date.dt"
Выгрузка базы
1Cv8dt.exe DUMPIB /F"$backupPath" /IBName:"ИмяБазы" /IBDir:"ПутьКБазе" /Out"log.txt"
Проверка результата
if ($LASTEXITCODE -eq 0) {
Write-Output "Резервная копия для базы $guid создана в $backupPath"
} else {
Write-Error "Ошибка при создании резервной копии"
}
Преимущества такого подхода:
- 📁 Автоматическое разделение резервных копий по папкам с GUID.
- 🔄 Легкое восстановление на другой сервер с сохранением идентификатора.
- 📋 Возможность параллельного копирования нескольких баз без конфликтов.