Количество с большим числом знаков после запятой: меняем точность реквизита в 1С
Содержание
Увеличить разрядность количества можно только в Конфигураторе: открываете реквизит типа Число, меняете Длину и Точность, затем обновляете конфигурацию базы данных. В пользовательском режиме эти параметры не меняются. Для типовой конфигурации придётся ещё снять объект с поддержки.
Есть два разных значения слова «разрядность». Если нужно больше знаков после запятой (0,0005 кг вместо 0,001), увеличивают Точность. Если не помещаются большие значения (десятки миллионов штук), увеличивают Длину — общее число цифр. Часто нужно и то, и другое, а ещё надо не забыть про цепочку объектов, через которые проходит количество.
Откуда берётся ограничение
Количество в 1С — не особый тип данных, а обычное число с заданной длиной и точностью. В большинстве типовых конфигураций для количества стоит Число длиной 15 и точностью 3. Это значит: всего 15 цифр, из них 3 после запятой, то есть до 999 999 999 999,999.
Ограничение живёт не в одном месте. Количество «путешествует» между объектами:
- 📄 реквизит табличной части документа (
Товары.Количество); - 📊 ресурс регистра накопления (например, остатки товаров);
- 📚 реквизиты справочников — вес, объём, коэффициент пересчёта единиц;
- 🧾 реквизиты других документов, куда количество копируется (отгрузка из заказа, перемещение);
- 🖨 ячейки печатных форм и настройки формата вывода в отчётах.
Если расширить только один объект, остальные округлят значение до своей точности. Поэтому начинают не с правки, а с инвентаризации.
Какие объекты затронет изменение
Составьте список перед тем, как открывать метаданные. Через конфигуратор это быстро делается поиском по конфигурации: в главном меню Конфигуратора откройте поиск по метаданным и введите имя реквизита. Дополнительно полезно найти все ссылки на нужный реквизит через команду «Найти ссылки на объект» в контекстном меню дерева конфигурации.
Что должно оказаться в списке:
- Документ, где вы вводите количество, и его табличные части.
- Регистры накопления и сведений, в которые документ делает движения.
- Документы-продолжения, куда количество переносится при вводе на основании.
- Справочники с коэффициентами и единицами измерения.
- Отчёты, запросы и обработки, которые считают или округляют количество вручную.
Типичный сюрприз: документ расширили до четырёх знаков, а регистр остался на трёх. Документ проводится без ошибок, но остатки в отчёте расходятся с документом на доли единицы.
Проверка текущих параметров
Откройте реквизит в конфигураторе. В палитре свойств найдите тип: для числа видны Длина, Точность и признак «Неотрицательное». Запишите значения для каждого объекта из списка. Потом выберите единую целевую пару и применяйте её везде одинаково.
Подсказка по выбору. Если вы продаёте металл на тонны и нужна точность до килограмма, три знака после запятой и так хватает. Для сыпучих материалов или химии часто хватает четырёх–пяти. Больше берут редко: длинная дробная часть ухудшает читаемость форм и вызывает расхождения при пересчёте единиц.
Единицы измерения и коэффициенты: где на самом деле теряется точность
Чаще всего проблема не в самом количестве, а в пересчёте. Допустим, товар учитывается в килограммах, а продаётся граммами, или есть упаковка по 12 штук. Коэффициент хранится в справочнике единиц измерения, и у него тоже есть своя точность.
Пример. Упаковка содержит 0,333 кг товара. Продаём 1000 упаковок:
- коэффициент 0,333 → 333,000 кг;
- настоящее значение 0,3333 → 333,300 кг.
Разница 0,3 кг на 1000 упаковок, и она всплывёт при инвентаризации. Исправление — не только увеличить точность количества, но и посмотреть на коэффициент в справочнике единиц и на реквизиты, где хранится вес.
Когда настраиваете меру, придерживайтесь простого правила: количество в базовой единице должно хранить столько знаков, сколько нужно для самой мелкой операции. Если минимальная отгрузка — 5 граммов, то для килограммов нужно три знака, и четвёртый не нужен.
Точность у реквизита количества, у ресурса регистра и у связанных реквизитов. Длину увеличьте на столько же знаков, чтобы не потерять место под целую часть.Длину. Точность оставьте как есть. Проверьте также ширину поля на форме.Технические ограничения платформы
Параметры числа у реквизита ограничены самой платформой. Длина числа не бесконечна, а точность не может превышать длину. Если указать точность, равную длине, под целую часть не останется ни одной цифры. Конфигуратор обычно не даст сохранить заведомо некорректную пару.
Несколько практических моментов:
- ⚖️ Целая часть =
ДлинаминусТочность. Было 15 и 3 — под целую часть 12 цифр. Поднимете точность до 5 при длине 15 — целая часть сократится до 10, и крупные значения перестанут помещаться. - 🗄 Чем больше длина, тем больше места занимает запись в базе. На справочниках и документах это почти незаметно, на больших регистрах накопления — ощутимо.
- 🔢 При делении и умножении платформа использует собственную арифметику, и результат округляется до точности реквизита-получателя. Увеличили точность количества, а цена и сумма остались с двумя знаками — итоговая сумма всё равно считается по правилам округления суммы.
- 📐 У реквизита числового типа можно задать неотрицательность. Если количество допускает возврат или сторно, это ограничение лучше не включать.
Расширение конфигурации не умеет менять тип и параметры числа у уже существующего реквизита. Либо правите саму конфигурацию, либо добавляете в расширении новый реквизит и переносите на него логику. Для количества второй путь обычно сложнее первого.
Процедура изменения в Конфигураторе
Работайте на копии базы. Разработка и проверка идут в тестовой базе, и только потом изменённая конфигурация попадает в рабочую.
Шаг 1. Откройте конфигурацию и снимите ограничения поддержки
- Запустите 1С:Предприятие в режиме
Конфигуратордля тестовой копии. - Откройте дерево конфигурации:
Конфигурация → Открыть конфигурацию. - Если конфигурация типовая, она стоит на поддержке. Откройте окно настройки поддержки (
Конфигурация → Поддержка → Настройка поддержки) и разрешите изменение нужных объектов. Чтобы не терять возможность обновлений, выбирайте режим «Объект поставщика редактируется с сохранением поддержки». Полностью снимать с поддержки не нужно.
Шаг 2. Измените реквизит
- Найдите документ в ветке
Документы, откройте его и перейдите на вкладку «Данные». - Выберите табличную часть и реквизит «Количество», откройте его палитру свойств.
- В поле «Тип» нажмите кнопку с тремя точками, оставьте
Числои задайте новыеДлинуиТочность. - Повторите то же для каждого объекта из списка — ресурс регистра, реквизиты других документов, справочники.
Правило «одна пара — везде» избавляет от округления в цепочке. Например, везде 15 и 3 заменяете на 18 и 5.
Шаг 3. Обновите конфигурацию базы данных
- Нажмите
F7(«Обновить конфигурацию базы данных») или кнопку на панели Конфигуратора. - Платформа покажет структуру изменений. На больших таблицах реструктуризация занимает время: от нескольких секунд на маленькой базе до десятков минут, когда в регистрах миллионы записей.
- Дождитесь завершения и откройте базу в обычном режиме.
Реструктуризация запрещает работу пользователей в базе. Выполняйте её в нерабочее время и только после полной резервной копии. Если работа идёт в клиент-серверном варианте, сделайте копию и средствами СУБД.
Существующие данные: что произойдёт после обновления
Увеличение длины и точности безопасно для уже введённых данных. Было 12,345 — станет 12,34500. Платформа дописывает нулевые знаки, а значения не меняются. Данные удалять и перезагружать не нужно.
Если же вы уменьшаете точность, значения округляются. Так что направление «вниз» делается только после анализа.
Но у «безопасно» есть важная оговорка. Старые документы не знают, что раньше количество было округлено. Если вы вводили 0,0005, а система хранила 0,001, то после расширения старые строки так и останутся с 0,001. Восстановить утерянные знаки можно только повторным вводом или перезаполнением из первоисточника.
Пересчёт остатков и перепроведение
Движения в регистрах пишутся при проведении документа. Если вы расширили точность ресурса регистра, старые записи останутся в прежней точности. Новые документы запишутся с полной. Для сквозного единообразия иногда запускают перепроведение документов за нужный период — штатной обработкой группового перепроведения документов, которую можно найти поиском по командам в разделе администрирования.
Перепроведение — тяжёлая операция. Не запускайте его на всём периоде без необходимости. Обычно хватает документов, где вы реально использовали дробные значения.
Формат вывода: отчёты, формы и печатные документы
Метаданные — только половина дела. Даже если в базе хранится 0,00125, на форме может показываться 0,001. Причина — формат вывода.
Где проверять:
| Место | Что смотреть |
|---|---|
| Поле на форме документа | Свойство поля «Формат» и «Формат редактирования»; число знаков после запятой |
| Колонка таблицы на форме | Те же свойства у колонки |
| Макет печатной формы | Формат ячейки, в которую выводится параметр количества |
| Отчёт на СКД | Оформление ресурса на вкладке настроек, поле «Формат» |
| Код, формирующий текст | Вызовы Формат(Значение, "ЧДЦ=5") и Окр() |
В коде округление часто зашито жёстко. Найдите вызовы Окр( и Формат( рядом с количеством и сравните цифры с новой точностью. Пример корректного вывода с пятью знаками:
Строка = Формат(Количество, "ЧДЦ=5; ЧН=0");
Здесь ЧДЦ задаёт число знаков дробной части, а ЧН — как показывать нулевое значение. Параметры форматной строки ЧДЦ и ЧН стандартные, остальные добавляйте только по документации.
В печатных формах лишние нули после запятой выглядят неряшливо. Если точность 5, а в документе, как правило, встречается целое число, настройте формат ячейки так, чтобы незначащие нули не выводились.
Внешние обмены и печатные формы партнёров
Отдельный риск — всё, что покидает вашу базу. Обмены с другими базами, выгрузки в форматах учётных систем контрагентов, файлы для ЭДО.
- 🔁 Обмен между двумя вашими базами. Параметры числа должны совпасть с обеих сторон. Если в приёмнике точность ниже, значение будет округлено при загрузке.
- 📤 Электронные документы . В форматах ЭДО у количества есть собственные ограничения на число знаков. Данные, не помещающиеся в формат, при формировании обрежутся. Загляните в описание формата вашего оператора.
- 🏭 Интеграция с весами, складскими терминалами и сайтом. Там тоже могут стоять свои ограничения.
Перед включением увеличенной точности в рабочую базу выгрузите тестовый документ через каждый канал и откройте результат.
Если не помогло
Бывает, что вы всё сделали, а поведение прежнее. Проверьте по порядку:
- Применено ли обновление конфигурации базы данных. Без него изменения остаются только в конфигураторе.
- Нет ли у документа формы с полем, у которого формат зафиксирован вручную.
- Не вычисляется ли количество в обработчике проведения или заполнения с явным округлением.
- Не использует ли отчёт промежуточный запрос, где поле приведено к числу фиксированной длины. Это делается выражением
ВЫРАЗИТЬ(... КАК Число(15, 3)), и такая запись тоже обрежет значение. - Тот ли реквизит вы изменили. В документе бывает несколько похожих полей: количество, количество по учёту, количество упаковок.
Если конфигурация обновляется с сервера поставщика, при следующем обновлении платформа сравнит вашу правку с версией поставщика. Объекты, изменённые с сохранением поддержки, при слиянии могут потребовать ручного решения. Запишите, какие объекты вы меняли, чтобы после обновления быстро проверить.