При работе с обычными формами в 1С:Предприятии часто возникает задача динамического управления видимостью элементов, таких как страницы или вкладки. Это особенно актуально, когда нам необходимо настроить интерфейс формы таким образом, чтобы различные пользователи видели только ту информацию, которая предназначена для них. Например, если на форме присутствует группа страниц (вкладок), и для конкретного пользователя должна быть доступна только одна из восьми страниц, ручное прописывание кода для скрытия каждой из семи страниц может быть громоздким. Мы рассмотрим несколько эффективных способов решения этой задачи, начиная от программного управления видимостью всех страниц до использования настроек конфигуратора и ролей.
Один из наиболее гибких способов – это сначала программно скрыть все страницы в группе, а затем отобразить только ту, которая необходима текущему пользователю. Такой подход позволяет минимизировать количество кода для начального скрытия.
Шаг 1: Скрытие всех страниц в группе
Для скрытия всех страниц мы можем перебрать все элементы формы и проверить их тип. Если элемент является страницей (вкладкой), мы устанавливаем его свойство Видимость в значение Ложь. Обычно этот код размещают в обработчике события формы, например, ПриОткрытии или ПередОткрытием.
Рассмотрим пример кода:
// Предполагаем, что код выполняется в модуле формы
// В процедуре ПередОткрытием() или ПриОткрытии()
Для Каждого ЭлементФормы Из ЭлементыФормы Цикл
// Проверяем, является ли элемент группой страниц (вкладкой)
// ВидГруппыФормы.Страница относится к элементам, которые являются страницами внутри ГруппыВид.Страницы
Если ЭлементФормы.Вид = ВидГруппыФормы.Страница Тогда
ЭлементФормы.Видимость = Ложь; // Скрываем страницу
КонецЕсли;
КонецЦикла;
В этом примере мы используем коллекцию ЭлементыФормы, которая содержит все элементы, расположенные непосредственно на форме. Если ваши страницы находятся внутри какого-либо родительского элемента (например, группы-панели), возможно, потребуется обращаться к элементам этой группы. Однако для страниц, напрямую являющихся элементами формы, данный подход вполне рабочий.
Шаг 2: Отображение конкретной страницы
После того как все страницы скрыты, мы можем отобразить нужную страницу, обратившись к ней по имени. Важно, чтобы имя страницы, указанное в коде, точно совпадало с именем элемента формы в конфигураторе.
Предположим, у нас есть страница с именем МояКонкретнаяВкладка. Для ее отображения мы используем следующий код:
// После скрытия всех вкладок в том же обработчике события
ЭлементыФормы.МояКонкретнаяВкладка.Видимость = Истина;
Мы используем оператор точка для доступа к свойству Видимость конкретного элемента формы. Перед этим шагом вы можете добавить логику для определения, какую именно вкладку следует показать данному пользователю (например, на основе его ролей или других параметров).
Альтернативный подход заключается в том, чтобы изначально установить свойство Видимость для всех страниц в конфигураторе в значение Ложь. Затем, при открытии формы, мы программно включаем видимость только для нужной страницы.
ПриОткрытии или ПередОткрытием) мы пишем код, который делает видимой нужную страницу.Рассмотрим пример кода для включения видимости:
// Предполагаем, что код выполняется в модуле формы
// Например, в процедуре ПриОткрытии()
// Определяем, какую вкладку нужно показать
// (например, на основе ролей пользователя или других условий)
Переменная_ИмяНужнойВкладки = "ВкладкаДляПрограммиста"; // Пример
// Включаем видимость конкретной вкладки
ЭлементыФормы[Переменная_ИмяНужнойВкладки].Видимость = Истина;
Важный момент и частая ошибка: Обратите внимание на синтаксис обращения к элементам формы. Мы обращаемся к элементам через коллекцию ЭлементыФормы, используя имя элемента. Например, ЭлементыФормы.МояВкладка. Если вы используете переменную для имени элемента, то синтаксис будет ЭлементыФормы[ИмяПеременнойСИменемВкладки]. Распространенной ошибкой является попытка использовать синтаксис ЭлементыФормы.[Вкладка] или ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтраница для доступа к свойству видимости конкретной страницы. Свойство ТекущаяСтраница относится к группе страниц и позволяет установить активную (текущую) страницу, но не управляет видимостью отдельных страниц напрямую.
Убедитесь, что ИмяНужнойВкладки (или Переменная_ИмяНужнойВкладки) точно совпадает с именем страницы, заданным в конфигураторе. Любая опечатка или несоответствие приведет к ошибке.
Для более декларативного управления видимостью элементов формы, особенно когда видимость зависит от ролей пользователя, мы можем использовать свойство "Пользовательская видимость" в конфигураторе.
РольДоступна("ИмяРоли"). Это может быть полезно для написания условного кода, который определяет, какую именно вкладку показывать.
// Пример использования РольДоступна() для определения, какую вкладку показать
Если РольДоступна("Программист") Тогда
ЭлементыФормы.ВкладкаДляПрограммиста.Видимость = Истина;
ИначеЕсли РольДоступна("Бухгалтер") Тогда
ЭлементыФормы.ВкладкаДляБухгалтера.Видимость = Истина;
Иначе
// Если ни одна из ролей не подошла, можно показать какую-то вкладку по умолчанию
ЭлементыФормы.ВкладкаПоУмолчанию.Видимость = Истина;
КонецЕсли;
ПриОткрытии и ПередОткрытием. ПередОткрытием выполняется до отображения формы, что позволяет инициализировать элементы до того, как пользователь увидит форму.Мы рассмотрели различные подходы к управлению видимостью страниц (вкладок) в обычных формах 1С:Предприятия. Каждый из этих методов имеет свои преимущества и может быть применен в зависимости от сложности задачи и требований к гибкости. Выбирайте тот, который наилучшим образом соответствует вашим потребностям, и всегда тщательно проверяйте имена элементов и логику в коде.