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

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

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

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

Тысячные доли в 1С нужны, когда двух знаков после запятой недостаточно: учёт драгоценных металлов и драгоценных камней, весовой товар, ставки НДС и коэффициенты, цены в иностранной валюте, расчёт курсовых разниц, лабораторные измерения. По умолчанию многие типовые конфигурации ограничивают дробную часть двумя знаками, и пользователь видит, что введённое значение 0,125 «срезается» до 0,13 или 0,12 — в зависимости от настроек округления.

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

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

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

Важно различать хранение и отображение. Реквизит с точностью 2 физически не сохранит значение 0,125 — при записи оно округлится. А реквизит с точностью 3 может хранить тысячные, но форма может показывать их с двумя знаками, если в поле ввода задан соответствующий формат. Поэтому при поиске причины «пропавших» тысячных проверяйте оба уровня.

Настройка точности реквизита в конфигураторе

Основной способ — задать точность на уровне метаданных. Откройте конфигуратор, найдите нужный объект (справочник, документ, регистр), перейдите к реквизиту и откройте палитру свойств. В свойстве «Тип» нажмите кнопку выбора: откроется диалог редактирования типа данных, где для числа задаются «Длина» (общее количество цифр) и «Точность» (количество знаков дробной части). Установите точность 3, сохраните конфигурацию и обновите конфигурацию базы данных.

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

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

Формат поля ввода в пользовательском режиме

Если реквизит уже хранит тысячные, но на форме отображаются только два знака, измените формат поля ввода. В конфигураторе откройте форму объекта, выделите поле и в палитре свойств найдите «Формат» (или «ФорматРедактирования»). Нажмите кнопку выбора — откроется конструктор форматной строки, где можно указать число знаков дробной части. Альтернатива — вписать строку вручную: ЧДЦ=3.

Форматная строка позволяет задать и дополнительные параметры: разделитель групп разрядов, представление нуля, сдвиг разрядов. Например, строка ЧДЦ=3; ЧРГ=' ' выведет число с тремя знаками после запятой и пробелом между группами разрядов: 1 234,567. Подробный синтаксис всех параметров форматной строки описан во встроенной справке платформы (раздел «Формат»).

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

Порядок действий для поля формы
  1. 1
    Откройте форму объекта в конфигураторе и выделите нужное поле ввода
  2. 2
    В палитре свойств найдите свойство «Формат» и откройте конструктор форматной строки
  3. 3
    Установите число знаков дробной части равным 3 или впишите ЧДЦ=3 вручную
  4. 4
    Сохраните форму, обновите конфигурацию и откройте объект в пользовательском режиме
  5. 5
    Введите значение с тремя знаками и проверьте отображение и запись

Тысячные в коде: форматирование и округление

При программной работе с числами используются две разные задачи: округлить значение до тысячных и вывести его с тремя знаками. Для округления применяется функция Окр(Значение, 3) — она возвращает число, округлённое до трёх знаков по правилам арифметического округления. Для вывода в строку, сообщение или текстовый документ используется Формат(Значение, "ЧДЦ=3").

Типичный пример расчёта цены с тысячными:

ЦенаЗаГрамм = Окр(СуммаПартии / ВесПартии, 3);

ТекстСообщения = "Цена за грамм: " + Формат(ЦенаЗаГрамм, "ЧДЦ=3");

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

bsl
Значение = 12,34567;
Округленное = Окр(Значение, 3);           // 12,346
Строка = Формат(Значение, "ЧДЦ=3");      // "12,346"
СтрокаСРазрядами = Формат(Значение, "ЧДЦ=3; ЧРГ=' '");

Тысячные в отчётах, СКД и печатных формах

В отчётах на системе компоновки данных формат задаётся на вкладке «Настройки» → «Оформление» для конкретного поля: добавьте параметр «Формат» со значением ЧДЦ=3. То же можно сделать и пользователю без конфигуратора — в режиме «Ещё → Изменить вариант» отчёта, если разработчик не запретил изменение настроек. Это самый безопасный способ, не требующий доработки конфигурации.

В печатных формах на основе табличного документа формат задаётся в свойствах ячейки макета: выделите ячейку в конфигураторе и в палитре свойств установите «Формат» = ЧДЦ=3. Если ячейка заполняется параметром, формат применится к выводимому значению автоматически. Для макетов, заполняемых программно через Текст, форматируйте значение функцией Формат перед подстановкой.

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

Сравнение способов задать тысячные

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

Меняет хранение данных. Требует реструктуризации и прав на изменение конфигурации. Подходит, когда тысячные нужны постоянно.

Формат поля ввода

Меняет только отображение на форме. Быстро и безопасно, но данные в базе остаются с исходной точностью.

Оформление поля в СКД

Настраивается пользователем без конфигуратора. Действует только в конкретном отчёте.

Окр() и Формат() в коде

Гибкий вариант для расчётов и вывода, но требует доработки каждого места использования.

Частые ошибки и ограничения

Самая распространённая ошибка — изменить формат отображения и считать задачу решённой, хотя реквизит хранит только два знака. В этом случае введённое значение 5,678 сохранится как 5,68, и вернуть третий знак будет невозможно. Всегда начинайте с проверки точности реквизита в метаданных, и только потом настраивайте отображение.

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

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

Типичные ошибки
01
Настроен формат поля, но точность реквизита осталась 2 — третий знак теряется при записи без предупреждения
02
Уменьшена точность существующего реквизита — исторические данные округлены необратимо
03
Округление применено непоследовательно: строки округлены, итог нет — расхождения в суммах документа
04
При обмене число выгружено строкой с запятой — приёмник не смог распознать значение
05
Формат задан только в отчёте, а в печатной форме забыт — документы выводятся с разной точностью

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

После настройки выполните контрольную проверку на тестовом значении. Введите в поле число с тремя значащими знаками, например 7,125, запишите объект, закройте и откройте его заново. Если значение сохранилось без изменений — точность хранения настроена верно. Затем сформируйте отчёт и печатную форму по этому объекту и убедитесь, что везде отображаются три знака.

Для регистров дополнительно проверьте движения документа: откройте записи регистра и убедитесь, что в ресурсе хранится значение с тысячными. Если в движениях значение уже округлено до двух знаков — проблема в точности ресурса регистра, а не документа.

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

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

Значение в поле после записи и повторного открытия объекта
Норма

Сохранены все три знака, например 7,125

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

Значение округлено до двух знаков — точность реквизита меньше 3

Движения документа по регистру
Норма

В ресурсе регистра хранятся тысячные

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

В движениях два знака — проверить точность ресурса регистра

Отчёт и печатная форма
Норма

Везде три знака после запятой

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

Разное число знаков — не задан формат в макете или настройках СКД

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

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

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

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

Частично. В отчётах на СКД пользователь может задать формат поля через «Ещё → Изменить вариант → Оформление». Изменить точность хранения реквизита без конфигуратора нельзя — это изменение структуры метаданных, доступное только разработчику.

Чем отличаются Окр() и Формат() в коде?

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

Безопасно ли менять точность реквизита на рабочей базе?

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

Как вывести тысячные в запросе?

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

Итог

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

Тысячные в 1С настраиваются на трёх уровнях: точность реквизита определяет хранение, формат поля и отчёта — отображение, функции Окр и Формат — поведение в коде. Начинайте с проверки точности в метаданных, изменения на рабочей базе выполняйте только после резервной копии, а результат проверяйте на тестовом значении с тремя знаками.