Разработка и Конфигурация · 8 мин
Как в 1С убрать округление до целого числа
Как убрать округление до целого числа в 1С: настройка точности в конфигураторе, форматная строка, функции Окр() и Формат(), типичные ошибки и проверка результата.
Округление до целого числа в 1С возникает по нескольким причинам: у реквизита в конфигураторе задана нулевая точность, в коде применена функция Окр() без указания разрядности, а в отчётах и печатных формах число выводится через форматную строку без дробной части. Чтобы убрать округление, нужно сначала понять, на каком уровне оно происходит — в данных, в коде или только в отображении.
Различие принципиально: если точность обрезана в конфигураторе, дробная часть теряется уже при записи в базу и восстановить её нельзя. Если же число хранится полностью, а округляется только при выводе, достаточно поправить формат — данные останутся нетронутыми. Поэтому первый шаг всегда диагностический: проверить, что реально записано в базе.
Определяем, где именно происходит округление
Прежде чем что-то менять, откройте проблемный документ или справочник и посмотрите значение в режиме предприятия. Затем сравните его с тем, что выводится в отчёте или печатной форме. Если в карточке объекта число дробное (например, 12,75), а в отчёте — 13, значит округление происходит только при выводе, и править нужно формат, а не данные.
Если же в самом объекте число уже целое, хотя вводили дробное, — значит, дробная часть отсекается на уровне типа данных. Это самый неприятный случай: информация теряется в момент записи, и после исправления настройки старые значения придётся вводить заново или пересчитывать.
Как выбрать действие
Увеличиваем точность реквизита в конфигураторе
Основная причина «жёсткого» округления — свойство Точность у числового реквизита. В конфигураторе откройте нужный объект (документ, справочник, регистр), найдите реквизит и посмотрите состав типа Число: там задаются длина и точность. Если точность равна 0, платформа хранит только целую часть.
Установите нужную разрядность — для количеств обычно достаточно 3 знаков, для цен и сумм — 2, для курсов и коэффициентов может понадобиться 4 и более. После изменения обновите конфигурацию базы данных (F7). Платформа выполнит реструктуризацию таблиц; на больших базах это может занять заметное время, поэтому операцию лучше проводить вне рабочих часов и после резервного копирования.
Для регистров накопления и сведений проверьте точность не только ресурсов, но и измерений с реквизитами — округление может быть задано в любом числовом поле. Также убедитесь, что аналогичная точность установлена у связанных объектов: если в документе поле дробное, а в регистре, куда он пишет, целое, дробная часть снова потеряется при проведении.
Убираем округление в коде: Окр(), Цел() и формат чисел
Во встроенном языке 1С округление до целого явно выполняют функции Окр(Число) без второго параметра и Цел(Число). Найдите их через глобальный поиск (Ctrl+Shift+F) по модулям, ответственным за расчёт. Чтобы сохранить дробную часть, либо уберите вызов, либо задайте разрядность: Окр(Сумма, 2) округлит до двух знаков, а не до целого.
Отдельно проверьте преобразования типов: присвоение числа реквизиту с меньшей точностью молча отсекает дробную часть без ошибок. Также обратите внимание на деление — в 1С оператор / возвращает дробный результат, а вот явное приведение к целому типу в вычислениях может незаметно обрезать значение.
// Было: округление до целого
Итог = Окр(Сумма);
// Стало: два знака после запятой
Итог = Окр(Сумма, 2);
// Вывод без округления значения
СтрокаСуммы = Формат(Сумма, "ЧДЦ=2");Настраиваем вывод в отчётах и печатных формах
В отчётах на СКД дробность управляется через настройку поля: на вкладке «Наборы данных» или в пользовательских настройках отчёта у числового поля задаётся оформление с параметром ЧДЦ (число десятичных знаков). Установите нужное значение — и отчёт покажет дробную часть без изменения данных.
В макетах печатных форм округление часто зашито в свойствах ячейки: откройте макет, выделите ячейку с числом и в палитре свойств проверьте «Формат». Уберите маску вида ЧЦ=15; ЧДЦ=0 или замените ЧДЦ на 2. Если значение выводится из кода через Формат(), поправьте строку формата там.
Особые случаи: валютные суммы, количества и обмены
В типовых конфигурациях точность сумм и количеств централизованно настраивается в режиме предприятия, без конфигуратора. Например, в 1С:Бухгалтерии и УТ разрядность цен и количеств задаётся в настройках параметров учёта или валют. Проверьте эти настройки до вмешательства в конфигуратор — возможно, достаточно изменить точность валюты или единицы измерения.
Ещё один источник округления — обмены данными: при выгрузке в XML или через планы обмена число может проходить через поле приёмника с меньшей точностью. Если округление появляется только в базе-корреспонденте, сравните точность соответствующих реквизитов в обеих конфигурациях.
Проверяем результат после изменений
После правок введите тестовое значение с дробной частью (например, 3,47), сохраните объект и проверьте его в карточке, в проводках или движениях по регистрам и в итоговом отчёте. Все три точки должны показывать одинаковое дробное значение.
Для документов, которые уже были проведены до изменения настроек, перепроведение не восстановит потерянную дробную часть — такие значения потребуется перезаполнить из первичных данных или пересчитать.
Как проверить результат
Дробное число сохраняется после записи
Дробная часть обнуляется сразу после ввода
Ресурсы регистра содержат дробные значения
В регистрах числа целые при дробном документе
Выводится заданное число знаков после запятой
Отображение округлено при корректных данных
Часто задаваемые вопросы
Почему после увеличения точности старые документы всё равно показывают целые числа?
Потому что дробная часть была потеряна при первоначальной записи — изменение типа реквизита не восстанавливает данные задним числом. Такие значения нужно ввести заново из первичных документов или пересчитать по исходным данным.
Как убрать округление в отчёте, не трогая конфигуратор?
Если отчёт построен на СКД, откройте настройки отчёта, найдите числовое поле и задайте оформление с параметром ЧДЦ равным нужному числу знаков. В типовых отчётах это доступно пользователю без изменения конфигурации, если данные в базе хранятся с дробной частью.
Чем Окр() отличается от Цел() в 1С?
Окр() округляет по правилам арифметики (до ближайшего значения с заданной разрядностью), а Цел() просто отбрасывает дробную часть. Для денежных расчётов обычно применяют Окр() с явным указанием разрядности, например Окр(Сумма, 2).
Влияет ли настройка округления цен в типовых конфигурациях на суммы документов?
Да, в ряде конфигураций есть настройки округления цен и сумм при расчёте (например, округление цен в прайсах или до копеек в документах). Проверьте параметры учётной политики и настройки валют — округление может быть включено там и применяться при каждом расчёте.
Можно ли увеличить точность только для новых данных, не трогая старые?
Технически точность реквизита едина для всей таблицы, поэтому разделить «старые» и «новые» данные нельзя. Изменение типа затронет всю таблицу, но уже записанные целые значения останутся целыми — им просто добавится возможность хранить дробную часть при будущих записях.
Опасно ли менять длину и точность реквизита на большой базе?
Изменение вызывает реструктуризацию, которая на крупных таблицах может занять продолжительное время и заблокировать работу пользователей. Выполняйте операцию в нерабочее время, обязательно после резервного копирования, и предварительно протестируйте на копии базы.
Что важно запомнить
Округление до целого в 1С бывает трёх уровней: тип реквизита (точность в конфигураторе), код (Окр, Цел) и отображение (форматная строка, ЧДЦ). Сначала определите уровень, затем исправляйте именно его. Потерянная в данных дробная часть не восстанавливается — перед изменением типов делайте резервную копию.