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

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

ВЫРАЗИТЬ КАК ЧИСЛО в запросе 1С: синтаксис и практические приёмы

Как использовать ВЫРАЗИТЬ КАК ЧИСЛО в запросе 1С: синтаксис, приведение составных типов, округление, типичные ошибки и проверка результата в консоли запросов.

Функция ВЫРАЗИТЬ в языке запросов 1С приводит значение поля к указанному типу, и вариант ВЫРАЗИТЬ(... КАК ЧИСЛО) — один из самых востребованных. Он нужен, когда поле имеет составной тип, когда строку с цифрами требуется превратить в число для сортировки или сравнения, а также когда необходимо явно задать разрядность и точность результата.

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

Ниже разобраны синтаксис, типовые сценарии, ограничения и способы проверить результат до того, как запрос попадёт в рабочий код.

Синтаксис ВЫРАЗИТЬ КАК ЧИСЛО

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

Параметры длины и точности указывать не обязательно, но рекомендуется: платформа при сравнении и объединении полей учитывает разрядность, и несовпадение форматов может приводить к неожиданным результатам. Точность не может превышать длину, а длина ограничена возможностями платформы (для чисел в 1С — до 38 разрядов).

ВЫБРАТЬ

ВЫРАЗИТЬ(Таблица.Значение КАК ЧИСЛО(15, 2)) КАК Сумма

ИЗ

РегистрСведений.КурсыВалют КАК Таблица

Когда приведение к числу действительно нужно

Первый типичный случай — составной тип поля. Если реквизит может хранить и строку, и число, то сравнение Поле > 100 без приведения даст ошибку или некорректный результат. Явное ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 2)) устраняет неоднозначность.

Второй случай — объединение запросов через ОБЪЕДИНИТЬ. Типы колонок в объединяемых выборках должны совпадать, и приведение обеих частей к одному числовому формату — стандартный приём. Третий случай — подготовка данных для агрегатов: СУММА по строковому полю невозможна, поэтому поле сначала приводят к числу.

Четвёртый сценарий — округление. Если указать точность меньше фактической, значение округляется по правилам арифметики. Так можно прямо в запросе получить целые количества или суммы без копеек.

Составной типПоле хранит разные типы

Приведение снимает неоднозначность в сравнениях и объединениях

ОБЪЕДИНИТЬНесовпадение типов колонок

Приведите колонки к одному формату ЧИСЛО(длина, точность)

АгрегатыСУММА по нечисловому полю

Сначала приведите поле к числу, затем агрегируйте

ОкруглениеЛишние знаки после запятой

Укажите меньшую точность — значение округлится

Приведение строки к числу: возможности и ограничения

Частая задача — превратить строку вида «123,45» в число прямо в запросе. Здесь важно понимать ограничение: ВЫРАЗИТЬ не выполняет разбор текста. Если в строке есть буквы, пробелы или нестандартный разделитель, приведение вернёт NULL либо запрос завершится ошибкой в зависимости от контекста и СУБД.

На практике надёжнее работают два подхода. Первый — очистить данные средствами встроенного языка до записи в базу, чтобы в поле гарантированно лежало корректное числовое представление. Второй — выполнить преобразование в коде через функцию Число() с предварительной обработкой строки (удаление пробелов, замена запятой на точку), а в запросе работать уже с готовыми значениями.

ВЫРАЗИТЬ КАК ЧИСЛО в условиях и сравнениях

Приведение можно использовать прямо в секции ГДЕ: ГДЕ ВЫРАЗИТЬ(Таблица.Значение КАК ЧИСЛО(10, 0)) > 1000. Это удобно, но имеет цену: выражение над полем отключает использование индекса по этому полю, и на больших таблицах запрос заметно замедлится.

Если фильтрация по приведённому значению выполняется часто, лучше хранить данные сразу в числовом типе или добавить отдельный числовой реквизит, заполняемый при записи. ВЫРАЗИТЬ в условии оставьте для разовых выборок и отчётов, где объёмы данных невелики.

Сравнение с параметром

При сравнении приведённого поля с параметром следите за совпадением точности. Если параметр имеет тип ЧИСЛО(15,2), а выражение — ЧИСЛО(10,0), сравнение выполнится, но трактовка дробной части может отличаться. Приводите обе стороны к единому формату.

Приведение в объединениях и итогах

В конструкции ОБЪЕДИНИТЬ типы соответствующих колонок определяются по первой выборке, и несовпадение разрядности приводит к ошибке компоновки. Явное приведение каждой колонки к одному формату решает проблему:

ВЫБРАТЬ

ВЫРАЗИТЬ(Продажи.Сумма КАК ЧИСЛО(15, 2)) КАК Сумма

ИЗ

Документ.РеализацияТоваровУслуг КАК Продажи

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

ВЫРАЗИТЬ(Возвраты.Сумма КАК ЧИСЛО(15, 2))

ИЗ

Документ.ВозвратТоваровОтПокупателя КАК Возвраты

В итогах (конструкция ИТОГИ) приведение обычно выполняют во вложенном запросе, чтобы итоги рассчитывались уже по нормализованному числовому полю. Так исключаются сюрпризы с типом результата агрегатной функции.

Как добавить приведение к числу в запрос
  1. 1
    Определите фактический тип поля через конфигуратор или консоль запросов
  2. 2
    Выберите целевой формат: длину и точность с запасом под максимальные значения
  3. 3
    Оберните поле в ВЫРАЗИТЬ(Поле КАК ЧИСЛО(длина, точность)) и задайте псевдоним
  4. 4
    Выполните запрос в консоли и проверьте тип и значения результата
  5. 5
    Проверьте граничные случаи: NULL, максимальные значения, дробная часть

Типичные ошибки и как их избежать

Самая распространённая ошибка — попытка привести строку с текстом к числу и ожидание, что «лишнее» отбросится автоматически. Платформа так не работает: результатом будет NULL или ошибка. Вторая ошибка — заниженная длина: если значение не помещается в указанный формат, запрос падает с ошибкой переполнения.

Третья ошибка — приведение ссылочного поля к числу. ВЫРАЗИТЬ работает только с совместимыми типами; ссылку к числу привести нельзя, для этого используют другие механизмы (например, числовые реквизиты объекта). Четвёртая — забытый псевдоним: поле-выражение без «КАК Имя» затрудняет обращение к результату в коде.

Типичные ошибки
01
Приведение строки с буквами к числу — результат NULL или ошибка выполнения
02
Слишком маленькая длина ЧИСЛО — ошибка переполнения на больших значениях
03
ВЫРАЗИТЬ в условии ГДЕ на большой таблице — потеря индекса и медленный запрос
04
Несовпадение точности в ОБЪЕДИНИТЬ — ошибка несовместимости типов колонок
05
Попытка привести ссылку к числу — несовместимые типы, операция невозможна

Проверка результата и производительность

Проверять преобразование удобнее всего в консоли запросов: выполните выборку с приведением и посмотрите тип колонки результата и несколько значений, включая крайние. Убедитесь, что NULL в исходных данных остаётся NULL, а не превращается в ноль — это важно для корректности агрегатов.

По производительности правило простое: приведение в списке выборки почти бесплатно, приведение в условиях и соединениях — дорого на больших объёмах. Если запрос тормозит, первым делом вынесите ВЫРАЗИТЬ из секции ГДЕ и проверьте, нельзя ли нормализовать данные на этапе записи.

Контрольные точки

Как проверить результат

Тип колонки результата
Норма

Число с заданной длиной и точностью

Тревожный признак

Строка или составной тип — приведение не сработало

Значения NULL
Норма

NULL остаётся NULL

Тревожный признак

NULL превратился в 0 или значение потерялось

Дробная часть
Норма

Округление до указанной точности

Тревожный признак

Значения обрезаны грубее ожидаемого

Скорость выполнения
Норма

Запрос отрабатывает за приемлемое время

Тревожный признак

Резкое замедление — ВЫРАЗИТЬ в условии убило индекс

FAQ

Чем ВЫРАЗИТЬ отличается от ЕСТЬNULL при работе с числами?

ВЫРАЗИТЬ меняет тип значения, а ЕСТЬNULL заменяет NULL указанным значением. Они решают разные задачи и часто применяются вместе: сначала ЕСТЬNULL(Поле, 0), затем при необходимости приведение к нужному формату числа.

Можно ли округлить число через ВЫРАЗИТЬ?

Да. Если указать точность меньше фактической, например ВЫРАЗИТЬ(Сумма КАК ЧИСЛО(15, 0)), дробная часть округляется по арифметическим правилам. Для жёсткого отсечения без округления такой способ не подходит.

Почему запрос с ВЫРАЗИТЬ КАК ЧИСЛО выдаёт ошибку переполнения?

Значение не помещается в указанный формат: например, число из 20 разрядов приводится к ЧИСЛО(10, 2). Увеличьте длину с запасом или найдите аномальные записи в данных.

Работает ли ВЫРАЗИТЬ КАК ЧИСЛО в СКД и динамических списках?

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

Как привести к числу значение из строки с запятой-разделителем?

Надёжнее всего — обработать строку встроенным языком: заменить запятую на точку, убрать пробелы и неразрывные пробелы, затем использовать функцию Число(). В самом запросе такой разбор текста выполнить нельзя.

Что происходит с NULL при приведении к числу?

NULL остаётся NULL — приведение типа его не заменяет. Если для агрегатов или сравнений нужен ноль, комбинируйте с ЕСТЬNULL: ВЫРАЗИТЬ(ЕСТЬNULL(Поле, 0) КАК ЧИСЛО(15, 2)).

Итог

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

ВЫРАЗИТЬ(Поле КАК ЧИСЛО(длина, точность)) приводит значение к числу с заданным форматом. Применяйте его для составных типов, объединений и агрегатов, задавайте длину с запасом, не используйте в условиях на больших таблицах и всегда проверяйте результат в консоли запросов.