Учет и Финансы · 11 мин
Как округлить копейки в 1С: настройки, функции и типовые сценарии
Разбираем, как округлить копейки в 1С: настройка валютной точности, функция Окр() в коде, округление цен и НДС в типовых конфигурациях, типичные ошибки.
Вопрос округления копеек в 1С возникает в трёх разных ситуациях: когда нужно настроить точность хранения сумм в конфигурации, когда требуется округлить значение программно во встроенном языке и когда в документах «уезжают» копейки из-за расчёта НДС или скидок. Подход в каждом случае свой, и путать их нельзя: изменение разрядности валюты затрагивает всю базу, а функция округления работает только в конкретном алгоритме.
Типовые конфигурации (1С:Бухгалтерия, Управление торговлей, ERP, ЗУП) по умолчанию хранят денежные суммы с точностью до копеек — два знака после запятой. Этого достаточно для большинства учётных задач, но при расчёте цен со скидками, делении сумм или пересчёте валют промежуточные значения получают больше знаков, и их приходится округлять явно. Именно на этом этапе чаще всего появляются расхождения в копейках между документами, отчётами и печатными формами.
Ниже разобраны основные способы округления: настройка точности валют и регистров, функция Окр() и её режимы, округление цен и НДС в типовых решениях, а также проверка результата и типичные ошибки, которые приводят к расхождению итогов.
Как устроена точность сумм в 1С и где она настраивается
В платформе 1С точность денежных значений определяется двумя вещами: длиной и точностью числового типа реквизита (например, Число(15,2) — пятнадцать знаков всего, два после запятой) и настройкой разрядности валют. В типовых конфигурациях суммы документов обычно объявлены как Число(15,2), то есть хранят рубли и копейки. Цены нередко объявлены с большей точностью — до 2–4 знаков, чтобы скидки и наценки считались точнее.
Разрядность валют задаётся в справочнике валют (в типовых — раздел «Администрирование» или «НСИ», справочник «Валюты»). Для рубля стандартная разрядность — 2 знака. Этот параметр влияет на представление суммы в интерфейсе и печатных формах, но не заменяет округление в расчётах: если алгоритм вычислил 100,005, платформа сама по себе эту дробную часть не отбросит, пока значение не попадёт в реквизит с точностью 2 — и тогда сработает округление по правилам приведения типа.
Практический вывод: прежде чем что-то округлять кодом, проверьте точность реквизита, в который попадает результат. Если реквизит объявлен как Число(15,2), лишние знаки отсекутся автоматически при записи, но промежуточные сравнения и итоги по строкам могут считаться с «хвостом» — отсюда расхождения вида «сумма по строкам не равна итогу документа».
Округление в коде: функция Окр() и её режимы
Во встроенном языке 1С для округления используется функция Окр(). Синтаксис: Окр(Число; Разрядность; РежимОкругления). Первый параметр — исходное значение, второй — до какого знака округлять (2 — до копеек, 0 — до целых рублей), третий — режим, который определяет поведение на граничных значениях.
СуммаОкр = Окр(Сумма; 2); // до копеек, математически
СуммаЦелая = Окр(Сумма; 0; РежимОкругления.Окр15как20); // до рублей, 0,5 вверх
СуммаВниз = Окр(Сумма; 2; РежимОкругления.Окр15как10); // 0,5 внизДоступны два режима: Окр15как10 (значение ровно посередине, например 1,005, округляется в меньшую сторону — к 1,00) и Окр15как20 (то же значение округляется в большую сторону — к 1,01). Если режим не указан, применяется Окр15как20, то есть классическое математическое округление «половина вверх». Важно помнить про двоичное представление дробных чисел: значение, которое выглядит как 2,675, в памяти может храниться как 2,67499999…, и округлится до 2,67, а не до 2,68. Это не ошибка функции, а особенность представления чисел.
Для цен и коэффициентов иногда нужно округление «вверх» или «вниз» независимо от дробной части. Встроенных функций Цел() и ЦелВверх() в языке нет кроме Цел() (отбрасывание дробной части), поэтому округление вверх реализуют приёмом: Цел(Значение * 100 + 0,9999) / 100. Такие конструкции стоит оборачивать в общий модуль, чтобы не размножать по коду.
Округление цен в Управлении торговлей и ERP
В конфигурациях Управление торговлей и ERP округление цен настраивается без программирования — в карточке вида цен. Откройте раздел «CRM и маркетинг» (или «Настройки и справочники») → «Виды цен», выберите нужный вид цены и найдите блок параметров округления. Там задаётся точность (до копеек, до 10 копеек, до рубля, до 10 рублей и т.д.) и вариант округления — по арифметическим правилам или всегда в большую сторону.
- 1Откройте справочник «Виды цен» в разделе настроек ценообразования.
- 2Выберите вид цены и перейдите к параметрам округления.
- 3Укажите точность округления (например, до 0,01 или до 1) и вариант — по правилам или в большую сторону.
- 4Сохраните вид цены и переформируйте цены документом «Установка цен номенклатуры».
- 5Проверьте несколько позиций: цена после расчёта должна соответствовать заданной точности.
Распространённая практика — округлять розничные цены до целых рублей в большую сторону, чтобы скидки не «съедали» маржу до копеек. При этом закупочные цены обычно оставляют с точностью до копеек или точнее. Учтите: округление применяется в момент расчёта или установки цены, уже записанные документы сами не пересчитаются — их нужно переформировать.
Округление НДС и расхождения в копейках
Самая частая причина «гуляющих копеек» — расчёт НДС. Налог считается от суммы каждой строки документа, и результат округляется до копеек. Если потом НДС пересчитывается от итоговой суммы документа (например, в отчёте или при сверке с контрагентом), итоги могут разойтись на несколько копеек. Это нормальная ситуация, а не ошибка учёта: сумма округлённых значений почти никогда не равна округлённой сумме.
В 1С:Бухгалтерии сумма НДС в документах рассчитывается построчно и округляется до двух знаков. Если вы меняете сумму документа вручную, программа может пересчитать НДС, и ручные правки затрутся. При выписке счетов-фактур показатели округляются до копеек в соответствии с правилами заполнения — расхождения в пределах нескольких копеек между счётом-фактурой и первичным документом допустимы и не являются основанием для отказа в вычете.
Округление в зарплате и расчётах с сотрудниками
В 1С:ЗУП начисления рассчитываются с высокой точностью, а к выплате суммы округляются до копеек. Дополнительно в настройках расчёта зарплаты может быть включено округление сумм к выплате до целых рублей — тогда недостающие или лишние копейки переносятся на следующий месяц как сальдо округления. Эта настройка находится в параметрах расчёта зарплаты и влияет на ведомости на выплату.
Если в расчётных листках сотрудников появляются странные копеечные разницы между начислено и выплачено, первым делом проверьте, включено ли округление при выплате и нет ли в базе ручных правок сумм в ведомостях. Ручное изменение суммы ведомости — типичный источник «висящих» копеек, которые потом всплывают в отчётах по задолженности.
Как проверить результат и найти источник расхождения
Когда копейки «разошлись», действуйте последовательно: сначала определите, где именно расхождение — в одном документе, между документом и отчётом или между программой и бумажным документом контрагента. Затем проверьте, построчно или от итога считается проблемная сумма, и совпадают ли точности реквизитов.
Как проверить результат
Совпадает до копейки
Разница в 1–5 копеек — вероятно, округление строк
Разница не более пары копеек
Систематическое большое расхождение — ошибка в формуле расчёта
Соответствует точности вида цен
Старые значения — документ установки цен не переформирован
Совпадает или разница объяснима округлением
Растёт с числом документов — проверяйте порядок округления в запросе
В собственных отчётах на СКД частая причина расхождений — округление применено к итоговому выражению, а не к каждой строке выборки, либо наоборот. Правило простое: округляйте на том уровне, на котором требуется точность, и делайте это единообразно во всех отчётах и документах, которые сверяются между собой.
Типичные ошибки и ограничения
Ещё одно ограничение касается валютных пересчётов: при конвертации сумм по курсу округляйте результат сразу после умножения на курс, а не после последующих операций со скидками и налогами. Иначе порядок округления в разных документах начнёт отличаться, и сверка с банком усложнится.
Что важно запомнить
Округление копеек в 1С делается тремя способами: функцией Окр(Сумма; 2) в коде, настройкой точности видов цен в торговых конфигурациях и штатным округлением НДС и выплат в бухгалтерии и ЗУП. Округляйте только конечные результаты, единообразно во всех связанных местах, и не меняйте точность реквизитов в рабочей базе без резервной копии.
Частые вопросы
Как округлить сумму до целых рублей в 1С?
Используйте Окр(Сумма; 0) — второй параметр задаёт ноль знаков после запятой. По умолчанию половина округляется вверх; если нужно, чтобы 0,5 уходило вниз, добавьте третий параметр РежимОкругления.Окр15как10.
Почему Окр(2,675; 2) даёт 2,67, а не 2,68?
Дробное число 2,675 в памяти компьютера хранится в двоичном виде с небольшой погрешностью — фактически как 2,67499… Поэтому функция видит значение чуть меньше середины и округляет вниз. Для денежных расчётов это редко критично, но при сравнениях «в лоб» учитывайте эту особенность.
Можно ли настроить округление цен без доработки конфигурации?
Да, в Управлении торговлей и ERP округление настраивается в карточке вида цен: выбирается точность (до копеек, рублей, десятков рублей) и вариант — по арифметическим правилам или всегда вверх. После изменения настройки цены нужно переформировать документом установки цен.
Расходятся копейки между НДС в накладной и счёте-фактуре — это ошибка?
Нет, если разница составляет одну-две копейки. НДС считается построчно с округлением каждой строки, а проверочный пересчёт от итоговой суммы даёт немного другой результат. Такие расхождения допустимы и не мешают принятию вычета.
Как округлить только в большую сторону, например цену до рубля вверх?
В настройках вида цен выберите вариант округления «в большую сторону». В коде используйте конструкцию вида Цел(Значение * 100 + 0,9999) / 100 для копеек или Цел(Значение + 0,9999) для целых рублей — стандартной функции округления вверх в языке нет.
Что будет, если уменьшить точность реквизита суммы с 2 знаков до 0?
При записи данных платформа отбросит копейки в существующих значениях, и восстановить их будет нельзя. Перед таким изменением сделайте резервную копию и прогоните изменение на тестовой базе, проверив итоги ключевых отчётов.