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