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