Разработка и Конфигурация · 10 мин
Как изменить количество знаков после запятой в 1С
Как изменить количество знаков после запятой в 1С: настройка точности в конфигураторе, округление в отчётах и документах, типичные ошибки и способы проверки результата.
Количество знаков после запятой в 1С определяется не одной универсальной настройкой, а несколькими механизмами: точностью числового реквизита в конфигураторе, форматом вывода в формах и отчётах, функциями округления в коде. Какой способ выбрать, зависит от того, что именно нужно изменить — хранение данных, их отображение или результат вычислений.
Чаще всего задача возникает в трёх ситуациях: цены и суммы должны отображаться с двумя знаками вместо трёх или четырёх, количество товара требует дробных значений (например, весовой товар), либо в отчёте нужно убрать лишние разряды. В каждом случае порядок действий разный, и важно понимать разницу между точностью хранения и форматом отображения.
Ниже разобраны все основные сценарии: изменение точности реквизита в конфигураторе, настройка формата вывода без доработки конфигурации, округление в запросах и коде, а также ограничения и типичные ошибки, которые приводят к расхождениям в суммах.
Чем отличается точность хранения от формата отображения
Это ключевое различие, без понимания которого легко получить неожиданный результат. Точность реквизита задаётся в конфигураторе в свойствах числового поля и определяет, сколько разрядов после запятой физически хранится в базе данных. Если точность равна 2, значение 10,567 при записи превратится в 10,57 — третий разряд будет потерян безвозвратно.
Формат отображения, напротив, никак не меняет данные в базе. Он только определяет, как число выглядит на экране в форме документа, в табличном поле или в печатной форме. Значение 10,567 можно показать как 10,57, но в базе останется исходным, и в расчётах будет участвовать полное значение.
Из-за этого различия возникает классическая проблема: пользователь видит округлённые суммы, а итог по документу «не сходится» на копейку. Причина — отображение округляет каждую строку, а итог считается по полным значениям. Решать её нужно не форматом, а единым правилом округления при расчёте.
Как изменить точность числового реквизита в конфигураторе
Этот способ применяется, когда нужно изменить само хранение данных: например, разрешить вводить количество с тремя знаками после запятой для весового товара или, наоборот, ограничить цены двумя разрядами. Работа выполняется в конфигураторе и требует прав на изменение конфигурации.
Откройте конфигуратор, найдите нужный объект (справочник, документ, регистр) и перейдите к реквизиту. В палитре свойств найдите параметры «Длина» и «Точность». Длина — общее количество разрядов числа, точность — количество разрядов дробной части. Например, длина 15 и точность 3 позволяют хранить значения вида 999999999999,999.
После изменения свойств сохраните конфигурацию и выполните обновление конфигурации базы данных (клавиша F7 или меню «Конфигурация — Обновить конфигурацию базы данных»). Платформа выполнит реструктуризацию таблиц. На больших базах это может занять заметное время, поэтому операцию лучше проводить вне рабочих часов.
- 1Сделайте резервную копию базы или выгрузку DT
- 2Откройте конфигуратор и найдите нужный реквизит объекта
- 3В палитре свойств измените значения «Длина» и «Точность»
- 4Сохраните конфигурацию и обновите конфигурацию базы данных (F7)
- 5Проверьте запись и отображение значений в тестовом документе
Как изменить отображение знаков без изменения конфигурации
Если дорабатывать конфигурацию нельзя или не нужно, количество отображаемых разрядов можно изменить через формат поля. В управляемых формах это делается в конфигураторе через свойство «Формат» элемента формы, но в ряде случаев пользовательские настройки доступны и без конфигуратора — например, в настройках списков и отчётов на СКД.
Формат задаётся строкой вида ЧДЦ=2, где ЧДЦ — число десятичных знаков. Полная запись может выглядеть так: ЧЦ=15; ЧДЦ=2; ЧРД=,; ЧРГ= — здесь дополнительно заданы разделители дробной части и групп разрядов. Пустое значение формата означает вывод числа как есть, со всеми хранящимися разрядами.
Важно помнить: формат работает только на визуальном уровне. Если в базе хранится 3 разряда, а вы отображаете 2, то при копировании значения, выгрузке в Excel или использовании в расчётах будет фигурировать полное значение. Для единообразия учёта этого недостаточно.
Настройка формата в отчётах на СКД
В отчётах на системе компоновки данных формат числового поля задаётся на закладке «Наборы данных» (для поля запроса) или на закладке «Настройки» в разделе оформления выбранного поля. Пользователь с правами на изменение настроек отчёта может задать условное оформление и формат прямо в режиме предприятия, если разработчик открыл такую возможность.
Формат в печатных формах
В макетах печатных форм формат обычно задаётся в свойствах параметра области либо функцией Формат() в коде вывода. Изменение требует доработки макета или процедуры формирования печатной формы, поэтому выполняется разработчиком.
Округление в коде и запросах
Когда нужно округлить результат вычисления по заданному правилу, используется встроенная функция Окр(Число, Разрядность, РежимОкругления). Например, Окр(Сумма, 2) округлит значение до двух знаков по правилам арифметического округления. Третий параметр позволяет задать режим — округление в большую или меньшую сторону.
В запросах для приведения числа к нужной точности применяется конструкция ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 2)). Она не только округляет значение, но и приводит тип поля, что важно при помещении результата во временную таблицу или при сравнениях. Учтите, что ВЫРАЗИТЬ округляет арифметически и не заменяет осмысленное округление в бизнес-логике.
Правило округления должно быть единым во всей цепочке расчёта. Если цена округляется до копеек, а сумма строки считается как произведение неокруглённых значений, итог документа будет расходиться с суммой округлённых строк. Округляйте промежуточные результаты там, где это предусмотрено методологией учёта.
СуммаОкругленная = Окр(Цена * Количество, 2);
// В запросе:
// ВЫБРАТЬ ВЫРАЗИТЬ(Сумма КАК ЧИСЛО(15, 2)) КАК СуммаОкрКоличество знаков в ценах и валютных суммах
Отдельный нюанс — работа с валютами и ценами. В типовых конфигурациях точность цен и сумм уже задана в составе типов (например, определяемые типы «Денежная сумма»), и менять её глобально следует крайне осторожно: это затронет все объекты, использующие тип, включая регистры накопления с уже накопленными данными.
Если требуется, чтобы цены вводились и отображались с двумя знаками, а расчёты при этом велись точно, правильнее оставить точность хранения и настроить формат отображения в формах установки цен и печатных документах. Такой подход не ломает существующие данные и не требует реструктуризации.
Для валютных расчётов дополнительно проверьте настройки представления валюты в справочнике валют: там может задаваться формат суммы и прописи для печати. Эти параметры влияют на внешний вид документов, но не на точность расчётов.
Как выбрать способ
Проверка результата и типичные ошибки
После любого изменения проверьте результат на контрольном примере: создайте тестовый документ, введите значение с большим числом разрядов, запишите и перепроведите его, затем сравните отображение, хранящееся значение и итоги. Для проверки хранящегося значения удобно использовать консоль запросов — она показывает данные без форматирования.
Если менялась точность реквизита, дополнительно проверьте отчёты и обороты по регистрам: убедитесь, что исторические данные не исказились неожиданным образом и итоги сходятся с прежними значениями в пределах допустимого округления.
Как проверить результат
В консоли запросов видно ожидаемое число разрядов
Хранится больше или меньше разрядов, чем задано
Число выводится с нужным количеством знаков
Формат не применился — проверьте свойство поля
Сумма строк совпадает с итогом
Расхождение на копейки — нет единого округления
Ограничения и когда нужен специалист
Изменение точности в типовой конфигурации на поддержке приведёт к снятию объектов с полной поддержки и усложнит последующие обновления. Если конфигурация обновляется регулярно, предпочтительны способы без доработки: форматы отображения, пользовательские настройки отчётов, внешние печатные формы.
К разработчику стоит обращаться, когда нужно изменить точность в регистрах с накопленными данными, внедрить единое правило округления в проведение документов или доработать печатные формы. Такие задачи требуют анализа зависимостей и тестирования на копии базы.
Что важно запомнить
Хранение меняется точностью реквизита в конфигураторе, отображение — форматом поля, расчёты — функциями округления. Перед уменьшением точности делайте резервную копию, а расхождения копеек решайте единым правилом округления, а не форматом.
Частые вопросы
Почему в 1С сумма показывается с тремя знаками, хотя нужны две?
Скорее всего, у реквизита задана точность 3, а формат вывода не настроен. Задайте формат поля с параметром ЧДЦ=2 — отображение изменится без доработки конфигурации. Если нужно изменить и хранение, потребуется правка точности в конфигураторе.
Что будет со старыми данными при уменьшении точности реквизита?
При обновлении конфигурации базы данных платформа выполнит реструктуризацию и округлит хранящиеся значения до новой точности. Вернуть исходные разряды после этого невозможно, поэтому предварительно делайте резервную копию.
Можно ли изменить знаки после запятой без конфигуратора?
Да, если речь об отображении: формат можно задать в настройках отчётов на СКД, а в некоторых формах — через пользовательские настройки. Изменить точность хранения без конфигуратора нельзя.
Почему итог документа не сходится с суммой строк на копейку?
Строки отображаются округлёнными, а итог считается по полным значениям. Нужно внедрить единое правило округления в расчёте строк — тогда отображаемые и фактические суммы совпадут.
Как округлить число в запросе 1С?
Используйте конструкцию ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 2)) — она округлит значение до указанной точности и приведёт тип. Для особых режимов округления (всегда вверх или вниз) вычисления выполняйте в коде через Окр() с параметром режима.
Влияет ли точность на скорость работы базы?
Практически нет — числовые поля с разной точностью обрабатываются с сопоставимой скоростью. Заметное влияние оказывает только сама реструктуризация больших таблиц при изменении свойств реквизита.