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

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

Представление как строка в запросе 1С: функция ПРЕДСТАВЛЕНИЕ и альтернативы

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

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

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

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

Синтаксис функции ПРЕДСТАВЛЕНИЕ и базовые примеры

Функция вызывается в секции ВЫБРАТЬ и принимает один аргумент — поле запроса или выражение. Результат всегда имеет строковый тип, причём переменной длины: платформа не гарантирует фиксированную длину результата, что важно учитывать при соединениях и сравнениях.

ВЫБРАТЬ

ПРЕДСТАВЛЕНИЕ(Контрагенты.Ссылка) КАК КонтрагентПредставление,

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

ИЗ

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

В первом поле вернётся строка вида «ООО Ромашка» — то представление, которое платформа формирует по основному представлению справочника (наименование или код, в зависимости от настроек объекта метаданных). Во втором поле числовое или строковое значение ИНН будет приведено к строке.

Для документов представление обычно включает вид документа, номер и дату — например, «Реализация товаров 000000123 от 12.03.2026». Это удобно для отчётов, где нужно одной колонкой показать документ-основание без дополнительного форматирования на уровне СКД или кода.

Как функция ведёт себя с разными типами данных

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

С примитивными типами ситуация тоньше. Дата преобразуется в строку в формате, зависящем от региональных настроек информационной базы, а не от настроек клиентского сеанса. Число выводится без разделителей групп и без пробелов. Булево значение вернёт «Да» или «Нет» (в зависимости от языка конфигурации). Значение NULL функция обрабатывает корректно и возвращает пустую строку либо NULL — поведение стоит проверить в конкретной версии платформы, поэтому для надёжности оборачивайте вызов в ЕСТЬNULL.

Отдельный случай — составные поля и поля типа «ХранилищеЗначения». Для хранилища значений функция вернёт служебное представление, бесполезное в отчёте. Для составного поля результат будет соответствовать фактическому типу хранимого значения.

СсылкаСтандартное представление объекта

Проверьте настройку «Основное представление» в метаданных

ДатаСтрока в формате ИБ

Формат зависит от региональных настроек сервера

ЧислоБез разделителей групп

Для красивого вывода форматируйте в СКД или коде

ПеречислениеСиноним значения

Меняется при переименовании синонима в конфигураторе

Типичный сценарий: представление ссылки в отчёте

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

ВЫБРАТЬ

Продажи.Регистратор КАК Регистратор,

ПРЕДСТАВЛЕНИЕ(Продажи.Регистратор) + " / " + ПРЕДСТАВЛЕНИЕ(Продажи.Номенклатура) КАК ОписаниеСтроки

ИЗ

РегистрНакопления.Продажи КАК Продажи

Обратите внимание: конкатенация в запросе требует, чтобы оба операнда были строками. Нельзя написать «Номер: " + Документ.Номер», если Номер имеет числовой тип — запрос завершится с ошибкой. Здесь ПРЕДСТАВЛЕНИЕ выступает универсальным преобразователем.

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

Ограничения: где функция недоступна или бесполезна

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

В секции ИМЕЮЩИЕ и в условиях по агрегатам применение функции ограничено логикой группировки: представление сгруппированного поля без агрегата вызовет ошибку. Если нужно отфильтровать по представлению, корректнее фильтровать по исходному полю до группировки в секции ГДЕ.

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

Альтернативы функции ПРЕДСТАВЛЕНИЕ

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

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

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

Способы получить строку

ПРЕДСТАВЛЕНИЕ в запросе

Универсально для любого типа; минус — нагрузка на СУБД и зависимость от настроек ИБ

Реквизит через точку

Быстро и предсказуемо; работает только для известного реквизита конкретного типа

Постобработка в коде

Полный контроль формата; требует обхода результата и усложняет структуру

Вычисляемое поле СКД

Не грузит запрос; доступно только внутри отчётов на СКД

Пошаговая проверка и отладка запроса

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

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

Порядок действий
  1. 1
    Откройте консоль запросов и выполните запрос с ПРЕДСТАВЛЕНИЕ на тестовых данных
  2. 2
    Сравните результат с отображением объекта в пользовательском интерфейсе
  3. 3
    Проверьте строки с NULL и пустыми ссылками — оберните вызов в ЕСТЬNULL при необходимости
  4. 4
    Замерьте время выполнения до и после добавления функции на реальном объёме данных
  5. 5
    При неудовлетворительной производительности замените на выборку ссылки или реквизита через точку

Типичные ошибки разработчиков

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

Вторая ошибка — использование представления в условии отбора или соединении. Строки представлений неуникальны (два контрагента могут иметь одинаковое наименование), формат дат зависит от настроек, а сравнение строк переменной длины медленнее сравнения ссылок. Отбор всегда делайте по исходным полям.

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

Типичные ошибки
01
Конкатенация строки с числом без ПРЕДСТАВЛЕНИЕ — ошибка несовместимости типов при выполнении запроса
02
Отбор по строке представления — неуникальность значений и падение производительности
03
Парсинг представления строковыми функциями — код ломается при смене настроек представления или синонимов
04
Использование представления даты для обмена данными — формат зависит от региональных настроек ИБ
Итог

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

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

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

Можно ли использовать ПРЕДСТАВЛЕНИЕ в секции ГДЕ?

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

Почему ПРЕДСТАВЛЕНИЕ даты возвращает неожиданный формат?

Формат строки зависит от региональных настроек информационной базы, а не от настроек пользователя. Если нужен строго определённый формат, формируйте строку в коде через Формат(Дата, "ДФ=...") после выполнения запроса.

Что вернёт функция для пустой ссылки?

Для пустой ссылки возвращается строковое представление пустого значения соответствующего типа — как правило, пустая строка или служебное обозначение в зависимости от типа объекта. Для надёжности обрабатывайте такие случаи через ЕСТЬNULL или проверку Поле = ЗНАЧЕНИЕ(Справочник.Имя.ПустаяСсылка).

Работает ли ПРЕДСТАВЛЕНИЕ в запросах к табличным частям?

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

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

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

Влияет ли функция на скорость отчёта на СКД?

Да, каждый вызов выполняется на СУБД для каждой строки. Если отчёт просто показывает ссылку пользователю, выберите само поле-ссылку — СКД отобразит представление самостоятельно, без дополнительных вычислений в запросе.