Разработка и Конфигурация · 9 мин
Как получить пустой уникальный идентификатор в 1С
Как получить пустой уникальный идентификатор в 1С: конструктор из нулей, проверка на пустоту, сравнение GUID ссылок, типичные ошибки и примеры кода на встроенном языке.
Пустой уникальный идентификатор в 1С — это значение типа «УникальныйИдентификатор», состоящее из 32 нулей: 00000000-0000-0000-0000-000000000000. Оно используется как аналог «отсутствующего» GUID: например, когда нужно сбросить связь между объектами, инициализировать реквизит или проверить, заполнен ли идентификатор.
Встроенный язык 1С не имеет отдельной константы «пустой GUID», поэтому разработчики получают его через конструктор с строковым параметром из нулей. Ниже разобраны все рабочие способы, проверка результата, тонкости сравнения и типичные ошибки, которые приводят к исключениям и неочевидным багам в обменах данными.
Что такое уникальный идентификатор и его пустое значение
Тип «УникальныйИдентификатор» (GUID, UUID) в 1С — это 128-битное значение, которое платформа присваивает каждому объекту базы: элементу справочника, документу, записи регистра. Именно по GUID работают механизмы ссылочной целостности, обмены данными и синхронизация с внешними системами.
Понятия «пустой идентификатор» как отдельного литерала в языке нет. Под пустым GUID подразумевают значение, все байты которого равны нулю. В строковом виде оно выглядит как 00000000-0000-0000-0000-000000000000. Важно не путать его с пустой ссылкой (например, Справочники.Номенклатура.ПустаяСсылка()) — это разные сущности: у пустой ссылки идентификатор как раз равен нулевому GUID, но сама пустая ссылка имеет тип конкретного объекта.
Основной способ: конструктор с нулевой строкой
Стандартный и единственный корректный способ получить пустой GUID — вызвать конструктор Новый УникальныйИдентификатор() с параметром-строкой, содержащей 32 нуля в формате с дефисами:
ПустойИд = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
Вызов конструктора без параметров создаёт не пустой, а новый случайный идентификатор — это частая причина ошибок. Если нужен именно «нулевой» GUID, строка-параметр обязательна.
На практике значение удобно хранить в переменной модуля или функции, чтобы не дублировать строку нулей по всему коду:
Функция ПустойУникальныйИдентификатор() Экспорт
Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
КонецФункции
ПустойИд = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
Сообщить(ПустойИд); // 00000000-0000-0000-0000-000000000000Проверка идентификатора на пустоту
Проверить, что переменная содержит пустой GUID, можно прямым сравнением с конструктором. Значения типа «УникальныйИдентификатор» корректно сравниваются оператором равенства:
Если МойИд = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
// идентификатор пустой
КонецЕсли;
Альтернатива — сравнение строкового представления. Метод Строка(МойИд) или неявное приведение вернёт строку из 36 символов, которую можно сопоставить с эталоном. Этот способ медленнее и менее читаем, но полезен, когда значение уже получено в виде строки, например из XML или HTTP-запроса:
Если Строка(МойИд) = "00000000-0000-0000-0000-000000000000" Тогда
// идентификатор пустой
КонецЕсли;
Получение пустого GUID из пустой ссылки
Второй источник нулевого идентификатора — метод УникальныйИдентификатор() пустой ссылки любого ссылочного типа. Пустая ссылка хранится в базе именно с нулевым GUID, поэтому результат гарантирован:
ПустойИд = Справочники.Номенклатура.ПустаяСсылка().УникальныйИдентификатор();
Этот приём удобен, когда код уже работает со ссылками и не хочется «зашивать» строку нулей. Обратная задача — получить пустую ссылку по пустому идентификатору — решается через ПолучитьСсылку(Новый УникальныйИдентификатор("00000000-...")), но её результат формально не равен ПустаяСсылка() при строгом сравнении в некоторых контекстах, поэтому для получения пустой ссылки всегда используйте штатный метод менеджера объекта.
Способы получения пустого GUID
Универсальный и самый читаемый способ; подходит везде, включая модули без доступа к менеджерам объектов.
Удобен, когда код уже оперирует ссылками; требует обращения к конкретному менеджеру справочника или документа.
Применяется при обмене: строка нулей приходит извне и преобразуется конструктором; требует проверки формата.
Где пустой GUID применяется на практике
Типовой сценарий — обмены данными. При выгрузке в XML или JSON отсутствующая ссылка часто сериализуется как нулевой GUID, и на стороне приёмника нужно распознать эту ситуацию, чтобы не создать «битую» ссылку на несуществующий объект. Проверка на пустой идентификатор до вызова ПолучитьСсылку() предотвращает появление объектов вида «<Объект не найден>».
Второй сценарий — хранение внешних идентификаторов в реквизитах типа «УникальныйИдентификатор» или «Строка(36)». Пустой GUID здесь играет роль признака «сопоставление не выполнено». Третий сценарий — инициализация параметров и структур, где поле должно иметь корректный тип, но ещё не заполнено реальным значением.
- 1Проверьте входную строку: не пустая ли она и соответствует ли формату GUID.
- 2Сравните идентификатор с пустым GUID — если равен, присвойте ПустаяСсылка() и завершите обработку.
- 3Получите ссылку через менеджер объекта: Менеджер.ПолучитьСсылку(Идентификатор).
- 4Проверьте существование объекта запросом или через ПустаяСтрока(Ссылка.ВерсияДанных) с осторожностью.
- 5Только после проверок используйте ссылку в записях и движениях.
Типичные ошибки и ограничения
Самая распространённая ошибка — вызов Новый УникальныйИдентификатор() без параметра в надежде получить «пустое» значение. Результатом будет случайный GUID, и проверка на пустоту никогда не сработает. Вторая ошибка — опечатки в строке нулей: лишний или пропущенный символ вызовет исключение «Недопустимое значение параметра» ещё на этапе выполнения конструктора.
Третья группа проблем — сравнение GUID со строкой без приведения типов. Выражение МойИд = "00000000-..." не вызовет ошибки, но и не даст ожидаемого результата в ряде контекстов: типы различаются, и сравнение может вернуть ложь. Всегда приводите обе стороны к одному типу.
Проверка результата и контрольные точки
После создания пустого идентификатора убедитесь, что значение именно нулевое. Быстрый способ — вывести его через Сообщить() или посмотреть в отладчике: строковое представление должно содержать только нули и дефисы. Если там любые другие символы — конструктор был вызван без параметра или с другой строкой.
В прикладном коде полезно покрыть проверку на пустой GUID юнит-тестом или хотя бы отладочным утверждением, особенно если функция-обёртка используется в десятках мест. Это страхует от случайной правки строки нулей при рефакторинге.
Как проверить результат
00000000-0000-0000-0000-000000000000
Любые ненулевые символы — создан случайный GUID
Условие равенства возвращает Истина
Ложь при визуально «нулевом» значении — проверьте тип переменной
Пустой GUID распознаётся как отсутствие ссылки
Создаётся ссылка на несуществующий объект — проверка пропущена
FAQ
Чем пустой GUID отличается от пустой ссылки?
Пустой GUID — это просто нулевое значение типа «УникальныйИдентификатор», не привязанное ни к какому объекту. Пустая ссылка — типизированное значение конкретного справочника или документа, у которого идентификатор равен этому нулевому GUID. Сравнивать их напрямую нельзя: типы разные.
Можно ли получить пустой идентификатор без строки нулей?
Да, через Справочники.ИмяСправочника.ПустаяСсылка().УникальныйИдентификатор() — результат будет тем же нулевым GUID. Но конструктор со строкой нулей короче и не требует обращения к менеджеру объекта.
Почему Новый УникальныйИдентификатор() вернул не нули?
Конструктор без параметра генерирует новый случайный идентификатор — так задумано платформой. Пустое значение получается только при явной передаче строки из 32 нулей в формате с дефисами.
Как проверить на пустоту GUID, пришедший строкой из JSON?
Сначала сравните строку с "00000000-0000-0000-0000-000000000000" напрямую. Если нужен типизированный результат, преобразуйте строку через конструктор и сравните уже значения типа «УникальныйИдентификатор» — это надёжнее при возможных различиях в регистре символов.
Выбросит ли ошибку конструктор при неверной строке?
Да. Если строка не соответствует формату GUID (неверная длина, недопустимые символы, пропущенные дефисы), платформа вызовет исключение «Недопустимое значение параметра». Поэтому строку из внешних источников стоит проверять до передачи в конструктор.
Можно ли сравнивать GUID оператором "=" в запросах?
В языке запросов 1С сравнение уникальных идентификаторов напрямую ограничено: обычно сравнивают ссылки, а не их GUID. Если нужно отобрать по идентификатору, передавайте в запрос ссылку, полученную через ПолучитьСсылку(), и сравнивайте поле ссылки с параметром.
Что важно запомнить
Пустой GUID в 1С — это Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"). Конструктор без параметра создаёт случайное значение, а не пустое. Проверяйте на пустоту сравнением значений одного типа и всегда отсекайте нулевой GUID до вызова ПолучитьСсылку() в обменах.