Где взять GUID контрагента в 1С и как им пользоваться в обменах

· 9 мин

Содержание

Уникальный идентификатор клиента в 1С — это GUID ссылки на элемент справочника «Контрагенты» (в УТ 11 и ERP — ещё и «Партнёры»). Быстрее всего его получить так: откройте карточку клиента, нажмите Shift+F11 («Получить ссылку») и скопируйте строку вида e1cib/data/Справочник.Контрагенты?ref=…. Последние 32 символа — это и есть идентификатор, только в служебном порядке байтов. Строку в привычном формате xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx даёт метод УникальныйИдентификатор().

Обычная ситуация: программист сайта или CRM просит «ID клиента из 1С», чтобы заказы падали на нужного контрагента, а не создавали двойника. Код справочника тут не подходит — он меняется при перенумерации. Нужен GUID: он один на всю жизнь элемента и одинаков во всех копиях базы.

Что такое GUID контрагента и чем он отличается от кода и ИНН

Каждый элемент справочника и каждый документ в 1С:Предприятии 8.3 получает при записи 128-битный уникальный идентификатор. Платформа хранит его в поле ссылки. Пользователь его не видит и вручную поменять не может.

У клиента в базе обычно три «номера», и их часто путают:

ПризнакПримерУникален?Меняется?Для чего
Код справочника00-000123В пределах базы (если включён контроль)Да, при перенумерации и в другой базеПоиск человеком, печатные формы
ИНН / КПП7701234567 / 770101001Нет: у филиалов ИНН общий, бывают дублиРедкоСопоставление при обмене, отчётность
GUID ссылки3f2504e0-4f89-11d3-9a0c-0305e82c3301Да, глобальноНикогдаИнтеграции, обмены, связь с внешними системами

📌 Что важно запомнить про GUID:

  • 🔒 он назначается один раз и не меняется при правке наименования, ИНН или кода;
  • 📦 он сохраняется при выгрузке и загрузке базы через .dt, при копировании базы файлом;
  • 🆕 у скопированного элемента («Скопировать» в списке) будет новый GUID — это другой объект;
  • 🗑️ после удаления элемента и создания «такого же» GUID будет другим, и внешние системы этого клиента уже не узнают.

Если внешняя система хранит у себя код 1С вместо GUID, первая же перенумерация справочника сломает связь. Договаривайтесь с интеграторами сразу о GUID.

Как узнать идентификатор клиента в 1С из интерфейса программы

В типовых конфигурациях (БП 3.0, УТ 11, КА, ERP) отдельного поля «GUID» в карточке контрагента нет. Но платформа даёт навигационную ссылку, а в ней идентификатор зашит.

Способ 1. Навигационная ссылка

  1. Откройте карточку клиента в справочнике контрагентов.
  2. Нажмите Shift+F11 или значок ссылки в заголовке формы.
  3. В окне «Получить ссылку» скопируйте строку.

Ссылка выглядит так:

e1cib/data/Справочник.Контрагенты?ref=9a0c0305e82c330111d34f893f2504e0

Строка после ref= — это 16 байт идентификатора в том виде, в каком они лежат в базе. Для пользователя её достаточно: переслав её коллеге, вы откроете у него ровно этого клиента в той же базе или её копии.

Способ 2. Как перевести ref в обычный GUID

Байты в навигационной ссылке переставлены. Чтобы получить стандартную запись GUID из 32 символов ref, соберите группы так:

Часть GUIDСимволы из refВ примере
1-я (8 символов)с 25-го по 32-й3f2504e0
2-я (4)с 21-го по 24-й4f89
3-я (4)с 17-го по 20-й11d3
4-я (4)с 1-го по 4-й9a0c
5-я (12)с 5-го по 16-й0305e82c3301

Итог: 3f2504e0-4f89-11d3-9a0c-0305e82c3301. Это то же правило, что применяется к полю _IDRRef в SQL (ниже).

Код и ИНН в списке

Если на самом деле нужен не GUID, а код, добавьте колонку в список: Ещё → Изменить форму, отметьте поле «Код». ИНН в списке контрагентов БП 3.0 виден по умолчанию.

Что можно увидеть в Конфигураторе и в режиме отладки

Конфигуратор показывает метаданные, а не данные. В свойствах справочника «Контрагенты» видно длину и тип кода, автонумерацию, контроль уникальности — то есть понятно, можно ли полагаться на код как на ключ. GUID конкретного клиента в дереве метаданных не найти.

Посмотреть идентификатор элемента в Конфигураторе можно только через отладку:

  1. Запустите базу из Конфигуратора в режиме отладки (F5).
  2. Поставьте точку останова в модуле, где доступна ссылка на контрагента (например, в обработчике формы элемента или в своей внешней обработке).
  3. Когда выполнение остановится, откройте «Вычислить выражение» (Shift+F9) и введите:
Строка(Объект.Ссылка.УникальныйИдентификатор())

⚠️ Отладку и правку модулей делайте на копии базы. В рабочей базе изменение конфигурации потребует обновления структуры, а это монопольный доступ и остановка работы пользователей.

Ещё одна функция Конфигуратора пригодится для SQL: имена таблиц хранения. Их возвращает ПолучитьСтруктуруХраненияБазыДанных() — пример в разделе про SQL.

Получение УИД клиента кодом и через консоль запросов

Язык запросов 1С не умеет вывести GUID строкой — в результате будет представление ссылки (наименование). Поэтому консоль запросов используют, чтобы найти нужную ссылку, а GUID получают одной строкой кода.

Запрос: найти клиента по ИНН

ВЫБРАТЬ
    Контрагенты.Ссылка КАК Ссылка,
    Контрагенты.Наименование КАК Наименование,
    Контрагенты.ИНН КАК ИНН,
    Контрагенты.КПП КАК КПП
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    Контрагенты.ИНН = &ИНН
    И НЕ Контрагенты.ПометкаУдаления

Код: выгрузить GUID всех найденных

Этот фрагмент можно выполнить во внешней обработке или в консоли кода с серверным контекстом:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Контрагенты.Ссылка КАК Ссылка,
|    Контрагенты.Наименование КАК Наименование
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|    Контрагенты.ИНН = &ИНН";
Запрос.УстановитьПараметр("ИНН", "7701234567");

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    GUID = Строка(Выборка.Ссылка.УникальныйИдентификатор());
    Сообщить(Выборка.Наименование + ": " + GUID);
КонецЦикла;

Выгрузить GUID всех клиентов в файл

Интеграторы обычно просят не один идентификатор, а таблицу «ИНН — название — GUID» для первичной загрузки. Её удобно сделать внешней обработкой: в Конфигураторе Файл → Новый → Внешняя обработка, добавьте форму и серверную процедуру. Внешнюю обработку можно открыть в рабочей базе через Файл → Открыть, если у пользователя есть право на интерактивное открытие внешних обработок.

Запрос = Новый Запрос(
"ВЫБРАТЬ
|    Контрагенты.Ссылка КАК Ссылка,
|    Контрагенты.Наименование КАК Наименование,
|    Контрагенты.ИНН КАК ИНН
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|    НЕ Контрагенты.ЭтоГруппа
|    И НЕ Контрагенты.ПометкаУдаления");

Запись = Новый ЗаписьТекста("C:\Temp\clients.csv", КодировкаТекста.UTF8);
Запись.ЗаписатьСтроку("ИНН;Наименование;GUID");

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Запись.ЗаписатьСтроку(СтрШаблон("%1;%2;%3",
        Выборка.ИНН, Выборка.Наименование,
        Строка(Выборка.Ссылка.УникальныйИдентификатор())));
КонецЦикла;
Запись.Закрыть();

Файл ложится на компьютер, где выполняется код. В клиент-серверной базе серверная процедура пишет файл на сервер 1С, а не на рабочее место — учтите это при выборе пути. Группы справочника отсечены условием ЭтоГруппа: у групп тоже есть GUID, но внешней системе они обычно не нужны.

Обратная задача: найти клиента по GUID

УИД = Новый УникальныйИдентификатор("3f2504e0-4f89-11d3-9a0c-0305e82c3301");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(УИД);

Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
    Сообщить("Клиента с таким идентификатором в базе нет");
Иначе
    Сообщить("Найден: " + Ссылка.Наименование);
КонецЕсли;

ПолучитьСсылку() вернёт ссылку всегда, даже если такого элемента нет. Без проверки через ПолучитьОбъект() (или запросом) вы получите «битую» ссылку и запишете её в документ.

Создать клиента с заранее известным GUID

Когда клиент заводится во внешней системе первым, GUID можно передать в 1С и создать элемент именно с ним:

Новый = Справочники.Контрагенты.СоздатьЭлемент();
Новый.УстановитьСсылкуНового(Справочники.Контрагенты.ПолучитьСсылку(УИД));
Новый.Наименование = "ООО Ромашка";
Новый.Записать();

Так и сайт, и 1С с первого дня знают клиента под одним ключом.

GUID клиента в базе SQL: таблица и перестановка байтов

В клиент-серверной базе справочник хранится в таблице вида _Reference123, ссылка — в колонке _IDRRef типа binary(16) (в PostgreSQL — bytea). Номер таблицы свой в каждой конфигурации.

Узнать имя таблицы

Имена = Новый Массив;
Имена.Добавить("Справочник.Контрагенты");
Структура = ПолучитьСтруктуруХраненияБазыДанных(Имена);

Для Каждого Стр Из Структура Цикл
    Если Стр.Назначение = "Основная" Тогда
        Сообщить(Стр.ИмяТаблицыХранения);
    КонецЕсли;
КонецЦикла;

MS SQL: вывести GUID в стандартном виде

SELECT t._Description AS name,
       LOWER(SUBSTRING(h,25,8) + '-' + SUBSTRING(h,21,4) + '-' +
             SUBSTRING(h,17,4) + '-' + SUBSTRING(h,1,4)  + '-' +
             SUBSTRING(h,5,12)) AS guid
FROM (
    SELECT _Description, CONVERT(varchar(32), _IDRRef, 2) AS h
    FROM dbo._Reference123
) AS t;

PostgreSQL

SELECT _description AS name,
       substring(h from 25 for 8) || '-' || substring(h from 21 for 4) || '-' ||
       substring(h from 17 for 4) || '-' || substring(h from 1 for 4)  || '-' ||
       substring(h from 5 for 12) AS guid
FROM (
    SELECT _description, encode(_idrref, 'hex') AS h
    FROM _reference123
) AS t;

Только чтение и лучше на копии базы. Запись в таблицы 1С напрямую через SQL обходит проверки платформы, ломает ссылочную целостность и не поддерживается фирмой-разработчиком. Если нужно что-то менять — делайте это через встроенный язык.

Идентификатор клиента в обмене данными и интеграциях

Обмены между базами 1С

В типовых обменах на БСП (БП ↔ УТ, БП ↔ ЗУП, обмены через EnterpriseData) объекты сначала сопоставляются по GUID. Если пришёл клиент с GUID, которого в базе нет, программа ищет его по реквизитам — для контрагентов обычно это ИНН и КПП. Нашла — запоминает соответствие «чужой GUID ↔ наш элемент» в служебном регистре, и дальше связь держится уже по нему.

Отсюда практическое правило: перед первой синхронизацией двух баз, где клиенты заводились независимо, выполните сопоставление данных в мастере настройки синхронизации (Администрирование → Синхронизация данных). Несопоставленные строки свяжите вручную — иначе получите дубли.

Сайт, CRM, маркетплейсы

Для внешних систем GUID — самый надёжный ключ. Через стандартный интерфейс OData клиент адресуется прямо по нему:

/odata/standard.odata/Catalog_Контрагенты(guid'3f2504e0-4f89-11d3-9a0c-0305e82c3301')

В ответе GUID лежит в поле Ref_Key. Перед этим справочник нужно включить в состав публикуемых через OData.

Сопоставление полей
ID клиента в CRM→GUID ссылки контрагента (Ref_Key)
ИНН→Контрагенты.ИНН
КПП→Контрагенты.КПП
Название организации→Контрагенты.Наименование
Номер клиента для менеджера→Контрагенты.Код (только для показа)

Храните во внешней системе GUID, а ИНН используйте как запасной ключ для первого сопоставления. Код 1С — только для отображения людям.

Ошибки с идентификатором клиента и как их исправить

Диагностика: выберите симптом

Частые вопросы

Совпадает ли GUID клиента в копии базы?
Да. Копия через .dt, копирование каталога файловой базы или резервная копия SQL сохраняют все идентификаторы без изменений.
Можно ли изменить GUID у существующего контрагента?
Нет. Идентификатор ссылки назначается один раз. Можно только создать новый элемент с нужным GUID и перенести на него данные — это фактически другой объект.
Сколько символов в GUID 1С?
36 символов в стандартной записи: 32 шестнадцатеричные цифры и 4 дефиса. В навигационной ссылке — 32 символа без дефисов в другом порядке.
Есть ли GUID у документов и строк табличной части?
У документов, справочников, планов видов характеристик и других ссылочных объектов — есть. У строк табличных частей и записей регистров собственной ссылки нет.
Чем партнёр отличается от контрагента в УТ 11?
Партнёр — клиент как бизнес-единица, контрагент — юрлицо или ИП, с которым оформляют документы. У каждого свой GUID, поэтому при интеграции уточните, какой из двух ключей нужен внешней системе.