Больше разрядов в дробной части: числа, суммы и коэффициенты в 1С

· 9 мин

Содержание

Частая ошибка: в поле вводят 0,0075, а программа показывает 0,01. Кажется, что 1С «округлила» значение. На деле она просто не умеет хранить больше знаков, чем задано в типе реквизита. Формат вывода тут вторичен.

Знаки после запятой зависят от двух разных настроек. Первая — точность типа «Число» в метаданных: сколько разрядов база физически хранит. Вторая — формат отображения: сколько из хранимых разрядов показать на экране или в печатной форме. Увеличить показ можно без разработчика. Увеличить хранение можно только в Конфигураторе.

Где теряются разряды: хранение, показ и расчёт

Любое число в 1С — это тип Число с двумя параметрами: длина (всего цифр) и точность (цифр после запятой). Запись «15,2» значит: до 15 цифр всего, из них 2 после запятой, значит 13 до запятой.

Потеря знаков возможна на трёх этапах:

  • 📦 Хранение. Реквизит документа или ресурс регистра имеет точность 2. Всё, что дальше второго знака, отбрасывается при записи с округлением.
  • 🖥️ Показ. Поле формы или колонка отчёта выводит меньше знаков, чем есть в данных. Сумма в базе 1,2345, на экране 1,23.
  • 🧮 Расчёт. Промежуточный результат в коде или в отчёте округлили функцией Окр() раньше времени, и итог разошёлся.

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

СимптомГде причинаЧто менять
В карточке ввели 0,0075, после записи 0,01Точность реквизитаТип в Конфигураторе
Данные в базе точные, на экране округленоФормат поля или колонкиФормат вывода
Отчёт показывает 0,00, а в документах есть значенияФормат колонки или группировкаНастройки отчёта
Итог не бьётся с суммой строк на копейкиПорядок округленияЛогика расчёта

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

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

Сначала сделайте резервную копию базы . Изменение типа реквизита перестраивает таблицы, а при уменьшении точности лишние знаки теряются безвозвратно.

Шаги для реквизита или ресурса

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

Увеличивая точность, не уменьшайте целую часть. Было 15,2 (13 цифр до запятой). Если поставить 10,6, целая часть сузится до 4 цифр, и крупные суммы перестанут помещаться. Правильно — повышать длину на столько же, на сколько добавляете знаков: 17,4 или 19,6.

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

Что произойдёт с данными

Платформа перестраивает таблицы базы. Уже записанные значения сохраняются: число 12,50 останется 12,5000. Новые знаки появятся только в тех записях, которые вы введёте или перезапишете после изменения.

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

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

Если в базе знаков достаточно, а на экране их нет, разработчик не нужен. Формат задаётся в трёх местах.

В форме документа или справочника

В Конфигураторе откройте форму, выделите поле и в его свойствах найдите Формат (и при необходимости Формат редактирования). Нажмите кнопку выбора и в диалоге задайте количество знаков после запятой. Например, значение ЧДЦ=4 показывает четыре знака.

Пользователь в режиме «1С:Предприятие» тоже может влиять на показ: во многих списках колонки настраиваются через команду смены состава и вида колонок в меню Ещё. Какие именно параметры там доступны, зависит от формы и версии.

В отчёте на СКД

Для отчётов на системе компоновки данных формат задаётся в настройках оформления поля:

  1. Откройте вариант отчёта в режиме настройки (кнопка с шестерёнкой или Ещё → Изменить вариант отчёта).
  2. Перейдите на закладку структуры, выберите колонку-ресурс и откройте условное оформление или параметры поля.
  3. В свойстве Формат задайте строку вида ЧДЦ=4.

Для типовых отчётов это работает на уровне варианта пользователя, без правки конфигурации.

В печатных формах и макетах

В макете табличного документа выделите ячейку, откройте её свойства и укажите формат на закладке с форматом. Для параметров макета вида «Число» можно ничего не менять, если вы выводите значение через Формат() в коде (о нём ниже).

Показ не создаёт знаков, которых нет. Если в базе лежит 3,14, формат ЧДЦ=6 покажет 3,140000, но точнее число не станет.

Валюта и деньги: где лишние знаки вредят

С денежными суммами логика обратная: чаще нужно не увеличить, а удержать две цифры. Но есть места, где повышенная точность оправдана.

  • 💱 Курсы валют. Курс хранится с четырьмя знаками (для редких валют бывает шесть) вместе с кратностью. Типовой регистр сведений курсов это уже учитывает.
  • 🏷️ Цены. Цена за единицу может иметь больше двух знаков, если товар продаётся тысячами (гвозди, крепёж). Тогда сумма строки всё равно округляется до копеек.
  • 📊 Ставки и проценты. Проценты скидок и надбавок часто хранят с тремя-четырьмя знаками.

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

Пример. Цена 0,1234 ₽ за штуку, количество 10 000 штук:

  • без промежуточного округления: 0,1234 × 10 000 = 1 234,00 ₽;
  • если цену сначала округлить до двух знаков (0,12), получится 0,12 × 10 000 = 1 200,00 ₽.

Расхождение 34 рубля в одной строке. Поэтому цену с четырьмя знаками нужно хранить именно с четырьмя.

Производственный учёт: нормы, коэффициенты и единицы

В производстве и закупках знаков после запятой требуется больше всего:

  • ⚙️ Нормы расхода. Три грамма краски на изделие — 0,003 кг. При точности 2 это превратится в 0,00.
  • 📏 Коэффициенты единиц измерения. Пересчёт штук в килограммы или метры даёт дробные коэффициенты.
  • 🧪 Количество в спецификациях. Расход на единицу продукции часто меньше сотой доли.

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

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

МетодКогда подходитРиск
Смена единицы измеренияНе хватает 1–3 знаков в количествеНужно пересчитать нормы и остатки
Увеличение точности типаЗнаки нужны везде в цепочкеРеструктуризация, расхождения с обновлениями
Только формат выводаДанные в базе уже точныеНет, но и точнее не станет

Округление в коде: Окр, Формат и порядок действий

Если вы пишете обработку или расширение, держите в голове три функции.

Окр(Число, Разрядность, РежимОкругления) округляет значение. Разрядность — число знаков после запятой:

Результат = Окр(Цена * Количество, 2);

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

Сообщение = "Расход на изделие: " + Формат(Норма, "ЧДЦ=4; ЧГ=0");

Параметр ЧГ=0 убирает разделитель групп разрядов, если он не нужен.

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

// Верно: одно округление в конце
Сумма = Окр(Цена * Количество * (1 - СкидкаПроцент / 100), 2);

// Неверно: промежуточное округление накапливает ошибку
Сумма = Окр(Цена * Количество, 2) - Окр(Цена * Количество * СкидкаПроцент / 100, 2);

Второй вариант иногда даёт копейку расхождения с первым, потому что округляются два числа вместо одного.

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

Деление в запросе делайте осторожно: результат ЧИСЛО(15, 2) на делении обрежет знаки. Приводите выражение к нужной точности явно.

Что проверить перед правкой типа

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

  • ❓ Нельзя ли обойтись другой единицей измерения? Граммы вместо килограммов часто решают задачу за пять минут.
  • ❓ Точно ли знаки теряются в базе, а не на экране? Откройте запись и сравните с форматом поля.
  • ❓ Кто ещё читает это число? Обмены с другими базами, выгрузки в файлы и внешние отчёты могут ждать прежнюю точность. Если принимающая сторона хранит два знака, лишние разряды она отбросит.
  • ❓ Есть ли свежая копия базы и тестовая площадка? Сначала правка и проверка на копии, потом рабочая база.

Мини-кейс. Склад получает заклёпки, учёт ведётся в килограммах, норма на изделие — 2 грамма. В поле норма значение 0,002, но реквизит хранит два знака, и в базе оказывается 0,00. Вместо правки типа в трёх документах и двух регистрах завели единицу «грамм» с коэффициентом 0,001 к килограмму и ввели норму 2. Остатки по-прежнему ведутся в килограммах, а расход считается верно.

Если суммы расходятся на копейки

Расхождение в 1–2 копейки между документом и отчётом, между строкой и итогом, между учётом и регламентированным отчётом почти всегда связано с округлением. Порядок проверки такой:

  1. Найдите документ с расхождением и сравните сумму строк с итогом по документу.
  2. Проверьте точность реквизитов цены, количества и суммы. Если цена с четырьмя знаками, а сумма строки с двумя, расчёт идёт через округление.
  3. Посмотрите, где считается итог: по строкам или по общему выражению. Это разные способы, и копейка набегает на длинных таблицах.
  4. Сравните формат колонки в отчёте с точностью данных. Иногда отчёт показывает округлённое, а суммирует точное: визуально не бьётся, на деле всё верно.
Диагностика: выберите симптом

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

Можно ли увеличить знаки в типовой конфигурации без разработчика?
Показ — да, через формат поля или колонки отчёта. Хранение — только в Конфигураторе, и после снятия с поддержки каждое обновление придётся объединять с доработкой.
Что будет с уже введёнными данными после увеличения точности?
Они сохранятся без изменений. Недостающие знаки заполнятся нулями, а новые значения запишутся с повышенной точностью.
Какую длину задавать, если добавляю два знака?
Добавьте те же два разряда к общей длине. Было 15,2 — ставьте 17,4, чтобы целая часть не уменьшилась.
Почему в отчёте нули, хотя в документах числа есть?
Колонка отчёта выводит меньше знаков, чем нужно для малых значений. Увеличьте формат колонки до ЧДЦ=3 или ЧДЦ=4.
Нужно ли после правки типа перезапускать сеансы?
Пользователям нужно закрыть и заново открыть базу, чтобы подхватить новую структуру. Обновление конфигурации базы данных проводят, когда в ней никого нет.