Разработка и Конфигурация · 9 мин
Как округлить сумму в 1С: способы и настройки
Как округлить сумму в 1С: функция Окр(), форматные строки, настройки округления цен и копеек в документах, типичные ошибки и проверка результата.
Округление сумм в 1С встречается повсюду: при расчёте цен со скидкой, начислении НДС, формировании печатных форм и выгрузке данных. Ошибка в одну копейку способна разорвать сверку с контрагентом или остановить выгрузку в банк, поэтому важно понимать, какие инструменты округления есть в платформе и где они применяются.
Способ зависит от задачи. Разработчик использует встроенную функцию языка, пользователю чаще достаточно настроек отображения или типовых механизмов конфигурации, а для печатных форм работает форматная строка. Ниже разобраны все основные варианты с примерами кода и указанием ограничений.
Функция Окр() — основной инструмент в коде
Во встроенном языке 1С округление выполняет функция Окр(ИсходноеЧисло, Разрядность, РежимОкругления). Первый параметр — само число или переменная, второй — количество знаков после запятой (или отрицательное значение для округления до десятков, сотен, тысяч), третий — режим, определяющий, как обрабатывается «пограничная» пятёрка.
// Округление до копеек
СуммаОкр = Окр(1234.567, 2); // 1234.57
// Округление до целых рублей
СуммаРуб = Окр(1234.567, 0); // 1235
// Округление до сотен рублей
СуммаСотни = Окр(1234.567, -2); // 1200
Третий параметр принимает значения системного перечисления РежимОкругления: Окр15как10 (0.5 округляется вниз) и Окр15как20 (0.5 округляется вверх, это значение по умолчанию). Разница заметна на суммах, где дробная часть ровно равна пяти в отбрасываемом разряде.
Окр(10.5, 0, РежимОкругления.Окр15как10); // 10
Окр(10.5, 0, РежимОкругления.Окр15как20); // 11
Функция ОкруглитьСумму(Знач Сумма, Знач Точность = 2) Экспорт
Возврат Окр(Сумма, Точность, РежимОкругления.Окр15как20);
КонецФункцииОкругление вверх и вниз: Цел() и собственные формулы
Функция Окр() округляет по математическим правилам, но в учётных задачах часто нужно гарантированно округлить вверх (например, количество упаковок) или вниз (скидку в пользу покупателя). Для этого применяют Цел() и Int() либо простые арифметические приёмы.
Округление вверх до целого: Результат = Цел(Число) + ?(Число > Цел(Число), 1, 0). Округление вниз: достаточно Цел(Число) — функция отбрасывает дробную часть. Для округления вверх до копеек сначала умножают на 100, применяют приём, затем делят обратно.
// Вверх до копеек
СуммаВверх = (Цел(Сумма 100) + ?(Сумма 100 > Цел(Сумма * 100), 1, 0)) / 100;
// Вниз до копеек
СуммаВниз = Цел(Сумма * 100) / 100;
Округление только при отображении: форматная строка
Не всегда нужно менять само значение — иногда достаточно показать его округлённым в поле формы или печатном документе, сохранив точные данные в базе. Для этого служит форматная строка: свойство «Формат» у поля ввода или параметр функции Формат().
Ключевой параметр — ЧДЦ (число десятичных знаков). Например, Формат(Сумма, "ЧДЦ=0") выведет сумму без копеек, а Формат(Сумма, "ЧДЦ=2; ЧРГ=' '") — с двумя знаками и разделением групп разрядов пробелом. В макетах печатных форм формат задаётся в свойствах параметра области.
Помните о главном ограничении: форматная строка не меняет хранимое значение. Если потом эта сумма участвует в итогах, итог посчитается по точным данным и может не сойтись с суммой отображённых округлённых строк — классическая причина «копеечных» расхождений в актах и счетах-фактурах.
Округление в типовых конфигурациях без программирования
В типовых решениях часть округлений настраивается пользователем. В «1С:Управление торговлей» и «1С:Комплексная автоматизация» для цен номенклатуры доступны правила округления: в настройках вида цен задаётся порядок округления (до копеек, до рубля, до десятков рублей) и направление — по арифметическим правилам, всегда вверх или всегда вниз. Это удобно для розничных цен с «красивыми» окончаниями.
В «1С:Зарплата и управление персоналом» точность расчётов регулируется настройками учётной политики, а округление сумм к выплате — параметрами ведомостей. В бухгалтерских конфигурациях суммы НДС округляются автоматически по правилам, заложенным в типовой алгоритм, и вмешиваться в них вручную не следует.
Перед тем как писать собственный код, проверьте, не решается ли задача штатной настройкой. Самописное округление поверх типового механизма часто ломается при обновлении конфигурации и создаёт расхождения с регистрами.
Как выбрать способ
Типичные ошибки и копеечные расхождения
Самая частая ошибка — округлять итог документа вместо строк. Если округлить каждую строку, а потом сложить, сумма почти всегда отличается от округлённого итога. Правильный порядок: сначала определить, что является «источником истины» (обычно строки документа), округлить их, а итог считать как сумму уже округлённых значений.
Вторая ошибка — округление НДС вразнобой: в одном месте до копеек, в другом до рублей. Смешение разрядности в цепочке расчётов (цена → сумма → НДС → итог) гарантированно даёт расхождения при сверке. Выберите единую точность на всю цепочку и зафиксируйте её в коде или настройках.
Третья типичная ситуация — сравнение чисел после округления. Из-за особенностей двоичного представления дробных чисел результат вычислений может быть не ровно 0.1, а 0.099999…, и прямое сравнение на равенство даст ложь. Сравнивайте с допуском: Модуль(А - Б) < 0.005 или сравнение после Окр() обоих значений.
Как проверить результат округления
После внедрения округления проверьте его на граничных значениях: ровно 0.5 в отбрасываемом разряде, суммы с тремя и более знаками после запятой, отрицательные суммы (возвраты). Для отрицательных чисел режимы округления работают симметрично, но это стоит увидеть глазами хотя бы один раз.
Практическая проверка в пользовательском режиме: сформируйте документ с дробной ценой и количеством, выведите печатную форму и сложите строки вручную — итог должен совпасть. Затем сделайте сверку с контрагентом или выгрузку в банк на тестовом примере, чтобы убедиться, что копейки сходятся на стороне приёмника.
Как проверить результат
Итог равен сумме округлённых строк до копейки
Разница в копейках между итогом и строками
Округляется согласно выбранному режиму
Результат зависит от случайных факторов или не соответствует режиму
Видимые строки сходятся с итогом и НДС
Ручной пересчёт строк даёт другую сумму
Округление симметрично положительным
Возвраты округляются иначе, чем продажи
FAQ: частые вопросы об округлении в 1С
Чем Окр() отличается от Цел()?
Окр() округляет по математическим правилам до заданной разрядности, включая дробные разряды и разряды выше целых. Цел() просто отбрасывает дробную часть и всегда возвращает целое число: Цел(9.99) = 9, тогда как Окр(9.99, 0) = 10.
Как округлить сумму до рублей без копеек в печатной форме?
Если менять данные нельзя, задайте в свойствах параметра макета форматную строку ЧДЦ=0. Если документ уходит контрагенту, лучше округлить сами суммы функцией Окр(Сумма, 0) до расчёта итогов, иначе видимые строки не сойдутся с суммой документа.
Почему после округления итог не сходится на копейку?
Чаще всего округлён итог, а не строки, либо в цепочке расчёта используется разная разрядность. Перенесите округление на уровень строк документа, а итог считайте суммой уже округлённых значений.
Как округлить всегда в большую сторону?
Штатной функции «вверх» нет. Используйте приём: Цел(Число) + ?(Число > Цел(Число), 1, 0) для целых, предварительно умножив на 100 для копеек. В видах цен типовых конфигураций направление «вверх» задаётся настройкой.
Влияет ли режим Окр15как10 на обычные суммы?
Режим срабатывает только когда отбрасываемая часть — ровно половина единицы младшего разряда (например, 10.5 при округлении до целых). На все остальные значения оба режима действуют одинаково, поэтому для большинства расчётов подходит режим по умолчанию Окр15как20.
Нужно ли округлять НДС вручную в типовой конфигурации?
Нет. В типовых решениях расчёт и округление НДС выполняет встроенный алгоритм, согласованный с требованиями к счетам-фактурам. Ручное вмешательство создаст расхождения с регистрами и декларацией.
Что важно запомнить
Для расчётов используйте Окр() с явной разрядностью и режимом, для отображения — форматную строку ЧДЦ, для цен в типовых конфигурациях — штатные правила округления. Округляйте строки, а не итог, держите единую точность по всей цепочке расчёта и проверяйте результат на граничных значениях и печатных формах.