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

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

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

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

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

Путаница между этими вариантами — главный источник ошибок. Если реквизит «Цена» описан как Число(15,2), то значение 12,3456 при записи округлится до 12,35, и никакая настройка формата не вернёт отброшенные разряды. И наоборот, если точность увеличена, а в форме стоит маска с двумя знаками, пользователь будет видеть округлённые числа, хотя в базе хранятся точные.

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

Различие между хранением и отображением числа

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

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

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

Как увеличить точность реквизита в конфигураторе

Основной сценарий — изменение свойств числового реквизита в конфигураторе. Потребуются права на изменение конфигурации и монопольный доступ к базе на момент обновления структуры.

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

Обратите внимание на связку длины и точности. Если было Число(10,2), а вы поставили точность 4, не увеличив длину, то под целую часть останется меньше разрядов: 10 − 4 = 6 цифр. Для цен и количеств это обычно некритично, но для крупных сумм может привести к переполнению. Правильный вариант — одновременно увеличить длину, например до Число(15,4).

Если реквизит использует определяемый тип (например, «Сумма» или «Количество» в типовых конфигурациях), менять точность нужно в самом определяемом типе — тогда изменение применится ко всем реквизитам, где он используется. Это удобно, но влияет сразу на много объектов, поэтому перед изменением проверьте состав определяемого типа.

Как изменить только отображение без правки конфигурации

Когда хранимая точность достаточна, а видно мало знаков, конфигурацию менять не нужно. В управляемых формах откройте «Изменить форму», выберите поле ввода и в его свойствах найдите «Формат». В диалоге конструктора формата задайте число знаков дробной части — поле «Точность» или параметр ЧДЦ в форматной строке.

Форматная строка для числа выглядит так: ЧДЦ=4; ЧРД=,; ЧН=0,0000, где ЧДЦ — число десятичных знаков, ЧРД — разделитель дробной части, ЧН — представление нуля. Эту же строку можно задать программно через функцию Формат() при выводе значений в сообщения, табличные документы и надписи.

В отчётах на СКД формат задаётся на вкладке «Наборы данных» (колонка «Оформление» у поля) или на вкладке «Настройки» — «Дополнительные настройки — Формат» для выбранного поля. В макетах печатных форм формат указывается в свойствах ячейки табличного документа либо в параметре при выводе.

Что происходит с уже введёнными данными

Увеличение точности — безопасная операция для существующих данных. Значения, записанные ранее с двумя знаками, останутся как были: 12,35 не превратится в 12,3500 с «восстановленными» цифрами — их никогда не существовало. Новые разряды будут заполняться только при последующем вводе или перезаписи объектов.

Опасность представляет обратная операция — уменьшение точности. При реструктуризации базы платформа округлит все хранимые значения до новой точности, и вернуть отброшенные разряды будет невозможно. Если нужно временно уменьшить точность для эксперимента, сначала сделайте выгрузку базы (dt) или резервную копию средствами СУБД.

Отдельный случай — регистры накопления и бухгалтерии с уже рассчитанными итогами. Изменение точности измерений или ресурсов регистра может потребовать пересчёта итогов; после обновления конфигурации проверьте отчёты по этим регистрам на предмет расхождений с прежними значениями.

Особенности для типовых конфигураций

В типовых решениях (Бухгалтерия, Управление торговлей, ERP, Зарплата и управление персоналом) реквизиты цен, количеств и сумм часто объединены в определяемые типы, а конфигурация находится на поддержке. Изменение точности такого типа возможно, но включает объект в список изменённых, что усложняет последующие обновления: при каждом обновлении платформа будет спрашивать, как поступить с изменённым объектом.

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

Сравнение подходов

Изменение точности в конфигураторе

Подходит, когда нужно реально хранить больше разрядов. Ограничение: требует монопольного доступа, включает объект в изменённые и влияет на обмены.

Настройка формата поля

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

Внешняя печатная форма или отчёт

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

Программная работа с точностью и округлением

В коде на встроенном языке точность результата вычислений определяется типом реквизита, которому присваивается значение. Промежуточные вычисления в переменных выполняются с максимальной точностью платформы, а округление происходит в момент записи в реквизит. Поэтому для контроля промежуточных результатов используйте функцию Окр() с явным указанием разрядности и режима округления.

Пример: ЦенаСНДС = Окр(Сумма * СтавкаНДС / 100, 4); — такой код гарантирует четыре знака независимо от настроек реквизита, куда потом попадёт значение. При выводе в табличный документ или сообщение применяйте Формат(Значение, "ЧДЦ=4"), чтобы отображение совпадало с расчётной точностью.

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

Проверка результата и типичные ошибки

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

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

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

Ввод и запись значения 0,1234 в изменённый реквизит
Норма

После перезаписи и повторного открытия отображается 0,1234

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

Значение округляется до 0,12 — точность реквизита не изменилась или изменён не тот реквизит

Отчёт по данным с дробной частью
Норма

В отчёте видно нужное число знаков

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

Отчёт показывает округлённые значения — нужно настроить формат поля в СКД или проверить ВЫРАЗИТЬ в запросе

Печатная форма документа
Норма

Суммы и цены выводятся с заданной разрядностью

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

Печатная форма округляет — формат задан в макете или при выводе параметра, требуется правка макета

Типичные ошибки
01
Меняют формат поля, ожидая, что программа начнёт хранить больше разрядов — хранимая точность не меняется, лишние знаки теряются при записи.
02
Увеличивают точность без увеличения общей длины — уменьшается допустимая целая часть, крупные суммы перестают помещаться.
03
Меняют определяемый тип, не проверив его состав — точность меняется сразу у десятков реквизитов, включая те, где это не нужно.
04
Забывают про обмены данными — после изменения типа реквизита синхронизация с другими базами выдаёт ошибки сопоставления или молча искажает данные.
05
Ожидают, что старые записи «доберут» новые разряды — ранее округлённые значения не восстанавливаются, точность применяется только к новым данным.

Часто задаваемые вопросы

Можно ли увеличить знаки после запятой без доступа к конфигуратору?

Да, если задача — только изменить отображение. В режиме предприятия откройте «Изменить форму», выберите поле и задайте нужное число знаков в свойстве «Формат». Для отчётов на СКД формат настраивается в пользовательских настройках расширенного режима. Но хранимую точность так изменить нельзя — это возможно только через конфигуратор или расширение.

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

Потому что значения в них были записаны ранее с округлением до двух разрядов — отброшенные цифры не сохранились и восстановить их невозможно. Новая точность применяется только при повторном вводе или перезаписи объектов. Если нужно пересчитать старые данные, потребуется обработка, которая заново рассчитает значения по исходным формулам.

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

Платформа ограничивает общую длину числа и точность достаточно большими значениями, которых с запасом хватает для учётных задач; на практике для цен и курсов обычно используют 4–6 разрядов, для количеств — 3. Избыточная точность увеличивает объём хранения и усложняет согласование итогов, поэтому задавайте разрядность по реальной потребности, а не «с запасом».

Изменится ли точность в обмене данными после правки реквизита?

Тип реквизита передаётся вместе с данными, и если в базе-приёмнике тот же реквизит имеет меньшую точность, значение округлится при загрузке. После изменения точности синхронно обновите конфигурацию всех узлов обмена и проверьте правила конвертации, если обмен построен на универсальном формате или правилах КД.

Как вывести нужное число знаков в печатной форме, не меняя конфигурацию?

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

Почему в запросе значение обрезается, хотя в реквизите хранится точно?

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

Итог

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

Хранимая точность задаётся свойством «Точность» числового реквизита в конфигураторе и требует обновления конфигурации базы данных; отображение настраивается отдельно через формат поля, отчёта или печатной формы. Увеличение точности безопасно для старых данных, уменьшение — необратимо округляет значения. Перед изменением типовых объектов сделайте резервную копию и проверьте обмены данными.