При разработке интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача: сделать форму лаконичной, скрыв второстепенные данные, но при этом оставить опытному пользователю возможность самостоятельно вывести эти данные на экран через меню «Изменить форму». Обычное управление свойством Видимость здесь не подходит, так как оно полностью исключает элемент из состава формы. Разберем подробно, как решить эту задачу правильно, используя штатные механизмы платформы.
Для начала проанализируем, почему стандартное свойство Видимость (Visible) нам не подходит. В системе 1С существует жесткое разделение:
Элементы.ИмяКолонки.Видимость = Ложь, платформа воспринимает это как указание вовсе не отрисовывать элемент. Он пропадает из состава формы «намертво», и пользователь не увидит его в списке доступных полей в окне настройки.Рассмотрим пошагово, как настроить скрытие колонки без написания кода:
Теперь при запуске приложения колонка будет отсутствовать на экране, но если пользователь нажмет «Еще» — «Изменить форму», он увидит эту колонку в списке и сможет поставить напротив неё галочку. В качестве альтернативного бескодового решения для детальной настройки прав и видимости полей можно использовать расширение для управления доступностью элементов формы.
Бывают ситуации, когда логика скрытия зависит от параметров запуска или прав доступа, вычисляемых в коде. В этом случае мы будем использовать программное обращение к свойству ПользовательскаяВидимость. Проанализируем пример кода:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Скрываем колонку по умолчанию, но оставляем доступ в настройках
Элементы.СписокСуммаДокумента.ПользовательскаяВидимость = Ложь;
// Если нужно скрыть колонку только для определенных условий
Если НЕ РольДоступна("ПолныеПрава") Тогда
Элементы.СписокОтветственный.ПользовательскаяВидимость = Ложь;
КонецЕсли;
КонецПроцедуры
Важно помнить, что обращение к ПользовательскаяВидимость эффективно именно в момент инициализации формы. Если вы измените это свойство позже, оно может не отразиться на текущем сеансе пользователя мгновенно, так как приоритет имеют сохраненные настройки пользователя.
Разберем ситуацию, упомянутую в обсуждении: зачем нужен флаг «Использовать всегда» в настройках самого динамического списка (вкладка «Настройка списка» -> «Поля»).
Когда колонка скрыта (неважно, через Видимость или ПользовательскаяВидимость), платформа в целях оптимизации может исключить это поле из запроса к базе данных. Если значение этого поля вам нужно для расчетов, программного анализа строк или в Условном оформлении, система может выдать ошибку или не применить оформление, так как данных в выборке просто не будет.
Установка флага Использовать всегда гарантирует, что поле будет включено в SELECT запрос динамического списка независимо от настроек видимости элементов на форме. Однако этот флаг не управляет видимостью колонки в интерфейсе напрямую.
Часто программисты сталкиваются с тем, что настройки в конфигураторе сделаны правильно, но у пользователя колонка всё равно видна (или не появилась в настройках). Выясним причину этого поведения.
Платформа 1С сохраняет настройки формы для каждого пользователя (размеры, положение колонок, их видимость). Если пользователь хотя бы раз открывал форму, его персональные настройки становятся приоритетнее тех, что вы задали в конфигураторе. Для просмотра, массового восстановления или очистки таких сохраненных параметров у различных пользователей можно использовать инструмент для управления хранилищем настроек пользователей.
Что нужно сделать для проверки:
Только после сброса к настройкам по умолчанию система применит те параметры Пользовательской видимости, которые вы задали в разработке.
Проанализируем еще один механизм — Функциональные опции. Если поле динамического списка или сам элемент формы привязаны к функциональной опции, и эта опция выключена в константах, то колонка исчезнет из интерфейса полностью, аналогично свойству Видимость = Ложь. Пользователь не сможет включить её через «Изменить форму», пока опция не будет активирована в системе. Это самый «сильный» метод скрытия, используемый для управления функциональностью всей программы.
Для достижения результата «скрыто по умолчанию, но доступно для выбора», придерживаемся следующего алгоритма:
Такой подход позволяет создавать гибкие и удобные интерфейсы, которые не перегружены лишней информацией, но предоставляют продвинутым пользователям все необходимые инструменты для детального анализа данных.