Точность чисел в 1С 8.3: где задаётся разрядность и как её изменить

· 9 мин

Содержание

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

Выбор простой. Нужно хранить больше знаков (цена 0,0035 руб., вес 0,0125 кг) — меняют точность в Конфигураторе. Нужно лишь красиво вывести уже сохранённое число — меняют формат отображения, базу трогать не надо. Ниже разобраны оба пути и места, где копейки теряются чаще всего: валюта, себестоимость, печать.

Как 1С хранит число: длина, точность и почему знаки «пропадают»

Числовой тип в 1С описывается тремя параметрами:

  • 🔢 Длина — сколько всего цифр в числе, вместе с дробной частью. Максимум — 38 цифр.
  • 🎯 Точность — сколько из них после запятой. Не может быть больше длины.
  • ➖ Неотрицательное — флажок, запрещающий ввод чисел меньше нуля.

Пример: тип Число(15, 2) хранит до 13 цифр в целой части и 2 в дробной. Максимальное значение — 9 999 999 999 999,99. Если записать в такой реквизит 125,4567, в базе останется 125,46.

Отсюда главное правило: лишние знаки отбрасываются в момент записи в реквизит. Вернуть их потом нельзя — в базе их просто нет. Поэтому если цена поставщика пришла с четырьмя знаками, а у реквизита «Цена» точность 2, расчёт уже искажён.

Внутри кода точность другая. Переменная во встроенном языке хранит число без ограничения в 2 или 3 знака, пока его не присвоят реквизиту. Деление 100 / 3 даст длинную дробь, и только запись в поле обрежет её до заданной точности.

Как это выглядит в типовых конфигурациях

Что хранитсяТипичная разрядностьНа что влияет
Сумма, НДС2 знакаКопейки в документах и проводках
Количество3 знакаГраммы при учёте в килограммах
Цена2 знакаЦены с долями копейки не сохранятся
Курс валюты4 знакаТочность пересчёта в рубли

Конкретная длина зависит от конфигурации и релиза. Посмотреть её можно в Конфигураторе, открыв нужный реквизит.

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

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

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

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

Одного реквизита мало: цепочка объектов

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

  • 📄 реквизит табличной части документа;
  • 📦 ресурс регистра накопления или сведений, куда документ делает движения;
  • 🧾 реквизиты связанных документов, которые копируют значение при вводе на основании;
  • 🧮 общие модули, где результат округляется функцией Окр() до 2 знаков.

Последний пункт часто забывают. Точность поля увеличили, а в коде пересчёта стоит Окр(Сумма / Количество, 2) — и число снова обрезается.

Типовая конфигурация на поддержке

Если конфигурация на поддержке без возможности изменения, Конфигуратор не даст править типовой реквизит. Придётся включить возможность изменения в Конфигурация → Поддержка → Настройка поддержки. После этого каждое обновление потребует сравнения и объединения конфигураций, а изменённый реквизит придётся проверять заново.

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

Часто проще обойти задачу без доработки. Цену за штуку в 0,0035 руб. удобнее учитывать в тысячах штук: 3,50 руб. за тысячу. Вес 0,0125 кг — в граммах: 12,5 г.

Разрядность в пользовательском режиме: что можно поменять без программиста

В режиме 1С:Предприятие точность хранения изменить нельзя. Зато вывод настраивается гибко, и для многих задач этого хватает.

Отчёты на системе компоновки

Почти все стандартные отчёты в типовых конфигурациях построены на системе компоновки данных (СКД). Количество знаков в колонке меняется через условное оформление:

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

Условие оставьте пустым — тогда формат применится ко всем строкам. Сохраните вариант отчёта, чтобы не настраивать заново.

Формат меняет только отображение. Если в базе количество хранится с тремя знаками, отчёт с форматом «4 знака» покажет четвёртый ноль, а не реальное значение.

Поля формы и сумма в итогах

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

Валюта и курсы: где теряются копейки при пересчёте

Курс валюты в типовых конфигурациях хранится с четырьмя знаками после запятой, вместе с кратностью. Кратность нужна для валют с маленьким курсом: курс 100 единиц валюты удобнее хранить как число с кратностью 100, чем как 0,0123 за единицу.

Сумма в валюте и сумма в рублях — отдельные реквизиты по 2 знака. Пересчёт идёт по формуле:

СуммаРуб = Окр(СуммаВал * Курс / Кратность, 2)

Пример: 1 234,57 USD по курсу 92,4518 при кратности 1. Произведение — 114 138,218726, в рублёвую сумму попадёт 114 138,22. Если в документе стоит другое число, сначала сравните курс в документе с курсом в справочнике валют на дату.

Несколько документов по одному договору, каждый округлённый отдельно, дают расхождение в копейку-две с пересчётом общей суммы. Это не ошибка программы, а результат округления каждой строки. Такие копейки уходят в курсовые разницы при переоценке.

Увеличивать точность курса бессмысленно: курс ЦБ РФ публикуется с четырьмя знаками после запятой, больше данных просто нет.

Себестоимость и материалы: откуда «висящие» копейки

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

Почему так происходит:

  • ⚖️ стоимость списания считается делением суммы на количество, а результат округляется до копеек;
  • 📉 при частичном списании 3 шт. из 7 на 100 руб. получается 42,857…, в движение попадёт 42,86;
  • 🔁 после нескольких списаний остаток копеек расходится с нулём.

Пример с проверкой, если считать каждое списание по средней без корректировки: партия 7 шт. на 100,00 руб. Списали 3 шт. — 42,86 руб., ещё 3 шт. — 42,86 руб., последнюю 1 шт. — 14,29 руб. Итого списано 100,01 руб., остаток по сумме −0,01 при нулевом количестве.

Как это решается в учёте

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

Если копейки всё же висят:

  1. Проверьте, что закрытие месяца выполнено полностью и без ошибок.
  2. Сформируйте оборотно-сальдовую ведомость по счёту с отбором по номенклатуре и складу — найдите позицию с нулевым количеством и ненулевой суммой.
  3. Перепроведите документы списания за период, затем повторите закрытие месяца.
  4. Если остаток остался, спишите его ручной операцией или корректировкой, согласовав с главным бухгалтером.

Материалы в мелких единицах

Для материалов, которые расходуются граммами или миллилитрами, трёх знаков в количестве иногда мало. Решения без доработки:

  • 📏 ведите учёт в более мелкой базовой единице (грамм вместо килограмма);
  • 📦 используйте упаковки или единицы с коэффициентом, если конфигурация их поддерживает: закупка в килограммах, хранение в граммах;
  • 🧮 нормы расхода в спецификациях указывайте на 1 000 изделий, а не на одно.

Форматирование чисел в печатных формах и коде

Печатная форма — это табличный документ, построенный по макету. Количество знаков в нём задаётся двумя способами.

Через свойство ячейки макета

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

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

Через функцию Формат()

В коде заполнения печатной формы число превращают в строку функцией Формат(). Основные параметры форматной строки:

ПараметрЧто делаетПример результата
ЧДЦ=3Число дробных знаков1 250,500
ЧГ=0Отключает разделитель групп1250,50
ЧРД=.Разделитель дробной части1250.50
ЧН=0Что выводить при нуле0 вместо пустой строки

Пример, который выводит цену с четырьмя знаками без пробелов между разрядами:

ЦенаСтрокой = Формат(Цена, "ЧДЦ=4; ЧГ=0");
// Цена = 1250.0035 -> "1250,0035"

Округление для расчётов делают функцией Окр(). Третий параметр задаёт режим для пятёрки:

Окр(2.345, 2, РежимОкругления.Окр15как20); // 2.35 — пятёрка вверх
Окр(2.345, 2, РежимОкругления.Окр15как10); // 2.34 — пятёрка вниз

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

Деление в запросе

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

ВЫРАЗИТЬ(Остатки.СуммаОстаток / Остатки.КоличествоОстаток КАК ЧИСЛО(15, 4)) КАК ЦенаСредняя

Деление на ноль в запросе не вызывает ошибку, как в коде, но результат лучше защитить конструкцией ВЫБОР КОГДА Остатки.КоличествоОстаток = 0 ТОГДА 0 ИНАЧЕ ... КОНЕЦ.

Что именно вам нужно?

Частые вопросы о десятичных знаках в 1С

Можно ли уменьшить точность реквизита, если она избыточна?
Можно, но при обновлении структуры базы значения будут округлены до новой точности. Данные, которые не помещаются в новую длину, могут быть потеряны — сначала проверьте максимальные значения в таблице.
Почему в Excel после сохранения отчёта знаков больше, чем в 1С?
В 1С формат ячейки лишь скрывает знаки, а в файл может уйти исходное значение. Задайте нужную точность в формате ячеек Excel или округлите данные в отчёте.
Сколько максимум знаков после запятой поддерживает 1С?
Длина числа ограничена 38 цифрами, точность не может её превышать. На практике для денег хватает 2 знаков, для курсов — 4, для количества — 3–4.
Повлияет ли увеличение точности цены на суммы в счетах-фактурах?
Сумма в документе по-прежнему округляется до копеек: налоговые документы составляются в рублях и копейках. Меняется только точность промежуточного расчёта цены.
Почему число в поле формы обрезается при вводе?
Поле не даст ввести больше знаков, чем позволяет точность реквизита или формат редактирования элемента формы. Сначала проверьте тип реквизита в Конфигураторе, затем свойство «ФорматРедактирования» поля.