Разработка и Конфигурация · 11 мин
Представление и Выразить как строка в запросе 1С
Как использовать ПРЕДСТАВЛЕНИЕ() и ВЫРАЗИТЬ КАК СТРОКА в запросе 1С: синтаксис, примеры кода, ограничения, типичные ошибки и способы проверки результата.
В языке запросов 1С есть два похожих, но принципиально разных способа получить строку из поля: функция ПРЕДСТАВЛЕНИЕ() и оператор ВЫРАЗИТЬ(... КАК СТРОКА(...)). Первый возвращает то, как значение отображается пользователю в интерфейсе, второй — приводит значение к строковому типу на уровне СУБД. Путаница между ними — частая причина неожиданных результатов: обрезанных строк, пустых значений и медленных запросов.
Практическая задача возникает регулярно: нужно вывести наименование номенклатуры вместе с артикулом одной строкой, преобразовать число или дату в текст для объединения, либо получить представление ссылки для отчёта. Каждый из этих сценариев решается своим инструментом, и у каждого есть ограничения, которые нужно знать до написания запроса.
Ниже разобраны синтаксис обеих конструкций, их поведение с разными типами данных, ограничения платформы, типичные ошибки и способы проверить, что запрос возвращает именно то, что ожидалось.
Чем ПРЕДСТАВЛЕНИЕ отличается от ВЫРАЗИТЬ КАК СТРОКА
Функция ПРЕДСТАВЛЕНИЕ(Поле) применяется к ссылочным полям и возвращает то значение, которое пользователь видит в списках и формах: наименование справочника, номер и дату документа, описание перечисления. Под капотом платформа выполняет соединение с таблицей ссылочного объекта и берёт его основное представление, заданное в конфигураторе.
Оператор ВЫРАЗИТЬ(Поле КАК СТРОКА(Длина)) — это приведение типа. Он работает с примитивными типами (число, дата, булево, строка) и со ссылками, но для ссылки результатом будет её техническое строковое представление, а не человекочитаемое наименование. Главное назначение оператора — привести строку неограниченной длины к фиксированной или преобразовать число/дату в текст для объединения строк.
Сравнение вариантов
Возвращает наименование/представление объекта как в интерфейсе. Подходит для отчётов и печатных форм. Ограничение: работает только со ссылочными типами и создаёт скрытое соединение с таблицей объекта.
Приводит значение к строке заданной длины. Подходит для склейки, сравнения и приведения неограниченных строк. Ограничение: для ссылки даёт техническое представление, длину нужно указывать явно.
Часто эффективнее ПРЕДСТАВЛЕНИЕ, потому что вы явно контролируете, какое поле берётся. Подходит, когда известен состав представления объекта.
Синтаксис и примеры ПРЕДСТАВЛЕНИЕ в запросе
Базовый синтаксис прост: ПРЕДСТАВЛЕНИЕ(СсылочноеПоле). Функцию можно применять к полям типа «справочник», «документ», «перечисление», «план видов характеристик» и другим ссылочным типам. Типичный пример — выборка товаров с представлением единицы измерения:
ВЫБРАТЬ
Товары.Номенклатура КАК Номенклатура,
ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура.ЕдиницаИзмерения) КАК Единица,
ПРЕДСТАВЛЕНИЕ(Товары.Ссылка) КАК ДокументПредставление
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
Здесь ПРЕДСТАВЛЕНИЕ(Товары.Ссылка) вернёт строку вида «Реализация товаров и услуг 0000-000123 от 15.03.2026» — то, как документ отображается в журнале. Это удобно для отчётов, где нужна одна колонка с описанием документа без отдельных полей номера и даты.
Важно понимать механику: для каждого вызова ПРЕДСТАВЛЕНИЕ платформа строит левое соединение с таблицей соответствующего объекта. Если в запросе пять представлений разных ссылок — будет пять дополнительных соединений, что сказывается на производительности на больших выборках.
Синтаксис и примеры ВЫРАЗИТЬ КАК СТРОКА
Оператор приведения записывается так: ВЫРАЗИТЬ(Поле КАК СТРОКА(Длина)). Длина указывается обязательно — просто КАК СТРОКА без параметра не допускается. Классический сценарий — объединение строки неограниченной длины с другой строкой:
ВЫБРАТЬ
Номенклатура.Наименование + " (" + ВЫРАЗИТЬ(Номенклатура.Артикул КАК СТРОКА(50)) + ")" КАК ПолноеНазвание
ИЗ
Справочник.Номенклатура КАК Номенклатура
Второй частый случай — приведение строки неограниченной длины (реквизит с типом «Строка» без ограничения) к фиксированной, чтобы её можно было использовать в объединении, группировке или сравнении. Строки неограниченной длины нельзя сравнивать на равенство в запросе и нельзя группировать — ВЫРАЗИТЬ решает обе проблемы:
ВЫБРАТЬ
ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(200)) КАК Комментарий
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
ВЫРАЗИТЬ(Контрагенты.Комментарий КАК СТРОКА(200)) ПОДОБНО "%срочно%"
Числа, даты и составные типы в преобразовании
Преобразование числа в строку через ВЫРАЗИТЬ работает, но результат зависит от региональных настроек сервера: группировка разрядов может добавлять неразрывные пробелы, а разделитель дробной части — отличаться. Поэтому для формирования строгих форматов (например, номеров для обмена) надёжнее преобразовывать число уже в коде на встроенном языке через Формат().
Даты через ВЫРАЗИТЬ(... КАК СТРОКА) также приводятся в формате, зависящем от настроек СУБД. Если нужен предсказуемый вид даты в запросе, лучше вывести дату отдельным полем и отформатировать её в СКД или в коде, а не полагаться на строковое приведение.
Составные поля (например, реквизит типа «СправочникСсылка.Контрагенты или ДокументСсылка.Заказ») требуют аккуратности: ПРЕДСТАВЛЕНИЕ применимо к составному полю и платформа сама разберёт тип каждой конкретной записи, но цена запроса вырастет — соединений станет столько, сколько типов входит в составной тип.
Производительность и ограничения
Каждый вызов ПРЕДСТАВЛЕНИЕ — это скрытое левое соединение. В запросе, выбирающем сто тысяч строк с тремя представлениями, СУБД выполнит три дополнительных соединения по индексу. На больших таблицах это заметно, поэтому действует простое правило: если нужно конкретное поле объекта (наименование), обращайтесь к нему напрямую через точку — Товары.Номенклатура.Наименование, а не через ПРЕДСТАВЛЕНИЕ.
Представление имеет смысл, когда заранее неизвестно, из каких полей состоит отображение объекта (например, в универсальных отчётах), или когда нужно именно стандартное представление документа с номером и датой в одной строке. Во всех остальных случаях точечное обращение к полям читаемее и быстрее.
Ограничение ВЫРАЗИТЬ КАК СТРОКА: оператор не работает с полями типа «ХранилищеЗначения» и картинками, а при применении к ссылке результат зависит от платформы и не предназначен для показа пользователю. Также помните, что преобразование в строке соединения (+) неявно вызывает приведение, но полагаться на него не стоит — явный ВЫРАЗИТЬ делает запрос предсказуемым.
Проверить тип поля в конфигураторе и заменить функцию
Увеличить N с запасом
Заменить на прямые обращения к полям через точку
Пошаговая проверка результата
После написания запроса его стоит проверить до включения в отчёт или обработку. Удобнее всего это сделать в консоли запросов на реальных данных информационной базы, а не на демо-примере.
- 1Откройте консоль запросов и вставьте текст запроса с ПРЕДСТАВЛЕНИЕ или ВЫРАЗИТЬ
- 2Выполните запрос на ограниченной выборке (добавьте РАЗЛИЧНЫЕ или ПЕРВЫЕ 100)
- 3Сравните колонку с представлением с тем, что видно в списке объекта в пользовательском режиме
- 4Проверьте длину самых длинных значений: убедитесь, что СТРОКА(N) их не обрезает
- 5Уберите лишние вызовы ПРЕДСТАВЛЕНИЕ, заменив их на обращения к полям, и сравните время выполнения
Как проверить результат
Совпадает с отображением объекта в интерфейсе 1С
Техническая строка вида GUID или пустое значение
Самое длинное значение помещается в заданную длину
Значения обрезаны посередине слова
Запрос на рабочем объёме выполняется за приемлемое время
Резкое замедление после добавления нескольких ПРЕДСТАВЛЕНИЕ
Типичные ошибки и как их избежать
Самая распространённая ошибка — ожидать от ВЫРАЗИТЬ(Ссылка КАК СТРОКА(100)) наименование объекта. Оператор приведения не обращается к таблице объекта за представлением, поэтому для отображения пользователю такой подход не подходит. Вторая ошибка — использовать ПРЕДСТАВЛЕНИЕ в условии ГДЕ для поиска по наименованию: это отключает использование индекса и приводит к полному перебору. Для поиска обращайтесь к полю наименования напрямую.
Третья группа ошибок связана с длиной строки: указание СТРОКА(10) для артикула, который в базе бывает длиннее, приводит к тихому обрезанию и неверным объединениям таблиц. Контролируйте максимальную длину реквизита в метаданных и закладывайте запас.
Частые вопросы
Можно ли получить представление перечисления в запросе?
Да, ПРЕДСТАВЛЕНИЕ(Поле) корректно работает с перечислениями и возвращает синоним значения, заданный в конфигураторе. Альтернатива — соединение с виртуальной таблицей перечисления, но для одиночного поля функция проще.
Почему ПРЕДСТАВЛЕНИЕ возвращает пустую строку?
Чаще всего поле содержит битую ссылку или значение NULL после левого соединения. Проверьте данные на наличие битых ссылок и оберните поле в ЕСТЬNULL(ПРЕДСТАВЛЕНИЕ(Поле), ""), если пустые значения допустимы логикой отчёта.
Как преобразовать число в строку без пробелов между разрядами?
В запросе надёжного способа нет — приведение зависит от региональных настроек сервера. Выведите число отдельным полем и отформатируйте его в коде через Формат(Число, "ЧГ=0") либо настройками поля в СКД.
Что быстрее: ПРЕДСТАВЛЕНИЕ или обращение к полю через точку?
Обращение через точку (Ссылка.Наименование) обычно эффективнее и прозрачнее, потому что вы явно указываете нужное поле. ПРЕДСТАВЛЕНИЕ оправдано, когда состав отображения объекта заранее неизвестен или нужно стандартное представление документа целиком.
Можно ли использовать ВЫРАЗИТЬ КАК СТРОКА для поля неограниченной длины в объединении?
Да, это одно из основных применений: приведите поле к СТРОКА(N) с достаточной длиной, после чего его можно использовать в ОБЪЕДИНИТЬ, группировке и сравнении. Без приведения строки неограниченной длины в этих конструкциях недопустимы.
Что важно запомнить
ПРЕДСТАВЛЕНИЕ берёт отображаемое пользователю значение ссылки ценой дополнительного соединения, ВЫРАЗИТЬ КАК СТРОКА(N) приводит значение к строке заданной длины и требует контроля обрезания. Для поиска и склейки используйте ВЫРАЗИТЬ и прямые обращения к полям, для вывода в отчёты — ПРЕДСТАВЛЕНИЕ или точечные поля. Всегда проверяйте результат в консоли запросов на реальных данных.