Разработка и Конфигурация · 9 мин
Как округлять числа в 1С: полное руководство
Как округлять числа в 1С: функция Окр(), строковые функции, округление цен и сумм в документах, настройка точности. Примеры кода и типичные ошибки.
Округление чисел — одна из самых частых задач при работе с 1С: оно встречается при расчёте цен, сумм документов, налогов, зарплаты и при выводе отчётов. При этом неправильное округление способно породить копеечные расхождения, которые потом часами ищут в актах сверки и регистрах. Поэтому важно понимать, какие инструменты округления есть в платформе и где именно их применять.
В 1С округление выполняется на нескольких уровнях: встроенная функция Окр() в коде, строковые функции преобразования, настройки точности в типовых конфигурациях (например, округление цен в «Управлении торговлей») и форматная строка при выводе в отчёты. Каждый способ имеет свои особенности и ограничения.
Отдельная тонкость — математическое правило округления, которое использует платформа. Оно отличается от «банковского» округления, к которому привыкли некоторые бухгалтеры, и это иногда становится причиной расхождений в копейку при сверке с внешними системами.
Функция Окр() — основной способ округления в коде
Встроенная функция Окр() принимает до трёх параметров: исходное число, разрядность (количество знаков после запятой) и режим округления. Самый простой вызов выглядит так: Окр(123.456, 2) — результат будет 123,46.
Разрядность может быть отрицательной — тогда округление идёт «влево» от запятой. Например, Окр(1234.56, -2) вернёт 1200. Это удобно, когда нужно округлить сумму до сотен или тысяч, например при укрупнённом планировании бюджета.
Третий параметр задаёт режим округления через системное перечисление РежимОкругления:
Округление15как10— значение 0,5 отбрасывается (округление вниз);Округление15как20— значение 0,5 округляется вверх (режим по умолчанию).
Сумма = Окр(СуммаДокумента, 2); // до копеек
СуммаВверх = Окр(Цена * 1.2, 2, РежимОкругления.Округление15как20);
Тысячи = Окр(Оборот, -3); // до тысячВажно: если не указать режим, по умолчанию 0,5 округляется вверх — это классическое математическое правило, а не «банковское» округление к чётному. Если смежная система (например, сайт или кассовое ПО) использует другое правило, копеечные расхождения неизбежны.
Округление в большую и меньшую сторону: Цел() и свои формулы
Задача «всегда округлять вверх» или «всегда вниз» встречается часто: например, при расчёте количества упаковок товара (нельзя заказать 2,3 коробки — нужно 3) или при отсечении лишних знаков без округления.
Для округления вниз до целого есть функция Цел() — она отбрасывает дробную часть. Для округления вверх до целого встроенной функции нет, используется приём: Цел(Число) + ?(Число = Цел(Число), 0, 1) или конструкция через Окр() с предварительным сдвигом.
// Округление вверх до целого
КоличествоУпаковок = Цел(Количество / ВУпаковке);
Если КоличествоУпаковок * ВУпаковке < Количество Тогда
КоличествоУпаковок = КоличествоУпаковок + 1;
КонецЕсли;Для округления вверх/вниз с произвольной точностью (например, цену всегда вверх до копейки) надёжнее использовать Цел(Число * 100) / 100 для отсечения и аналогичную конструкцию с добавлением единицы младшего разряда для округления вверх. Проверяйте результат на граничных значениях вроде 10,001 и 10,005.
Округление цен и сумм в типовых конфигурациях
В типовых решениях («Управление торговлей», «ERP», «Комплексная автоматизация») округление цен настраивается без программирования. В карточке вида цен можно задать порядок округления (до копеек, до рублей, до десятков рублей) и правило — по арифметическим правилам или всегда в большую/меньшую сторону.
Порядок действий типовой настройки: откройте вид цен (раздел «CRM и маркетинг» или «Настройки и справочники» в зависимости от конфигурации), найдите блок «Округление», укажите точность и правило, затем пересчитайте цены через механизм формирования цен. После изменения настройки уже записанные цены сами не пересчитаются — их нужно переустановить.
- 1Откройте карточку вида цен в разделе настроек ценообразования
- 2Укажите точность округления: до 0,01, до 1, до 10 и т.д.
- 3Выберите правило: по арифметическим правилам или всегда в большую сторону
- 4Сохраните вид цен и пересчитайте цены документом установки цен
- 5Проверьте несколько позиций вручную на граничных значениях
В «Бухгалтерии предприятия» округление чаще касается расчётов: начисления зарплаты, амортизации, налогов. Там правила зашиты в алгоритмы конфигурации, и менять их стоит только осознанно — расхождения с контролирующими формулами ФНС или фондов приведут к ошибкам при сдаче отчётности.
Форматная строка: округление при выводе без изменения значения
Частая ошибка новичков — округлять значение функцией Окр() только для того, чтобы красиво показать его в отчёте. При этом исходное значение теряется, а итоги по колонке перестают сходиться с детальными строками. Для отображения правильнее использовать функцию Формат() или свойство «Формат» поля.
Форматная строка Формат(Число, "ЧДЦ=2; ЧРД=.; ЧН=0.00") выведет число с двумя знаками после запятой, не меняя само значение. В макетах, СКД и табличных документах формат задаётся в свойствах поля или параметра — это предпочтительный способ оформления отчётов.
Точность хранения: тип «Число» и его ограничения
Округление начинается ещё на этапе проектирования: у реквизитов с типом «Число» задаются длина и точность (количество знаков дробной части). Если у реквизита «Сумма» точность 2, то при записи значения 100,999 платформа сама округлит его до 101,00 — и «лишние» доли копейки потеряются безвозвратно.
Для промежуточных расчётов (коэффициенты, курсы, нормы расхода) точность стоит задавать с запасом — 4–6 знаков, а округление до копеек выполнять только на финальном результате. При изменении точности существующего реквизита в меньшую сторону данные в базе будут усечены при реструктуризации — делайте резервную копию.
Типичные ошибки и как их проверить
Самая распространённая проблема — двойное округление: сначала округлили цену, потом посчитали сумму как цена × количество и округлили ещё раз, а в другом месте кода сделали наоборот. В разных документах получаются разные копейки при одинаковых исходных данных.
Вторая частая ошибка — округление НДС на каждой строке документа и сравнение с НДС, посчитанным от итоговой суммы. Эти два подхода математически дают разные результаты, и в рамках одного документа нужно придерживаться одного из них.
Как проверить результат
Равна сумме округлённых строк при принятом правиле расчёта
Расхождение на копейки при повторном пересчёте
100,005 округляется так, как ожидается по выбранному правилу
Результат зависит от представления числа в памяти
Итог по колонке равен сумме детальных строк
Итог отличается из-за округления строк перед суммированием
Часто задаваемые вопросы
Как округлить число до целого в 1С?
Используйте Окр(Число, 0) — дробная часть округлится по математическому правилу. Если нужно просто отбросить дробную часть без округления, применяйте Цел(Число).
Как округлить всегда в большую сторону?
Отдельной функции нет. Для целых используйте конструкцию Цел(Число) + ?(Число > Цел(Число), 1, 0). Для дробной точности умножьте число на 10 в нужной степени, округлите вверх до целого и разделите обратно.
Использует ли 1С банковское округление?
Нет. Функция Окр() в режиме по умолчанию округляет 0,5 всегда вверх (математическое правило). Банковское округление к ближайшему чётному придётся реализовывать собственной функцией, если этого требует интеграция с внешней системой.
Как округлить число в запросе 1С?
В языке запросов есть функция ОКР(Число, Точность) с двумя параметрами — режим округления в запросе не задаётся. Для сложных правил выгрузите результат и обработайте его средствами встроенного языка.
Почему после округления итоги не сходятся на копейку?
Чаще всего округление применено к строкам до суммирования или НДС посчитан построчно, а проверяется от итога. Выберите единый порядок: либо округляете каждую строку и суммируете их, либо суммируете точные значения и округляете итог.
Как вывести число с двумя знаками, не меняя значение?
Используйте Формат(Число, "ЧДЦ=2") или задайте форматную строку в свойствах поля отчёта, макета или СКД. Само значение при этом останется неизменным, округление произойдёт только при отображении.
Что важно запомнить
Для округления в коде используйте Окр() с явным режимом, для отображения — Формат() без изменения значения, для цен в типовых конфигурациях — настройки видов цен. Выберите единый порядок округления в расчётах и проверяйте результат на граничных значениях.