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