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