Точность поля «Количество» в 1С: как добавить знаки после запятой
Содержание
В типовых конфигурациях количество хранится с тремя знаками после запятой. Ввести 0,0005 кг и получить в документе 0,001 или 0,000 не получится: платформа округлит значение до точности реквизита. Многие думают, что это настройка в пользовательском режиме. Её там нет. Точность задана в типе числового реквизита, а тип меняется только в Конфигураторе.
Прежде чем лезть в метаданные, проверьте, нельзя ли решить задачу единицей измерения. Часто (граммы вместо килограммов, штуки вместо тысяч штук) этого достаточно, и конфигурацию трогать не придётся.
Откуда берётся ограничение на количество
Числовой тип в 1С описывается двумя параметрами: общей длиной и точностью. Для количества в типовых решениях обычно стоит длина 15 и точность 3. Это значит: всего до 15 цифр, из них 3 после запятой, а до запятой остаётся 12.
При записи платформа округляет число до заданной точности по правилам математического округления. Никакой ошибки не будет, лишние знаки молча пропадут. Поэтому проблема обычно всплывает не сразу, а когда бухгалтер замечает, что 0,0004 т превратилось в ноль.
Ограничение живёт не в одном месте, а в цепочке объектов:
- 📦 реквизит табличной части документа («Количество» в «Товарах»);
- 🗂 ресурс регистра накопления или сведений, куда документ пишет движения;
- 🔢 реквизиты справочников (минимальный остаток, норма расхода, количество в наборе);
- 📊 поля в запросах и отчётах, если там заданы свои формат и точность.
Если расширить только реквизит документа, а ресурс регистра оставить как был, остаток всё равно округлится при проведении. Это главная причина, почему «поменял разрядность, а не работает ».
Сначала единицы измерения: способ без правки конфигурации
Тонны вместо килограммов, километры вместо метров, граммы вместо килограммов. Если вам нужна точность до 0,0001 кг, ведите учёт в граммах: 0,1 г это уже целое число с одним знаком после запятой.
Порядок такой:
- Откройте карточку номенклатуры и найдите блок единиц измерения.
- Добавьте единицу «г» с коэффициентом относительно базовой «кг». Коэффициент в 1С задаётся отношением к базовой единице, поэтому уточните по подсказке формы, в какую сторону он считается.
- В документах выбирайте в строке товара именно граммы.
- Остатки и отчёты продолжат считаться в базовой единице хранения. Точность хранения остаётся прежней, зато вводить и видеть можно мелкие доли.
Минус: количество в базовой единице всё равно хранится с тремя знаками. Пересчёт 0,1 г в килограммы даёт 0,0001, и в остатках это округлится до 0,000. Если мелкие доли должны суммироваться (сотни отгрузок по 0,1 г), смените базовую единицу на граммы, а не только добавляйте вторую.
Для штучных товаров, которые продаются упаковками и поштучно, лучше хранить в штуках, а упаковки оформить как вторую единицу с коэффициентом. Дробные штуки тогда не понадобятся вообще.
Как увеличить разрядность через Конфигуратор
Это путь для тех, у кого действительно нужны четыре и более знаков в самой базе: ювелирка, химия, сыпучие материалы, электрокабель на километры.
Шаги общие для любой конфигурации (БП 3.0, УТ 11, ERP, самописная):
- Сделайте копию информационной базы. Подойдёт выгрузка информационной базы в
.dtили копия файла базы. - Откройте базу в Конфигураторе: кнопка «Конфигуратор» в окне запуска 1С.
- Если конфигурация на поддержке, включите возможность изменения:
Конфигурация → Поддержка → Настройка поддержки, затем разрешите изменение нужных объектов. Это поведёт к ручному объединению при будущих обновлениях. - В дереве метаданных откройте нужный объект. Для документа это ветка «Документы», дальше табличная часть и реквизит «Количество».
- В палитре свойств найдите «Тип» и нажмите кнопку выбора. Для числа задайте «Длина» и «Точность», например 15 и 4.
- Повторите для ресурсов регистров, в которые попадает это количество, и для связанных реквизитов справочников.
- Сохраните конфигурацию:
Конфигурация → Обновить конфигурацию базы данных.
Платформа предложит реструктуризацию таблиц. Для файловой базы она пройдёт локально, для клиент-серверной нужен монопольный доступ: пользователи должны выйти. На больших базах (гигабайты в регистрах) операция занимает от нескольких минут до часа.
| Что менять | Где искать в дереве | Чем рискуете, если пропустить |
|---|---|---|
| Реквизит табличной части документа | Документы → документ → Табличные части | Дробная часть теряется при вводе |
| Ресурс регистра накопления | Регистры накопления → ресурсы | Дробная часть теряется при проведении |
| Реквизиты справочников | Справочники → реквизиты | Нормы и минимумы остаются округлёнными |
| Поля отчётов и макетов | Отчёты, схемы компоновки, формы | Данные есть, но на экране «нули» |
Менять точность отдельных реквизитов типовой конфигурации можно, но после этого обновление релизов потребует сравнения и объединения. Уменьшать длину или точность на заполненной базе не стоит: лишние разряды пропадут.
Что с длиной
Увеличивая точность, следите за общей длиной. Тип с длиной 15 и точностью 6 оставляет всего 9 цифр до запятой, то есть число до миллиарда. Для количества штук этого хватит, для суммы оборотов уже нет. Если нужно сохранить прежние 12 знаков до запятой, увеличьте и длину: например, 18 и 6.
Как отображается количество на форме
Даже после изменения типа на форме можно увидеть нули там, где данные есть. Дело в формате поля. У поля формы есть свойство «Формат»: платформа выводит столько знаков, сколько задано, если не заставить её показывать всю точность типа.
Что проверить, если в базе значение 0,0005, а на экране 0,001 или 0:
- 🔍 открыть форму в Конфигураторе и посмотреть свойства поля «Количество»;
- 🧾 проверить свойство «Формат» и «Формат редактирования»: там может стоять жёсткая маска вроде
ЧДЦ=3; - 📋 для табличной части проверить колонку отдельно, у неё свои свойства;
- 🖨 в печатной форме формат задан в макете, и менять его надо там же.
Параметр ЧДЦ= в строке формата задаёт число десятичных цифр. Если в формате написано ЧДЦ=3, а в данных четыре знака, пользователь увидит округлённое значение, хотя в базе число точное. Это удобно использовать в обратную сторону: можно хранить точность 4, а в печатных формах показывать две.
Округление в документах, расчётах и отчётах
Увеличение разрядности не отменяет округление в промежуточных формулах. Типичный пример: цена за 1 кг, количество в граммах, сумма считается как количество × цена. Если количество в 1000 раз меньше, а цена округляется до копеек, ошибка копится.
Вот что нужно понимать:
- сумма в строке документа рассчитывается кодом формы и хранится отдельным реквизитом с точностью 2;
- количество × цена округляется до копеек в сумме строки, а не в количестве;
- итоги по документу суммируются из округлённых строк, поэтому расхождение в копейку возможно при любой точности количества;
- запрос в отчёте может приводить число функцией
ВЫРАЗИТЬ(... КАК Число(15, 3)), и тогда четвёртый знак теряется, даже если в регистре он есть.
Пример проверки. Допустим, остаток по регистру 0,0125 кг. Отчёт показывает 0,013. Значит, где-то в схеме компоновки или запросе стоит приведение к трём знакам либо формат поля. Данные в регистре целы, нужно править только отчёт.
Хотите быстро убедиться, что данные сохраняются верно? Создайте тестовый документ в копии базы, введите 0,0125 и проведите его. Затем посмотрите движения: в записи регистра должно быть 0,0125, а не округлённое значение.
Мини-кейс: кабель в километрах
Склад учитывает кабель в километрах, а отпускают его метрами. Продали 12 м, то есть 0,012 км. Три знака ещё держат это значение. Теперь продали 4 м: 0,004 км, тоже помещается. А вот 0,5 м даёт 0,0005 км и превращается в 0,001, то есть в метр. Остаток уезжает на пол-метра с каждой такой продажей.
Решения два. Первое: сменить базовую единицу на метры, тогда точность в три знака даёт миллиметры. Второе: оставить километры и поднять точность до шести знаков во всей цепочке объектов. Первое проще и безопаснее, второе оправдано, только если от километров зависят обмены и печатные формы.
Правило для выбора простое: сначала спросите, какая самая мелкая доля вам нужна, и переведите её в базовую единицу. Если результат укладывается в три знака, меняйте единицу, а не метаданные.
Что будет с производительностью и данными
Увеличение точности на один-два знака почти не сказывается на скорости: числовое поле в СУБД занимает фиксированное место, а на скорость запросов влияет скорее объём таблиц, чем точность.
Реальные риски другие:
- 🧱 реструктуризация таблицы регистра с десятками миллионов строк идёт долго и блокирует базу;
- 🔁 обмены с другими системами (сайт, учёт склада, УТ ↔ БП) могут не принять число с большим числом знаков, если у приёмника точность старая;
- 🧮 выгрузки в Excel и печатные формы со старыми макетами обрезают лишнее;
- 📉 уже записанные движения не уточняются: у них прежняя, округлённая величина. Исправить историю можно только перепроведением документов, а это отдельная операция с последствиями для остатков и себестоимости.
Перед массовым перепроведением оцените объём и сделайте копию. Если документов тысячи, работайте партиями по периодам, начиная с самого раннего.
Варианты, когда трогать конфигурацию не нужно
Метаданные типовой конфигурации правят не от хорошей жизни. Есть ходы, которые решают задачу мягче:
- Другая единица хранения. Описана выше: граммы, миллилитры, миллиметры. Самый дешёвый и безопасный вариант.
- Укрупнение. Если проблема в том, что нужно учитывать «0,0001 партии», вводите партию как единицу измерения, а не доли.
- Дополнительный реквизит или свойство. Для справочной информации (точный вес на штуку) подойдёт дополнительный реквизит номенклатуры типа «Число» с нужной точностью. В учёте он не участвует, зато данные сохраняются и их можно вывести в печатную форму. Включение дополнительных реквизитов делается в настройках раздела администрирования.
- Расширение конфигурации . Расширение (с версии платформы 8.3.6) позволяет добавить новые реквизиты и поведение, не трогая типовой код. Но оно не меняет тип уже существующего реквизита основной конфигурации, поэтому для самого «Количества» не подходит.
- Обработка пересчёта. Для разовых задач бывает достаточно внешней обработки, которая считает дробные значения и записывает итог в нужные поля.
| Способ | Когда подходит | Минусы |
|---|---|---|
| Единица измерения | Нужна иная масштабная единица | Хранится в базовых единицах |
| Метаданные в Конфигураторе | Нужна точность в самой базе | Ручное объединение при обновлении |
| Дополнительный реквизит | Справочные данные | Не участвует в остатках |
| Внешняя обработка | Разовые расчёты | Нужен программист |
Как не получить сюрпризов после изменений
Проверяйте не одно поле, а всю цепочку: ввод в документ → проведение → движения регистра → отчёт → печатная форма → обмен. Достаточно одного тестового документа.
Порядок проверки:
Отдельно отнесите проверку обновлений на копию: после смены типа реквизита типовой конфигурации релиз при загрузке пометит этот объект как изменённый, и при обновлении появится окно сравнения.