К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как выразить ссылку как строку в запросе 1С

Способы преобразования ссылки в строку в запросе 1С: ПРЕДСТАВЛЕНИЕССЫЛКИ, ВЫРАЗИТЬ, работа с УникальныйИдентификатор. Примеры, ограничения и ошибки.

Задача преобразовать ссылку в строку возникает у разработчиков 1С регулярно: при выгрузке данных во внешние системы, при формировании отчётов, при сравнении значений и при написании универсальных обработок. Сложность в том, что язык запросов 1С не имеет прямой функции приведения ссылки к типу «Строка» — конструкция ВЫРАЗИТЬ(Ссылка КАК СТРОКА(36)) для ссылочных типов не работает.

Несмотря на это ограничение, существует несколько рабочих подходов: функция ПРЕДСТАВЛЕНИЕССЫЛКИ, представление полей, получение уникального идентификатора вне запроса и комбинированные приёмы. Каждый из них даёт разный результат и имеет свои ограничения, поэтому выбор зависит от того, что именно требуется — человекочитаемое представление или технический идентификатор ссылки.

Разберём все доступные способы с примерами кода, покажем, чем отличается представление от GUID, где возникают типичные ошибки и как проверить, что преобразование выполнено корректно.

Почему ВЫРАЗИТЬ(Ссылка КАК СТРОКА) не работает

Конструкция ВЫРАЗИТЬ в языке запросов 1С предназначена для двух задач: усечения строк до заданной длины и уточнения типа поля составного типа. Она не выполняет произвольное преобразование типов. Попытка написать ВЫРАЗИТЬ(Документ.Ссылка КАК СТРОКА(100)) приведёт к ошибке компиляции запроса, потому что ссылочный тип нельзя привести к строковому на уровне СУБД таким способом.

Причина кроется в архитектуре платформы. Ссылка в базе данных хранится как внутренний идентификатор (GUID с привязкой к типу объекта), а строковое представление формируется уже на уровне платформы — из наименования, номера, даты и других полей объекта. Запрос работает на уровне СУБД, поэтому «собрать» строку из ссылки напрямую он не может.

ПРЕДСТАВЛЕНИЕССЫЛКИ — основной способ получить строку

Функция ПРЕДСТАВЛЕНИЕССЫЛКИ возвращает строковое представление ссылки — то, что пользователь видит в интерфейсе: наименование элемента справочника или шаблон вида «Реализация товаров и услуг 0000-000123 от 12.03.2026» для документа. Это штатный и наиболее корректный способ получить строку из ссылки в запросе.

ВЫБРАТЬ

ПРЕДСТАВЛЕНИЕССЫЛКИ(Номенклатура.Ссылка) КАК НоменклатураСтрокой

ИЗ

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

ГДЕ

НЕ Номенклатура.ПометкаУдаления

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

Отличие от функции ПРЕДСТАВЛЕНИЕ

Функция ПРЕДСТАВЛЕНИЕ (без слова «ССЫЛКИ») предназначена для примитивных типов — дат, чисел, булевых значений. Для ссылок она тоже отработает и вернёт представление, но ПРЕДСТАВЛЕНИЕССЫЛКИ считается специализированным вариантом для ссылочных типов и корректнее передаёт намерение разработчика. На практике для ссылки обе функции дадут одинаковый результат, однако рекомендуется использовать именно ПРЕДСТАВЛЕНИЕССЫЛКИ.

Сравнение вариантов

ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка)

Даёт человекочитаемое представление (наименование, номер и дата). Подходит для отчётов и печатных форм, но не возвращает GUID.

Ссылка.УникальныйИдентификатор() в коде

Даёт технический GUID ссылки. Нужен для интеграций и обменов, но доступен только вне запроса — на встроенном языке.

Конкатенация полей объекта

Сборка строки вручную из полей (Номер, Дата, Наименование). Полный контроль формата, но больше кода и риск расхождения с типовым представлением.

Как получить GUID ссылки строкой

Частая потребность — получить не представление, а уникальный идентификатор ссылки в виде строки, например для передачи в веб-сервис или сопоставления с внешней базой. В языке запросов 1С прямой функции для этого нет. GUID извлекается методом УникальныйИдентификатор(), который доступен только на встроенном языке.

Типовой приём — выполнить запрос, выбрав ссылку, а затем в обходе результата преобразовать каждую ссылку в строку:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Ссылка

|ИЗ

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

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

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

// Дальнейшая обработка: запись в файл, передача в HTTP-запрос и т.д.

КонецЦикла;

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

Сборка строки из полей объекта вручную

Когда стандартное представление не устраивает форматом, строку собирают из отдельных полей объекта прямо в запросе. Для этого поля приводят к строке (для примитивных типов ВЫРАЗИТЬ и функция ПРЕДСТАВЛЕНИЕ работают) и соединяют оператором конкатенации:

ВЫБРАТЬ

"Реализация № " + Реализация.Номер

+ " от " + ПРЕДСТАВЛЕНИЕ(Реализация.Дата) КАК ОписаниеДокумента

ИЗ

Документ.РеализацияТоваровУслуг КАК Реализация

Такой подход даёт полный контроль над итоговым форматом: можно выводить дату в нужном виде, добавлять префиксы, отсекать лидирующие нули номера. Минус — представление может разойтись с типовым, которое видит пользователь в списках, что иногда вызывает вопросы при сверке.

Учтите, что конкатенация со значением NULL даёт NULL целиком. Если какое-то поле может быть пустым в итогах или при левом соединении, оборачивайте его в ЕСТЬNULL(Поле, "").

Порядок действий
  1. 1
    Определите, какая строка нужна: представление для пользователя или GUID для интеграции.
  2. 2
    Для представления используйте ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка) в тексте запроса.
  3. 3
    Для GUID выберите Ссылку запросом, затем в обходе результата вызовите Ссылка.УникальныйИдентификатор() и преобразуйте в строку.
  4. 4
    Если формат нестандартный — соберите строку конкатенацией полей с ПРЕДСТАВЛЕНИЕ для дат и чисел.
  5. 5
    Проверьте результат на элементах с длинными наименованиями, пустыми полями и помеченными на удаление объектами.

Типичные ошибки и ограничения

Первая и самая распространённая ошибка — попытка применить ВЫРАЗИТЬ(Ссылка КАК СТРОКА(N)). Запрос не выполнится, конструктор выдаст сообщение о несовместимости типов. Вторая ошибка — использование ПРЕДСТАВЛЕНИЕССЫЛКИ в условии ГДЕ для поиска по подстроке: это обходится дорого по производительности и часто не использует индексы. Для поиска по наименованию фильтруйте само поле Наименование, а не представление ссылки.

Третья группа проблем связана с битостью ссылок. Если ссылка указывает на удалённый объект («битая ссылка»), ПРЕДСТАВЛЕНИЕССЫЛКИ вернёт техническую строку с GUID, а обращение к полям объекта даст NULL. Это нужно учитывать при конкатенации и при выгрузках.

Типичные ошибки
01
ВЫРАЗИТЬ(Ссылка КАК СТРОКА(50)) — ошибка компиляции, ссылочные типы так не приводятся.
02
Фильтрация ГДЕ ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка) ПОДОБНО — тяжёлый запрос без использования индексов.
03
Использование представления как ключа обмена между базами — риск дублей и рассинхронизации.
04
Игнорирование NULL при конкатенации — вся строка превращается в NULL.
05
Ожидание GUID от ПРЕДСТАВЛЕНИЕССЫЛКИ — функция возвращает представление, а не идентификатор.

Проверка результата преобразования

После написания запроса проверьте его на контрольных данных. Откройте консоль запросов, выполните текст и убедитесь, что тип колонки — строка, а значения соответствуют тому, что видит пользователь в форме списка. Для GUID сверьте несколько значений с результатом метода УникальныйИдентификатор() в отладчике.

Отдельно проверьте граничные случаи: элементы с очень длинными наименованиями, документы без номера, помеченные на удаление объекты и битые ссылки в регистрах. Именно на таких данных преобразование чаще всего даёт неожиданный результат.

Контрольные точки

Как проверить результат

Тип поля в результате запроса
Норма

Строка с представлением или GUID

Тревожный признак

Ошибка компиляции или ссылочный тип вместо строки

Значение для документа
Норма

Совпадает с тем, что видно в списке документов

Тревожный признак

Пустая строка, NULL или техническая строка вида <Объект не найден>

Производительность на большой таблице
Норма

Запрос выполняется за приемлемое время

Тревожный признак

Резкое замедление при ПРЕДСТАВЛЕНИЕССЫЛКИ в соединениях или условиях

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

Можно ли получить GUID ссылки прямо в тексте запроса?

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

Чем ПРЕДСТАВЛЕНИЕССЫЛКИ отличается от ПРЕДСТАВЛЕНИЕ?

ПРЕДСТАВЛЕНИЕ работает с примитивными типами — датами, числами, булевыми значениями. ПРЕДСТАВЛЕНИЕССЫЛКИ предназначена для ссылочных типов. Для ссылки обе функции вернут одинаковое значение, но семантически правильнее использовать специализированный вариант.

Почему ПРЕДСТАВЛЕНИЕССЫЛКИ вернула строку с GUID вместо наименования?

Это признак битой ссылки: объект, на который указывает ссылка, отсутствует в базе (удалён или не загружен при обмене). Платформа не может построить представление и выводит техническую строку. Проверьте такие записи обработкой поиска битых ссылок.

Можно ли искать по представлению ссылки через ПОДОБНО?

Технически можно, но делать этого не стоит: условие по результату функции не использует индексы и приводит к полному сканированию. Ищите по исходным полям — Наименование для справочников, Номер для документов.

Как вывести в запросе ссылку составного типа строкой?

ПРЕДСТАВЛЕНИЕССЫЛКИ корректно работает с полями составного типа — для каждой записи будет возвращено представление фактического значения. Уточнять тип через ВЫРАЗИТЬ для этого не требуется.

Итог

Что важно запомнить

Прямого приведения ссылки к строке в запросе 1С не существует. Для человекочитаемого представления используйте ПРЕДСТАВЛЕНИЕССЫЛКИ, для GUID — метод УникальныйИдентификатор() в коде, для нестандартного формата — конкатенацию полей. Не применяйте представление как ключ обмена и не фильтруйте по нему в условии ГДЕ.