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