Работа со ссылочными типами данных в платформе 1С:Предприятие 8 является фундаментальной частью разработки сложных конфигураций. Программисты часто сталкиваются с ситуацией, когда необходимо передать идентификатор объекта во внешнюю систему, сохранить его в информационном регистре или просто вывести в отчет в текстовом виде. Прямое использование объекта типа СправочникСсылка в текстовых полях невозможно без явного преобразования.

В языке запросов 1С существуют специфические особенности обработки типов данных, которые отличают его от стандартного программного кода. Непонимание разницы между функциями Представление и Строка может привести к ошибкам при формировании отчетов или некорректной работе обмена данными. В этой статье мы детально разберем все доступные способы конвертации ссылки в строковое представление непосредственно внутри текста запроса.

Выбор правильного метода зависит от конечной цели: нужно ли вам человеческое наименование объекта или его уникальный технический идентификатор. Ошибки на этом этапе часто приводят к тому, что при выгрузке данных теряется связь между записями, или же в отчетах отображаются служебные имена вместо понятных названий. Давайте рассмотрим инструменты платформы, которые решают эти задачи эффективно и безопасно.

Функция Представление для человеко читаемых имен

Самый распространенный способ получить текстовое описание объекта — использовать встроенную функцию Представление. Она возвращает строку, которая отображается в интерфейсе пользователя при выборе элемента справочника или документа. Это может быть просто наименование, код или комбинация кода и наименования, в зависимости от настроек конфигурации.

Важно понимать, что результат работы этой функции не является уникальным ключом. Два разных объекта могут иметь одинаковое представление, если, например, пользователь вручную ввел одинаковые названия для разных контрагентов. Поэтому использовать Представление для внутренней логики программы или для соединений таблиц не рекомендуется.

Функция особенно полезна при формировании печатных форм и аналитических отчетов, где конечному пользователю важнее видеть "ООО Ромашка", чем длинную последовательность символов GUID. В запросе она вызывается как обычная функция от поля ссылочного типа.

Синтаксис использования предельно прост и не требует дополнительных подключений библиотек. Вы просто оборачиваете поле ссылки в функцию, и сервер 1С автоматически подставляет нужное значение.

ВЫБРАТЬ

Контрагенты.Ссылка КАК Ссылка,

Представление(Контрагенты.Ссылка) КАК Наименование

ИЗ

Справочник.Контрагенты КАК Контрагенты

⚠️ Внимание: Функция Представление зависит от настроек формы списка и свойств метаданных. Если в конфигурации изменится порядок вывода кода и имени, результат выполнения запроса также изменится без предупреждения.

💡

Используйте функцию Представление только для отображения данных пользователю. Никогда не сохраняйте результат этой функции в базы данных для последующего поиска или соединения таблиц, так как текст не гарантирует уникальности.

При работе с иерархическими справочниками функция учитывает полную цепочку вложенности, если это предусмотрено настройками представления. Это позволяет сразу получить контекст объекта, например, "Основное производство -> Цех №1".

Метод Строка для получения уникального идентификатора

Когда требуется получить техническое представление ссылки, которое гарантированно уникально и неизменно на протяжении всего жизненного цикла объекта, используется функция Строка. В отличие от Представление, этот метод возвращает строковое представление внутреннего GUID объекта базы данных.

Результатом выполнения функции Строка(Ссылка) является строка длиной 36 символов (с дефисами) или 32 символа (без дефисов, в зависимости от версии платформы и контекста), содержащая шестнадцатеричные цифры. Этот формат является стандартом для передачи идентификаторов между системами, например, при интеграции с сайтами или CRM.

Главное преимущество этого подхода — независимость от пользовательских данных. Даже если пользователь переименует элемент справочника десять раз, его строковое представление, полученное через функцию Строка, останется прежним. Это критически важно для синхронизации данных.

В запросах 1С эта функция работает на стороне сервера и не требует выгрузки объекта в клиентское приложение, что обеспечивает высокую производительность даже при обработке больших выборок.

ВЫБРАТЬ

Номенклатура.Ссылка,

Строка(Номенклатура.Ссылка) КАК УникальныйКод

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

Номенклатура.ЭтоГруппа = ЛОЖЬ

Полученную строку можно безопасно передавать в HTTP-запросы, сохранять в JSON или использовать как ключ в внешних базах данных SQL. Парсинг такой строки обратно в ссылку 1С также не вызывает затруднений.

📊 Какой метод преобразования вы используете чаще?
Представление (для отчетов)
Строка (для GUID)
Через программный код
Не использую

Работа с таблицей значений ссылок

В некоторых случаях разработчики пытаются хранить ссылки в виде строк в регистрах сведений или в табличных частях документов, не понимая внутренней структуры хранения 1С. На самом деле, в типизированных полях базы данных ссылки хранятся оптимизированным образом, но при выгрузке в универсальные форматы они требуют преобразования.

Если вы формируете временную таблицу в запросе для дальнейшей обработки, важно правильно определить тип колонки. При использовании функции Строка тип колонки автоматически становится Строка, что позволяет применять к ней стандартные строковые функции, такие как ЛЕВСИМВ, НАЙТИ или конкатенацию.

Однако стоит помнить, что обратное преобразование строки в ссылку внутри запроса невозможно без использования временных таблиц и конструкции ЕСТЬ NULL или специальных приемов с параметрами. Запрос 1С не имеет встроенной функции СсылкаИзСтроки.

Для анализа структуры ссылок можно воспользоваться следующей таблицей, которая сравнивает характеристики различных методов получения строки:

Метод Тип результата Уникальность Читаемость
Представление() Строка (переменная) Не гарантирована Высокая
Строка() Строка (GUID) Абсолютная Низкая
Код Строка/Число В рамках вида Средняя
УникальныйИдентификатор Строка (UUID) Абсолютная Низкая

Использование поля Код часто является компромиссным вариантом. Код обычно короче GUID и понятнее пользователю, но его уникальность гарантируется только внутри одного вида справочника. При объединении данных из разных справочников использование кода может привести к коллизиям.

Технические детали хранения ссылок

Внутри базы данных (MSSQL, PostgreSQL) ссылки 1С хранятся не просто как строки, а как ссылки на записи в специальных системных таблицах _Reference или _Document. Функция Строка() фактически выполняет запрос к этим системным таблицам для извлечения UUID.

Преобразование в программном коде 1С

Хотя запросы предоставляют мощные средства, иногда преобразование необходимо выполнить в толстом или тонком клиенте, или в серверном модуле объекта. В языке 1С для этого существуют методы самого объекта ссылки. Метод УникальныйИдентификатор() возвращает объект типа УникальныйИдентификатор, который затем можно привести к строке.

Пример программного преобразования выглядит следующим образом:

СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоНаименованию("Товар А");

Если СсылкаНаОбъект.Пустая() Тогда

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

Иначе

// Получаем GUID

GUIDОбъекта = СсылкаНаОбъект.УникальныйИдентификатор();

// Преобразуем в строку

СтрокаGUID = Строка(GUIDОбъекта);

// Или сразу получаем представление

СтрокаПредставления = СсылкаНаОбъект.Представление();

КонецЕсли;

В отличие от запроса, в коде вы можете гибко управлять форматированием. Например, можно убрать дефисы из GUID для передачи в системы, которые не поддерживают стандартный формат UUID. Это достигается методами объекта УникальныйИдентификатор.

Важно отметить разницу в производительности. Если вам нужно обработать тысячи записей, делать это в цикле на клиенте или сервере через выборку объектов будет крайне медленно. В таких случаях запрос с функцией Строка() является безальтернативным лидером по скорости.

⚠️ Внимание: При работе в управляемых формах помните, что передача больших массивов ссылок между клиентом и сервером может вызвать превышение лимитов трафика. Старайтесь выполнять преобразование в строку на той стороне, где данные будут использоваться.

Особенности работы с составными типами

В современных конфигурациях 1С, таких как ERP или УТ 11, часто используются поля составного типа. Например, поле "Объект" может содержать ссылку на Справочник, Документ или План Видов Характеристик. Работа с такими полями в запросе требует особой внимательности.

Функция Строка() универсальна и корректно работает с составными типами, возвращая GUID конкретного объекта, находящегося в поле. Однако функция Представление() также справляется с этой задачей, автоматически определяя тип вложенного объекта.

Проблемы могут возникнуть при попытке отфильтровать такие данные. Если вы привели ссылку к строке, вы больше не можете использовать оператор В со списком ссылок для фильтрации исходного поля. Вам придется фильтровать уже строковое представление, что лишает запрос возможности использовать индексы базы данных по ссылкам.

Всегда старайтесь держать ссылки в их-native типе как можно дольше в теле запроса. Преобразование в строку должно быть одним из последних этапов формирования выборки, непосредственно перед выводом результата.

💡

Главное правило оптимизации: выполняйте фильтрацию и соединения (JOIN) по полям ссылочного типа, а преобразование в строку делайте только для финальных полей вывода.

Если в составном типе возможно значение Неопределено, функции Строка и Представление вернут пустую строку. Это поведение следует учитывать при написании условий в секции ГДЕ, чтобы не отсечь нужные записи или, наоборот, не получить лишние.

Частые ошибки и отладка запросов

Одной из самых распространенных ошибок является попытка сохранить строковое представление GUID обратно в поле типа Ссылка без правильного преобразования. База данных выдаст ошибку типов, так как строка не может быть автоматически приведена к сложному объекту ссылки.

Еще одна проблема — кодировка. При передаче строковых GUID во внешние системы через HTTP-сервисы иногда возникают проблемы с кодировкой символов, хотя GUID состоит из латинских букв и цифр. Тем не менее, при формировании JSON-структур вручную через конкатенацию строк в запросе нужно быть осторожным с экранированием кавычек.

  • 🔍 Ошибка: Использование Представление для уникальной идентификации приводит к дубликатам в отчетах.
  • 🔍 Ошибка: Преобразование в строку в подзапросе, что мешает использованию индексов при соединении таблиц.
  • 🔍 Ошибка: Игнорирование пустых ссылок, которые после преобразования становятся пустыми строками и ломают логику фильтрации.
  • 🔍 Ошибка: Попытка использовать строковый GUID длиной 36 символов в поле базы данных, ограниченном 32 символами.

Для отладки таких ситуаций удобно использовать консоль запросов. Там можно мгновенно проверить, какой именно результат возвращает функция для конкретного объекта. Это экономит время на компиляцию модуля и запуск отладчика.

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

⚠️ Внимание: Детали реализации функций могут незначительно отличаться в версии платформы 8.3.20 и новее по сравнению с ранними версиями. Сверяйте синтаксис в справке по вашей конкретной версии 1С:Предприятие.

☑️ Проверка корректности преобразования

Выполнено: 0 / 4

FAQ: Часто задаваемые вопросы

Можно ли преобразовать строку обратно в ссылку внутри запроса 1С?

Нет, в языке запросов 1С нет встроенной функции для прямого преобразования строки (GUID) в объект ссылки. Это необходимо делать на стороне программного кода (Сервер или Клиент), создавая объект ссылки через конструктор или метод ПолучитьСсылку.

В чем разница между Строка(Ссылка) и Ссылка.УникальныйИдентификатор()?

Функция запроса Строка() сразу возвращает текстовое представление GUID. Метод объекта УникальныйИдентификатор() возвращает объект специального типа, который затем нужно явно приводить к строке. В запросах используется только первый вариант.

Почему функция Представление возвращает разные результаты на разных компьютерах?

Это может происходить, если на разных рабочих местах установлены разные версии конфигурации или изменены настройки форм списка, влияющие на отображение. Функция Строка() лишена этого недостатка и возвращает одинаковый результат везде.

Как получить только код элемента справочника в запросе?

Для этого не нужны специальные функции. Достаточно выбрать поле Ссылка.Код в списке полей запроса. Например: ВЫБРАТЬ Справочник.Ссылка.Код ИЗ Справочник.Номенклатура.

Будет ли работать индексация, если я фильтрую по Строка(Ссылка)?

Нет, использование функции от поля в условии ГДЕ обычно отключает использование индекса по этому полю. Запрос станет полным сканированием таблицы, что критично замедлит работу на больших объемах данных.