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