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