К статье
Практический материал

Разработка и Конфигурация · 11 мин

Сколько знаков после запятой в 1С и как настроить точность чисел

Как задать количество знаков после запятой в 1С: точность чисел в реквизитах, ценах и количестве, округление в запросах и коде, типичные ошибки.

Вопрос «сколько знаков после запятой в 1С» возникает в двух ситуациях: когда дробное число «само» округляется до целого в документе или отчёте, и когда нужно осознанно выбрать точность для цены, количества, курса валюты или коэффициента. В обоих случаях ответ лежит в свойствах числового типа данных платформы «1С:Предприятие 8».

Числовой тип в 1С описывается двумя параметрами: длина (общее количество цифр, включая целую и дробную части) и точность (количество знаков после запятой). Например, Число(15, 2) — это число из 15 цифр, две из которых отведены под дробную часть. Если точность равна нулю, значение хранится и отображается как целое, а дробная часть отбрасывается по правилам округления платформы.

Важно понимать, что 1С хранит числа не в двоичном формате с плавающей точкой, а в десятичном виде с фиксированной точностью. Это защищает от классических ошибок вида 0,1 + 0,2 ≠ 0,3, но требует явно задавать точность везде: в реквизитах, в запросах, в ресурсах регистров и при выводе в печатные формы.

Как устроены длина и точность числа в 1С

Квалификатор числа задаётся парой «длина, точность». Длина включает все цифры числа: и до запятой, и после. Так, Число(10, 2) вмещает максимум 8 цифр в целой части и 2 в дробной — то есть значения до 99 999 999,99. Если попытаться записать больше, платформа выдаст ошибку или значение будет обрезано в зависимости от контекста.

Точность определяет, сколько знаков после запятой хранится. При записи значения с большим количеством знаков, чем задано точностью, платформа округляет число арифметически: 1,005 при точности 2 станет 1,01 (при хранении в реквизите), а 1,004 — 1,00. Это поведение нужно учитывать при расчётах цен и сумм, чтобы не накапливать расхождения в копейках.

Максимальная длина числа в платформе ограничена (обычно до 38 цифр в зависимости от версии и СУБД), но на практике редко нужны значения больше Число(15, 2) для сумм и Число(15, 3) для количества. Избыточная длина не ускоряет работу и усложняет сопоставление данных при обмене.

Где задаётся количество знаков после запятой

Основное место настройки — конфигуратор. У любого реквизита справочника, документа, ресурса регистра или измерения с типом «Число» в палитре свойств есть поля «Длина» и «Точность». Именно они определяют, сколько знаков после запятой увидит пользователь и что попадёт в базу данных.

Как изменить точность реквизита в конфигураторе
  1. 1
    Откройте конфигуратор и найдите нужный объект (справочник, документ, регистр).
  2. 2
    Выделите реквизит и откройте палитру свойств.
  3. 3
    Найдите поля «Длина» и «Точность», задайте нужные значения, например 15 и 3.
  4. 4
    Обновите конфигурацию базы данных (F7), согласившись на реструктуризацию.
  5. 5
    Проверьте на тестовой копии, что существующие данные не потеряли дробную часть.

Отдельно точность задаётся в типовых конфигурациях через функциональные опции и настройки. Например, в «1С:Бухгалтерии» и «1С:Управление торговлей» точность цен и сумм во многом определена составом типов, а в некоторых решениях есть настройки округления цен в прайс-листах. Перед изменением типов в типовой конфигурации проверьте, не дублируется ли нужная настройка в пользовательском режиме — это проще и не нарушает поддержку.

В формах и печатных документах отображение знаков после запятой управляется форматной строкой. Свойство «Формат» у поля ввода или функция Формат(Значение, "ЧДЦ=2") в коде определяют, сколько знаков показывать, не меняя хранимое значение.

Сколько знаков ставить для типовых величин

Универсального ответа нет — точность выбирается под смысл величины. Для денежных сумм в рублях стандарт де-факто — 2 знака (копейки). Для количества товара, которое может быть дробным (вес, метраж, литры), обычно ставят 3 знака. Курсы валют и коэффициенты часто требуют 4 и более знаков, иначе округление исказит пересчёты.

ВеличинаРекомендуемая точностьКомментарий
Суммы, цены в рублях2Копейки; совпадает с форматом платёжных документов
Количество товара3Покрывает вес, объём, фасовку с запасом
Курсы валют4–6Низкая точность даёт ощутимые расхождения при пересчёте крупных сумм
Проценты, ставки2–4Зависит от требований учётной политики
Коэффициенты пересчёта4–6Умножаются на количество, ошибка накапливается

При выборе точности ориентируйтесь на самую мелкую единицу, которая реально встречается в учёте. Если товар отгружается с точностью до грамма и учёт ведётся в килограммах, трёх знаков достаточно. Если в миллиграммах — понадобится шесть. Закладывать точность «с запасом» сверх потребности не стоит: лишние нули в дробной части мешают читать документы и отчёты.

Точность в запросах: ВЫРАЗИТЬ и её ловушки

Частая ситуация: в запросе число делится на число, и результат неожиданно становится целым или получает непредсказуемое количество знаков. Платформа сама определяет точность результата арифметических операций, и она может не совпадать с ожиданиями, особенно при делении.

Управлять точностью в запросе позволяет оператор приведения типа: ВЫРАЗИТЬ(Сумма / Количество КАК ЧИСЛО(15, 2)). Это гарантирует, что результат будет округлён до двух знаков независимо от типов операндов. Тот же приём применяют к вычисляемым полям, параметрам виртуальных таблиц и итогам.

bsl
ВЫБРАТЬ
	ВЫРАЗИТЬ(Продажи.Сумма / Продажи.Количество КАК ЧИСЛО(15, 2)) КАК Цена
ИЗ
	РегистрНакопления.Продажи КАК Продажи

Ещё одна ловушка — сравнение чисел с разной точностью и соединение таблиц по числовым полям. Если в одной таблице цена хранится как Число(15, 2), а в другой вычислена с большей точностью, равенство может не выполниться из-за тысячных долей. Перед сравнением приводите обе стороны к одному типу через ВЫРАЗИТЬ.

Округление в коде: Окр(), Формат() и разница между ними

Во встроенном языке для округления служит функция Окр(Число, Точность, РежимОкругления). Второй параметр — количество знаков после запятой, третий (необязательный) — режим: по умолчанию арифметическое округление, также доступно округление до чётного (банковское). Пример: Окр(123,456; 2) вернёт 123,46.

Критично различать округление значения и форматирование для показа. Окр() меняет само число — результат можно использовать в дальнейших расчётах и записи. Формат(Число, "ЧДЦ=2") возвращает строку: она годится для печатной формы или сообщения, но не для арифметики. Частая ошибка — «округлить» через Формат() и продолжить считать с исходным неокруглённым значением, из-за чего сумма в документе расходится с суммой в печатной форме.

Типичные ошибки
01
Округление через Формат() вместо Окр(): на экране два знака, в расчётах — полная дробная часть, итоги не сходятся.
02
Точность 0 у реквизита цены: дробные цены молча округляются до целых при записи.
03
Деление в запросе без ВЫРАЗИТЬ: платформа сама назначает точность результата, и она меняется от запроса к запросу.
04
Разная точность у связанных реквизитов (цена — 2 знака, курс — 2 знака): при пересчёте валютных сумм накапливаются копеечные расхождения.
05
Уменьшение точности реквизита в рабочей базе без копии: дробные части существующих данных теряются безвозвратно.

При расчёте сумм документа округляйте каждую строку до копеек до суммирования, а не итог после сложения. Иначе сумма округлённых построчных значений в печатной форме может отличаться от округлённого итога на копейку, что вызывает вопросы при сверке с контрагентами.

Отображение знаков в формах и печатных документах

Даже если в базе хранится три знака после запятой, пользователю можно показывать два — это настраивается форматной строкой. У поля ввода в форме есть свойство «Формат», где указывается, например, ЧДЦ=2 (число десятичных знаков). В табличных документах печатных форм формат задаётся в свойствах ячейки или параметра макета.

Полезные ключи форматной строки: ЧДЦ — число знаков после запятой, ЧРД — разделитель дробной части, ЧРГ — разделитель групп разрядов, ЧН — представление нуля (например, прочерк вместо 0,00). Комбинация Формат(Сумма, "ЧДЦ=2; ЧРГ=' '") выведет сумму с двумя знаками и пробелами между тысячами.

Помните: форматирование влияет только на отображение. Если требуется, чтобы в печатной форме и в учёте значения совпадали до копейки, округление должно быть выполнено в данных (через Окр или точность реквизита), а формат — лишь финальное оформление.

Как проверить, что точность настроена правильно

Контрольные точки

Как проверить результат

Ввод дробного значения в реквизит
Норма

Дробная часть сохраняется после записи и перепроведения

Тревожный признак

Значение округляется до целого или обрезается

Сумма документа против суммы строк
Норма

Итог равен сумме округлённых строк до копейки

Тревожный признак

Расхождение на копейки между печатной формой и проводками

Пересчёт валютной суммы
Норма

Сумма в валюте × курс совпадает с рублёвой суммой в пределах копейки

Тревожный признак

Систематические расхождения из-за точности курса

Запрос с делением
Норма

Точность результата задана явно через ВЫРАЗИТЬ

Тревожный признак

Количество знаков меняется в зависимости от данных

Быстрая проверка после изменения точности: создайте тестовый документ, введите значение с максимальным числом знаков (например, 1,999), запишите и перепроведите его, затем откройте заново и сверьте значение. Дополнительно сформируйте отчёт по регистру и убедитесь, что дробная часть дошла до итогов без искажений.

Если конфигурация типовая и снятие с поддержки нежелательно, сначала поищите решение без изменения типов: форматные строки в формах, округление в коде печатных форм, настройки округления цен. Изменение состава типов — крайняя мера, требующая тестирования обменов и отчётов.

Итог

Что важно запомнить

Количество знаков после запятой в 1С определяется точностью числового типа: в конфигураторе — у реквизита, в запросах — через ВЫРАЗИТЬ, в коде — через Окр(), а на экране — форматной строкой. Для сумм обычно достаточно 2 знаков, для количества — 3, для курсов и коэффициентов — 4 и более. Изменяйте точность только на копии базы и помните: уменьшение точности необратимо обрезает данные.

Частые вопросы

Почему 1С округляет моё число до целого, хотя я ввожу дробное?

Скорее всего, у реквизита или переменной точность равна 0. Проверьте свойства реквизита в конфигураторе (поля «Длина» и «Точность») или, если значение вычисляется в запросе, приведите его через ВЫРАЗИТЬ(... КАК ЧИСЛО(15, 2)).

Какое максимальное количество знаков после запятой поддерживает 1С?

Платформа ограничивает общую длину числа (обычно до 38 цифр с учётом версии платформы и СУБД), поэтому точность не может превышать длину. На практике для учётных задач достаточно 2–6 знаков; большая точность почти никогда не нужна и затрудняет чтение данных.

Чем Окр() отличается от Формат() с ЧДЦ?

Окр() возвращает округлённое число, которое можно использовать в расчётах и записывать в базу. Формат() с параметром ЧДЦ возвращает строку для отображения — само значение при этом не меняется. Для учётных расчётов используйте Окр(), для печатных форм — Формат().

Можно ли изменить точность реквизита, если в базе уже есть данные?

Да, но с осторожностью. Увеличение точности безопасно — существующие значения не пострадают. Уменьшение при реструктуризации обрежет дробную часть в записанных данных без возможности восстановления. Всегда делайте резервную копию и сначала проверяйте изменение на копии базы.

Почему в запросе при делении получается непредсказуемое число знаков?

При делении платформа сама вычисляет точность результата исходя из типов операндов, и она может быть избыточной или недостаточной. Чтобы зафиксировать результат, оберните выражение в ВЫРАЗИТЬ(... КАК ЧИСЛО(длина, точность)) — это стандартная практика для вычисляемых цен и ставок.

Как убрать копеечные расхождения между документом и печатной формой?

Округляйте значения на уровне данных: каждую строку до копеек через Окр() до суммирования, а итог считайте как сумму уже округлённых строк. Если округление применяется только в печатной форме через Формат(), расхождения на копейку неизбежны.