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