Разработка и Конфигурация · 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Откройте конфигуратор и найдите нужный объект (справочник, документ, регистр).
- 2Выделите реквизит и откройте палитру свойств.
- 3Найдите поля «Длина» и «Точность», задайте нужные значения, например 15 и 3.
- 4Обновите конфигурацию базы данных (F7), согласившись на реструктуризацию.
- 5Проверьте на тестовой копии, что существующие данные не потеряли дробную часть.
Отдельно точность задаётся в типовых конфигурациях через функциональные опции и настройки. Например, в «1С:Бухгалтерии» и «1С:Управление торговлей» точность цен и сумм во многом определена составом типов, а в некоторых решениях есть настройки округления цен в прайс-листах. Перед изменением типов в типовой конфигурации проверьте, не дублируется ли нужная настройка в пользовательском режиме — это проще и не нарушает поддержку.
В формах и печатных документах отображение знаков после запятой управляется форматной строкой. Свойство «Формат» у поля ввода или функция Формат(Значение, "ЧДЦ=2") в коде определяют, сколько знаков показывать, не меняя хранимое значение.
Сколько знаков ставить для типовых величин
Универсального ответа нет — точность выбирается под смысл величины. Для денежных сумм в рублях стандарт де-факто — 2 знака (копейки). Для количества товара, которое может быть дробным (вес, метраж, литры), обычно ставят 3 знака. Курсы валют и коэффициенты часто требуют 4 и более знаков, иначе округление исказит пересчёты.
| Величина | Рекомендуемая точность | Комментарий |
|---|---|---|
| Суммы, цены в рублях | 2 | Копейки; совпадает с форматом платёжных документов |
| Количество товара | 3 | Покрывает вес, объём, фасовку с запасом |
| Курсы валют | 4–6 | Низкая точность даёт ощутимые расхождения при пересчёте крупных сумм |
| Проценты, ставки | 2–4 | Зависит от требований учётной политики |
| Коэффициенты пересчёта | 4–6 | Умножаются на количество, ошибка накапливается |
При выборе точности ориентируйтесь на самую мелкую единицу, которая реально встречается в учёте. Если товар отгружается с точностью до грамма и учёт ведётся в килограммах, трёх знаков достаточно. Если в миллиграммах — понадобится шесть. Закладывать точность «с запасом» сверх потребности не стоит: лишние нули в дробной части мешают читать документы и отчёты.
Точность в запросах: ВЫРАЗИТЬ и её ловушки
Частая ситуация: в запросе число делится на число, и результат неожиданно становится целым или получает непредсказуемое количество знаков. Платформа сама определяет точность результата арифметических операций, и она может не совпадать с ожиданиями, особенно при делении.
Управлять точностью в запросе позволяет оператор приведения типа: ВЫРАЗИТЬ(Сумма / Количество КАК ЧИСЛО(15, 2)). Это гарантирует, что результат будет округлён до двух знаков независимо от типов операндов. Тот же приём применяют к вычисляемым полям, параметрам виртуальных таблиц и итогам.
ВЫБРАТЬ
ВЫРАЗИТЬ(Продажи.Сумма / Продажи.Количество КАК ЧИСЛО(15, 2)) КАК Цена
ИЗ
РегистрНакопления.Продажи КАК ПродажиЕщё одна ловушка — сравнение чисел с разной точностью и соединение таблиц по числовым полям. Если в одной таблице цена хранится как Число(15, 2), а в другой вычислена с большей точностью, равенство может не выполниться из-за тысячных долей. Перед сравнением приводите обе стороны к одному типу через ВЫРАЗИТЬ.
Округление в коде: Окр(), Формат() и разница между ними
Во встроенном языке для округления служит функция Окр(Число, Точность, РежимОкругления). Второй параметр — количество знаков после запятой, третий (необязательный) — режим: по умолчанию арифметическое округление, также доступно округление до чётного (банковское). Пример: Окр(123,456; 2) вернёт 123,46.
Критично различать округление значения и форматирование для показа. Окр() меняет само число — результат можно использовать в дальнейших расчётах и записи. Формат(Число, "ЧДЦ=2") возвращает строку: она годится для печатной формы или сообщения, но не для арифметики. Частая ошибка — «округлить» через Формат() и продолжить считать с исходным неокруглённым значением, из-за чего сумма в документе расходится с суммой в печатной форме.
При расчёте сумм документа округляйте каждую строку до копеек до суммирования, а не итог после сложения. Иначе сумма округлённых построчных значений в печатной форме может отличаться от округлённого итога на копейку, что вызывает вопросы при сверке с контрагентами.
Отображение знаков в формах и печатных документах
Даже если в базе хранится три знака после запятой, пользователю можно показывать два — это настраивается форматной строкой. У поля ввода в форме есть свойство «Формат», где указывается, например, ЧДЦ=2 (число десятичных знаков). В табличных документах печатных форм формат задаётся в свойствах ячейки или параметра макета.
Полезные ключи форматной строки: ЧДЦ — число знаков после запятой, ЧРД — разделитель дробной части, ЧРГ — разделитель групп разрядов, ЧН — представление нуля (например, прочерк вместо 0,00). Комбинация Формат(Сумма, "ЧДЦ=2; ЧРГ=' '") выведет сумму с двумя знаками и пробелами между тысячами.
Помните: форматирование влияет только на отображение. Если требуется, чтобы в печатной форме и в учёте значения совпадали до копейки, округление должно быть выполнено в данных (через Окр или точность реквизита), а формат — лишь финальное оформление.
Как проверить, что точность настроена правильно
Как проверить результат
Дробная часть сохраняется после записи и перепроведения
Значение округляется до целого или обрезается
Итог равен сумме округлённых строк до копейки
Расхождение на копейки между печатной формой и проводками
Сумма в валюте × курс совпадает с рублёвой суммой в пределах копейки
Систематические расхождения из-за точности курса
Точность результата задана явно через ВЫРАЗИТЬ
Количество знаков меняется в зависимости от данных
Быстрая проверка после изменения точности: создайте тестовый документ, введите значение с максимальным числом знаков (например, 1,999), запишите и перепроведите его, затем откройте заново и сверьте значение. Дополнительно сформируйте отчёт по регистру и убедитесь, что дробная часть дошла до итогов без искажений.
Если конфигурация типовая и снятие с поддержки нежелательно, сначала поищите решение без изменения типов: форматные строки в формах, округление в коде печатных форм, настройки округления цен. Изменение состава типов — крайняя мера, требующая тестирования обменов и отчётов.
Что важно запомнить
Количество знаков после запятой в 1С определяется точностью числового типа: в конфигураторе — у реквизита, в запросах — через ВЫРАЗИТЬ, в коде — через Окр(), а на экране — форматной строкой. Для сумм обычно достаточно 2 знаков, для количества — 3, для курсов и коэффициентов — 4 и более. Изменяйте точность только на копии базы и помните: уменьшение точности необратимо обрезает данные.
Частые вопросы
Почему 1С округляет моё число до целого, хотя я ввожу дробное?
Скорее всего, у реквизита или переменной точность равна 0. Проверьте свойства реквизита в конфигураторе (поля «Длина» и «Точность») или, если значение вычисляется в запросе, приведите его через ВЫРАЗИТЬ(... КАК ЧИСЛО(15, 2)).
Какое максимальное количество знаков после запятой поддерживает 1С?
Платформа ограничивает общую длину числа (обычно до 38 цифр с учётом версии платформы и СУБД), поэтому точность не может превышать длину. На практике для учётных задач достаточно 2–6 знаков; большая точность почти никогда не нужна и затрудняет чтение данных.
Чем Окр() отличается от Формат() с ЧДЦ?
Окр() возвращает округлённое число, которое можно использовать в расчётах и записывать в базу. Формат() с параметром ЧДЦ возвращает строку для отображения — само значение при этом не меняется. Для учётных расчётов используйте Окр(), для печатных форм — Формат().
Можно ли изменить точность реквизита, если в базе уже есть данные?
Да, но с осторожностью. Увеличение точности безопасно — существующие значения не пострадают. Уменьшение при реструктуризации обрежет дробную часть в записанных данных без возможности восстановления. Всегда делайте резервную копию и сначала проверяйте изменение на копии базы.
Почему в запросе при делении получается непредсказуемое число знаков?
При делении платформа сама вычисляет точность результата исходя из типов операндов, и она может быть избыточной или недостаточной. Чтобы зафиксировать результат, оберните выражение в ВЫРАЗИТЬ(... КАК ЧИСЛО(длина, точность)) — это стандартная практика для вычисляемых цен и ставок.
Как убрать копеечные расхождения между документом и печатной формой?
Округляйте значения на уровне данных: каждую строку до копеек через Окр() до суммирования, а итог считайте как сумму уже округлённых строк. Если округление применяется только в печатной форме через Формат(), расхождения на копейку неизбежны.