При работе в программах 1С пользователи и бухгалтеры нередко задаются вопросом: почему система позволяет вводить и списывать штучный товар (код по ОКЕИ 796) с точностью до тысячных долей (например, 0.333 или 1.500 шт)? С точки зрения бытовой логики штука неделима: нельзя продать половину табурета или четверть смартфона. Однако в учетной системе такое поведение обусловлено как технической архитектурой платформы, так и требованиями гибкости бизнес-процессов. Разберем детально, почему так устроена платформа 1С, с какими рисками сопряжено использование дробных штук и как грамотно настроить учет неделимых позиций.
Рассмотрим внутреннюю архитектуру типовых конфигураций и платформы 1С:Предприятие. В СУБД структура таблиц документов и регистров накопления формируется на этапе создания метаданных конфигурации:
Количество) создаются с жестко заданной точностью, чаще всего Число(15, 3). В рамках одной и той же таблицы хранятся записи по разным товарным позициям: и весовым (килограммы, тонны), и объемным (литры, кубические метры), и штучным. Платформа не может на уровне схемы базы данных динамически менять число десятичных знаков в зависимости от выбранной единицы измерения.Проанализируем практические ситуации, когда дробление штучного товара действительно необходимо в учете:
0.333 шт или 0.334 шт.Таким образом, делимость — это свойство конкретного физического объекта, а не самой единицы измерения «штука».
Несмотря на техническую допустимость, бесконтрольный ввод дробных количеств для штучных товаров порождает серьезные учетные проблемы:
Сумма = Количество * Цена при нецелом количестве часто дает бесконечные или периодические дроби. При округлении до копеек возникают погрешности в суммах НДС и стоимости списания себестоимости.0.5 шт маркированного товара приводит к отклонению чека и сбоям валидации данных в системе маркировки.Разберем стандартные методические решения, позволяющие вести учет корректно без появления некорректных дробей в регистрах:
таблетка или штука изделия).Если требуется гарантировать, чтобы пользователи не вводили дробные значения для номенклатуры со штучными единицами измерения, настроим программный контроль в конфигурации.
Проанализируем пример проверки табличной части документа в событии ОбработкаПроверкиЗаполнения модуля объекта:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Для Каждого Стр Из Товары Цикл
// Проверяем наличие единицы измерения "шт" (код 796)
Если Стр.ЕдиницаИзмерения.Код = "796" Тогда
// Проверяем наличие дробной части числа через остаток от деления
Если (Стр.Количество % 1) <> 0 Тогда
ТекстСообщения = СтрШаблон(
"В строке № %1 для товара ""%2"" указано дробное количество: %3. Штучный товар не может быть дробным!",
Стр.НомерСтроки,
Стр.Номенклатура,
Стр.Количество
);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстСообщения,
,
СтрШаблон("Товары[%1].Количество", Стр.НомерСтроки - 1),
"Объект"
);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для блокировки ввода дробных чисел непосредственно на уровне интерфейса формы можно динамически управлять свойством Формат или параметром ЧДЦ (число дробных цифр) элемента формы:
&НаКлиенте
Процедура ТоварыЕдиницаИзмеренияПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
// Если выбраны штуки, запрещаем ввод десятичных знаков в колонке
Если ПолучитьКодЕдиницы(ТекущиеДанные.ЕдиницаИзмерения) = "796" Тогда
Элементы.ТоварыКоличество.Формат = "ЧДЦ=0";
Иначе
Элементы.ТоварыКоличество.Формат = "ЧДЦ=3";
КонецЕсли;
КонецПроцедуры
Таким образом, архитектурная гибкость 1С позволяет хранить любые дробные значения, а задача разработчика и аналитика — выстроить правильную структуру единиц измерения и при необходимости ограничить ввод нецелых чисел встроенными механизмами валидации.