Как решить проблему «Обнаружено нулевое количество при пересчете в единицу хранения» в 1С:УТ 11 при продаже в малых единицах?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с конфигурацией «1С:Управление торговлей» версии 11 (а также в 1С:ERP и 1С:КА) пользователи часто сталкиваются с ситуацией, когда необходимо реализовать товар в очень малых дозах. Типичный пример: основная единица хранения — килограмм (кг), а продажа осуществляется в граммах или даже долях грамма (например, 0,25 г). При попытке провести такой документ система выдает критическую ошибку: «Обнаружено нулевое количество при пересчете в единицу хранения». В этой статье мы разберем природу этого ограничения и рассмотрим пошаговые методы его преодоления.

Выясняем причину возникновения ошибки

Для начала проанализируем ситуацию с технической точки зрения. В платформе 1С:Предприятие 8 для большинства числовых ресурсов (включая количество в регистрах накопления) по умолчанию используется точность 3 знака после запятой. Это означает, что система физически не может хранить или обрабатывать число в остатках, которое меньше 0,001.

Давайте проведем расчет на примере из темы форума:

  1. Базовая единица хранения в карточке Номенклатура — килограмм (кг).
  2. Пользователь пытается продать 0,25 грамма.
  3. Для списания со склада система обязана пересчитать это количество в базовую единицу: 0,25 г / 1000 = 0,00025 кг.
  4. Поскольку точность ограничена тремя знаками, число 0,00025 округляется до 0,000.
  5. Программа видит, что в «главной» единице измерения списывать нечего, и блокирует проведение документа, чтобы не допустить некорректных записей в регистрах.

Важно понимать, что создание дополнительной единицы измерения (упаковки) с типом «Разупаковка» и коэффициентом 0,001 ситуацию не исправит, если итоговый результат пересчета в базовую единицу все равно остается меньше 0,001. Система всегда «приземляет» расчеты к единице хранения.

Решение 1: Смена единицы хранения (базовой единицы)

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

Рассмотрим алгоритм действий:

  1. Выясняем минимально возможный квант продажи. Если это 0,25 г, то единицей хранения должен быть либо Грамм (тогда 0,25 г будет записано как 0,250 — это проходит по точности), либо Миллиграмм.
  2. Помним, что 1С запрещает менять единицу хранения в карточке Номенклатура, если по ней уже есть движения (документы).
  3. Если движений еще нет, просто меняем реквизит. Если движения есть, у нас два пути:

Путь А: Создание новой карточки номенклатуры. Это наиболее «чистый» метод. Мы создаем новый товар «Товар (в граммах)», устанавливаем базовую единицу «гр.», а килограммы добавляем как Упаковку с коэффициентом 1000. После этого необходимо перенести остатки со старой карточки на новую документом Сборка (разборка) товаров или через инвентаризацию (списание/оприходование).

Путь Б: Групповое изменение реквизитов. Рассмотрим вариант для опытных пользователей. С помощью обработки Групповое изменение реквизитов можно принудительно изменить единицу хранения. Внимание: это действие приведет к тому, что все прошлые документы станут неверными (10 кг превратятся в 10 г), поэтому этот метод допустим только в паре с полной корректировкой остатков на текущую дату и пониманием, что исторические отчеты «поплывут».

Решение 2: Использование упаковок и наборов

Если вам нужно продавать фиксированные малые дозы, разберем вариант с упаковками. В 1С:УТ 11 можно настроить индивидуальные упаковки для номенклатуры.

Если мы создадим упаковку «Доза 0,25г» для товара, хранящегося в килограммах, мы все равно столкнемся с ошибкой округления при проведении. Однако, если изменить логику и сделать базовой единицей Грамм, то мы сможем легко создавать упаковки любого размера:

Решение 3: Программная кастомизация точности

Рассмотрим радикальный метод, который часто обсуждается в сообществе 1С-программистов, но редко рекомендуется к внедрению — изменение точности в конфигураторе. Можно изменить формат числа в ОпределяемыеТипы (например, Количество или КоличествоКнижное), увеличив точность с 3 до 5 или 6 знаков.

Проанализируем риски этого решения:

  1. Обновления: При каждом обновлении типовой конфигурации вам придется вручную контролировать, не сбросились ли настройки точности в регистрах и документах.
  2. Интерфейс: Вам придется вручную менять макеты печатных форм (ТОРГ-12, Счет-фактура), иначе в печать все равно будет выводиться 3 знака, что приведет к расхождениям с электронными данными.
  3. Расчет себестоимости: Алгоритмы партионного учета и распределения затрат в 1С оптимизированы под стандартную точность. Изменение разрядности может привести к накоплению копеечных остатков, которые система не сможет «закрыть» автоматически.

Рекомендация по внедрению

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

  1. Проверьте, является ли продажа в 0,25 г разовой акцией или постоянной практикой.
  2. Если это постоянная практика — единственным верным решением будет создание новой номенклатуры с базовой единицей «Грамм».
  3. Зайдите в раздел НСИ и калькуляция -> Номенклатура.
  4. Создайте товар, укажите в поле «Единица хранения» — «гр».
  5. Перейдите по гиперссылке «Упаковки» в карточке товара. Создайте упаковку «кг» с коэффициентом 1000.
  6. При оформлении Заказа клиента или Реализации товаров и услуг выбирайте этот товар. Теперь при вводе количества 0,25 система сохранит его корректно, так как 0,250 грамма полностью укладывается в стандартную точность 1С.

Посмотрим на пример логики пересчета в коде, который может использовать система при проведении (упрощенно):


// Пример логики пересчета количества в базовую единицу
КоличествоВЕдиницахХранения = Округлить(КоличествоВДокументе * КоэффициентУпаковки, 3);
Если КоличествоВЕдиницахХранения = 0 И КоличествоВДокументе > 0 Тогда
    ВызватьИсключение "Обнаружено нулевое количество при пересчете!";
КонецЕсли;

Как мы видим из этого примера, именно функция Округлить(..., 3) является «бутылочным горлышком». Поэтому правильная настройка нормативно-справочной информации (НСИ) — это залог отсутствия ошибок в учете без вмешательства в программный код системы.

Подведем итог: Всегда выбирайте в качестве единицы хранения ту величину, которая позволит записывать минимальную партию отгрузки с точностью не более 3-х знаков после запятой. Если вы торгуете золотом или высокоточными химикатами — используйте миллиграммы. Если торгуете металлом, но иногда продаете по 100 грамм — используйте килограммы. Но никогда не пытайтесь продать 0,0001 часть от базовой единицы.

← На главную