Как реализовано динамическое добавление колонок характеристик на форму списка в 1С без программирования?

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

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

Механизм характеристик на уровне метаданных

Первым делом проанализируем настройки самого объекта метаданных. В системе 1С:Предприятие 8 реализован мощный механизм работы с дополнительными свойствами, который называется Характеристики. Он позволяет расширять состав данных объекта без изменения его структуры (без добавления новых реквизитов в таблицу БД).

Чтобы понять, включен ли этот механизм, выполним следующие действия в Конфигураторе:

  1. Откроем дерево метаданных и найдем интересующий нас справочник (например, Товары).
  2. Перейдем на закладку Данные.
  3. В нижней части окна нажмем кнопку Характеристики....

Если в открывшемся окне заполнены строки, значит, для объекта настроена связь с дополнительными сведениями. Рассмотрим подробнее, что именно там указывается:

Когда эти настройки заданы, платформа «понимает», что объект обладает набором виртуальных реквизитов, которые можно отображать в интерфейсе наравне с обычными полями Код или Наименование.

Особенности работы Динамического списка

Теперь выясним причину, по которой эти данные появляются именно в списке. Основной элемент формы списка — это Динамический список. Этот объект обладает уникальной способностью интегрироваться с механизмом характеристик.

Рассмотрим настройки динамического списка в Конфигураторе:

  1. Откроем форму списка и выберем основной реквизит Список (тип ДинамическийСписок).
  2. В палитре свойств найдем флаг Автозаполнение. Если он установлен, платформа автоматически включает все доступные поля в состав выборки.
  3. Проанализируем текст запроса. Даже если запрос выглядит как простое ВЫБРАТЬ * ИЗ Справочник.Товары, платформа в момент исполнения модифицирует его (делает LEFT JOIN с таблицей регистра сведений), чтобы подтянуть значения характеристик.

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

Роль пользовательских настроек и хранилища настроек

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

Проанализируем поведение системы в пользовательском режиме:

  1. Откроем форму списка справочника.
  2. Нажмем Ещё — Изменить форму.
  3. В дереве элементов найдем группу «Список». Если характеристики настроены верно, внутри списка появится узел (обычно с названием Плана видов характеристик), развернув который, можно увидеть поле «Цвет».
  4. Установив или сняв галочку, пользователь сам определяет видимость этой колонки.

Если вы создали новую форму списка и назначили её основной, она может открыться с «пустыми» настройками. Платформа еще не сохранила для этой конкретной формы выбор пользователя. Чтобы колонка появилась автоматически, разработчик может настроить её видимость в Конфигураторе в окне Настройка списка (закладка «Поля»).

Также стоит помнить про Хранилище системных настроек. Если пользователь хотя бы один раз изменил состав колонок (например, вывел «Цвет»), 1С запомнит это состояние. При сбросе настроек к стандартным (Ещё — Установить стандартные настройки) динамически добавленные пользователем колонки исчезнут, и форма вернется к тому виду, который был жестко задан программистом.

Почему не стоит пытаться найти это в коде?

Программисты-новички часто ищут обработчики ПриСозданииНаСервере, надеясь увидеть там что-то вроде:


НовыйРеквизит = Новый РеквизитФормы("Цвет", Новый ОписаниеТипов("СправочникСсылка.Цвета"));
ДобавитьРеквизиты(НовыйРеквизит);
// ... добавление элемента формы

Однако в современных конфигурациях на базе БСП (Библиотека стандартных подсистем) ручное добавление колонок для характеристик считается плохим тоном. Использование стандартного механизма Характеристик дает ряд преимуществ:

Резюме для разработчика

Если вы видите «лишнюю» колонку в списке, которую не можете найти в коде:

  1. Проверьте кнопку Характеристики на вкладке Данные в свойствах справочника в Конфигураторе.
  2. Убедитесь, что в форме списка для реквизита ДинамическийСписок включено Автозаполнение.
  3. В пользовательском режиме проверьте Изменить форму — возможно, поле просто скрыто или добавлено вручную через настройки.
  4. Помните, что платформа 1С берет на себя всю работу по связи таблиц и отображению данных, если вы правильно описали связи в метаданных.
← На главную