Точность поля «Количество» в 1С: как добавить знаки после запятой

· 9 мин

Содержание

В типовых конфигурациях количество хранится с тремя знаками после запятой. Ввести 0,0005 кг и получить в документе 0,001 или 0,000 не получится: платформа округлит значение до точности реквизита. Многие думают, что это настройка в пользовательском режиме. Её там нет. Точность задана в типе числового реквизита, а тип меняется только в Конфигураторе.

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

Откуда берётся ограничение на количество

Числовой тип в 1С описывается двумя параметрами: общей длиной и точностью. Для количества в типовых решениях обычно стоит длина 15 и точность 3. Это значит: всего до 15 цифр, из них 3 после запятой, а до запятой остаётся 12.

При записи платформа округляет число до заданной точности по правилам математического округления. Никакой ошибки не будет, лишние знаки молча пропадут. Поэтому проблема обычно всплывает не сразу, а когда бухгалтер замечает, что 0,0004 т превратилось в ноль.

Ограничение живёт не в одном месте, а в цепочке объектов:

  • 📦 реквизит табличной части документа («Количество» в «Товарах»);
  • 🗂 ресурс регистра накопления или сведений, куда документ пишет движения;
  • 🔢 реквизиты справочников (минимальный остаток, норма расхода, количество в наборе);
  • 📊 поля в запросах и отчётах, если там заданы свои формат и точность.

Если расширить только реквизит документа, а ресурс регистра оставить как был, остаток всё равно округлится при проведении. Это главная причина, почему «поменял разрядность, а не работает ».

Сначала единицы измерения: способ без правки конфигурации

Тонны вместо килограммов, километры вместо метров, граммы вместо килограммов. Если вам нужна точность до 0,0001 кг, ведите учёт в граммах: 0,1 г это уже целое число с одним знаком после запятой.

Порядок такой:

  1. Откройте карточку номенклатуры и найдите блок единиц измерения.
  2. Добавьте единицу «г» с коэффициентом относительно базовой «кг». Коэффициент в 1С задаётся отношением к базовой единице, поэтому уточните по подсказке формы, в какую сторону он считается.
  3. В документах выбирайте в строке товара именно граммы.
  4. Остатки и отчёты продолжат считаться в базовой единице хранения. Точность хранения остаётся прежней, зато вводить и видеть можно мелкие доли.

Минус: количество в базовой единице всё равно хранится с тремя знаками. Пересчёт 0,1 г в килограммы даёт 0,0001, и в остатках это округлится до 0,000. Если мелкие доли должны суммироваться (сотни отгрузок по 0,1 г), смените базовую единицу на граммы, а не только добавляйте вторую.

Для штучных товаров, которые продаются упаковками и поштучно, лучше хранить в штуках, а упаковки оформить как вторую единицу с коэффициентом. Дробные штуки тогда не понадобятся вообще.

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

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

Шаги общие для любой конфигурации (БП 3.0, УТ 11, ERP, самописная):

  1. Сделайте копию информационной базы. Подойдёт выгрузка информационной базы в .dt или копия файла базы.
  2. Откройте базу в Конфигураторе: кнопка «Конфигуратор» в окне запуска 1С.
  3. Если конфигурация на поддержке, включите возможность изменения: Конфигурация → Поддержка → Настройка поддержки, затем разрешите изменение нужных объектов. Это поведёт к ручному объединению при будущих обновлениях.
  4. В дереве метаданных откройте нужный объект. Для документа это ветка «Документы», дальше табличная часть и реквизит «Количество».
  5. В палитре свойств найдите «Тип» и нажмите кнопку выбора. Для числа задайте «Длина» и «Точность», например 15 и 4.
  6. Повторите для ресурсов регистров, в которые попадает это количество, и для связанных реквизитов справочников.
  7. Сохраните конфигурацию: Конфигурация → Обновить конфигурацию базы данных.

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

Что менятьГде искать в деревеЧем рискуете, если пропустить
Реквизит табличной части документаДокументы → документ → Табличные частиДробная часть теряется при вводе
Ресурс регистра накопленияРегистры накопления → ресурсыДробная часть теряется при проведении
Реквизиты справочниковСправочники → реквизитыНормы и минимумы остаются округлёнными
Поля отчётов и макетовОтчёты, схемы компоновки, формыДанные есть, но на экране «нули»

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

Что с длиной

Увеличивая точность, следите за общей длиной. Тип с длиной 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 и печатные формы со старыми макетами обрезают лишнее;
  • 📉 уже записанные движения не уточняются: у них прежняя, округлённая величина. Исправить историю можно только перепроведением документов, а это отдельная операция с последствиями для остатков и себестоимости.

Перед массовым перепроведением оцените объём и сделайте копию. Если документов тысячи, работайте партиями по периодам, начиная с самого раннего.

Варианты, когда трогать конфигурацию не нужно

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

  1. Другая единица хранения. Описана выше: граммы, миллилитры, миллиметры. Самый дешёвый и безопасный вариант.
  2. Укрупнение. Если проблема в том, что нужно учитывать «0,0001 партии», вводите партию как единицу измерения, а не доли.
  3. Дополнительный реквизит или свойство. Для справочной информации (точный вес на штуку) подойдёт дополнительный реквизит номенклатуры типа «Число» с нужной точностью. В учёте он не участвует, зато данные сохраняются и их можно вывести в печатную форму. Включение дополнительных реквизитов делается в настройках раздела администрирования.
  4. Расширение конфигурации . Расширение (с версии платформы 8.3.6) позволяет добавить новые реквизиты и поведение, не трогая типовой код. Но оно не меняет тип уже существующего реквизита основной конфигурации, поэтому для самого «Количества» не подходит.
  5. Обработка пересчёта. Для разовых задач бывает достаточно внешней обработки, которая считает дробные значения и записывает итог в нужные поля.
СпособКогда подходитМинусы
Единица измеренияНужна иная масштабная единицаХранится в базовых единицах
Метаданные в КонфигуратореНужна точность в самой базеРучное объединение при обновлении
Дополнительный реквизитСправочные данныеНе участвует в остатках
Внешняя обработкаРазовые расчётыНужен программист

Как не получить сюрпризов после изменений

Проверяйте не одно поле, а всю цепочку: ввод в документ → проведение → движения регистра → отчёт → печатная форма → обмен. Достаточно одного тестового документа.

Порядок проверки:

Проверка после изменения точности
Выполнено: 0 / 6

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

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

Можно ли увеличить знаки после запятой в пользовательском режиме?
Нет. Точность количества задана типом реквизита и меняется в Конфигураторе. В пользовательском режиме можно только выбрать другую единицу измерения.
Что произойдёт, если ввести больше знаков, чем позволяет реквизит?
Платформа округлит значение до заданной точности и запишет округлённое число. Сообщения об ошибке не будет.
Нужно ли менять точность в регистре, если поменял её в документе?
Да. Иначе при проведении в движения попадёт округлённое значение, и остаток не совпадёт с документом.
Исправятся ли старые документы после смены разрядности?
Нет. Уже записанные значения остаются прежними, уточнятся только новые вводы и перепроведённые документы.
Подойдёт ли расширение для смены типа количества?
Нет. Расширение не изменяет тип существующего реквизита основной конфигурации. Оно годится для добавления нового реквизита с нужной точностью.