Разработка и Конфигурация · 10 мин
Как сделать округление в 1С: инструкция для пользователя и разработчика
Как сделать округление в 1С: функция Окр() в коде и запросах, настройка округления цен и сумм НДС в документах, типичные ошибки и проверка результата.
Округление в 1С встречается на каждом шагу: при расчёте цен со скидкой, начислении зарплаты, выделении НДС, формировании отчётов и печатных форм. При этом платформа предлагает несколько разных способов округлить число — от встроенной функции языка до настроек конфигурации, — и выбор неправильного приводит к расхождениям в копейках, которые потом сложно найти.
Главная особенность, которую нужно понимать сразу: в 1С функция округления использует «банковское» (математическое) правило — число 2,5 округляется до 3, но в ряде случаев поведение зависит от представления числа в памяти. Кроме того, в типовых конфигурациях часть округлений вынесена в настройки: правила округления цен, порядок расчёта НДС, точность количества в документах.
Ниже разобраны оба подхода: программное округление через встроенный язык и запросы, а также пользовательские настройки округления в типовых решениях. Отдельно рассмотрены типичные ошибки и способы проверить, что округление работает так, как ожидается.
Как работает функция Окр() во встроенном языке
Основной инструмент округления в коде — функция Окр(). Она принимает три параметра: исходное число, разрядность (до какого знака округлять) и необязательный режим округления. Вызов выглядит так: Окр(123.456, 2) — результат 123,46.
Разрядность может быть отрицательной — тогда округление идёт влево от запятой: Окр(1234.56, -2) вернёт 1200. Это удобно, когда нужно округлить сумму до сотен или тысяч, например для управленческой отчётности.
Третий параметр задаёт режим через системное перечисление РежимОкругления. Доступны два значения: Округлить15как20 (классическое «половина вверх»: 2,5 → 3) и Округлить15как10 (банковское округление: 2,5 → 2, а 3,5 → 4). Если параметр не указан, по умолчанию применяется режим «15 как 20».
// Округление до копеек
СуммаОкругленная = Окр(Сумма, 2);
// Всегда в большую сторону до целого
ЦелоеВверх = Окр(Значение + 0.5, 0);
// До десятков
ОкругленоДоДесятков = Окр(Значение, -1);
Округление вверх и вниз: Цел() и приёмы для гарантированного направления
Функция Окр() округляет к ближайшему значению, но на практике часто нужно строгое направление: всегда вверх (например, расчёт количества упаковок) или всегда вниз (ограничение лимита). Для округления вниз до целого есть функция Цел() — она отбрасывает дробную часть: Цел(7.9) даст 7.
Для округления вверх готовой функции нет, используется приём: Цел(Значение) + ?(Значение = Цел(Значение), 0, 1) либо более короткий вариант Окр(Значение + 0.4999999, 0). Первый способ надёжнее, так как не зависит от точности представления дробных чисел.
Если нужно округлить вверх до заданной кратности (например, до 0,5 или до 10), делят число на шаг, округляют вверх до целого и умножают обратно: Цел((Сумма + Шаг - 0.000001) / Шаг) * Шаг. Такой приём применяют при округлении цен до «красивых» значений.
// Округление вверх до целого
Результат = Цел(Значение) + ?(Значение > Цел(Значение), 1, 0);
// Округление до кратности 0.5 вверх
Шаг = 0.5;
Результат = Цел((Значение + Шаг - 0.000001) / Шаг) * Шаг;Округление в запросах и СКД
В языке запросов 1С нет прямого аналога Окр(). Округление выполняется через приведение типа: конструкция ВЫРАЗИТЬ(Сумма КАК ЧИСЛО(15, 2)) отсекает лишние разряды с округлением по стандартному правилу. Это работает и в полях выборки, и в итогах, и в вычисляемых полях СКД.
Важный нюанс: ВЫРАЗИТЬ округляет, но не меняет логику расчёта — если сумма собирается из нескольких строк, округлять лучше итоговый результат, а не каждую строку, иначе сумма округлённых строк может не сойтись с округлённой суммой. Это классический источник расхождений в копейку между отчётами.
В СКД округление можно задать и на уровне оформления поля: в настройках поля указывается форматная строка вида ЧДЦ=2. Однако формат влияет только на отображение — фактическое значение остаётся неокруглённым. Если нужен именно округлённый результат для дальнейших вычислений, используйте ВЫРАЗИТЬ в запросе или вычисляемое поле.
Где округлять
Подходит для расчётов в модулях: цены, суммы документов, проводки. Полный контроль режима, но требует изменения кода.
Подходит для отчётов и выборок. Нельзя задать режим округления, только стандартное правило.
Только визуальное округление в отчётах и формах. Значение в данных не меняется — не подходит для расчётов.
Округление цен и НДС в типовых решениях. Работает без программирования, но ограничено предусмотренными сценариями.
Округление цен и сумм в типовых конфигурациях без кода
В типовых решениях (Управление торговлей, ERP, Комплексная автоматизация) округление цен настраивается в карточке вида цен. Там задаётся точность округления (до копеек, до рублей, до десятков) и правило — в большую или меньшую сторону, а также порог срабатывания. После настройки цены, рассчитываемые по формулам от базовых видов цен, округляются автоматически.
Дополнительно в этих конфигурациях есть механизм «психологического» округления: например, цену 1003 рубля можно округлить до 999. Это настраивается в параметрах вида цен отдельным правилом и применяется при расчёте и установке цен номенклатуры.
В Бухгалтерии предприятия округление чаще касается НДС и зарплатных начислений. Порядок расчёта НДС (с каждой строки или с итога) определяется настройками учётной политики и обработкой проведения документа. Перед изменением таких настроек стоит проверить, как они повлияют на уже введённые документы и декларации.
- 1Откройте справочник видов цен и выберите нужный вид цены.
- 2Укажите точность округления: до 0,01, до 1, до 10 и т.д.
- 3Выберите правило округления: в большую сторону, в меньшую или арифметически.
- 4При необходимости задайте порог срабатывания и правило психологического округления.
- 5Пересчитайте цены обработкой установки цен и проверьте несколько позиций вручную.
Типичные ошибки и расхождения в копейках
Самая частая проблема — округление на каждом шаге многоступенчатого расчёта. Например, сначала округляется цена со скидкой, потом сумма строки, потом НДС с суммы — и итог документа расходится с расчётом «в лоб» на несколько копеек. Правильный подход: все промежуточные вычисления вести с максимальной точностью, а округлять только конечный результат, который попадает в документ или проводку.
Вторая ошибка — смешение режимов округления в разных местах системы. Если печатная форма использует один режим, а модуль проведения — другой, суммы в отчётах и на бумаге будут расходиться. При доработках всегда проверяйте, какой режим использует типовой код, и придерживайтесь его.
Третья группа проблем связана с представлением дробных чисел. Число, которое выглядит как 2,675, в памяти может храниться как 2,6749999..., и Окр(2.675, 2) вернёт 2,67 вместо ожидаемых 2,68. Если критична точность до копейки, иногда надёжнее хранить суммы в копейках как целые числа и делить только при выводе.
Как проверить, что округление работает правильно
После внедрения или изменения правила округления проверку стоит делать на граничных значениях: 0,5; 2,5; 2,675; суммы с тремя знаками после запятой; отрицательные числа. Отрицательные значения — отдельный случай: Окр(-2.5, 0) при режиме «15 как 20» даст -3, что не всегда ожидаемо в возвратах и сторно.
Для документов полезный тест — сравнить сумму по строкам с итогом документа и суммой в проводках. Если три значения совпадают на десятке разных документов, включая документы со скидками и дробным количеством, округление настроено корректно. Расхождение даже в копейку — повод искать, на каком шаге применяется лишнее округление.
Контрольные точки
Значения совпадают до копейки
Разница в 0,01–0,05 на документах со скидками
Проводки повторяют итог документа
Проводки округлены иначе, чем табличная часть
Результат соответствует выбранному режиму
Поведение меняется от документа к документу
Суммы идентичны
Форма показывает округлённое, отчёт — точное значение
Ограничения и когда нужна доработка
Штатные настройки округления в типовых конфигурациях покрывают стандартные сценарии: цены, НДС, валютные пересчёты. Но если требуется нестандартное правило — например, округление итога счёта до целых рублей с переносом разницы на отдельную строку скидки, — без доработки кода не обойтись. Такие изменения лучше выполнять через расширения конфигурации, чтобы не потерять их при обновлении.
Перед любой доработкой, затрагивающей расчёт сумм, сделайте копию базы и прогоните на ней проведение документов за закрытый период. Изменение правила округления задним числом может изменить итоги прошлых периодов при перепроведении, что критично для сданной отчётности.
Что важно запомнить
В коде используйте Окр() с явным режимом округления, в запросах — ВЫРАЗИТЬ, для отображения — форматную строку. Округляйте только конечный результат, проверяйте граничные значения и согласованность итогов документа, проводок и печатных форм.
Частые вопросы об округлении в 1С
Чем Окр() отличается от Цел()?
Окр() округляет к ближайшему значению с заданной разрядностью, включая дробные разряды. Цел() просто отбрасывает дробную часть и всегда возвращает целое число в сторону нуля: Цел(7,9) = 7, а Окр(7,9, 0) = 8.
Как округлить число в запросе 1С?
Используйте приведение типа: ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 2)). Второй параметр задаёт число знаков после запятой, округление происходит арифметически. Задать режим округления в запросе нельзя.
Почему Окр(2,675; 2) иногда даёт 2,67 вместо 2,68?
Дробные числа хранятся в двоичном виде, и 2,675 может представляться как 2,6749999... — тогда округление идёт вниз. Если критична точность, храните суммы в копейках как целые числа или добавляйте малую поправку перед округлением.
Как округлить всегда в большую сторону?
Готовой функции нет. Используйте конструкцию Цел(Значение) + ?(Значение > Цел(Значение), 1, 0) для целых, а для кратности — деление на шаг, округление вверх и умножение обратно на шаг.
Можно ли настроить округление цен без программирования?
Да, в типовых конфигурациях (УТ, ERP, КА) в карточке вида цен задаются точность, направление округления и порог срабатывания. После настройки цены пересчитываются штатной обработкой установки цен.
Почему итог документа не сходится с суммой строк на копейку?
Чаще всего причина в округлении на каждом шаге расчёта: цена со скидкой, сумма строки и НДС округляются отдельно. Решение — вести промежуточные расчёты с полной точностью и округлять только итоговые значения.