Как исправить ошибку округления остатков при продаже товаров в штуках, если базовая единица хранения — упаковка, в 1С:Управление торговлей 11?

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

При работе в программе 1С:Управление торговлей (редакция 11) пользователи часто сталкиваются с неприятной ситуацией: при попытке отгрузить последнюю единицу товара система блокирует проведение документа реализации, сообщая о нехватке микроскопического количества номенклатуры (например, недостаточно товара 0,002 упак.). При этом фактически товар на складе есть, а в информационной базе по отчетам все должно сходиться "в ноль".

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

Выясним причину: почему «кривит» контроль остатков?

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

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

1 штука = 1 / 24 упаковки = 0,0416666... упаковки

Поскольку система физически не может хранить бесконечную простую дробь и ограничена тремя знаками после запятой, происходит округление. Значение 0,041666... округляется по математическим правилам до 0,042.

Теперь посмотрим на примере реальной цепочки продаж, что происходит в регистрах накопления при последовательном списании товара по 1 или несколько штук:

Физически на складе осталась ровно 1 штука (ведь продано было 1+3+1+4+1+3+1+4+5 = 23 штуки из 24). Однако в регистре остатков программы 1С сейчас числится лишь 0,040 упаковки. При попытке провести документ реализации на эту последнюю 1 штуку, программа рассчитывает ее объем в упаковках как 0,042 и сравнивает с текущим остатком в системе. В результате сравнения 0,040 < 0,042 система выдает ошибку проведения: "Недостаточно товара 0,002 упак.".

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


Как решить проблему? Разберем три практических способа

В зависимости от того, в каком периоде возникла проблема, насколько жестко закрыты прошлые периоды и сколько таких карточек заведено в системе, мы можем применить один из трех подходов.

Способ 1. Методологически верный переход на новую карточку номенклатуры (Рекомендуемый)

Самое правильное и надежное решение, которое навсегда избавит от проблем с округлением в будущем — это соблюдение золотого правила методологии 1С: базовой (основной) единицей хранения номенклатуры всегда должна быть самая минимальная единица измерения, в которой возможен учет или продажа товара (в данном случае — штука).

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

  1. Создадим новую карточку номенклатуры. В поле "Единица хранения" обязательно выберем "шт" (штука).
  2. В настройках параметров этой номенклатуры включим использование упаковок. Создадим индивидуальный набор упаковок или выберем общий. Добавим в него упаковку, например, "Коробка (24 шт.)", где укажем коэффициент пересчета — 24. В таком случае коэффициент будет целым числом, и при продаже упаковок система будет просто умножать целое число упаковок на 24 шт. Округления и дробные части в регистре остатков полностью исключаются!
  3. Чтобы менеджеры случайно не выбрали старую ошибочную карточку в новые документы, изменим ее наименование. Добавим в начале названия явный маркер, например: [НЕ ИСПОЛЬЗОВАТЬ] Товар 002. В карточке на вкладке настроек можно также установить флаг "Блокировать продажу".
  4. Теперь нам необходимо перенести текущий физический остаток со старой карточки на новую. Для этого используем документ "Пересортица товаров" (раздел Склад и доставка — Излишки, недостачи, порча).
    • В качестве списываемого товара указываем старую карточку (с базовой единицей "упаковка").
    • В качестве оприходуемого товара указываем новую карточку (с базовой единицей "штука").
    • Проводим документ. Все остатки корректно перейдут на правильную аналитику учета.

Способ 2. Локальное выравнивание остатков («костыль» без перепроведения периодов)

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

  1. Перейдем в настройки склада, с которого оформляется продажа (раздел Склад и доставка — Склады и магазины), либо откроем карточку склада и перейдем по ссылке "Настройка контроля обеспечения".
  2. Временно снимем флаг "Контролировать обеспечение" (или "Контролировать остатки"). Сохраним настройки.
  3. Вернемся к нашей "проблемной" реализации последней штуки и проведем ее. Документ успешно проведется, так как система временно игнорирует нехватку остатков. На складе в этот момент образуется отрицательный остаток в размере погрешности: -0,002 упак.
  4. Чтобы убрать "минус" и выровнять регистры в реальный ноль, создадим документ "Оприходование излишков товаров" (раздел Склад и доставка — Излишки, недостачи, порча — Складские акты). В табличную часть добавим нашу старую номенклатуру, укажем количество 0,002, единицу измерения — упаковка. В качестве статьи доходов выберем статью, связанную с прочими операционными доходами (например, "Доходы от округления").
  5. После проведения оприходования остаток этой номенклатуры на складе станет строго равен 0,000.
  6. Обязательно вернемся в настройки склада и включим обратно флаг "Контролировать обеспечение", чтобы избежать реальных пересортиц по другим товарам в будущем.

Способ 3. Настройка допустимого отклонения в параметрах системы

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

Проанализируем этот функционал. Перейдем в раздел НСИ и администрирование — Настройка НСИ и разделов — Номенклатура. Раскроем группу параметров "Единицы измерения". Здесь присутствует настройка "Допустимое отклонение при автоматическом округлении".

Если мы укажем здесь небольшой процент допустимого отклонения (например, 1% или 2%), то при проведении документов отгрузки мерных или разупакованных товаров система будет пытаться автоматически сглаживать мелкие расхождения, списывая остатки до нуля, если величина недопоставки укладывается в рамки этого процента. Однако стоит учитывать, что в старых релизах конфигурации (например, в УТ 11.4.6) этот механизм не всегда стабильно отрабатывал для штучных товаров с упаковками, поэтому наиболее надежным и рекомендуемым остается именно Способ 1.


Резюме и рекомендации

Подводя итоги нашего анализа, сделаем важные выводы для дальнейшей работы в «1С:Управление торговлей»:

← На главную