Как заменить номенклатуру в ресурсных спецификациях в 1С:Комплексная автоматизация 2

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

В процессе ведения производственного учета в 1С:Комплексная автоматизация 2 (или 1С:ERP) часто возникает задача массового обновления состава изделий. Типичный пример — смена поставщика, из-за которой «Молния 1» выводится из оборота, а на ее место приходит «Молния 2». Если таких спецификаций десятки или сотни, ручная правка становится невозможной. Рассмотрим, как решить эту задачу правильно, не нарушив логику системы и не испортив исторические данные.

Анализ ситуации и риски прямой замены

Прежде чем приступать к изменениям, проанализируем структуру данных. Ресурсная спецификация в современных конфигурациях на базе 1С:ERP — это сложный объект. Табличные части, такие как МатериалыИРаботы, не просто содержат перечень номенклатуры, они связаны с этапами производства через внутренние идентификаторы — ключи связи.

Использование стандартной обработки «Групповое изменение реквизитов» (или аналогичного поиска и замены значений) для прямого исправления существующих спецификаций таит в себе следующие опасности:

  1. Нарушение целостности «Ключей связи»: Если просто заменить одну ссылку на другую в табличной части, связи между материалами и этапами производства могут «отвалиться». В результате спецификация перестанет открываться корректно или будет выдавать ошибки, когда вы начнете анализировать стоимость материалов и работ по ресурсной спецификации.
  2. Искажение истории производства: Изменение уже закрытых спецификаций приведет к тому, что при просмотре данных за прошлые периоды вы увидите новую номенклатуру там, где фактически использовалась старая. Это сделает невозможным адекватный план-фактный анализ и корректное закрытие этапов производства.
  3. Регистры сведений: В системе существуют скрытые регистры, данные в которые пишутся в момент записи объекта. Групповая обработка может изменить данные в справочнике, но не обновить эти регистры.

Метод 1: Использование типового механизма «Разрешения на замену»

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

Рассмотрим, как это работает:

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

Метод 2: Программное создание новых версий (Рекомендуемый путь)

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

  1. Найдем все спецификации в статусе Действует, где в табличной части материалов присутствует «Молния 1».
  2. Для каждой найденной спецификации создадим новую версию (копию объекта).
  3. В новой версии произведем замену номенклатуры.
  4. Установим старой спецификации статус Закрыта, а новой — Действует.

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


// Пример логики замены в цикле по спецификациям
Для Каждого СпецификацияСсылка Из СписокСпецификаций Цикл
    
    // Создаем копию спецификации
    НоваяСпецификация = СпецификацияСсылка.Скопировать();
    НоваяСпецификация.Статус = Перечисления.СтатусыРесурсныхСпецификаций.ВРазработке;
    НоваяСпецификация.Номер = ""; // Чтобы система присвоила новый
    
    // Перебираем материалы
    Для Каждого СтрокаМатериал Из НоваяСпецификация.МатериалыИРаботы Цикл
        Если СтрокаМатериал.Номенклатура = СтараяНоменклатура Тогда
            СтрокаМатериал.Номенклатура = НоваяНоменклатура;
        КонецЕсли;
    КонецЦикла;
    
    // Записываем и устанавливаем статус
    НоваяСпецификация.Записать();
    
    // Важно: закрываем старую версию
    СтарыйОбъект = СпецификацияСсылка.ПолучитьОбъект();
    СтарыйОбъект.Статус = Перечисления.СтатусыРесурсныхСпецификаций.Закрыта;
    СтарыйОбъект.Записать();
    
КонецЦикла;

Именно такой подход (клонирование или версионирование) позволяет сохранить историю и избежать ошибок в регистрах сведений.

Метод 3: Использование «Группового изменения реквизитов» (с осторожностью)

Если вы все же решили использовать стандартную обработку «Групповое изменение реквизитов», следуйте строгой последовательности действий, чтобы минимизировать риски:

  1. Создайте резервную копию базы. Это обязательное условие.
  2. Отфильтруйте спецификации по статусу В разработке. Если спецификация Действует, система может не дать изменить табличную часть или запишет данные некорректно.
  3. В настройках обработки включите режим «Изменять в транзакции» и «Выполнять в режиме загрузки» (через «Дополнительные параметры»), чтобы обойти типовые проверки (используйте только если понимаете последствия).
  4. Выберите объект Ресурсная спецификация и перейдите в раздел изменения табличных частей.
  5. Найдите строку в Материалы и работы и укажите новую номенклатуру.

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

Советы по ведению справочников

Выясним причину, по которой иногда заводится новая номенклатура при смене поставщика. Часто пользователи делают это «чтобы не перепутать». Однако в 1С:КА 2 правильнее использовать функционал «Номенклатура поставщика». Вы оставляете одну карточку в справочнике Номенклатура, но привязываете к ней разные наименования и артикулы от разных контрагентов через регистр сведений. Это избавит вас от необходимости массово переписывать спецификации при каждом новом договоре.

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

← На главную