Почему в 1С штуки могут быть дробными и как правильно организовать учет неделимых товаров

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

При работе в программах 1С пользователи и бухгалтеры нередко задаются вопросом: почему система позволяет вводить и списывать штучный товар (код по ОКЕИ 796) с точностью до тысячных долей (например, 0.333 или 1.500 шт)? С точки зрения бытовой логики штука неделима: нельзя продать половину табурета или четверть смартфона. Однако в учетной системе такое поведение обусловлено как технической архитектурой платформы, так и требованиями гибкости бизнес-процессов. Разберем детально, почему так устроена платформа 1С, с какими рисками сопряжено использование дробных штук и как грамотно настроить учет неделимых позиций.

Технические причины: как 1С хранит количество

Рассмотрим внутреннюю архитектуру типовых конфигураций и платформы 1С:Предприятие. В СУБД структура таблиц документов и регистров накопления формируется на этапе создания метаданных конфигурации:

  1. Фиксированная разрядность числовых полей. Реквизиты табличных частей документов и ресурсы регистров остатков (например, поле Количество) создаются с жестко заданной точностью, чаще всего Число(15, 3). В рамках одной и той же таблицы хранятся записи по разным товарным позициям: и весовым (килограммы, тонны), и объемным (литры, кубические метры), и штучным. Платформа не может на уровне схемы базы данных динамически менять число десятичных знаков в зависимости от выбранной единицы измерения.
  2. Единица измерения как справочник, а не примитивный тип. Классификатор ОКЕИ в 1С является ссылочным справочником. Для системы значение «шт» (код 796) — это дополнительный информационный реквизит строки, а не математическое ограничение. Платформа обрабатывает числовое значение количества в регистрах стандартными математическими операциями, не накладывая ограничений целочисленности по умолчанию.

Бизнес-логика: делимость как свойство предмета, а не единицы

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

  1. Распаковка и деление потребительской тары. Если товар поступает в заводской упаковке (например, коробка лекарств на 30 таблеток, учитываемая как 1 штука), а клиенту требуется приобрести лишь один блистер из трех, возникает необходимость отразить расход 0.333 шт или 0.334 шт.
  2. Строительные и производственные материалы. При списании на затраты кирпича (поставляемого поддонами или штуками) бой или половинки при кладке нередко фиксируются долями от базовой единицы.
  3. Корректировки взаиморасчетов и онлайн-кассы. При распределении сложных скидок, расчете частичных предоплат или оформлении чеков коррекции дробные доли количества иногда применяются для выравнивания позиций и сумм НДС.

Таким образом, делимость — это свойство конкретного физического объекта, а не самой единицы измерения «штука».

Риски и проблемы использования дробных штук

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

  1. Копеечные расхождения и погрешности округления. Расчет по формуле Сумма = Количество * Цена при нецелом количестве часто дает бесконечные или периодические дроби. При округлении до копеек возникают погрешности в суммах НДС и стоимости списания себестоимости.
  2. Ошибки фискализации и чеков ККТ. Согласно форматам фискальных документов (ФФД), мера количества (тег 2108) и реквизиты предмета расчета для штучных позиций требуют корректной передачи данных. Несоответствие единицы и признака предмета расчета может вызвать отказ драйвера ККТ.
  3. Ошибки систем маркировки («Честный ЗНАК»). Для маркированных штучных товаров код DataMatrix уникален и нанесен на неделимую потребительскую упаковку. Попытка продать или списать 0.5 шт маркированного товара приводит к отклонению чека и сбоям валидации данных в системе маркировки.

Методики правильной организации учета неделимых товаров

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

  1. Правило минимальной неделимой базовой единицы. В карточке номенклатуры в качестве базовой единицы измерения всегда указывается минимальный неделимый элемент (например, не коробка, а таблетка или штука изделия).
  2. Использование механизма упаковок. Для крупных партий создаются упаковки (например, «Блистер 10 шт.», «Коробка 30 шт.») с соответствующими коэффициентами пересчета к базовой единице. В документах поступления и отгрузки менеджер выбирает удобную упаковку, а в остаточных регистрах накопления количество всегда хранится в целых базовых единицах.
  3. Документы комплектации и разукомплектации. Если необходимо разделить крупную штучную позицию на части, оформляется разукомплектация. Исходная номенклатура («Канистра 60 л», 1 шт.) списывается, а взамен приходуется новая позиция («Бензин», 60 литров).

Программный контроль неделимости единиц в 1С

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

Проанализируем пример проверки табличной части документа в событии ОбработкаПроверкиЗаполнения модуля объекта:


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    
    Для Каждого Стр Из Товары Цикл
        // Проверяем наличие единицы измерения "шт" (код 796)
        Если Стр.ЕдиницаИзмерения.Код = "796" Тогда
            // Проверяем наличие дробной части числа через остаток от деления
            Если (Стр.Количество % 1) <> 0 Тогда
                ТекстСообщения = СтрШаблон(
                    "В строке № %1 для товара ""%2"" указано дробное количество: %3. Штучный товар не может быть дробным!",
                    Стр.НомерСтроки,
                    Стр.Номенклатура,
                    Стр.Количество
                );
                
                ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
                    ТекстСообщения,
                    ,
                    СтрШаблон("Товары[%1].Количество", Стр.НомерСтроки - 1),
                    "Объект"
                );
                
                Отказ = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Для блокировки ввода дробных чисел непосредственно на уровне интерфейса формы можно динамически управлять свойством Формат или параметром ЧДЦ (число дробных цифр) элемента формы:


&НаКлиенте
Процедура ТоварыЕдиницаИзмеренияПриИзменении(Элемент)
    
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Если выбраны штуки, запрещаем ввод десятичных знаков в колонке
    Если ПолучитьКодЕдиницы(ТекущиеДанные.ЕдиницаИзмерения) = "796" Тогда
        Элементы.ТоварыКоличество.Формат = "ЧДЦ=0";
    Иначе
        Элементы.ТоварыКоличество.Формат = "ЧДЦ=3";
    КонецЕсли;
    
КонецПроцедуры

Таким образом, архитектурная гибкость 1С позволяет хранить любые дробные значения, а задача разработчика и аналитика — выстроить правильную структуру единиц измерения и при необходимости ограничить ввод нецелых чисел встроенными механизмами валидации.

← На главную