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