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