Один объект описывает светлый профиль с навигацией слева. Его собственное внутреннее представление читается обратно и копия меняется на тёмный вариант с навигацией сверху.
Где и как запускать
Полный серверный общий модуль собственной учебной конфигурации. Не модуль запуска рабочей базы.
Подготовка
Создайте серверный общий модуль УчебныеНастройкиКлиента в отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса. Флаг Сервер включён. Вставьте весь код одного выбранного урока.
Из серверной команды собственной обработки вызовите УчебныеНастройкиКлиента.ВыполнитьПример(). Используйте платформу 8.5.1.1343: новые свойства 8.5 отсутствуют на старых релизах.
Для первого опыта вручную сохраните настройки клиентского приложения через его стандартное окно параметров и заново войдите своим учебным пользователем. Отсутствие сохранённой настройки тоже обрабатывается.
Во всех опытах имя другого пользователя не передаётся. Первый урок только читает системный ключ текущего пользователя; следующие не перезаписывают этот системный ключ.
Последний урок сохраняет один собственный профиль под учебным ключом в ХранилищеОбщихНастроек. Нужна роль с правом СохранениеДанныхПользователя; не включайте привилегированный режим ради опыта.
Проверка объекта и его сериализации не доказывает видимое применение темы, масштаба или расположения панелей. Эксперименты с внешним видом выполняйте только в собственной учебной базе.
Процедура ВыполнитьПример() Экспорт
Оригинал = СоздатьСвойПрофиль85();
До = СнимокСвоегоПрофиля(Оригинал);
СтрокаСвоегоПрофиля = ЗначениеВСтрокуВнутр(Оригинал);
Копия = ЗначениеИзСтрокиВнутр(СтрокаСвоегоПрофиля);
Если ТипЗнч(Копия) <> Тип("НастройкиКлиентскогоПриложения") Тогда
ВызватьИсключение "Сериализация собственного профиля не сохранила тип";
КонецЕсли;
Копия.ТемаКлиентскогоПриложения = ТемаКлиентскогоПриложения.Темная;
Копия.ВариантОтображенияОсновногоОкнаКлиентскогоПриложения = ВариантОтображенияОсновногоОкнаКлиентскогоПриложения.НавигацияСверху;
После = СнимокСвоегоПрофиля(Копия);
Сообщить(До.ВариантИнтерфейсаКлиентскогоПриложения = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_5);
Сообщить(До.ВариантМасштабаФормКлиентскогоПриложения = ВариантМасштабаФормКлиентскогоПриложения.Обычный);
Сообщить(До.ТемаКлиентскогоПриложения = ТемаКлиентскогоПриложения.Светлая);
Сообщить(После.ТемаКлиентскогоПриложения = ТемаКлиентскогоПриложения.Темная);
Сообщить(До.ВариантОтображенияОсновногоОкнаКлиентскогоПриложения = ВариантОтображенияОсновногоОкнаКлиентскогоПриложения.НавигацияСлева);
Сообщить(После.ВариантОтображенияОсновногоОкнаКлиентскогоПриложения = ВариантОтображенияОсновногоОкнаКлиентскогоПриложения.НавигацияСверху);
Сообщить(До.ВариантМасштабаКлиентскогоПриложения = После.ВариантМасштабаКлиентскогоПриложения);
Сообщить(Оригинал.ТемаКлиентскогоПриложения = ТемаКлиентскогоПриложения.Светлая);
Сообщить(Оригинал.ВариантОтображенияОсновногоОкнаКлиентскогоПриложения = ВариантОтображенияОсновногоОкнаКлиентскогоПриложения.НавигацияСлева);
Сообщить("Проверены объекты профилей, не видимое применение к текущему окну");
КонецПроцедуры
Функция СоздатьСвойПрофиль85()
Профиль = Новый НастройкиКлиентскогоПриложения;
Профиль.ВариантИнтерфейсаКлиентскогоПриложения = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_5;
Профиль.ВариантМасштабаФормКлиентскогоПриложения = ВариантМасштабаФормКлиентскогоПриложения.Обычный;
Профиль.ВариантОткрытияОконКлиентскогоПриложения = ВариантОткрытияОконКлиентскогоПриложения.ОткрыватьДанныеВДиалоговыхОкнах;
Профиль.ВариантОтображенияОсновногоОкнаКлиентскогоПриложения = ВариантОтображенияОсновногоОкнаКлиентскогоПриложения.НавигацияСлева;
Профиль.ОтображатьПанелиНавигацииИДействий = Ложь;
Профиль.ОтображатьПанельРазделов = Истина;
Профиль.РежимОткрытияФормПриложения = РежимОткрытияФормПриложения.Закладки;
Профиль.СкоростьКлиентскогоСоединения = СкоростьКлиентскогоСоединения.Обычная;
Профиль.ТемаКлиентскогоПриложения = ТемаКлиентскогоПриложения.Светлая;
Возврат Профиль;
КонецФункции
Функция СнимокСвоегоПрофиля(Профиль)
Если ТипЗнч(Профиль) <> Тип("НастройкиКлиентскогоПриложения") Тогда
ВызватьИсключение "Ожидался объект настроек клиентского приложения";
КонецЕсли;
Снимок = Новый Структура;
Снимок.Вставить("ВариантИнтерфейсаКлиентскогоПриложения", Профиль.ВариантИнтерфейсаКлиентскогоПриложения);
Снимок.Вставить("ВариантМасштабаКлиентскогоПриложения", Профиль.ВариантМасштабаКлиентскогоПриложения);
Снимок.Вставить("ВариантМасштабаФормКлиентскогоПриложения", Профиль.ВариантМасштабаФормКлиентскогоПриложения);
Снимок.Вставить("ВариантОткрытияОконКлиентскогоПриложения", Профиль.ВариантОткрытияОконКлиентскогоПриложения);
Снимок.Вставить("ВариантОтображенияОсновногоОкнаКлиентскогоПриложения", Профиль.ВариантОтображенияОсновногоОкнаКлиентскогоПриложения);
Снимок.Вставить("ОтображатьПанелиНавигацииИДействий", Профиль.ОтображатьПанелиНавигацииИДействий);
Снимок.Вставить("ОтображатьПанельРазделов", Профиль.ОтображатьПанельРазделов);
Снимок.Вставить("РежимОткрытияФормПриложения", Профиль.РежимОткрытияФормПриложения);
Снимок.Вставить("СкоростьКлиентскогоСоединения", Профиль.СкоростьКлиентскогоСоединения);
Снимок.Вставить("ТемаКлиентскогоПриложения", Профиль.ТемаКлиентскогоПриложения);
Возврат Снимок;
КонецФункцииРазбор по шагам
Создать собственный профиль фабрикой: все девять изменяемых параметров назначены явно, десятый только читается.
Сериализовать только свой объект и сразу восстановить его из своей строки. Не принимать эту строку из HTTP, файла или пользовательского ввода.
В независимой копии изменить тему и направление навигации; исходный объект не присваивать копии.
Сопоставить два снимка и снова прочитать оригинал, чтобы подтвердить независимость объектов.
Смена значения темы в объекте не используется как доказательство изменения цветов открытого приложения.
Как проверить результат
Девять булевых сообщений Истина: обе версии отличаются только выбранными темой и положением навигации; оригинал сохранился.
ВариантМасштабаКлиентскогоПриложения одинаков до и после, присваивания этому свойству нет.
Ожидаемый результат
Сформированы и сравнены полноценные профили, а не универсальная обёртка отдельного свойства.
На что обратить внимание
Внутренняя строка — формат платформы, не JSON и не стабильный публичный контракт обмена.
ЗначениеИзСтрокиВнутр здесь получает исключительно только что созданное собственное представление; не десериализуйте неизвестный внешний текст.
Настройки 8.5 не гарантируют переход рабочего приложения на другой интерфейс: действуют ограничения конфигурации и клиента.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.