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

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

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

Разберем причину: почему реквизит выглядит неактивным

Для начала проанализируем ситуацию, когда реквизит отображается в режиме «1С:Предприятие» серым цветом и зачеркнутым шрифтом. В архитектуре БСП дополнительные реквизиты хранятся в специальном плане видов характеристик ДополнительныеРеквизитыИСведения. Однако само по себе наличие записи в этом плане не делает реквизит доступным для конкретного документа или справочника.

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

  1. Реквизит был создан для одного вида объекта, а затем данные были программно или через перенос данных записаны в другой объект.
  2. Реквизит был удален из соответствующего «Набора дополнительных реквизитов и сведений», но значения в документах остались.
  3. В карточке реквизита снят флаг Используется.

Система видит «лишние» данные, которые не соответствуют текущим настройкам метаданных БСП, и помечает их как неактуальные.

Способ 1. Использование стандартных средств настройки (рекомендуемый)

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

Выполним следующие шаги:

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

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

Способ 2. Вывод через изменение запроса динамического списка

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

Рассмотрим пошагово процесс модификации запроса в конфигураторе:

  1. Откроем форму списка нужного документа.
  2. Перейдем к свойствам основного реквизита формы (обычно это Список с типом ДинамическийСписок).
  3. Установим флаг Произвольный запрос и откроем конструктор запроса.
  4. Нам необходимо выполнить ЛЕВОЕ СОЕДИНЕНИЕ с табличной частью дополнительных реквизитов.

Пример типичного запроса для вывода конкретного допреквизита:


ВЫБРАТЬ
    ДокументОбъект.Ссылка КАК Ссылка,
    ДокументОбъект.Номер КАК Номер,
    ДокументОбъект.Дата КАК Дата,
    ДокументОбъект.Проведен КАК Проведен,
    // Выбираем значение конкретного доп. реквизита
    ДопРеквизиты.Значение КАК ЗначениеДопРеквизита
ИЗ
    Документ.РеализацияТоваровУслуг КАК ДокументОбъект
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизиты
        ПО ДопРеквизиты.Ссылка = ДокументОбъект.Ссылка
            И ДопРеквизиты.Свойство = &НужноеСвойство

Важный момент: В параметрах динамического списка (на вкладке «Параметры» или программно при создании формы) необходимо передать ссылку на само «Свойство» из Плана видов характеристик ДополнительныеРеквизитыИСведения.

Программное управление через механизмы БСП

Если мы работаем в современной конфигурации (ERP, КА, УТ 11), за вывод дополнительных реквизитов отвечают программные механизмы БСП. Посмотрим, как система инициализирует эти данные. В модуле формы списка обычно присутствуют вызовы процедур общего модуля УправлениеСвойствами.

Проанализируем процедуру ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Настройка динамического списка для работы с доп. реквизитами
    ПараметрыПостроения = УправлениеСвойствами.ПараметрыПостроенияДляФормыСписка();
    УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПостроения);
    
КонецПроцедуры

Эти процедуры отвечают за то, чтобы в списке полей (через «Изменить форму») появились дополнительные реквизиты. Если реквизит «зачеркнут» в базе, эти механизмы могут его игнорировать. Именно поэтому Способ 1 является приоритетным: как только вы исправляете привязку реквизита к набору, стандартные процедуры БСП сами начинают «видеть» его и позволяют пользователю вывести его на экран без внесения изменений в программный код.

Особенности производительности и риски

Рассмотрим ситуацию с точки зрения быстродействия. Вывод дополнительных реквизитов в список — это всегда дополнительная нагрузка на СУБД.

  1. Соединения: Каждый дополнительный реквизит, выведенный в список через запрос, добавляет одно соединение (JOIN). Если таких реквизитов много, работа списка может существенно замедлиться.
  2. Индексация: Помните, что значения в табличной части ДополнительныеРеквизиты не индексируются платформой по умолчанию. Поиск и сортировка по таким колонкам в динамическом списке будут выполняться крайне медленно на больших объемах данных.
  3. Рекомендация: Если реквизит критически важен для работы (по нему постоянно ищут или сортируют), рассмотрите возможность переноса его в Сведения (хранятся в отдельном регистре) или создания полноценного реквизита объекта через расширение конфигурации.

Подведем итог: если вы видите перечеркнутый реквизит, не спешите менять код. Сначала проверьте справочник Наборы дополнительных реквизитов и сведений. В 90% случаев решение проблемы кроется именно в корректной настройке связей между свойством и типом объекта в интерфейсе программы.

← На главную