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

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

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

В теории расписаний и исследовании операций эта классическая проблема известна как RCPSP (Resource-Constrained Project Scheduling Problem — задача планирования работ с ограничениями на ресурсы). Несовместимость работ в этой модели описывается через использование так называемых дизъюнктивных (эксклюзивных) ресурсов единичной мощности. Если две работы не могут выполняться параллельно (например, из-за требований техники безопасности, ограниченного пространства или использования одного и того же уникального инструмента), под них выделяется виртуальный неделимый ресурс с емкостью, равной единице. Система планирования физически не сможет распределить этот ресурс на две задачи в один и тот же момент времени.

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

Решение проблемы средствами 1С:ERP Управление предприятием

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

Проанализируем пошагово, как реализовать ограничения на последовательность и совместное выполнение этапов в 1С:ERP:

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

Использование специализированных MES-систем (пооперационное планирование)

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

Выясним, как работает планирование несовместимых операций на уровне пооперационного расписания MES:

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

Рассмотрим ключевые настройки в 1С:MES для реализации нашей задачи:

Математические подходы и интеграция с внешними солверами (оптимизаторами)

При больших объемах данных (десятки тысяч операций в смену) встроенные алгоритмы 1С на встроенном языке могут выполнять расчет расписания достаточно долго. В современной практике автоматизации производственных гигантов применяется гибридный подход: 1С выступает транзакционной системой и хранилищем нормативно-справочной информации, а расчет оптимального расписания передается во внешние математические библиотеки (солверы), такие как Google OR-Tools, Gurobi или OptaPlanner.

Давайте проанализируем, как можно организовать выгрузку данных из 1С во внешний оптимизатор на языке Python через API. Нам необходимо передать список работ, их длительность, связи предшествования и признак несовместимости (общий виртуальный ресурс).

Посмотрим на пример кода на встроенном языке 1С, который формирует JSON-пакет данных для передачи во внешний оптимизатор:


// Функция формирует структуру данных для передачи во внешний математический движок
Функция СформироватьМодельДляРасчетаРасписания(ДокументЗаказ) Экспорт

    МодельДанных = Новый Структура;
    МассивРабот = Новый Массив;
    
    // Выбираем технологические операции по заказу
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ТехнологическиеОперации.Ссылка КАК Ссылка,
        |   ТехнологическиеОперации.Длительность КАК Длительность,
        |   ТехнологическиеОперации.Предок КАК Предок,
        |   ТехнологическиеОперации.ГруппаНесовместимости КАК ГруппаНесовместимости
        |ИЗ
        |   Справочник.ТехнологическиеОперации КАК ТехнологическиеОперации
        |ГДЕ
        |   ТехнологическиеОперации.Владелец = &Заказ";
        
    Запрос.УстановитьПараметр("Заказ", ДокументЗаказ);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        СтруктураРаботы = Новый Структура;
        СтруктураРаботы.Вставить("id", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
        СтруктураРаботы.Вставить("duration", Выборка.Длительность); // Время в минутах
        
        // Указываем технологическую связь (какая работа должна завершиться ранее)
        Если ЗначениеЗаполнено(Выборка.Предок) Тогда
            СтруктураРаботы.Вставить("predecessor", Строка(Выборка.Предок.УникальныйИдентификатор()));
        Иначе
            СтруктураРаботы.Вставить("predecessor", Null);
        КонецЕсли;
        
        // Указываем виртуальный ресурс для моделирования несовместимости
        // Если у двух работ совпадает группа несовместимости, они не могут идти одновременно
        Если ЗначениеЗаполнено(Выборка.ГруппаНесовместимости) Тогда
            СтруктураРаботы.Вставить("exclusive_resource", Строка(Выборка.ГруппаНесовместимости.УникальныйИдентификатор()));
        Иначе
            СтруктураРаботы.Вставить("exclusive_resource", Null);
        КонецЕсли;
        
        МассивРабот.Добавить(СтруктураРаботы);
        
    КонецЦикла;
    
    МодельДанных.Вставить("jobs", МассивРабот);
    
    // Сериализуем данные в формат JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, МодельДанных);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    Возврат СтрокаJSON;

КонецФункции

Полученный JSON-пакет отправляется по HTTP во внешний скрипт, где с помощью библиотеки Google OR-Tools (модуль cp_model) решается задача интервального планирования. Внешний скрипт использует функцию непересечения интервалов AddNoOverlap для всех задач, у которых совпадает параметр exclusive_resource. После расчета расписания готовые даты начала и окончания операций загружаются обратно в 1С.

Альтернативный подход: Методология «Барабан-Буфер-Веревка» (ББВ)

Если точное планирование до секунды на предприятии невозможно из-за высокой изменчивости среды (частые поломки, перебои со снабжением, человеческий фактор), то детальный математический расчет может оказаться неэффективным. В таких случаях мы рекомендуем рассмотреть методологию Барабан-Буфер-Веревка (Drum-Buffer-Rope), которая базируется на Теории ограничений систем (TOC).

Рассмотрим, как организовать данный подход в 1С:ERP:

  1. Определение ключевого ограничения («Барабана»): Мы определяем самый дефицитный рабочий центр или ту самую зону/ресурс, из-за которой работы не могут выполняться одновременно. Этот ресурс объявляется «Барабаном».
  2. Составление расписания только для ограничения: Мы строим детальное, жесткое расписание работы исключительно для этого узкого места. Все остальные работы на предприятии планируются не по точной сетке, а подчиняются ритму «Барабана».
  3. Создание временных буферов: Перед ограничением создается временной «буфер» (запас времени). Это гарантирует, что даже при сдвигах и задержках на некритичных операциях наш ключевой несовместимый ресурс никогда не будет простаивать в ожидании сырья или деталей.
  4. Связывание «Веревкой»: Запуск сырья в производство («веревка») жестко координируется с графиком работы «Барабана». Мы не запускаем новые работы раньше, чем это необходимо для обеспечения буфера перед ограничением. Это предотвращает перегрузку производства и затаривание незавершенной продукцией.

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

Таким образом, выбор инструмента зависит от масштаба вашего предприятия и требуемой точности. Для простых задач вполне достаточно штатных спецификаций и видов рабочих центров в 1С:ERP. Для сложных производств с высокой плотностью операций идеальным выбором станет 1С:MES или интеграция со специализированными математическими солверами.

← На главную