Как правильно рассчитать количество целых единиц материала при дробном потреблении?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Промышленность, строительство и АПК
← На главную

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

Разбор сути проблемы

Представим, что у нас есть список продукции, на производство каждой единицы которой требуется, например, 0,387 листа фанеры. Если мы просто суммируем это значение для всех изделий в задании, мы теряем возможность эффективно использовать «хвосты» материала. Задача заключается в том, чтобы найти минимальное количество целых листов, необходимое для покрытия всей потребности, учитывая возможность использования остатков от одной операции для выполнения другой.

Решение через расчетную формулу

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


Для Каждого СтрокаТаблицы Из ТабличнаяЧасть Цикл
    // Вычисляем количество целых листов, учитывая потребность
    СтрокаТаблицы.ИтогоКол = Цел(СтрокаТаблицы.Количество * СтрокаТаблицы.КоличествоЗадания) + 1;
КонецЦикла;

Этот метод эффективно работает, если материал полностью взаимозаменяем и мы рассматриваем каждую номенклатурную позицию отдельно. Однако помните, что этот подход является «жадным» и не всегда дает математически идеальный результат для сложных сборок.

Оптимизация через сводные таблицы

Если задача требует более глубокого анализа по нескольким аналитикам (например, учет по складам или характеристикам), воспользуемся методом копирования и свертки данных. Это позволит нам сгруппировать потребности перед расчетом:


УникальныеКолонки = "Номенклатура, Характеристика";
СводнаяТаблица = ТабличнаяЧасть.Скопировать(, УникальныеКолонки);
СводнаяТаблица.Свернуть(УникальныеКолонки);

Для Каждого Запись Из СводнаяТаблица Цикл
    СтруктураПоиска = Новый Структура(УникальныеКолонки, Запись.Номенклатура, Запись.Характеристика);
    СтрокиАналитик = ТабличнаяЧасть.НайтиСтроки(СтруктураПоиска);
    // Здесь мы можем реализовать алгоритм суммирования остатков
    Для Каждого СтрокаИзСписка Из СтрокиАналитик Цикл
        // Дополнительная логика обработки
    КонецЦикла;
КонецЦикла;

Перспективы развития: задача раскроя

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

Рассмотрим рекомендации по усложнению системы:

  1. Алгоритм First Fit Decreasing (FFD): Сортируйте все потребности по убыванию объема. Последовательно размещайте каждую деталь в текущий лист, пока не исчерпается полезная площадь, и только затем переходите к следующему листу.
  2. Учет габаритов: Если материал имеет фиксированную форму, вам потребуется специализированный алгоритм для 2D-раскроя. В платформе 1С это реализуется либо через собственные сложные модули, либо через интеграцию со сторонними CAD/CAM системами.
  3. Математическое программирование: Для высокозатратных производств целесообразно использовать внешние решатели (солверы), которые находят глобальный минимум используемого материала, что позволяет экономить значительные средства на сырье.

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

← На главную