Как динамически пропустить этапы производства в 1С:ERP Управление предприятием 2?

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

В мире современного производства, особенно когда речь идет об изготовлении изделий с высокой степенью кастомизации, таких как стеклянные изделия с различными характеристиками, одной из наиболее актуальных задач становится гибкое управление производственными этапами. Представим ситуацию: мы производим стеклянные изделия, начиная с листа стекла, который нарезается по размеру — здесь поможет обработка оптимизации раскроя листовых материалов в 1С. Далее, в зависимости от требований конкретного заказа, к изделию применяются различные операции — закаливание, наклейка пленки, сверление отверстий и так далее. Каждая такая операция представляет собой отдельный этап производства, который должен быть выполнен строго в определенной последовательности. Однако не все этапы нужны для каждого заказа.

Например, клиент может заказать стекло без фацетирования, сверления или полировки. В таком случае соответствующие этапы должны быть пропущены, а производство должно идти по скорректированному маршруту, например: Резка по размеру -> Фрезерование -> Обработка кромки -> Закалка. При этом необходимо, чтобы полуфабрикат, произведенный на предыдущем этапе, корректно передавался следующему за пропущенным этапом. Классический подход к формированию спецификаций в 1С:ERP подразумевает статичное описание всех этапов. Но при десятках возможных параметров и сотнях их комбинаций создание отдельных спецификаций для каждого варианта становится невыполнимой задачей.

В этом руководстве мы рассмотрим, как можно организовать динамический пропуск этапов производства в 1С:ERP Управление предприятием 2 (версия 2.5.17.74 и выше), используя как штатные механизмы системы, так и возможности для программных доработок. Наша цель — обеспечить, чтобы этапы, неактуальные для конкретного заказа, не создавались вовсе, а полуфабрикаты корректно передавались между оставшимися в производственной цепочке подразделениями.

Ключевая сложность: Обеспечение полуфабрикатами при пропуске этапа

Прежде чем перейти к решениям, давайте разберем основную сложность, которая возникает при попытке "пропустить" этап. Пропуск этапа — это не просто его отсутствие в списке. Каждый этап, как правило, потребляет какие-либо материалы или полуфабрикаты и выпускает свой полуфабрикат, который является входным для следующего этапа — для контроля этих процессов разработан отчет анализа себестоимости в многопередельном производстве. Если мы просто не создадим этап, то следующий за ним этап останется без входного полуфабриката, и производственная цепочка нарушится.

Проанализируем ситуацию на примере, который мы обсуждали на форуме:

  1. Есть полуфабрикат ПФ1, который производится на Этапе 1.
  2. Этот ПФ1 должен использоваться в Этапе 2. На Этапе 2 производится ПФ2, который в свою очередь должен использоваться в Этапе 3.

Теперь представим, что заказчик не захотел опцию, которая производится на Этапе 2 (например, фацетирование), и этот этап нужно пропустить. В этом случае на Этап 3 должен попасть ПФ1 (выпущенный на Этапе 1), а не ПФ2. Программа должна автоматически "перенаправить" поток материалов. Именно это и является основной задачей, которую мы будем решать.

Решение 1: Использование динамического планирования производства (начиная с 1С:ERP 2.5.9)

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

Рассмотрим подробнее его преимущества:

  1. Легкие регистры сведений: Динамическое планирование использует специальные "легкие" регистры сведений, которые описывают полную структуру изготовления продукции. Это позволяет системе быстрее работать с данными и оперативно реагировать на изменения.
  2. Формирование этапов "по требованию": Главное отличие от статической структуры заказа заключается в том, что этапы производства создаются непосредственно в момент формирования партий производства, а не на весь заказ сразу. Это означает, что у нас появляется возможность влиять на создание этапов в процессе, анализируя актуальные характеристики заказа.
  3. Гибкость и адаптивность: Динамическая структура заказа изначально спроектирована для учета меняющихся факторов и обеспечения гибкости. Большая часть нового функционала в 1С:ERP разрабатывается именно для неё, что делает её предпочтительным выбором для новых внедрений или сложных производств с высокой степенью кастомизации.

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

Решение 2: Условное формирование этапов и использование полуфабрикатов со склада

В 1С:ERP 2.5 предусмотрен стандартный механизм, который позволяет системе не формировать этапы производства для полуфабрикатов, если они уже есть на складе. Этот функционал может быть полезен в нашем сценарии, хотя и требует определенной адаптации.

Как это работает:

  1. При формировании этапов производства вы можете установить флажок "Полуфабрикаты - Не производить при наличии на складе". Этот флажок находится в настройках формирования этапов или в настройках ресурсных спецификаций.
  2. Когда система приступает к формированию этапов, она анализирует ресурсные спецификации и определяет, какие полуфабрикаты должны быть произведены в процессе.
  3. Затем система проверяет доступность этих полуфабрикатов на складах. Если на складе уже имеется достаточное количество требуемого полуфабриката, он будет зарезервирован под текущий заказ. В случае нехватки пригодится обработка для массового выпуска продукции и закрытия дефицита.
  4. В этом случае этапы для изготовления данного полуфабриката не будут создаваться вовсе, или будут сформированы только на недостающее количество, если текущих запасов не хватает.

Для нашего сценария с пропуском этапов, этот механизм может быть использован следующим образом: Если этап 2 должен быть пропущен, то полуфабрикат, который должен был бы быть выпущен на этапе 2 (т.е. ПФ2), нам не нужен. Вместо этого, на этап 3 должен поступить ПФ1. Мы можем смоделировать ситуацию, при которой ПФ2 никогда не "появится" в качестве необходимого выпускаемого полуфабриката, а ПФ1 будет тем полуфабрикатом, который "есть на складе" (то есть был выпущен на предыдущем этапе и доступен).

Однако, этот метод не напрямую решает проблему "не создавать этап 2 и передать ПФ1 в этап 3", а скорее "не создавать этап Х, потому что его выходной ПФ уже есть". Чтобы использовать его для нашего случая, нам потребуется:

Решение 3: Гибкая передача полуфабрикатов между подразделениями

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

Разберем основные принципы:

  1. Учет полуфабрикатов: Полуфабрикаты могут быть выпущены либо на склад (тогда они учитываются на счете 21 "Полуфабрикаты собственного производства"), либо напрямую в цеховую кладовую следующего производственного подразделения (с учетом на счете 20 "Основное производство"). Выбор способа зависит от настроек ресурсной спецификации и производственного процесса. Для контроля корректности данных можно использовать отчет для сравнения регистров «Товары на складах» и «Товары организаций».
  2. Документы перемещения: Документы, такие как ПередачаМатериаловВКладовую, позволяют управлять движением полуфабрикатов между производственными подразделениями. Это означает, что даже если полуфабрикат был выпущен на склад, его можно легко переместить в кладовую другого цеха. Автоматизировать такие движения поможет заполнение передачи материалов в производство по отрицательным остаткам.

Как это помогает при пропуске этапов:

Если мы пропускаем Этап 2, который должен был потреблять ПФ1 и выпускать ПФ2, нам нужно обеспечить, чтобы ПФ1 попал непосредственно в Этап 3. Это можно сделать следующим образом:

  1. На Этапе 1 выпускается ПФ1.
  2. В зависимости от характеристик заказа, мы определяем, что Этап 2 пропущен.
  3. Система (автоматически или с помощью доработки) "перенаправляет" ПФ1: вместо того, чтобы его зарезервировать для Этапа 2, он становится входным полуфабрикатом для Этапа 3. Это может быть реализовано через изменение назначения использования ПФ1 или через создание документа ПередачаМатериаловВКладовую, который направит ПФ1 из кладовой Этапа 1 в кладовую Этапа 3, минуя кладовую Этапа 2.

Таким образом, гибкие механизмы передачи полуфабрикатов позволяют нам логически и физически маршрутизировать материалы по скорректированной производственной цепочке, обходя ненужные этапы. Для этого нам необходимо, чтобы Этап 3 мог потреблять ПФ1 вместо ПФ2, что подводит нас к следующему решению.

Решение 4: Параметризация ресурсных спецификаций

Ресурсные спецификации являются сердцем производственного процесса в 1С:ERP, определяя состав и последовательность этапов. Хотя по умолчанию спецификации достаточно статичны, в 1С:ERP существуют возможности для их "параметризации". Это позволяет делать спецификации более гибкими и динамически адаптировать их под выбранные характеристики или опции изделия.

Что подразумевает параметризация:

  1. Условные материалы и работы: Можно настроить спецификацию так, чтобы состав материалов, работ или выпускаемых полуфабрикатов зависел от определенных условий (например, от значений дополнительных реквизитов в характеристике номенклатуры). Это позволяет избежать создания отдельных спецификаций для незначительных отличий.
  2. Использование формул и автовыбора: В 1С:ERP предусмотрены механизмы, позволяющие использовать формулы и логику автовыбора для определения компонентов спецификации. Например, количество материала или необходимость выполнения работы может быть рассчитано на основе площади закаливания, типа обработки и других параметров, указанных в характеристике заказа.

В контексте нашей задачи, параметризация может быть использована для того, чтобы:

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

Решение 5: Программная постобработка созданных этапов производства

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

Принцип работы программной постобработки:

  1. Автоматическое формирование этапов: Сначала этапы производства формируются стандартными средствами 1С:ERP на основе ресурсных спецификаций и заказа. В этот момент могут создаваться и "ненужные" этапы, или этапы, которые впоследствии будут скорректированы.
  2. Запуск регламентного задания или обработчика: После формирования этапов (например, после создания документа ЗаказНаПроизводство или по расписанию) запускается специальный программный алгоритм (обычно в виде регламентного задания или обработки).
  3. Анализ и корректировка: Этот алгоритм выполняет следующие действия:
    • Анализирует сформированные этапы: Он проходит по всем созданным этапам производства, связанным с конкретным заказом.
    • Считывает параметры заказа/характеристики: Алгоритм обращается к дополнительным реквизитам характеристик или параметрам заказа клиента, чтобы определить, какие этапы должны быть пропущены.
    • Корректирует этапы: В зависимости от результатов анализа, алгоритм производит необходимые изменения:
      • Удаляет ненужные этапы: Если какой-либо этап должен быть пропущен (например, закаливание, если площадь закаливания = 0), соответствующий документ ЭтапПроизводства может быть помечен на удаление или непосредственно удален (с соблюдением всех зависимостей).
      • Изменяет входные/выходные изделия: Если этап был удален, алгоритм должен перенастроить связи между оставшимися этапами. Например, если Этап 2 удален, то входным полуфабрикатом для Этапа 3 должен стать выходной полуфабрикат Этапа 1 (т.е. ПФ1 вместо ПФ2).
      • Перенаправляет полуфабрикаты: Корректируются движения материалов, чтобы ПФ1 из Этапа 1 направлялся напрямую в Этап 3, минуя удаленный Этап 2. Это может потребовать изменения назначения использования полуфабриката или создания корректирующих документов.

Пример гипотетического алгоритма постобработки (псевдокод):


// Внешняя обработка или модуль регламентного задания
Процедура КорректироватьЭтапыПроизводства()

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЭтапыПроизводства.Ссылка КАК Этап,
                   |    ЭтапыПроизводства.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
                   |    ЗаказНаПроизводство.ХарактеристикаПродукции КАК ХарактеристикаПродукции
                   |ИЗ
                   |    Документ.ЭтапПроизводства КАК ЭтапыПроизводства
                   |ЛЕВОЕ СОЕДИНЕНИЕ
                   |    Документ.ЗаказНаПроизводство КАК ЗаказНаПроизводство
                   |ПО
                   |    ЭтапыПроизводства.ЗаказНаПроизводство = ЗаказНаПроизводство.Ссылка
                   |ГДЕ
                   |    НЕ ЭтапыПроизводства.Проведен
                   |    ИЛИ НЕ ЭтапыПроизводства.ПометкаУдаления"; // Обрабатываем только несформированные/непроведенные или помеченные на удаление

    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Пока РезультатЗапроса.Следующий() Цикл
        Этап = РезультатЗапроса.Этап;
        Характеристика = РезультатЗапроса.ХарактеристикаПродукции;

        // Получаем значения доп. реквизитов характеристики
        ПлощадьЗакаливания = Характеристика.ДополнительныеРеквизиты.Найти("ПлощадьЗакаливания").Значение;
        НужноФацетирование = Характеристика.ДополнительныеРеквизиты.Найти("НужноФацетирование").Значение;
        НужноСверление = Характеристика.ДополнительныеРеквизиты.Найти("НужноСверление").Значение;

        // Определяем, какие этапы нужно пропустить
        Если Этап.Наименование = "Закаливание" И ПлощадьЗакаливания = 0 Тогда
            // Если закаливание не нужно, помечаем этап на удаление
            ЭтапОбъект = Этап.ПолучитьОбъект();
            ЭтапОбъект.ПометкаУдаления = Истина;
            ЭтапОбъект.Записать();
            Продолжить; // Переходим к следующему этапу
        КонецЕсли;

        Если Этап.Наименование = "Фацетирование" И НЕ НужноФацетирование Тогда
            ЭтапОбъект = Этап.ПолучитьОбъект();
            ЭтапОбъект.ПометкаУдаления = Истина;
            ЭтапОбъект.Записать();
            Продолжить;
        КонецЕсли;

        Если Этап.Наименование = "Сверление стекла" И НЕ НужноСверление Тогда
            ЭтапОбъект = Этап.ПолучитьОбъект();
            ЭтапОбъект.ПометкаУдаления = Истина;
            ЭтапОбъект.Записать();
            Продолжить;
        КонецЕсли;
        
        // ... и так далее для других опциональных этапов
    КонецЦикла;

    // После пометки на удаление, необходимо скорректировать связи между оставшимися этапами.
    // Это самая сложная часть. Требует анализа последовательности этапов, 
    // изменения входных/выходных полуфабрикатов, и, возможно, их назначения.
    // Например:
    // 1. Получить все этапы по заказу, исключив помеченные на удаление.
    // 2. Отсортировать их по порядку выполнения.
    // 3. Для каждого этапа (кроме первого) проверить, какой ПФ он должен получить.
    // 4. Если предыдущий этап был удален, найти его "пред-предыдущий" и взять его выходной ПФ.
    // 5. Обновить данные в табличной части "Потребности" следующего этапа.

    // Пример корректировки связей (упрощенно):
    // Это крайне упрощенный пример, в реальной системе потребуется глубокий анализ 
    // структуры этапов, их связей по спецификациям и регистрам накопления.
    // Целесообразно выделить эту логику в отдельную функцию.

    ВсеЭтапы = ПолучитьЭтапыПоЗаказу(ЗаказНаПроизводство, Истина); // Исключая помеченные на удаление
    Если ВсеЭтапы.Количество() > 1 Тогда
        Для Индекс = 0 По ВсеЭтапы.Количество() - 2 Цикл
            ТекущийЭтап = ВсеЭтапы[Индекс];
            СледующийЭтап = ВсеЭтапы[Индекс + 1];

            // Если СледующийЭтап изначально требовал ПФ от удаленного промежуточного этапа,
            // но теперь ему нужен ПФ от ТекущийЭтап
            Если СледующийЭтап.Материалы.Найти("ПФ_ОтУдаленногоЭтапа") И ТекущийЭтап.ВыпускаемаяПродукция.Найти("ПФ1") Тогда
                 СледующийЭтапОбъект = СледующийЭтап.ПолучитьОбъект();
                 // Корректируем табличную часть "Материалы" следующего этапа
                 // Например, заменяем одну строку на другую или изменяем ее
                 Для Каждого СтрокаМатериала Из СледующийЭтапОбъект.Материалы Цикл
                     Если СтрокаМатериала.Номенклатура = "ПФ_ОтУдаленногоЭтапа" Тогда
                         СтрокаМатериала.Номенклатура = "ПФ1"; // ПФ1 - выходной ПФ текущего этапа
                         // Дополнительные корректировки, если нужны
                     КонецЕсли;
                 КонецЦикла;
                 СледующийЭтапОбъект.Записать();
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры

// Вспомогательная функция (гипотетическая)
Функция ПолучитьЭтапыПоЗаказу(ЗаказНаПроизводство, ИсключаяУдаленные = Ложь)
    // Возвращает список или массив документов ЭтапПроизводства для данного заказа
    // С учетом флага ИсключаяУдаленные
КонецФункции

Важно отметить, что такой подход требует глубокого понимания структуры производственных данных в 1С:ERP, умения работать с документами ЭтапПроизводства, их табличными частями (Материалы, Продукция, Работы) и регистрами накопления, отражающими движения полуфабрикатов. Особенно сложно бывает корректно перенастроить связи, чтобы следующий этап "увидел" нужный полуфабрикат, произведенный на "пред-предыдущем" этапе.

Преимущества постобработки в связке с динамическим планированием:

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

Альтернативный подход: Множество ресурсных спецификаций (с ограничениями)

Как уже было упомянуто, создание отдельных ресурсных спецификаций для каждого варианта изделия — это первый, наиболее очевидный, но часто неприемлемый путь. В нашем случае, когда речь идет о 30-40 различных параметрах стеклянных изделий, количество возможных комбинаций и, соответственно, спецификаций может быть огромным. Это приводит к:

  1. Неконтролируемому росту справочника: Поддерживать сотни или тысячи спецификаций становится невозможным.
  2. Сложности в управлении: Любое изменение в одном из базовых этапов потребует корректировки во всех связанных спецификациях.
  3. Риску ошибок: Чем больше спецификаций, тем выше вероятность ошибок при их создании и выборе.

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

Заключение

Задача динамического пропуска этапов производства в 1С:ERP Управление предприятием 2 является комплексной и требует внимательного подхода. Мы рассмотрели несколько решений, от использования штатных механизмов до программных доработок:

  1. Динамическое планирование: Основа для гибкого производства, позволяющая влиять на создание этапов "по требованию".
  2. Условное формирование этапов и использование полуфабрикатов со склада: Позволяет не создавать этапы, если их выходной полуфабрикат уже доступен.
  3. Гибкая передача полуфабрикатов: Механизмы учета и перемещения ПФ обеспечивают корректное движение материалов между цехами, минуя пропущенные этапы.
  4. Параметризация ресурсных спецификаций: Делает спецификации более адаптивными к различным параметрам заказа.
  5. Программная постобработка этапов: Наиболее универсальное решение для сложных сценариев, когда стандартных средств недостаточно. Она позволяет программно корректировать уже сформированные этапы и их связи.

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

← На главную