Прочитать текущий состав панелей без изменения интерфейса

Учебные задачи

Показываем четыре стороны и вложенные группы панелей, сохраняя их порядок в читаемой диагностической подписи.

Где и как запускать

Полный серверный общий модуль УчебныеЗадачи. Команда собственной обработки вызывает ВыполнитьПример() на сервере. Не вставляйте эти функции внутрь другой процедуры.

Подготовка

  1. Используйте собственную учебную базу и отдельного учебного пользователя, не рабочее приложение. Типы настроек доступны на сервере и в толстом клиенте, не непосредственно в обработчике тонкого клиента.

  2. Создайте серверный общий модуль УчебныеЗадачи. Для уроков с готовыми процедурами/функциями вставьте полный код в модуль; для остальных — в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды собственной управляемой обработки.

  3. Чтение и конструирование черновика не сохраняют пользовательские настройки. Только последний урок намеренно вызывает УстановитьСостав; для него нужна собственная конфигурация с именем УчебнаяКонфигурацияСинтаксиса и возможность восстановить настройки учебного пользователя вручную.

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

Функция ПодписьУчебнойГруппы(Группа)
    Результат = "[";
    Для Каждого Элемент Из Группа Цикл
        Если ТипЗнч(Элемент) = Тип("ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения") Тогда
            Результат = Результат + Элемент.Имя + ";";
        ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппаНастройкиСоставаИнтерфейсаКлиентскогоПриложения") Тогда
            Результат = Результат + ПодписьУчебнойГруппы(Элемент) + ";";
        Иначе
            ВызватьИсключение "Неизвестный тип элемента состава интерфейса";
        КонецЕсли;
    КонецЦикла;
    Возврат Результат + "]";
КонецФункции

Функция ПодписьУчебногоСостава(Состав)
    Возврат "Верх=" + ПодписьУчебнойГруппы(Состав.Верх)
        + " Лево=" + ПодписьУчебнойГруппы(Состав.Лево)
        + " Низ=" + ПодписьУчебнойГруппы(Состав.Низ)
        + " Право=" + ПодписьУчебнойГруппы(Состав.Право);
КонецФункции

Разбор по шагам

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

  2. Верх, Лево, Низ, Право — доступные только для чтения ссылки на коллекции. Не присваиваем новое значение этим свойствам.

  3. Элемент коллекции может быть панелью либо группой. Проверка ТипЗнч позволяет прочитать Имя только у панели; у группы рекурсивно обходим её элементы.

  4. Квадратные скобки и точки с запятой — собственная диагностическая запись дерева, не формат хранения платформы. Число элементов стороны не всегда равно числу панелей: группа занимает один элемент.

  5. Получение состава на сервере не является визуальной проверкой окна каждого клиента. Фактическая поддержка панелей зависит от режима приложения и интерфейса.

Как проверить результат

  1. Сверьте четыре стороны и порядок панелей с настройками текущего учебного пользователя; пустая сторона нормально выводится как [].

  2. Состав пользовательских настроек остался прежним: УстановитьСостав не вызывается.

Ожидаемый результат

Получен читаемый снимок структуры панелей с корректным различением панели и группы.

На что обратить внимание

  1. Не читайте Имя у группы: это свойство элемента-панели.

  2. Не приравнивайте Количество() группы к числу открытых форм или работающих пользователей.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.