В производственном учете на платформе 1С часто возникает ситуация, когда материал поступает в крупных единицах (например, в килограммах), а списывается на одно изделие в микроскопических дозах — 0,001 г или даже меньше. Стандартная разрядность количества в типовых конфигурациях 1С (ERP, УНФ, Бухгалтерия) ограничена 3 знаками после запятой. В этой статье мы подробно разберем, как решить проблему «недостающих знаков», проанализируем технические риски изменения метаданных и рассмотрим лучшие методические практики.
Это самый безопасный и рекомендуемый способ с точки зрения методологии 1С. Суть заключается в том, что в качестве единицы хранения для номенклатуры выбирается самая минимальная единица, которая может встретиться в производстве (например, миллиграмм или грамм). Рассмотрим этот процесс по шагам:
мг. При этом закупки могут продолжаться в кг. В системе настраивается коэффициент пересчета (1 кг = 1 000 000 мг).Приобретение товаров и услуг мы выбираем единицу кг. Система автоматически пересчитает количество, и в регистры накопления (остатки на складах) данные попадут в целых миллиграммах.мг. Это позволяет избежать дробных частей с длинным «хвостом» и гарантирует точность списания до последней частицы материала.Проанализируем ситуацию с точки зрения ERP: если мы используем признак Весовой, то система позволяет гибко оперировать граммами, килограммами и тоннами. Однако важно помнить, что регистр остатков всегда хранит данные в одной базовой единице. Если эта единица — килограмм, то 0,0001 г превратится в 0,000 в учете из-за округления до 3 знаков.
Иногда возникает соблазн просто увеличить точность поля Количество с 3 до 6 знаков. Разберем, почему к этому методу стоит прибегать в последнюю очередь и с какими сложностями мы столкнемся.
Технические риски:
Окр(Количество, 3) в алгоритмах расчета себестоимости, распределения затрат и печати документов. Вам придется найти и переписать все подобные вхождения, иначе «лишние» знаки будут обрезаться в самый ответственный момент.Если мы не хотим менять единицы хранения и не можем править конфигуратор, воспользуемся функционалом кратности в спецификациях. Это стандартный механизм для большинства производственных решений 1С.
Вместо того чтобы указывать расход материала на 1 единицу готовой продукции, мы указываем норму на 100, 1 000 или 10 000 единиц выпуска. Проанализируем пример: Если на 1 деталь расходуется 0,0005 г золотого напыления, мы создаем спецификацию, где количество продукции равно 10 000 шт., а расход материала — 5 г. При запуске производства 10 000 деталей система корректно спишет 5 грамм без единой ошибки округления. Если же нам нужно выпустить 1 шт., система попытается рассчитать долю, и здесь мы снова упремся в лимит 3 знаков, поэтому данный метод лучше всего работает при серийном производстве.
Рассмотрим интересный способ, предложенный участниками обсуждения: разделение одной позиции номенклатуры на две в разных единицах измерения.
Например, на основном складе хранится «Золото (кг)». Перед передачей в производство оформляется документ Комплектация номенклатуры (или Сборка товаров), который списывает 0,1 кг «Золота (кг)» и оприходует 100 000 мг номенклатуры «Золото (мг)».
Такой подход позволяет:
Выясним, как обстоят дела при обмене данными с программами типа «Базис-Мебельщик» или другими CAD-системами. В таких программах точность может достигать 8 знаков. При передаче данных в 1С рекомендуется настраивать агрегацию. Вместо передачи расхода на каждую операцию, мы суммируем весь расход вспомогательных материалов за смену или по всему производственному заказу. Передавая итоговое число (например, расход клея 1.456 кг на 1000 панелей), мы с запасом укладываемся в стандартную точность 1С.
Важно понимать, как платформа 1С работает с числами. Тип Число поддерживает большую точность, но механизмы СЛУ (Системы Линейных Уравнений), используемые в расчете себестоимости ERP, крайне чувствительны к разрядности. При использовании 6 и более знаков в сочетании с очень маленькими суммами возможны ошибки переполнения или некорректного распределения затрат.
Разберем пример кода, который может потребоваться для проверки точности перед списанием, если вы все же решили идти по пути кастомизации:
// Проверка минимально допустимого количества для списания
Процедура ПроверитьТочностьСписания(СтрокаМатериала)
МинимальныйПорог = 0.001; // Стандарт для 3 знаков
Если СтрокаМатериала.Количество < МинимальныйПорог Тогда
Сообщить("Внимание: Количество " + СтрокаМатериала.Материал +
" слишком мало для корректного учета стоимости!");
КонецЕсли;
КонецПроцедуры
Проанализировав все способы, мы можем составить иерархию решений от лучших к худшим:
Окр()).Помните, что учет — это всегда компромисс между математической точностью и стоимостью поддержки этой точности. В случае с копеечными материалами (красители, гальваника, метизы) часто проще списывать их как общепроизводственные расходы (ОПР) раз в месяц по результатам инвентаризации, чем пытаться выстроить поштучный учет микродоз в каждом документе выпуска.