Зачем в справочнике «Склады» нужен реквизит «ВыборГруппы» и как он работает?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Торговля и дистрибуция
← На главную

При проектировании и кастомизации крупных прикладных решений на платформе «1С:Предприятие 8» (таких как «1С:ERP Управление предприятием», «1С:Комплексная автоматизация» или «1С:Управление торговлей») разработчики часто сталкиваются с неочевидными архитектурными решениями. Одним из таких примеров является использование реквизита ВыборГруппы (в пользовательском интерфейсе карточки группы складов он отображается как «Выбор этой группы») в справочнике Склады.

На первый взгляд, этот реквизит имеет смысл только для групп складов (папок). Однако при анализе типовых запросов конфигурации можно обнаружить, что система проверяет его непосредственно у конечных элементов (физических складов), где свойство ЭтоГруппа имеет значение Ложь. Давайте подробно разберем, зачем это сделано, как устроена внутренняя механика работы платформы в данном сценарии и как это решение помогает оптимизировать производительность системы.

Суть проблемы: странное условие в запросе

Рассмотрим реальный пример запроса из типовой конфигурации, который часто вызывает недоумение у разработчиков:


ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    Склады.Ссылка КАК Склад
ИЗ
    Справочник.Склады КАК Склады
ГДЕ
    Склады.Ссылка В ИЕРАРХИИ(&Склад)
    И Склады.ВыборГруппы В(&ВыборГруппыСкладов)
    И НЕ Склады.ЭтоГруппа

Проанализируем данную ситуацию. Условие НЕ Склады.ЭтоГруппа явно отсекает все группы справочника, оставляя в выборке только конечные элементы (склады). В то же время накладывается жесткий фильтр по реквизиту ВыборГруппы. Если бы данный реквизит заполнялся только у групп, то для всех конечных элементов его значение оставалось бы пустым (не заполненным). В таком случае запрос гарантированно возвращал бы пустой результат. Однако на практике запрос работает корректно и возвращает нужные склады. Почему так происходит?

Внутренняя механика: автоматическое наследование реквизитов

Выясним причину такого поведения системы. На самом деле реквизит ВыборГруппы присутствует в метаданных справочника Склады как для групп, так и для элементов. Несмотря на то, что в пользовательском интерфейсе этот реквизит выведен только на форму группы, платформа обеспечивает автоматическое дублирование его значения «вниз» по иерархии:

  1. При записи группы складов: Когда пользователь меняет настройку «Выбор этой группы» в карточке группы складов и сохраняет изменения, система запускает фоновый процесс (или транзакционный алгоритм в модуле объекта), который автоматически транслирует (записывает) установленное значение во все подчиненные элементы (конечные склады) и подчиненные группы.
  2. При записи элемента (склада): Когда создается или переносится в другую папку конкретный склад, при его записи в модуле объекта срабатывает алгоритм, который автоматически считывает значение реквизита ВыборГруппы у его родителя и заполняет его в карточке элемента. Для этого в процедуре ОбработкаПроверкиЗаполнения реализовано разделение логики проверки для групп и элементов.

С технической точки зрения это классический пример денормализации данных в базе данных СУБД. Вместо того чтобы при каждом обращении к складу динамически вычислять по иерархии вверх (через его родителей), разрешен ли выбор для данного склада, разработчики хранят это значение непосредственно внутри самого элемента. Это позволяет отказаться от тяжелых и непроизводительных соединений таблиц или использования оператора В ИЕРАРХИИ для каждой проверки при проведении документов.

Бизнес-логика: варианты использования групп складов

Разберем подробнее, какую роль играет этот реквизит в бизнес-процессах предприятия. Реквизит ВыборГруппы имеет тип ссылки на перечисление ВариантыВыбораГруппыСкладов. Он может принимать три основных значения, определяющих поведение группы складов в цепочке продаж и закупок:

Влияние функциональных опций системы

Важно помнить, что возможность полноценно использовать группы складов в документах зависит не только от настроек самой группы, но и от включения соответствующих функциональных опций в разделе НСИ и администрирование:

  1. Должна быть включена опция «Несколько складов» (иначе справочник складов вообще не будет использоваться в иерархическом виде).
  2. Должны быть активны опции «Реализация товаров с нескольких складов» (в настройках продаж) и «Поступление товаров на несколько складов» (в настройках закупок). Без этих флажков выбор группы складов в накладных будет заблокирован программно на уровне интерфейса, даже если в самой группе установлено разрешение «Разрешить в заказах и накладных».

Резюме

Использование реквизита ВыборГруппы в элементах справочника Склады — это грамотное архитектурное решение разработчиков фирмы «1С». Оно сочетает в себе гибкую бизнес-логику управления цепочками поставок (возможность продавать/покупать товары сразу с группы складов) и высокую производительность системы за счет денормализации данных и исключения сложных иерархических запросов при проведении документов.

← На главную