Как скрыть колонку в управляемой форме 1С так, чтобы пользователь мог включить её через меню Изменить форму

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

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

Почему Видимость = Ложь не работает для меню Изменить форму

Разберем ситуацию, с которой сталкиваются многие начинающие разработчики. При написании кода в процедуре ПриСозданииНаСервере мы устанавливаем свойство Элементы.ИмяКолонки.Видимость = Ложь;. В результате колонка действительно пропадает с экрана, но она также исчезает и из списка доступных полей в окне настройки формы. Почему так происходит?

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

Способ 1. Использование свойства Пользовательская видимость в Конфигураторе

Это наиболее простой и рекомендуемый способ, не требующий написания программного кода. Рассмотрим по шагам, как настроить начальное состояние формы:

  1. Откроем нужную форму в Конфигураторе.
  2. Выберем в дереве элементов формы необходимую колонку (поле).
  3. В палитре свойств убедимся, что основной флаг Видимость установлен (стоит галочка).
  4. Найдем строку Пользовательская видимость и нажмем гиперссылку Открыть.
  5. В открывшемся окне мы увидим список ролей, определенных в конфигурации. Чтобы скрыть колонку по умолчанию для всех, необходимо снять галочки в колонке Видимость для всех ролей (или для конкретных, которым эта колонка не нужна при первом запуске).

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

Способ 2. Программное управление через Условное оформление

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

Рассмотрим пример кода, который можно разместить в процедуре ПриСозданииНаСервере:


// Создаем новый элемент условного оформления
ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

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

// Самое главное — устанавливаем свойство Видимость в Ложь через оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

Проанализируем ситуацию: когда видимость управляется через Условное оформление, элемент формы технически остается активным и доступным. Пользователь сможет зайти в настройки формы и, если его настройки будут иметь приоритет или если он изменит состав полей, система позволит ему взаимодействовать с этим полем. Однако стоит помнить, что условное оформление работает в реальном времени и может «перекрывать» ручные настройки пользователя, если условие оформления постоянно выполняется.

Разбор свойства Использовать всегда

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

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

Можно ли управлять Пользовательской видимостью программно?

Как было отмечено в техническом анализе, прямого доступа к свойству ПользовательскаяВидимость через точку (как к обычному булеву значению) в языке 1С не существует. Это связано с тем, что данное свойство представляет собой сложную структуру, зависящую от прав доступа и ролей.

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

  1. Настройки формы хранятся в системном хранилище под ключом, включающим имя формы.
  2. Программист может извлечь структуру настроек с помощью метода ХранилищеОбщихНастроек.Загрузить().
  3. В этой структуре необходимо найти описание элементов формы и изменить флаг видимости для конкретной колонки.
  4. После изменения структуру нужно сохранить обратно методом ХранилищеОбщихНастроек.Сохранить().

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

Итоги

Подведем итог нашему разбору. Для того чтобы колонка была доступна в меню «Изменить форму», но скрыта изначально:

Такой подход обеспечит гибкость интерфейса и позволит опытным пользователям настраивать рабочее пространство под свои задачи, не обращаясь к разработчику за изменением кода.

← На главную