Как настроить видимость реквизитов характеристик для определенных групп товаров в 1С

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

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

Анализ проблемы: почему возникает ошибка владельца

Разберем ситуацию, с которой сталкиваются многие разработчики. При попытке настроить условие видимости в дополнительных реквизитах характеристик напрямую через родительскую группу номенклатуры, система часто выдает ошибку. Это происходит потому, что контекст выполнения кода в форме характеристики отличается от контекста самой номенклатуры. Выясним причину: когда мы находимся в справочнике ХарактеристикиНоменклатуры, поле Владелец ссылается на объект Номенклатура. Чтобы достучаться до группы (папки), нужно обращаться через еще один уровень иерархии.

Способ 1. Настройка условий видимости через дополнительные реквизиты

В современных конфигурациях на базе БСП (Библиотека стандартных подсистем) предусмотрен механизм настройки видимости без программирования. Проанализируем, как правильно прописать формулу, чтобы избежать ошибок.

  1. Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения.
  2. Найдем набор реквизитов, относящийся к характеристикам вашего Вида номенклатуры.
  3. Выберем нужный реквизит (например, «Группа крови») и перейдем по гиперссылке Видимость, доступность и обязательность.
  4. В поле условия нам нужно проверить принадлежность владельца характеристики к определенной группе. Поскольку характеристика «знает» своего владельца (номенклатуру), формула должна выглядеть примерно так:

// Пример логики для условия видимости
Объект.Владелец.Родитель В Списке [Выбранные_Группы_Товаров]

Важный нюанс: Если вы используете иерархию групп и товаров, убедитесь, что вы проверяете именно ту вложенность, которая вам нужна. Если товар лежит в подпапке, Родитель вернет только ближайшую папку, а не всю цепочку.

Способ 2. Разделение на разные Виды номенклатуры

Рассмотрим наиболее правильный с точки зрения архитектуры 1С способ. Если наборы характеристик радикально отличаются, это явный признак того, что товары должны относиться к разным Видам номенклатуры.

Посмотрим на преимущества этого подхода:

Если же вы не можете разделить виды номенклатуры (например, из-за настроек обмена с сайтом или специфики учета), перейдем к более сложным методам.

Способ 3. Использование индивидуальных характеристик

Проанализируем ситуацию, когда свойства уникальны не для группы, а для конкретной позиции. В настройках Вида номенклатуры можно установить использование характеристик как Индивидуальные для номенклатуры. В этом случае для каждого товара будет создаваться свой уникальный список характеристик.

Особенности этого метода:

Способ 4. Программная фильтрация в расширении

Если стандартные условия видимости не подходят, мы можем прибегнуть к программной модификации формы. Рассмотрим, как это сделать с помощью расширения. Нам нужно вмешаться в процесс построения динамических пунктов формы, которые отвечают за дополнительные реквизиты.

Разберем пример кода, который можно внедрить в процедуру ПриСозданииНаСервере формы записи характеристики:


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

Использование Объект.Владелец позволяет нам получить доступ ко всем реквизитам товара и на основе любых данных (группа, артикул, доп. сведения товара) управлять формой характеристики.

Особенности интеграции с 1С-Битрикс

Выясним, как это влияет на выгрузку на сайт. Автор темы упоминал, что характеристики являются торговыми предложениями. Если мы просто скроем видимость реквизита в 1С, сам реквизит в базе останется пустым.

В модуле обмена с Bitrix есть критически важная настройка: «Выгружать только заполненные значения». Если для товара «Шапка» реквизит «Группа крови» будет не виден и, соответственно, не заполнен, то при выгрузке на сайт это свойство не создаст лишнего фильтра или пустого поля в карточке товара. Это позволяет решить проблему визуального мусора на стороне интернет-магазина, даже если в самой 1С структура данных остается общей.

Рекомендации по выбору решения

Подведем итог нашему анализу. Выбор метода зависит от масштаба вашей базы:

  1. Если групп товаров немного — используйте разделение по Видам номенклатуры. Это стандарт, который избавит вас от проблем при обновлениях.
  2. Если вид номенклатуры один, а групп много — настраивайте условия видимости в наборе доп. реквизитов, используя путь через Объект.Владелец.Родитель.
  3. Если требуется максимально сложная логика — используйте расширение формы и программно скрывайте ненужные элементы через ЭтаФорма.Элементы.

Помните, что избыточное количество характеристик внутри одного вида номенклатуры усложняет работу пользователей и может замедлять генерацию прайс-листов и отчетов. Старайтесь придерживаться принципа «один набор свойств — один вид номенклатуры».

← На главную