Разработка и Конфигурация · 10 мин
GUID в 1С: что это такое и как с ним работать
GUID в 1С — уникальный идентификатор объекта базы. Разбираем, что это, как узнать GUID элемента справочника или документа, зачем он нужен при обмене данными.
GUID (Globally Unique Identifier) в 1С — это глобально уникальный идентификатор, который платформа автоматически присваивает каждому объекту базы данных: элементу справочника, документу, записи регистра, плану обмена. Выглядит он как строка из 32 шестнадцатеричных символов, сгруппированных через дефисы, например: 8a3f2c1e-9b4d-4e5a-a1c2-3d4e5f6a7b8c. В отличие от кода справочника или номера документа, которые могут повторяться и меняться, GUID остаётся неизменным на протяжении всей жизни объекта.
Понимание GUID критично при обмене данными между базами, интеграции с внешними системами (сайтами, CRM, мобильными приложениями) и при поиске «потерянных» объектов. Когда две базы обмениваются контрагентами, именно GUID позволяет понять, что «ООО Ромашка» в одной базе и «ООО Ромашка» в другой — это один и тот же контрагент, даже если наименования написаны по-разному.
Что такое GUID и как он устроен
GUID — это 128-битное число, сгенерированное так, чтобы вероятность совпадения двух идентификаторов была практически нулевой. В 1С он представлен типом «УникальныйИдентификатор». Каждая ссылка на объект базы (СправочникСсылка, ДокументСсылка и т.д.) внутри себя содержит именно GUID, а не код или номер, которые видит пользователь.
Важно понимать разницу между тем, что видит пользователь, и тем, как объект идентифицируется на самом деле:
- Код справочника — может повторяться в разных базах, может быть изменён вручную (если разрешено), может быть нечисловым.
- Номер документа — присваивается по правилам нумерации, может меняться при перенумерации.
- GUID — генерируется один раз при создании объекта, не редактируется штатными средствами, уникален глобально.
Где GUID используется на практике
Основная область применения GUID — обмен данными. В типовых планах обмена (например, между УТ и Бухгалтерией) объекты сопоставляются именно по уникальным идентификаторам. Если в базе-источнике контрагент имеет определённый GUID, то при выгрузке в базу-приёмник система ищет объект с таким же GUID и обновляет его, а не создаёт дубликат.
Вторая область — интеграции через веб-сервисы, HTTP-сервисы и REST API. Внешняя система (сайт, мобильное приложение) не знает внутренних кодов 1С, поэтому объекты идентифицируются по GUID. Например, интернет-магазин хранит GUID товара и по нему запрашивает остатки и цены.
Третья ситуация — поиск битых ссылок и диагностика. Когда объект удалён, а ссылки на него остались, в отчётах и при обмене можно увидеть запись вида «Объект не найден (8a3f2c1e-...)». По этому GUID можно выяснить, какой именно объект был удалён, и восстановить целостность данных.
Как узнать GUID объекта в 1С
Есть несколько способов получить идентификатор объекта — от простых пользовательских до программных.
Через встроенный язык
Стандартный программный способ — вызвать метод УникальныйИдентификатор() у ссылки:
Идентификатор = СсылкаНаОбъект.УникальныйИдентификатор();
Сообщить(Идентификатор); // строка вида 8a3f2c1e-9b4d-...
Через внешнюю обработку или консоль
Для разовых задач удобно использовать типовые инструменты: консоль запросов, консоль кода или обработку «Все функции». В управляемом приложении можно открыть «Все функции» (через меню сервиса, если команда включена), найти нужный объект и использовать стандартные средства просмотра. Многие разработчики держат под рукой простую обработку «Показать GUID», которая выводит идентификатор выбранной ссылки.
Через адресную строку браузера
Если база работает через веб-клиент или опубликована, GUID объекта часто виден прямо в адресной строке при открытии формы объекта — в параметре ref. Это быстрый способ узнать идентификатор без программирования, хотя представление там может быть в служебном формате.
Как найти объект по GUID
Обратная задача возникает при разборе ошибок обмена или битых ссылок: есть идентификатор, нужно понять, что это за объект. Встроенный язык позволяет получить ссылку из GUID:
Ид = Новый УникальныйИдентификатор("8a3f2c1e-9b4d-4e5a-a1c2-3d4e5f6a7b8c");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Ид);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект не найден в базе");
КонецЕсли;
Нюанс: метод ПолучитьСсылку() создаёт ссылку с указанным GUID, даже если такого объекта в базе нет. Поэтому обязательно проверяйте существование объекта — иначе получите новую битую ссылку. Если тип объекта неизвестен, придётся перебирать менеджеры типов (справочники, документы и т.д.) и проверять каждый.
GUID при обмене данными и переносе объектов
При стандартном обмене через планы обмена GUID выгружается вместе с объектом. Если в базе-приёмнике объект с таким GUID найден — он обновляется, если нет — создаётся новый объект именно с этим идентификатором. Так обеспечивается синхронизация без дублей.
Проблемы начинаются, когда объекты создавались независимо в двух базах. Например, контрагента «ИП Сидоров» завели вручную и в УТ, и в Бухгалтерии — у этих записей разные GUID, и обмен создаст дубли. Решения:
- Найти дубли и заменить ссылки на один объект, второй пометить на удаление.
- Использовать обработки сопоставления объектов при первоначальной настройке обмена (в типовых конфигурациях есть механизм сопоставления по реквизитам — ИНН, КПП, наименованию).
- Программно установить нужный GUID объекту через
УстановитьСсылкуНового()при загрузке.
GUID в строке подключения и другие идентификаторы
Термин GUID в контексте 1С иногда путают с другими идентификаторами. Различайте:
| Идентификатор | Что обозначает | Где посмотреть |
|---|---|---|
| GUID объекта | Идентификатор элемента справочника, документа | Метод УникальныйИдентификатор() |
| GUID информационной базы | Идентификатор самой базы, используется в регистрации изменений и лицензировании | Служебные механизмы, журналы обмена |
| GUID в COM/веб-сервисах | Идентификаторы интерфейсов и классов Windows | Документация по технологии |
Идентификатор информационной базы важен при обмене: если базу восстановили из копии, план обмена может решить, что это «та же» база, и отказаться выгружать уже отправленные изменения. В таких случаях применяют перерегистрацию узлов или смену идентификатора базы специальными обработками.
Проверка результата и контрольные точки
После операций с GUID — сопоставления объектов, восстановления по идентификатору, настройки обмена — убедитесь, что всё работает корректно:
Как проверить результат
Объект найден, открывается форма, реквизиты заполнены
ПолучитьОбъект() вернул Неопределено — объекта нет
Объекты сопоставлены, дублей нет
В приёмнике появились дубли справочников
Все ссылки открываются
В полях отображается 'Объект не найден'
Дополнительно полезно выполнить тестирование и исправление информационной базы с проверкой ссылочной целостности — это выявит битые ссылки, возникшие из-за некорректных операций с идентификаторами.
Что важно запомнить
GUID — неизменный уникальный идентификатор объекта 1С, основа обменов и интеграций. Узнать его можно методом УникальныйИдентификатор(), найти объект — через ПолучитьСсылку() с обязательной проверкой существования. Дубли при обмене почти всегда означают, что у объектов разные GUID.
Часто задаваемые вопросы
Можно ли изменить GUID существующего объекта?
Штатными интерактивными средствами — нет. Программно GUID можно задать только новому объекту через УстановитьСсылкуНового() до записи. Для существующего объекта идентификатор менять нельзя — это нарушило бы ссылочную целостность, так как все ссылки в базе хранят именно GUID.
Почему при обмене появляются дубли контрагентов или номенклатуры?
Чаще всего потому, что объекты были созданы независимо в обеих базах и получили разные GUID. Обмен не находит объект по идентификатору и создаёт новый. Лечится сопоставлением объектов при начальной настройке обмена или объединением дублей с заменой ссылок.
Что означает надпись «Объект не найден» с длинным кодом?
Это битая ссылка: в поле хранится GUID объекта, который был физически удалён из базы. Длинный код — это и есть идентификатор удалённого объекта. По нему можно попытаться восстановить объект из резервной копии или из базы-партнёра по обмену.
Одинаковые ли GUID у объекта в разных базах после обмена?
Да, если обмен настроен корректно и объект пришёл именно через обмен — GUID сохраняется. Если же объект создали вручную в обеих базах, идентификаторы будут разными, даже при полностью совпадающих реквизитах.
Можно ли использовать код справочника вместо GUID для интеграции с сайтом?
Технически можно, но ненадёжно: коды могут повторяться между базами, меняться при ручном редактировании и при перенумерации. Для устойчивой интеграции внешняя система должна хранить именно GUID, а код использоваться только для отображения пользователю.
Как узнать GUID без доступа к конфигуратору?
В веб-клиенте идентификатор виден в адресной строке при открытии объекта (параметр ref). В тонком клиенте можно воспользоваться внешней обработкой для просмотра GUID или попросить разработчика добавить служебную команду в форму объекта.