Работа с 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. Откройте конфигуратор в режиме 1С:Предприятие (с правами администратора)
  2. Перейдите в дерево метаданных (Конфигурация → Объекты конфигурации)
  3. Найдите нужный объект (например, справочник "Номенклатура")
  4. Кликните правой кнопкой по объекту и выберите Свойства
  5. В открывшемся окне перейдите на вкладку Прочее
  6. Поле Идентификатор (GUID) содержит искомый идентификатор

Для копирования GUID:

  • 📋 Выделите значение в поле мышью
  • 🖱️ Нажмите Ctrl+C или правой кнопкой Копировать
  • 💾 Вставьте в нужное место (Ctrl+V)

Запустить 1С в режиме Конфигуратора|Убедиться в наличии прав на чтение метаданных|Найти объект в дереве конфигурации|Скопировать GUID без пробелов и дефисов-->

Ограничения метода:

  • ❌ Не работает для элементов справочников (только для объектов конфигурации)
  • ❌ Невозможно массово получить GUID нескольких объектов
  • ❌ Требует доступа к конфигуратору с правами изменения

Способ 2: Программное получение GUID на встроенном языке

Для автоматизации процесса или получения GUID в runtime используйте встроенный язык . Этот метод универсален и работает как для объектов метаданных, так и для конкретных элементов данных.

Основные функции для работы с GUID:

Функция Назначение Пример использования
Метаданные().ГлобальныйИдентификатор() Получение GUID объекта метаданных
Спр = Метаданные().Справочники.Номенклатура;

Сообщить(Спр.ГлобальныйИдентификатор());

УникальныйИдентификатор() GUID конкретного элемента справочника/документа
Эл = Справочники.Номенклатура.НайтиПоНаименованию("Товар1");

Сообщить(Эл.УникальныйИдентификатор());

Новый УникальныйИдентификатор() Генерация нового GUID
НовыйGUID = Новый УникальныйИдентификатор();

Сообщить(НовыйGUID);

Строка(УникальныйИдентификатор) Преобразование GUID в строковый формат
СтрGUID = Строка(Эл.УникальныйИдентификатор());

Сообщить(СтрGUID); // Формат: "123e4567-e89b-12d3-a456-426614174000"

Практический пример получения GUID всех справочников конфигурации:

Для Каждого Спр Из Метаданные().Справочники Цикл

Сообщить(Спр.Имя + ": " + Строка(Спр.ГлобальныйИдентификатор()));

КонецЦикла;

Функция GUIDВСтроку(Знач Уид)

Возврат Строка(Уид);

КонецФункции

Это позволит избежать повторного кода при выводе идентификаторов.-->

⚠️ Внимание: В некоторых версиях платформы (до 8.3.10) метод ГлобальныйИдентификатор() может возвращать Неопределено для объектов, созданных в старых конфигурациях. В этом случае используйте альтернативный подход через ПолноеИмя() или обновите конфигурацию.

Способ 3: Извлечение GUID из SQL-базы 1С

Для опытных пользователей и администраторов доступен метод прямого чтения GUID из базы данных. Это особенно полезно когда:

  • 🔧 Нужно массово получить идентификаторы
  • 📊 Требуется анализ структуры базы
  • 🔍 Нужно найти "потерянные" объекты
  • 🚀 Необходима максимальная производительность

Основные таблицы для извлечения GUID:

Таблица Содержимое Поле с GUID Пример запроса
Config Объекты конфигурации UUID
SELECT Name, UUID FROM Config

WHERE Type = 8 // 8 - справочник

ConfigClass Классы объектов UUID
SELECT ClassName, UUID FROM ConfigClass
_ReferenceXXX Элементы справочников (XXX - ID справочника) RefUUID
SELECT Description, RefUUID

FROM _Reference123 // где 123 - ID справочника

_DocumentXXX Документы (XXX - ID документа) DocUUID
SELECT Number, DocUUID

FROM _Document456 // где 456 - ID документа

Важные нюансы работы с SQL:

  • 🔑 Для доступа к базе нужны права на чтение системных таблиц
  • 📌 Идентификаторы таблиц (XXX) можно узнать из таблицы Config
  • 🔄 В распределенных базах структура может отличаться
  • 🛡️ Всегда делайте резервную копию перед прямыми запросами к базе
📊 Какой метод получения GUID вы используете чаще?
Через конфигуратор
Программно на 1С
Прямой SQL-запрос
Другие способы

Пример комплексного запроса для получения 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?

Есть несколько способов:

  1. Через конфигуратор: используйте поиск по метаданным (Ctrl+F) и введите GUID в формате без дефисов.
  2. Программно:
    Процедура НайтиОбъектПоGUID(ИскомыйGUID)
    

    Для Каждого Объект Из Метаданные().Объекты Цикл

    Если Строка(Объект.ГлобальныйИдентификатор()) = ИскомыйGUID Тогда

    Сообщить("Найден: " + Объект.Имя + " (" + ТипЗнч(Объект) + ")");

    Возврат Объект;

    КонецЕсли;

    КонецЦикла;

    Сообщить("Объект не найден!");

    КонецПроцедуры

  3. Через SQL-запрос к таблице Config (для опытных пользователей).
Почему при обмене данными между базами некоторые объекты не находятся по GUID?

Эта проблема обычно связана с одной из причин:

  • 🔹 Объект был удален в целевой базе, но информация об удалении не была передана
  • 🔹 В планах обмена не настроено правильное соответствие узлов
  • 🔹 Используется неверный формат GUID (с дефисами/без дефисов)
  • 🔹 Объект имеет разные GUID в источниках из-за ручного вмешательства
  • 🔹 Несовпадение версий конфигураций (в старых