Как скрыть видимость всех страниц (вкладок) на форме в 1С:Предприятии (обычные формы) и затем программно отобразить нужную?

Программист 1С v8.3 (Обычные формы)
← На главную

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

1. Программное скрытие всех страниц (вкладок) циклом и последующее отображение нужной

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

Шаг 1: Скрытие всех страниц в группе

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

Рассмотрим пример кода:


// Предполагаем, что код выполняется в модуле формы

// В процедуре ПередОткрытием() или ПриОткрытии()
Для Каждого ЭлементФормы Из ЭлементыФормы Цикл
    // Проверяем, является ли элемент группой страниц (вкладкой)
    // ВидГруппыФормы.Страница относится к элементам, которые являются страницами внутри ГруппыВид.Страницы
    Если ЭлементФормы.Вид = ВидГруппыФормы.Страница Тогда
        ЭлементФормы.Видимость = Ложь; // Скрываем страницу
    КонецЕсли;
КонецЦикла;

В этом примере мы используем коллекцию ЭлементыФормы, которая содержит все элементы, расположенные непосредственно на форме. Если ваши страницы находятся внутри какого-либо родительского элемента (например, группы-панели), возможно, потребуется обращаться к элементам этой группы. Однако для страниц, напрямую являющихся элементами формы, данный подход вполне рабочий.

Шаг 2: Отображение конкретной страницы

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

Предположим, у нас есть страница с именем МояКонкретнаяВкладка. Для ее отображения мы используем следующий код:


// После скрытия всех вкладок в том же обработчике события
ЭлементыФормы.МояКонкретнаяВкладка.Видимость = Истина;

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

2. Настройка видимости в конфигураторе с последующим программным включением

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

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

Рассмотрим пример кода для включения видимости:


// Предполагаем, что код выполняется в модуле формы
// Например, в процедуре ПриОткрытии()

// Определяем, какую вкладку нужно показать
// (например, на основе ролей пользователя или других условий)
Переменная_ИмяНужнойВкладки = "ВкладкаДляПрограммиста"; // Пример

// Включаем видимость конкретной вкладки
ЭлементыФормы[Переменная_ИмяНужнойВкладки].Видимость = Истина;

Важный момент и частая ошибка: Обратите внимание на синтаксис обращения к элементам формы. Мы обращаемся к элементам через коллекцию ЭлементыФормы, используя имя элемента. Например, ЭлементыФормы.МояВкладка. Если вы используете переменную для имени элемента, то синтаксис будет ЭлементыФормы[ИмяПеременнойСИменемВкладки]. Распространенной ошибкой является попытка использовать синтаксис ЭлементыФормы.[Вкладка] или ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтраница для доступа к свойству видимости конкретной страницы. Свойство ТекущаяСтраница относится к группе страниц и позволяет установить активную (текущую) страницу, но не управляет видимостью отдельных страниц напрямую.

Убедитесь, что ИмяНужнойВкладки (или Переменная_ИмяНужнойВкладки) точно совпадает с именем страницы, заданным в конфигураторе. Любая опечатка или несоответствие приведет к ошибке.

3. Использование ролей и "Пользовательской видимости" для управления доступом

Для более декларативного управления видимостью элементов формы, особенно когда видимость зависит от ролей пользователя, мы можем использовать свойство "Пользовательская видимость" в конфигураторе.

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

// Пример использования РольДоступна() для определения, какую вкладку показать
Если РольДоступна("Программист") Тогда
    ЭлементыФормы.ВкладкаДляПрограммиста.Видимость = Истина;
ИначеЕсли РольДоступна("Бухгалтер") Тогда
    ЭлементыФормы.ВкладкаДляБухгалтера.Видимость = Истина;
Иначе
    // Если ни одна из ролей не подошла, можно показать какую-то вкладку по умолчанию
    ЭлементыФормы.ВкладкаПоУмолчанию.Видимость = Истина;
КонецЕсли;

Общие рекомендации и особенности

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

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

← На главную