Разработка и Конфигурация · 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Определите, какая строка нужна: представление для пользователя или GUID для интеграции.
- 2Для представления используйте ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка) в тексте запроса.
- 3Для GUID выберите Ссылку запросом, затем в обходе результата вызовите Ссылка.УникальныйИдентификатор() и преобразуйте в строку.
- 4Если формат нестандартный — соберите строку конкатенацией полей с ПРЕДСТАВЛЕНИЕ для дат и чисел.
- 5Проверьте результат на элементах с длинными наименованиями, пустыми полями и помеченными на удаление объектами.
Типичные ошибки и ограничения
Первая и самая распространённая ошибка — попытка применить ВЫРАЗИТЬ(Ссылка КАК СТРОКА(N)). Запрос не выполнится, конструктор выдаст сообщение о несовместимости типов. Вторая ошибка — использование ПРЕДСТАВЛЕНИЕССЫЛКИ в условии ГДЕ для поиска по подстроке: это обходится дорого по производительности и часто не использует индексы. Для поиска по наименованию фильтруйте само поле Наименование, а не представление ссылки.
Третья группа проблем связана с битостью ссылок. Если ссылка указывает на удалённый объект («битая ссылка»), ПРЕДСТАВЛЕНИЕССЫЛКИ вернёт техническую строку с GUID, а обращение к полям объекта даст NULL. Это нужно учитывать при конкатенации и при выгрузках.
Проверка результата преобразования
После написания запроса проверьте его на контрольных данных. Откройте консоль запросов, выполните текст и убедитесь, что тип колонки — строка, а значения соответствуют тому, что видит пользователь в форме списка. Для GUID сверьте несколько значений с результатом метода УникальныйИдентификатор() в отладчике.
Отдельно проверьте граничные случаи: элементы с очень длинными наименованиями, документы без номера, помеченные на удаление объекты и битые ссылки в регистрах. Именно на таких данных преобразование чаще всего даёт неожиданный результат.
Как проверить результат
Строка с представлением или GUID
Ошибка компиляции или ссылочный тип вместо строки
Совпадает с тем, что видно в списке документов
Пустая строка, NULL или техническая строка вида <Объект не найден>
Запрос выполняется за приемлемое время
Резкое замедление при ПРЕДСТАВЛЕНИЕССЫЛКИ в соединениях или условиях
Частые вопросы
Можно ли получить GUID ссылки прямо в тексте запроса?
Нет, в языке запросов 1С нет функции извлечения уникального идентификатора. GUID получают методом Ссылка.УникальныйИдентификатор() на встроенном языке после выполнения запроса, либо заполняют им дополнительную колонку таблицы значений, которую затем передают обратно в запрос параметром.
Чем ПРЕДСТАВЛЕНИЕССЫЛКИ отличается от ПРЕДСТАВЛЕНИЕ?
ПРЕДСТАВЛЕНИЕ работает с примитивными типами — датами, числами, булевыми значениями. ПРЕДСТАВЛЕНИЕССЫЛКИ предназначена для ссылочных типов. Для ссылки обе функции вернут одинаковое значение, но семантически правильнее использовать специализированный вариант.
Почему ПРЕДСТАВЛЕНИЕССЫЛКИ вернула строку с GUID вместо наименования?
Это признак битой ссылки: объект, на который указывает ссылка, отсутствует в базе (удалён или не загружен при обмене). Платформа не может построить представление и выводит техническую строку. Проверьте такие записи обработкой поиска битых ссылок.
Можно ли искать по представлению ссылки через ПОДОБНО?
Технически можно, но делать этого не стоит: условие по результату функции не использует индексы и приводит к полному сканированию. Ищите по исходным полям — Наименование для справочников, Номер для документов.
Как вывести в запросе ссылку составного типа строкой?
ПРЕДСТАВЛЕНИЕССЫЛКИ корректно работает с полями составного типа — для каждой записи будет возвращено представление фактического значения. Уточнять тип через ВЫРАЗИТЬ для этого не требуется.
Что важно запомнить
Прямого приведения ссылки к строке в запросе 1С не существует. Для человекочитаемого представления используйте ПРЕДСТАВЛЕНИЕССЫЛКИ, для GUID — метод УникальныйИдентификатор() в коде, для нестандартного формата — конкатенацию полей. Не применяйте представление как ключ обмена и не фильтруйте по нему в условии ГДЕ.