Количество с большим числом знаков после запятой: меняем точность реквизита в 1С

· 10 мин

Содержание

Увеличить разрядность количества можно только в Конфигураторе: открываете реквизит типа Число, меняете Длину и Точность, затем обновляете конфигурацию базы данных. В пользовательском режиме эти параметры не меняются. Для типовой конфигурации придётся ещё снять объект с поддержки.

Есть два разных значения слова «разрядность». Если нужно больше знаков после запятой (0,0005 кг вместо 0,001), увеличивают Точность. Если не помещаются большие значения (десятки миллионов штук), увеличивают Длину — общее число цифр. Часто нужно и то, и другое, а ещё надо не забыть про цепочку объектов, через которые проходит количество.

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

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

Ограничение живёт не в одном месте. Количество «путешествует» между объектами:

  • 📄 реквизит табличной части документа (Товары.Количество);
  • 📊 ресурс регистра накопления (например, остатки товаров);
  • 📚 реквизиты справочников — вес, объём, коэффициент пересчёта единиц;
  • 🧾 реквизиты других документов, куда количество копируется (отгрузка из заказа, перемещение);
  • 🖨 ячейки печатных форм и настройки формата вывода в отчётах.

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

Какие объекты затронет изменение

Составьте список перед тем, как открывать метаданные. Через конфигуратор это быстро делается поиском по конфигурации: в главном меню Конфигуратора откройте поиск по метаданным и введите имя реквизита. Дополнительно полезно найти все ссылки на нужный реквизит через команду «Найти ссылки на объект» в контекстном меню дерева конфигурации.

Что должно оказаться в списке:

  1. Документ, где вы вводите количество, и его табличные части.
  2. Регистры накопления и сведений, в которые документ делает движения.
  3. Документы-продолжения, куда количество переносится при вводе на основании.
  4. Справочники с коэффициентами и единицами измерения.
  5. Отчёты, запросы и обработки, которые считают или округляют количество вручную.

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

Проверка текущих параметров

Откройте реквизит в конфигураторе. В палитре свойств найдите тип: для числа видны Длина, Точность и признак «Неотрицательное». Запишите значения для каждого объекта из списка. Потом выберите единую целевую пару и применяйте её везде одинаково.

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

Единицы измерения и коэффициенты: где на самом деле теряется точность

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

Пример. Упаковка содержит 0,333 кг товара. Продаём 1000 упаковок:

  • коэффициент 0,333 → 333,000 кг;
  • настоящее значение 0,3333 → 333,300 кг.

Разница 0,3 кг на 1000 упаковок, и она всплывёт при инвентаризации. Исправление — не только увеличить точность количества, но и посмотреть на коэффициент в справочнике единиц и на реквизиты, где хранится вес.

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

Что именно у вас не помещается?

Технические ограничения платформы

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

Несколько практических моментов:

  • ⚖️ Целая часть = Длина минус Точность. Было 15 и 3 — под целую часть 12 цифр. Поднимете точность до 5 при длине 15 — целая часть сократится до 10, и крупные значения перестанут помещаться.
  • 🗄 Чем больше длина, тем больше места занимает запись в базе. На справочниках и документах это почти незаметно, на больших регистрах накопления — ощутимо.
  • 🔢 При делении и умножении платформа использует собственную арифметику, и результат округляется до точности реквизита-получателя. Увеличили точность количества, а цена и сумма остались с двумя знаками — итоговая сумма всё равно считается по правилам округления суммы.
  • 📐 У реквизита числового типа можно задать неотрицательность. Если количество допускает возврат или сторно, это ограничение лучше не включать.

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

Процедура изменения в Конфигураторе

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

Шаг 1. Откройте конфигурацию и снимите ограничения поддержки

  1. Запустите 1С:Предприятие в режиме Конфигуратор для тестовой копии.
  2. Откройте дерево конфигурации: Конфигурация → Открыть конфигурацию.
  3. Если конфигурация типовая, она стоит на поддержке. Откройте окно настройки поддержки (Конфигурация → Поддержка → Настройка поддержки) и разрешите изменение нужных объектов. Чтобы не терять возможность обновлений, выбирайте режим «Объект поставщика редактируется с сохранением поддержки». Полностью снимать с поддержки не нужно.

Шаг 2. Измените реквизит

  1. Найдите документ в ветке Документы, откройте его и перейдите на вкладку «Данные».
  2. Выберите табличную часть и реквизит «Количество», откройте его палитру свойств.
  3. В поле «Тип» нажмите кнопку с тремя точками, оставьте Число и задайте новые Длину и Точность.
  4. Повторите то же для каждого объекта из списка — ресурс регистра, реквизиты других документов, справочники.

Правило «одна пара — везде» избавляет от округления в цепочке. Например, везде 15 и 3 заменяете на 18 и 5.

Шаг 3. Обновите конфигурацию базы данных

  1. Нажмите F7 («Обновить конфигурацию базы данных») или кнопку на панели Конфигуратора.
  2. Платформа покажет структуру изменений. На больших таблицах реструктуризация занимает время: от нескольких секунд на маленькой базе до десятков минут, когда в регистрах миллионы записей.
  3. Дождитесь завершения и откройте базу в обычном режиме.

Реструктуризация запрещает работу пользователей в базе. Выполняйте её в нерабочее время и только после полной резервной копии. Если работа идёт в клиент-серверном варианте, сделайте копию и средствами СУБД.

Перед обновлением рабочей базы
Выполнено: 0 / 5

Существующие данные: что произойдёт после обновления

Увеличение длины и точности безопасно для уже введённых данных. Было 12,345 — станет 12,34500. Платформа дописывает нулевые знаки, а значения не меняются. Данные удалять и перезагружать не нужно.

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

Но у «безопасно» есть важная оговорка. Старые документы не знают, что раньше количество было округлено. Если вы вводили 0,0005, а система хранила 0,001, то после расширения старые строки так и останутся с 0,001. Восстановить утерянные знаки можно только повторным вводом или перезаполнением из первоисточника.

Пересчёт остатков и перепроведение

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

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

Формат вывода: отчёты, формы и печатные документы

Метаданные — только половина дела. Даже если в базе хранится 0,00125, на форме может показываться 0,001. Причина — формат вывода.

Где проверять:

МестоЧто смотреть
Поле на форме документаСвойство поля «Формат» и «Формат редактирования»; число знаков после запятой
Колонка таблицы на формеТе же свойства у колонки
Макет печатной формыФормат ячейки, в которую выводится параметр количества
Отчёт на СКДОформление ресурса на вкладке настроек, поле «Формат»
Код, формирующий текстВызовы Формат(Значение, "ЧДЦ=5") и Окр()

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

Строка = Формат(Количество, "ЧДЦ=5; ЧН=0");

Здесь ЧДЦ задаёт число знаков дробной части, а ЧН — как показывать нулевое значение. Параметры форматной строки ЧДЦ и ЧН стандартные, остальные добавляйте только по документации.

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

Внешние обмены и печатные формы партнёров

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

  • 🔁 Обмен между двумя вашими базами. Параметры числа должны совпасть с обеих сторон. Если в приёмнике точность ниже, значение будет округлено при загрузке.
  • 📤 Электронные документы . В форматах ЭДО у количества есть собственные ограничения на число знаков. Данные, не помещающиеся в формат, при формировании обрежутся. Загляните в описание формата вашего оператора.
  • 🏭 Интеграция с весами, складскими терминалами и сайтом. Там тоже могут стоять свои ограничения.

Перед включением увеличенной точности в рабочую базу выгрузите тестовый документ через каждый канал и откройте результат.

Если не помогло

Бывает, что вы всё сделали, а поведение прежнее. Проверьте по порядку:

  1. Применено ли обновление конфигурации базы данных. Без него изменения остаются только в конфигураторе.
  2. Нет ли у документа формы с полем, у которого формат зафиксирован вручную.
  3. Не вычисляется ли количество в обработчике проведения или заполнения с явным округлением.
  4. Не использует ли отчёт промежуточный запрос, где поле приведено к числу фиксированной длины. Это делается выражением ВЫРАЗИТЬ(... КАК Число(15, 3)), и такая запись тоже обрежет значение.
  5. Тот ли реквизит вы изменили. В документе бывает несколько похожих полей: количество, количество по учёту, количество упаковок.

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

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