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