Разработка и Конфигурация · 9 мин
Как округлить число в 1С: код, документы и настройки
Как округлить число в 1С: функция Окр() в коде, округление цен в документах, настройка округления в типовых конфигурациях и отчётах. Примеры и ошибки.
Округление в 1С встречается в трёх разных ситуациях: в коде на встроенном языке (функция Окр), в документах при расчёте цен и сумм, а также в отчётах и печатных формах. Способ зависит от того, где именно возникает задача, и перепутать их легко: формат числа в отчёте меняет только отображение, а не само значение.
Во встроенном языке 1С за округление отвечает функция Окр(Число, Разрядность, РежимОкругления). В типовых конфигурациях дополнительно есть настройки округления цен, скидок и НДС, которые влияют на расчёты в документах без программирования.
Ниже разобраны все основные сценарии: округление в коде с примерами, округление до целого, до копеек, до сотен, а также типичные ошибки, из-за которых суммы в документах «не сходятся на копейку».
Функция Окр() — основной способ округления в коде
Функция Окр() доступна во всех конфигурациях на платформе 1С:Предприятие 8. Синтаксис: Окр(ИсходноеЧисло; Разрядность; РежимОкругления). Первый параметр — само число, второй — количество знаков после запятой, третий (необязательный) — правило округления.
Разрядность может быть отрицательной: тогда округление идёт до десятков, сотен, тысяч. Например, Окр(1234,56; -2) вернёт 1200, а Окр(1234,56; 1) — 1234,6.
Примеры вызова:
Результат1 = Окр(123,456; 2); // 123,46
Результат2 = Окр(123,454; 2); // 123,45
Результат3 = Окр(123,5; 0); // 124
Результат4 = Окр(1234,56; -2); // 1200
Результат5 = Окр(2,5; 0); // 2 (банковское округление по умолчанию)
Обратите внимание на последний пример: по умолчанию используется режим Округлить15как10 — так называемое «банковское округление», при котором 0,5 округляется к ближайшему чётному. Если нужно привычное арифметическое правило «пять — вверх», укажите третий параметр явно.
Режимы округления: 15как10 и 15как20
Третий параметр функции принимает значения системного перечисления РежимОкругления:
РежимОкругления.Округлить15как10— 0,5 округляется к ближайшему чётному (2,5 → 2, 3,5 → 4). Режим по умолчанию.РежимОкругления.Округлить15как20— 0,5 всегда округляется вверх (2,5 → 3). Это привычное «школьное» округление.
Пример с явным указанием режима:
Сумма = Окр(102,505; 2; РежимОкругления.Округлить15как20); // 102,51
Для расчётов с деньгами в России чаще ожидают режим Округлить15как20: именно так округляет большинство кассовых и банковских систем. Если вы сравниваете суммы из 1С с банковской выпиской и видите расхождения в копейку на граничных значениях — проверьте режим округления первым делом.
Округление до целого: Цел(), Int() и отбрасывание дробной части
Если нужно не округлить, а просто отбросить дробную часть, используйте функцию Цел(): она всегда возвращает целую часть числа без округления. Цел(123,99) вернёт 123, а не 124.
Три разных результата для одного числа:
А = Окр(123,7; 0); // 124 — округление по правилам
Б = Цел(123,7); // 123 — отбрасывание дробной части
В = Окр(123,7; 0; РежимОкругления.Округлить15как20); // 124
Для округления всегда вверх или всегда вниз встроенных функций нет, используются приёмы: округление вверх — Цел(Х) + ?(Х > Цел(Х), 1, 0), округление вниз — просто Цел(Х) для положительных чисел. Для отрицательных чисел логика меняется, поэтому проверяйте поведение на тестовых данных.
- 1Определите нужную точность: копейки (2 знака), целые (0), сотни (-2)
- 2Выберите правило: банковское округление (по умолчанию) или «0,5 всегда вверх» (Округлить15как20)
- 3Вызовите Окр(Число; Разрядность; РежимОкругления) и присвойте результат переменной
- 4Проверьте результат на граничных значениях: 0,5; 1,005; 2,675
- 5При расчёте денежных сумм округляйте итог после всех промежуточных вычислений, а не каждую операцию
Округление цен и сумм в типовых конфигурациях
В конфигурациях «Управление торговлей», «ERP», «Комплексная автоматизация» округление цен настраивается без программирования. В карточке вида цены (или в настройках ценообразования, в зависимости от версии) задаётся порядок округления: до копеек, до рублей, до 10, 50 или 100 рублей, а также направление — в большую или меньшую сторону.
Типовой путь в УТ 11: НСИ и администрирование → Ценообразование → Виды цен, далее в карточке вида цены вкладка с правилами округления. Там же настраивается «психологическое» округление до 9,99 и подобных значений.
В «1С:Бухгалтерии» округление сумм НДС и итогов документов выполняется автоматически по правилам конфигурации; ручное вмешательство обычно требуется только при загрузке данных из внешних систем, где суммы посчитаны иначе.
| Задача | Инструмент | Где настраивается |
|---|---|---|
| Округлить число в коде | Функция Окр() | Модуль, произвольный код |
| Округлить цены номенклатуры | Правила округления вида цены | Карточка вида цены |
| Округлить скидку/наценку | Настройки скидок | Раздел ценообразования |
| Отобразить меньше знаков в отчёте | Формат ячейки | Настройки отчёта / макет |
| Округлить остатки при списании | Точность в единицах измерения | Карточка единицы измерения |
Округление в отчётах и печатных формах
Частая ошибка — пытаться «округлить» число в отчёте через формат. Свойство формата (например, ЧДЦ=2 в конструкторе форматной строки или в настройках поля СКД) меняет только отображение: в данных остаётся полное значение, и итоги могут визуально не сходиться с суммой показанных строк.
Если нужно, чтобы сумма округлённых строк равнялась округлённому итогу, округляйте значения в запросе или при вычислении поля. В запросах 1С доступна функция ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 2)) — она приводит тип и отсекает лишние разряды, но для корректного округления по правилам надёжнее вычисляемое поле с Окр() на уровне СКД.
В макетах табличных документов формат задаётся в свойствах ячейки. Помните: печатная форма счёта может показывать сумму с двумя знаками, а проводки — содержать больше разрядов, что приводит к вопросам при сверке.
Денежные расчёты: как избежать расхождений в копейках
Главное правило денежных вычислений в 1С: все промежуточные расчёты выполняются с максимальной точностью, а округление до копеек применяется один раз — к итоговой сумме строки или документа. Типовые конфигурации так и делают: цена хранится с заданной точностью, сумма строки округляется при записи.
Если вы пишете собственный расчёт (например, распределение суммы пропорционально долям), распределяйте округлённые части, а последнюю долю вычисляйте как остаток: ПоследняяДоля = ОбщаяСумма - СуммаРаспределённого. Тогда итог гарантированно сойдётся копейка в копейку.
При обмене данными с внешними системами (интернет-магазин, банк, ЭДО) заранее согласуйте правило округления: разрядность, режим и момент округления. Большинство «копеечных» расхождений при интеграциях возникает именно из-за разных правил, а не из-за ошибок в коде.
Как проверить результат
Результат соответствует выбранному режиму (2 при 15как10, 3 при 15как20 для Окр(2,5; 0))
Результат отличается от ожиданий внешней системы — режим задан неверно или не задан
Равна округлённому итогу документа
Итог отличается на копейки — округление применено не на том этапе
Суммы в печатной форме совпадают с данными учёта
На печати округлённый вид, в учёте — лишние разряды; нужно округлять данные, а не формат
FAQ по округлению в 1С
Как округлить до двух знаков после запятой?
Используйте Окр(Число; 2). Если копейки должны округляться по правилу «0,5 всегда вверх», добавьте третий параметр: Окр(Число; 2; РежимОкругления.Округлить15как20).
Чем Окр() отличается от Цел()?
Окр() округляет по математическим правилам до заданной разрядности, а Цел() просто отбрасывает дробную часть. Для 123,7 Окр даст 124, Цел — 123. Для денежных сумм Цел() обычно не применяют.
Как округлить вверх до целого?
Встроенной функции «вверх» нет. Для положительных чисел используйте конструкцию Цел(Х) + ?(Х > Цел(Х); 1; 0) (в коде — с запятыми вместо точек с запятой в операторе ?). Либо Окр(Х - 0,5; 0) с режимом Округлить15как20.
Почему Окр(2,5) даёт 2, а не 3?
По умолчанию действует режим Округлить15как10 — банковское округление к ближайшему чётному. Укажите явно РежимОкругления.Округлить15как20, и результат станет 3.
Можно ли округлить число в запросе?
Прямого аналога Окр() в языке запросов нет. Используют ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 2)) для приведения разрядности либо вычисляемые поля СКД, где доступна полноценная функция Окр().
Как округлить цены до рублей в УТ 11 без программирования?
Откройте карточку вида цены (НСИ и администрирование → Ценообразование → Виды цен) и задайте порядок округления «до 1» с нужным направлением. При последующей установке цен округление применится автоматически.
Что важно запомнить
В коде 1С округляет функция Окр(Число; Разрядность; Режим): разрядность 2 — копейки, 0 — целые, отрицательная — десятки и сотни. Режим по умолчанию округляет 0,5 к чётному, для «вверх» укажите Округлить15как20. Цел() отбрасывает дробную часть без округления. В типовых конфигурациях цены округляются настройками видов цен, а формат в отчётах меняет только отображение — для сходимости итогов округляйте сами данные.