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