Почему колонки динамического списка скрываются сами собой и как найти связь с реквизитами формы

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

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

Условное оформление формы как главный инструмент управления видимостью

Проанализируем наиболее вероятную причину — использование механизма Условного оформления. В управляемых формах 1С это мощный инструмент, который позволяет изменять свойства элементов (цвет, шрифт, доступность, видимость) в зависимости от условий, не прибегая к написанию кода в модуле формы.

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

Чтобы проверить эту гипотезу, выполним следующие шаги:

  1. Откроем форму в конфигураторе.
  2. Перейдем на закладку «Условное оформление» (она находится в нижней части окна редактора формы, рядом с закладками «Элементы», «Реквизиты» и «Команды»).
  3. Найдем в списке оформление, в условии которого фигурирует реквизит ПоказыватьОстатки.
  4. Проверим вкладку «Оформляемые поля» — там должна быть указана колонка динамического списка Остаток.

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


ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

Условие = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПоказыватьОстатки");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Условие.ПравоеЗначение = Ложь;

ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СписокОстатки");

Использование функциональных опций (ФО)

Если поиск в условном оформлении не дал результатов, проанализируем влияние Функциональных опций. В системе 1С функциональные опции позволяют отключать избыточный функционал. Если реквизит формы связан с функциональной опцией, его изменение может привести к немедленному перестроению интерфейса.

Выясним, привязана ли видимость колонки к ФО. Для этого в дереве конфигурации найдем объект ФункциональнаяОпция и посмотрим на список «Состав». Если там указано поле динамического списка или связанный с ним реквизит, то при выключении опции платформа сама скроет элемент. Это происходит на уровне ядра платформы, поэтому обычный замер производительности может не показать выполнение прикладного кода.

Механизмы БСП и процедура УправлениеФормой

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

Чаще всего она называется УправлениеФормой() или УстановитьВидимостьЛиста(). Даже если вы добавили реквизит на форму вручную, система может вызывать эти процедуры неявно через механизм Подключаемых обработчиков или в составе других событий. Проанализируем типичный код такой процедуры:


&НаСервере
Процедура УстановитьВидимостьЭлементов()
    
    ВидимостьОстатков = Объект.ПоказыватьОстатки;
    Элементы.СписокОстаток.Видимость = ВидимостьОстатков;
    Элементы.СписокСклад.Видимость = ВидимостьОстатков;
    
КонецПроцедуры

Если вы обнаружили подобный код, но замер производительности его не ловит, возможно, срабатывает кэширование или оптимизация платформы при работе с формой в режиме «Такси», когда изменения применяются на клиенте без явного обращения к серверу (для простых булевых операций).

Свойство «Использовать всегда» в динамическом списке

Рассмотрим еще одну техническую тонкость. В настройках динамического списка (через схему компоновки данных или настройки выбранных полей) существует флаг «Использовать всегда». Если колонка списка программно связана с пользовательскими настройками (UserSettingID), то изменение связанных параметров может инициировать обновление состава колонок.

Посмотрим на настройки Список.КомпоновщикНастроек. Если код меняет пользовательские настройки динамического списка, платформа сама решает, какие поля отображать в таблице. Это изменение фиксируется в системных таблицах настроек и применяется при перерисовке формы.

Как эффективно провести поиск скрытой связи

Чтобы окончательно разобраться в ситуации, рекомендуем использовать комплексный подход к поиску:

  1. Глобальный поиск: Выполните поиск по всей конфигурации (или только по текущей форме) по имени реквизита ПоказыватьОстатки. Обратите внимание на места, где этот реквизит читается.
  2. Поиск по имени колонки: Найдите все упоминания имени элемента формы (например, Элементы.СписокОстаток). Ищите не только установку видимости, но и передачу этого элемента в качестве параметра в общие модули.
  3. Анализ расширений: Если вы работаете с типовой конфигурацией, проверьте наличие расширений. Часто логика управления интерфейсом выносится в методы &После или &Вместо процедуры ПриСозданииНаСервере или ПриИзменении.
  4. Событие ПриИзменении: Даже если у элемента на форме не назначен обработчик в свойствах, проверьте код модуля формы на наличие ПодключитьОбработчикОжидания или Оповещение, которые могут реагировать на изменение данных.

Таким образом, «магия» в 1С всегда имеет под собой техническое обоснование. В большинстве случаев это либо Условное оформление, работающее на уровне платформы, либо типовые механизмы БСП, которые инкапсулируют логику управления видимостью в специализированные процедуры.

← На главную