В отдельном обычном приложении показываем разницу Видимость и Переключаемый. Основной интерфейс оставляем непереключаемым, дополнительный включаем групповой операцией.
Где и как запускать
Полный модуль обычной формы собственной учебной EPF; толстый клиент Windows, именно ОбычноеПриложение.
Подготовка
Создайте отдельную свою конфигурацию УчебнаяКонфигурацияСинтаксиса с режимом запуска ОбычноеПриложение. Управляемое приложение для этого урока не подходит.
В ветке Общие → Интерфейсы создайте ровно два собственных интерфейса УчебныйОсновной и УчебныйДополнительный. Не переносите рабочие меню: добавьте только учебные меню с разными заголовками.
Назначьте оба интерфейса собственному учебному пользователю по правилам своей конфигурации. В коллекции текущего сеанса должны быть ровно эти два интерфейса.
Создайте учебную внешнюю обработку с обычной формой и кнопкой УчебнаяКоманда, свяжите действие с одноимённой процедурой. Вставьте полный модуль и запустите в толстом клиенте Windows 8.5.1.1343.
Урок меняет только отображение собственных интерфейсов текущего приложения и возвращает их исходные флаги. Метаданные, роли, документы и регистры код не записывает.
Процедура УчебнаяКоманда(Кнопка)
Интерфейсы = ГлавныйИнтерфейс;
Если Интерфейсы.Количество() <> 2 Тогда
ВызватьИсключение "Для упражнения нужны ровно два собственных интерфейса и ни одного другого";
КонецЕсли;
Основной = Интерфейсы.Найти("УчебныйОсновной");
Дополнительный = Интерфейсы.Найти("УчебныйДополнительный");
Если Основной = Неопределено Или Дополнительный = Неопределено Или Основной = Дополнительный Тогда
ВызватьИсключение "Не найдены два собственных разных интерфейса";
КонецЕсли;
Исходные = Новый Структура("ВидимостьОсновного,ПереключаемыйОсновной,ВидимостьДополнительного,ПереключаемыйДополнительный",
Основной.Видимость, Основной.Переключаемый, Дополнительный.Видимость, Дополнительный.Переключаемый);
Попытка
Основной.Видимость = Истина;
Основной.Переключаемый = Ложь;
Дополнительный.Видимость = Ложь;
Дополнительный.Переключаемый = Истина;
Сообщить(Интерфейсы.Получить(Интерфейсы.Индекс(Основной)) = Основной);
Сообщить(Интерфейсы.Получить(Интерфейсы.Индекс(Дополнительный)) = Дополнительный);
Сообщить(Основной.Видимость И НЕ Основной.Переключаемый);
Сообщить(НЕ Дополнительный.Видимость И Дополнительный.Переключаемый);
Интерфейсы.ПереключитьИнтерфейс("УчебныйДополнительный");
Сообщить(Основной.Видимость);
Сообщить(Дополнительный.Видимость);
Сообщить("Оба своих интерфейса видимы: основной не скрыт групповым переключением");
Исключение
ОшибкаОперации = ОписаниеОшибки();
Основной.Переключаемый = Исходные.ПереключаемыйОсновной;
Дополнительный.Переключаемый = Исходные.ПереключаемыйДополнительный;
Основной.Видимость = Исходные.ВидимостьОсновного;
Дополнительный.Видимость = Исходные.ВидимостьДополнительного;
ВызватьИсключение ОшибкаОперации;
КонецПопытки;
Основной.Переключаемый = Исходные.ПереключаемыйОсновной;
Дополнительный.Переключаемый = Исходные.ПереключаемыйДополнительный;
Основной.Видимость = Исходные.ВидимостьОсновного;
Дополнительный.Видимость = Исходные.ВидимостьДополнительного;
Сообщить(Основной.Видимость = Исходные.ВидимостьОсновного);
Сообщить(Основной.Переключаемый = Исходные.ПереключаемыйОсновной);
Сообщить(Дополнительный.Видимость = Исходные.ВидимостьДополнительного);
Сообщить(Дополнительный.Переключаемый = Исходные.ПереключаемыйДополнительный);
КонецПроцедурыРазбор по шагам
Получить настоящую коллекцию ГлавныйИнтерфейс. Проверить ровно два элемента и найти свои интерфейсы по точным именам.
Сохранить четыре исходных флага до первого изменения. Основной сделать видимым и непереключаемым, дополнительный скрытым и переключаемым.
ПереключитьИнтерфейс принимает строку имён через запятую, не массив. Передать только своё дополнительное имя: основной остаётся видимым благодаря Переключаемый = Ложь.
Проверить оба интерфейса, затем восстановить сохранённые значения при успехе и в обработке ошибки. Коллекция не очищается, интерфейсы не удаляются.
Как проверить результат
Десять булевых проверок дают Истина в обычном приложении с двумя собственными интерфейсами.
После команды Видимость и Переключаемый обоих интерфейсов совпадают с исходными. Промежуточный UI может не успеть перерисоваться внутри одной команды: проверяются настоящие свойства и восстановление.
Ожидаемый результат
Полный пример старого интерфейсного API с ограничением ровно своими элементами и восстановлением состояния.
На что обратить внимание
Переключаемый = Ложь означает, что групповое переключение не скрывает интерфейс. Это не означает невозможность прямого изменения Видимость.
В режиме УправляемоеПриложение ПереключитьИнтерфейс игнорируется по контракту платформы. Не объявляйте это багом или способом управления современным командным интерфейсом.
ГлавныйИнтерфейс не имеет конструктора и методов Добавить/Удалить. Интерфейсы сначала создаются в конфигураторе, не в этом модуле.
Не запускайте упражнение над рабочими интерфейсами. Видимость меню не изменяет права пользователя на данные.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.