Работа с GUID-ссылками в 1С:Предприятие — обязательный навык для разработчиков, администраторов и опытных пользователей. Эти уникальные идентификаторы позволяют однозначно ссылаться на объекты метаданных, документы или справочники независимо от их наименования или положения в иерархии. Без них невозможно организовать стабильный обмен данными между базами, создать универсальные обработки или интегрировать 1С с внешними системами.
В этой статье вы найдете все актуальные методы получения GUID в 1С 8.3 и 8.2, включая малоизвестные приемы для типовых и нетиповых конфигураций. Мы разберем как стандартные инструменты конфигуратора, так и программные решения на встроенном языке, а также покажем, как извлечь GUID напрямую из SQL-базы. Особое внимание уделено типичным ошибкам и способам их обхода.
Что такое GUID в 1С и зачем он нужен
GUID (Globally Unique Identifier) в контексте 1С:Предприятие — это 16-байтовый идентификатор, который присваивается каждому объекту метаданных (справочникам, документам, регистрам) и многим элементам данных. Его ключевые особенности:
- 🔹 Уникальность — гарантированно не повторяется даже в разных базах
- 🔹 Неизменность — остается постоянным при переименовании объекта
- 🔹 Независимость от структуры — работает даже если объект переместили в другую папку конфигурации
- 🔹 Совместимость — используется во всех современных версиях платформы 8.x
Основные сценарии применения GUID-ссылок:
- 📤 Обмен данными между базами (включая распределенные информационные базы)
- 🔄 Интеграция с внешними системами через API или веб-сервисы
- 📋 Создание универсальных обработок, работающих с разными конфигурациями
- 🔍 Поиск и идентификация объектов в больших конфигурациях
- 🛠️ Отладка и диагностика проблем с ссылками на объекты
⚠️ Внимание: В конфигурациях на базе 1С:УПП или 1С:КА 1.1 некоторые объекты могут не иметь GUID по умолчанию. В этом случае потребуется доработка конфигурации или использование альтернативных идентификаторов.
Способ 1: Получение GUID через конфигуратор (визуальный метод)
Самый простой способ, не требующий программирования — использование встроенных инструментов конфигуратора. Этот метод подходит для разовых задач или когда нужно быстро узнать GUID конкретного объекта.
Инструкция по шагам:
- Откройте конфигуратор в режиме
1С:Предприятие(с правами администратора) - Перейдите в дерево метаданных (
Конфигурация → Объекты конфигурации) - Найдите нужный объект (например, справочник
"Номенклатура") - Кликните правой кнопкой по объекту и выберите
Свойства - В открывшемся окне перейдите на вкладку
Прочее - Поле
Идентификатор (GUID)содержит искомый идентификатор
Для копирования GUID:
- 📋 Выделите значение в поле мышью
- 🖱️ Нажмите
Ctrl+Cили правой кнопкойКопировать - 💾 Вставьте в нужное место (
Ctrl+V)
Запустить 1С в режиме Конфигуратора|Убедиться в наличии прав на чтение метаданных|Найти объект в дереве конфигурации|Скопировать GUID без пробелов и дефисов-->
Ограничения метода:
- ❌ Не работает для элементов справочников (только для объектов конфигурации)
- ❌ Невозможно массово получить GUID нескольких объектов
- ❌ Требует доступа к конфигуратору с правами изменения
Способ 2: Программное получение GUID на встроенном языке
Для автоматизации процесса или получения GUID в runtime используйте встроенный язык 1С. Этот метод универсален и работает как для объектов метаданных, так и для конкретных элементов данных.
Основные функции для работы с GUID:
| Функция | Назначение | Пример использования |
|---|---|---|
Метаданные().ГлобальныйИдентификатор() |
Получение GUID объекта метаданных | |
УникальныйИдентификатор() |
GUID конкретного элемента справочника/документа | |
Новый УникальныйИдентификатор() |
Генерация нового GUID | |
Строка(УникальныйИдентификатор) |
Преобразование GUID в строковый формат | |
Практический пример получения GUID всех справочников конфигурации:
Для Каждого Спр Из Метаданные().Справочники Цикл
Сообщить(Спр.Имя + ": " + Строка(Спр.ГлобальныйИдентификатор()));
КонецЦикла;
Функция GUIDВСтроку(Знач Уид)
Возврат Строка(Уид);
КонецФункции
Это позволит избежать повторного кода при выводе идентификаторов.-->
⚠️ Внимание: В некоторых версиях платформы (до 8.3.10) методГлобальныйИдентификатор()может возвращатьНеопределенодля объектов, созданных в старых конфигурациях. В этом случае используйте альтернативный подход черезПолноеИмя()или обновите конфигурацию.
Способ 3: Извлечение GUID из SQL-базы 1С
Для опытных пользователей и администраторов доступен метод прямого чтения GUID из базы данных. Это особенно полезно когда:
- 🔧 Нужно массово получить идентификаторы
- 📊 Требуется анализ структуры базы
- 🔍 Нужно найти "потерянные" объекты
- 🚀 Необходима максимальная производительность
Основные таблицы для извлечения GUID:
| Таблица | Содержимое | Поле с GUID | Пример запроса |
|---|---|---|---|
Config |
Объекты конфигурации | UUID |
|
ConfigClass |
Классы объектов | UUID |
|
_ReferenceXXX |
Элементы справочников (XXX - ID справочника) | RefUUID |
|
_DocumentXXX |
Документы (XXX - ID документа) | DocUUID |
|
Важные нюансы работы с SQL:
- 🔑 Для доступа к базе нужны права на чтение системных таблиц
- 📌 Идентификаторы таблиц (
XXX) можно узнать из таблицыConfig - 🔄 В распределенных базах структура может отличаться
- 🛡️ Всегда делайте резервную копию перед прямыми запросами к базе
Пример комплексного запроса для получения GUID всех справочников и их элементов:
-- 1. Получаем GUID справочников
SELECT c.Name AS Справочник, c.UUID AS GUID_Справочника,
t.Name AS ТаблицаЭлементов
FROM Config c
LEFT JOIN ConfigClass cc ON c.UUID = cc.ConfigUUID
LEFT JOIN Tables t ON cc.ClassUUID = t.ClassUUID
WHERE c.Type = 8 -- 8 = справочник
-- 2. Получаем GUID элементов (пример для одного справочника)
SELECT Description AS Наименование, RefUUID AS GUID_Элемента
FROM _Reference123 -- заменить на актуальный ID
Способ 4: Использование внешних обработок для массового извлечения GUID
Когда нужно получить GUID для большого количества объектов, удобно использовать специализированные обработки. Они позволяют:
- 📊 Экспортировать GUID в Excel/CSV
- 🔍 Искать объекты по части GUID
- 🔄 Сравнивать GUID между базами
- 📋 Создавать отчеты по использованию идентификаторов
Популярные готовые решения:
- 📌 Обработка "Анализ метаданных" (входит в стандартную поставку 1С)
- 📌 "GUID Explorer" (бесплатная обработка с infostart.ru)
- 📌 "Конфигуратор+" (платное расширение с дополнительными инструментами)
- 📌 "1С:Анализ кода" (для разработчиков)
Пример кода для создания простой обработки экспорта GUID:
Процедура ЭкспортGUIDСправочников(КаталогВыгрузки)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Имя");
ТЗ.Колонки.Добавить("GUID");
ТЗ.Колонки.Добавить("Тип");
Для Каждого Объект Из Метаданные().Справочники Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Имя = Объект.Имя;
НоваяСтрока.GUID = Строка(Объект.ГлобальныйИдентификатор());
НоваяСтрока.Тип = "Справочник";
КонецЦикла;
Для Каждого Объект Из Метаданные().Документы Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Имя = Объект.Имя;
НоваяСтрока.GUID = Строка(Объект.ГлобальныйИдентификатор());
НоваяСтрока.Тип = "Документ";
КонецЦикла;
ТЗ.Записать(КаталогВыгрузки + "ExportGUID.csv", ТипФайлаCSV.UTF8);
Сообщить("Экспорт завершен! Файл: " + КаталогВыгрузки + "ExportGUID.csv");
КонецПроцедуры
Как узнать ID таблицы для конкретного справочника?
ID таблицы элементов справочника можно найти в таблице Config по полю DataTable или через запрос:
SELECT DataTable FROM Config
WHERE Type = 8 AND Name = 'ИмяВашегоСправочника'
Для документов используйте поле DataTable с типом объекта 10 (документ).
Способ 5: Получение GUID через OData и REST API
В современных конфигурациях (начиная с 1С:Предприятие 8.3.15) появилась возможность работы с GUID через веб-сервисы. Это актуально для:
- 🌐 Интеграции с внешними системами
- 📱 Разработки мобильных приложений
- 🖥️ Создания облачных сервисов на базе 1С
- 🔗 Организации межбазового взаимодействия
Пример запроса к OData-сервису для получения GUID документа:
GET /odata/standard.odata/Document_ПоступлениеТоваровУслуг?
$select=Ref_Key,DeletionMark,Description,&
$filter=Ref_Key eq guid'123e4567-e89b-12d3-a456-426614174000'
Host: demo.base.ru
Authorization: Basic xxxxxxxxxxxxx
Особенности работы с GUID в API:
- 🔑 В URL GUID передается без дефисов:
{123e4567e89b12d3a456426614174000} - 📌 В ответах GUID возвращается в стандартном формате с дефисами
- 🔄 Для аутентификации часто используется Basic Auth или токены
- 🛡️ Необходимо настраивать права доступа к OData-сервису
Пример кода на 1С для работы с REST API:
Функция ПолучитьДанныеПоGUID(БазоваяСсылка, GUID, Логин, Пароль)
Запрос = Новый HTTPЗапрос(БазоваяСсылка +
"/Document_ПоступлениеТоваровУслуг?$filter=Ref_Key eq guid'" +
Строка(GUID) + "'");
Запрос.УстановитьПараметрАвторизации(Логин, Пароль);
Запрос.УстановитьЗаголовок("Accept", "application/json");
Ответ = Новый HTTPСоединение;
Результат = Ответ.Получить(Запрос);
Если Результат.КодСостояния <> 200 Тогда
ВызватьИсключение "Ошибка запроса: " + Результат.КодСостояния +
" " + Результат.ПолучитьТекст();
КонецЕсли;
Возврат Результат.ПолучитьТекст();
КонецФункции
⚠️ Внимание: При работе с OData в 1С:БП 3.0 и 1С:УТ 11 некоторые стандартные объекты могут не поддерживать фильтрацию по GUID. В этом случае используйте альтернативные поля для поиска (например, Ref_Key вместо прямого GUID).
Способ 6: Работа с GUID в распределенных базах 1С
В распределенных информационных базах (РИБ) GUID играет особую роль, так как обеспечивает однозначную идентификацию объектов между узлами. Здесь есть несколько важных нюансов:
Особенности GUID в РИБ:
- 🔄 При создании объекта на одном узле его GUID автоматически становится доступен на всех узлах после обмена
- 📌 Конфликты GUID крайне маловероятны, но теоретически возможны при ручном вмешательстве
- 🔑 Для новых объектов GUID генерируется на узле-источнике
- 📊 В журналах регистрации обмена фиксируются все изменения с указанием GUID
Как получить GUID объекта в РИБ:
// Получение GUID документа в распределенной базе
Док = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("000000001");
Сообщить("Локальный GUID: " + Строка(Док.УникальныйИдентификатор()));
Сообщить("Глобальный GUID (для РИБ): " + Строка(Док.УникальныйИдентификаторУзла()));
Типичные проблемы с GUID в РИБ и их решения:
| Проблема | Причина | Решение |
|---|---|---|
| Ошибка "Объект с таким GUID уже существует" | Ручное дублирование GUID при переносе данных | Использовать ПолучитьНовыйУид() для генерации нового идентификатора |
| Расхождение GUID между узлами | Неполный обмен данными | Выполнить полную синхронизацию узлов |
| Невозможно найти объект по GUID | Объект был помечен на удаление | Проверять поле ПометкаУдаления перед поиском |
| Медленный поиск по GUID | Отсутствие индексов в базе | Создать индекс по полю с GUID или использовать ПланОбмена |
В распределенных базах никогда не изменяйте GUID объектов вручную! Это приведет к необратимым расхождениям между узлами. Для переноса данных используйте стандартные механизмы обмена.
Способ 7: Генерация новых GUID и работа с ними
Иногда требуется создать новый GUID программно — например, при разработке обработок обмена данными или интеграционных решений. В 1С для этого есть несколько методов.
Основные способы генерации:
// Метод 1: Стандартная функция
НовыйGUID1 = Новый УникальныйИдентификатор();
// Метод 2: Через COM-объект (работает в толстом клиенте)
Попытка
WScript = Новый COMОбъект("WScript.Shell");
НовыйGUID2 = WScript.ExpandEnvironmentStrings("%GUID%");
Исключение
Сообщить("COM-объект недоступен, используем стандартный метод");
НовыйGUID2 = Новый УникальныйИдентификатор();
КонецПопытки;
// Метод 3: Для совместимости со старыми системами
Функция СгенерироватьGUID()
Возврат Новый УникальныйИдентификатор();
КонецФункции
Правила работы с новыми GUID:
- 🔄 Всегда проверяйте уникальность сгенерированного GUID перед использованием
- 📌 Для обмена данными используйте стандартные механизмы
ПланОбмена - 🔑 Храните соответствие старых и новых GUID при миграции данных
- 🛡️ Не используйте случайные строки вместо GUID — это нарушит целостность данных
Пример создания таблицы соответствия GUID при переносе данных:
Процедура СоздатьТаблицуСоответствияGUID()
ТаблицаСоответствия = Новый ТаблицаЗначений;
ТаблицаСоответствия.Колонки.Добавить("СтарыйGUID", Новый ОписаниеТипов("УникальныйИдентификатор"));
ТаблицаСоответствия.Колонки.Добавить("НовыйGUID", Новый ОписаниеТипов("УникальныйИдентификатор"));
ТаблицаСоответствия.Колонки.Добавить("ТипОбъекта");
ТаблицаСоответствия.Колонки.Добавить("ДатаСоздания");
// Пример добавления записи
НоваяСтрока = ТаблицаСоответствия.Добавить();
НоваяСтрока.СтарыйGUID = СтарыйУид;
НоваяСтрока.НовыйGUID = Новый УникальныйИдентификатор();
НоваяСтрока.ТипОбъекта = "Справочник.Номенклатура";
НоваяСтрока.ДатаСоздания = ТекущаяДата();
Возврат ТаблицаСоответствия;
КонецПроцедуры
Типичные ошибки при работе с GUID и как их избежать
Даже опытные разработчики иногда сталкиваются с проблемами при работе с GUID в 1С. Вот наиболее распространенные ошибки и способы их решения:
Ошибка 1: "Не является значением объекта УникальныйИдентификатор"
- 🔍 Причина: П попытка преобразовать некорректную строку в GUID
- 🛠️ Решение:
ПопыткаGUIDОбъекта = УникальныйИдентификатор(НекорректнаяСтрока);
Исключение
Сообщить("Ошибка преобразования: " + ОписаниеОшибки());
GUIDОбъекта = Новый УникальныйИдентификатор(); // Создаем новый
КонецПопытки;
Ошибка 2: Расхождение GUID после обновления конфигурации
- 🔍 Причина: При некорректном обновлении некоторые объекты могут получить новые GUID
- 🛠️ Решение:
// Перед обновлением сохраните текущие GUIDПроцедура СохранитьGUIDПередОбновлением()
ТЗ = Новый ТаблицаЗначений;
// ... код сохранения текущих GUID
ТЗ.Записать("C:\temp\GUID_BeforeUpdate.xml");
КонецПроцедуры
// После обновления сравните и при необходимости перенастройте интеграции
Ошибка 3: Невозможно найти объект по GUID в другой базе
- 🔍 Причина: Объект был удален или GUID изменился при переносе
- 🛠️ Решение:
Функция НайтиОбъектПоGUID(ТипОбъекта, ИскомыйGUID)Попытка
Возврат ТипОбъекта.ПолучитьСсылку(ИскомыйGUID);
Исключение
// Попробуем найти по другим критериям
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка
ИЗ " + ТипОбъекта.ПолноеИмя() + "
ГДЕ УникальныйИдентификатор = &GUID";
Запрос.УстановитьПараметр("GUID", ИскомыйGUID);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Неопределено;
Иначе
Возврат Результат[0].Ссылка;
КонецЕсли;
КонецПопытки;
КонецФункции
Ошибка 4: Конфликты GUID при объединении баз
- 🔍 Причина: В разных базах существуют объекты с одинаковыми GUID
- 🛠️ Решение:
Процедура РазрешитьКонфликтGUID(СтарыйGUID)НовыйGUID = Новый УникальныйИдентификатор();
// Сохраняем соответствие в таблицу миграции
ДобавитьВТаблицуСоответствия(СтарыйGUID, НовыйGUID);
Возврат НовыйGUID;
КонецПроцедуры
Всегда проверяйте возвращаемое значение при работе с GUID! Функции вроде ПолучитьСсылку() могут возвращать Неопределено вместо ошибки, если объект не найден.
FAQ: Частые вопросы о GUID в 1С
Можно ли изменить GUID объекта в 1С?
Технически изменить GUID объекта метаданных можно только через прямой SQL-запрос к базе данных, но это крайне не рекомендуется. Для элементов справочников и документов GUID изменять нельзя — это приведет к разрыву всех ссылок на этот объект. В распределенных базах изменение GUID сделает объект недоступным на других узлах.
Если вам необходимо "заменить" объект, правильнее создать новый объект с новым GUID и организовать перенос данных через обработку, сохраняя соответствие старых и новых идентификаторов.
Как найти объект в конфигурации, если известен только его GUID?
Есть несколько способов:
- Через конфигуратор: используйте поиск по метаданным (
Ctrl+F) и введите GUID в формате без дефисов. - Программно:
Процедура НайтиОбъектПоGUID(ИскомыйGUID)Для Каждого Объект Из Метаданные().Объекты Цикл
Если Строка(Объект.ГлобальныйИдентификатор()) = ИскомыйGUID Тогда
Сообщить("Найден: " + Объект.Имя + " (" + ТипЗнч(Объект) + ")");
Возврат Объект;
КонецЕсли;
КонецЦикла;
Сообщить("Объект не найден!");
КонецПроцедуры
- Через SQL-запрос к таблице
Config(для опытных пользователей).
Почему при обмене данными между базами некоторые объекты не находятся по GUID?
Эта проблема обычно связана с одной из причин:
- 🔹 Объект был удален в целевой базе, но информация об удалении не была передана
- 🔹 В планах обмена не настроено правильное соответствие узлов
- 🔹 Используется неверный формат GUID (с дефисами/без дефисов)
- 🔹 Объект имеет разные GUID в источниках из-за ручного вмешательства
- 🔹 Несовпадение версий конфигураций (в старых