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