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