Разработка и Конфигурация · 10 мин
Что такое УИД в 1С и как с ним работать
УИД (GUID) в 1С — уникальный идентификатор ссылок. Разбираем, зачем нужен, как получить программно, найти по ссылке и где применяется при обмене данными.
УИД (уникальный идентификатор, также GUID) в 1С — это внутренний идентификатор, который платформа автоматически присваивает каждому ссылочному объекту базы: документу, элементу справочника, плану счетов и другим сущностям. Он состоит из 32 шестнадцатеричных символов и выглядит примерно так: 3f2504e0-4f89-11d3-9a0c-0305e82c3301.
В отличие от кода или номера, которые видит пользователь, УИД скрыт внутри базы и не меняется на протяжении всей жизни объекта. Именно по нему платформа однозначно определяет, о каком именно элементе идёт речь, даже если у двух контрагентов совпадают наименования и коды.
Понимание того, как устроен и где используется УИД, необходимо при обмене данными между базами, интеграции с внешними системами, поиске «битых» ссылок и разработке обработок. Ниже разобраны способы получения УИД, его роль в обменах, типичные проблемы и ограничения.
Что такое УИД и чем он отличается от кода и номера
Каждый ссылочный объект в 1С имеет несколько идентифицирующих признаков. Код справочника или номер документа — это пользовательские реквизиты: они видны в интерфейсе, могут редактироваться (если это разрешено) и не гарантируют глобальной уникальности между разными базами. УИД — служебный идентификатор, который генерируется платформой в момент создания объекта и остаётся неизменным.
Формат УИД соответствует стандарту GUID (Globally Unique Identifier): 128-битное значение, записываемое в виде пяти групп шестнадцатеричных цифр через дефис. Вероятность совпадения двух случайно сгенерированных идентификаторов практически нулевая, что позволяет использовать их для объединения данных из разных источников.
Важно понимать: УИД привязан к конкретному объекту конкретной базы. Если один и тот же контрагент заведён в двух базах независимо, его УИД в этих базах будет разным. Совпадение УИД достигается только при выгрузке объекта из одной базы в другую механизмами, которые переносят идентификатор (обмен данными, конвертация с сохранением ссылок).
Где платформа использует УИД
Основная область применения УИД — обмен данными. В планах обмена, универсальных форматах EnterpriseData, конвертации данных и типовых синхронизациях объекты сопоставляются именно по уникальным идентификаторам. Благодаря этому при повторной выгрузке документ не дублируется в базе-приёмнике, а обновляется.
УИД также участвует в работе следующих механизмов:
- синхронизация с внешними системами через веб-сервисы, HTTP-сервисы и COM-соединения;
- регистрация изменений в планах обмена — платформа хранит ссылки, в основе которых лежат УИД;
- навигационные ссылки вида
e1cib/data/Справочник.Контрагенты?ref=..., где в конце зашит идентификатор объекта; - средства сопоставления объектов при загрузке из файлов (XML, Excel) через типовые обработки.
Для разработчика УИД — способ передать «указатель» на объект за пределы базы: например, сохранить идентификаторы номенклатуры в сторонней CRM, чтобы потом корректно формировать заказы через API.
Как получить УИД объекта программно
Во встроенном языке 1С идентификатор получается методом УникальныйИдентификатор(), вызванным у ссылки. Результат — значение типа «УникальныйИдентификатор», которое при необходимости преобразуется в строку.
КонтрагентСсылка = Справочники.Контрагенты.НайтиПоКоду("000000123");
Если Не КонтрагентСсылка.Пустая() Тогда
УИДСтрокой = Строка(КонтрагентСсылка.УникальныйИдентификатор());
Сообщить(УИДСтрокой); // например: 3f2504e0-4f89-11d3-9a0c-0305e82c3301
КонецЕсли;
Обратная задача — найти объект по известному УИД — решается конструктором Новый УникальныйИдентификатор(СтрокаУИД) и методом ПолучитьСсылку():
УИД = Новый УникальныйИдентификатор("3f2504e0-4f89-11d3-9a0c-0305e82c3301");
СсылкаНаОбъект = Справочники.Контрагенты.ПолучитьСсылку(УИД);
Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким УИД не найден — возможно, битая ссылка");
КонецЕсли;
УИД = Новый УникальныйИдентификатор("3f2504e0-4f89-11d3-9a0c-0305e82c3301");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект не найден");
КонецЕсли;Узнать УИД без программирования можно через навигационную ссылку: в режиме предприятия откройте объект и выполните «Получить ссылку» (или скопируйте ссылку через меню). Фрагмент после ref= содержит идентификатор в искажённом (переставленном) виде — для точного сопоставления надёжнее использовать программные методы или специализированные обработки.
УИД при обмене и интеграции между базами
При настройке синхронизации между двумя базами 1С (например, «Управление торговлей» и «Бухгалтерия предприятия») типовые механизмы переносят УИД объектов вместе с данными. В результате контрагент, выгруженный из первой базы, получает во второй базе тот же идентификатор, и последующие выгрузки обновляют его, а не создают дубль.
Если объект был создан в приёмнике вручную до начала обмена, его УИД отличается от УИД аналогичного объекта в источнике. Тогда при синхронизации возможны дубли: система видит два разных идентификатора и честно создаёт второй элемент. Для таких случаев в типовых конфигурациях предусмотрены правила сопоставления по реквизитам (ИНН, наименование) и инструменты ручного сопоставления.
При интеграции с внешними системами рекомендуется хранить УИД 1С во внешней системе как внешний ключ. Тогда повторная отправка данных не порождает дубли, а поиск объекта по идентификатору выполняется быстрее, чем поиск по реквизитам.
Битые ссылки и роль УИД в их появлении
«Битая» ссылка — это ссылка на объект, который был физически удалён из базы (минуя контроль ссылочной целостности, например при нештатной загрузке или прямом удалении). В формах и отчётах она отображается как «Объект не найден» с указанием УИД в угловых скобках.
Идентификатор в таком сообщении — тот самый УИД удалённого объекта. По нему можно попытаться восстановить данные: если объект существует в другой базе или в архивной копии, его переносят с сохранением идентификатора, и ссылка снова становится рабочей. Для этого используется метод ПолучитьСсылку(УИД) с последующим созданием объекта по этой ссылке.
- 1Скопируйте УИД из сообщения «Объект не найден» или из текста ошибки
- 2Найдите объект с таким УИД в резервной копии или базе-источнике
- 3Перенесите объект в рабочую базу обработкой с сохранением ссылки (ПолучитьСсылку + запись объекта)
- 4Проверьте, что в форме документа ссылка отображается корректно, а не как «Объект не найден»
Профилактика проще восстановления: включённый контроль ссылочной целостности при удалении, запрет интерактивного удаления помеченных объектов для рядовых пользователей и регламентные копии базы существенно снижают риск появления битых ссылок.
Ограничения и типичные ошибки при работе с УИД
Первое ограничение: УИД нельзя изменить штатными средствами пользователя. Попытки «подогнать» идентификаторы правкой таблиц СУБД напрямую почти гарантированно приводят к повреждению базы и потере поддержки. Все манипуляции выполняются только через встроенный язык.
Второе: строковое представление УИД в навигационной ссылке (после ref=) отличается от стандартного GUID перестановкой байтов. Сравнивать эти строки напрямую нельзя — сопоставляйте идентификаторы программно, через тип «УникальныйИдентификатор».
Третье: метод ПолучитьСсылку(УИД) не проверяет существование объекта — он просто формирует ссылку. Проверка выполняется отдельно через ПолучитьОбъект() или запрос, иначе легко записать в базу ссылку на несуществующий элемент.
Практические рекомендации
Храните УИД как строку в интеграционных регистрах и внешних системах, но при передаче внутрь 1С всегда преобразуйте её обратно в тип «УникальныйИдентификатор» — это исключает ошибки регистра и форматирования. Для журналирования интеграций фиксируйте и УИД, и представление объекта: по одному идентификатору человеку сложно понять, о каком элементе идёт речь.
При проектировании обменов решите заранее, какая база является «мастером» для каждого типа справочников. Если объект создаётся в обеих системах, определите правила сопоставления по ключевым реквизитам до запуска синхронизации — это дешевле, чем разбирать дубли после.
При отладке интеграций удобно выводить в журнал УИД вместе с представлением объекта. Пара «УИД + наименование» позволяет быстро найти проблемный элемент и в базе-источнике, и в приёмнике, не строя догадок по одному идентификатору.
Что важно запомнить
УИД — неизменный идентификатор ссылочного объекта, который платформа 1С использует для однозначной идентификации в обменах и интеграциях. Получается методом УникальныйИдентификатор(), обратный поиск — через ПолучитьСсылку() с обязательной проверкой существования объекта. Ручная правка идентификаторов вне встроенного языка недопустима.
Частые вопросы
Можно ли изменить УИД существующего объекта?
Штатными средствами — нет. Идентификатор фиксируется при создании объекта. На практике «смена» УИД означает создание нового объекта с нужной ссылкой через ПолучитьСсылку() и перенос данных, что требует аккуратной обработки всех мест, где используется старая ссылка.
Почему один и тот же контрагент имеет разные УИД в разных базах?
Потому что объект был создан в каждой базе независимо, и платформа сгенерировала разные идентификаторы. Совпадение УИД достигается только при переносе объекта механизмами, сохраняющими ссылку: обмен данными, конвертация, загрузка через обработки с ПолучитьСсылку().
Как узнать УИД объекта без программирования?
Откройте объект в режиме предприятия и получите навигационную ссылку — идентификатор содержится в ней после параметра ref=, хотя и в переставленном виде. Для точного значения в стандартном формате GUID используются внешние обработки или консоль кода.
Что означает надпись «Объект не найден» с символами в скобках?
Это битая ссылка: в базе осталась ссылка на объект, который был физически удалён. Символы в скобках — УИД удалённого объекта. По нему можно восстановить элемент из резервной копии или базы-источника с сохранением идентификатора.
Используется ли УИД у записей регистров и нессылочных объектов?
Нет, уникальный идентификатор есть только у ссылочных типов: справочников, документов, планов счетов, планов видов характеристик и подобных. Записи регистров идентифицируются комбинацией измерений, периода и регистратора, а не УИД.
Безопасно ли передавать УИД во внешние системы?
Сам по себе УИД не содержит данных объекта и его передача безопасна, но он позволяет однозначно адресовать объект через API. Поэтому доступ к сервисам, принимающим идентификаторы, должен быть защищён аутентификацией, чтобы по известному УИД нельзя было получить или изменить данные без прав.