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