Сохранить свой учебный профиль отдельно от действующих параметров пользователя

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

Объект сериализуется в обычное хранилище под новым UUID. Системный ключ настроек запуска не перезаписывается; профиль остаётся учебным образцом.

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

Полный серверный общий модуль собственной учебной конфигурации. Не модуль запуска рабочей базы.

Подготовка

  1. Создайте серверный общий модуль УчебныеНастройкиКлиента в отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса. Флаг Сервер включён. Вставьте весь код одного выбранного урока.

  2. Из серверной команды собственной обработки вызовите УчебныеНастройкиКлиента.ВыполнитьПример(). Используйте платформу 8.5.1.1343: новые свойства 8.5 отсутствуют на старых релизах.

  3. Для первого опыта вручную сохраните настройки клиентского приложения через его стандартное окно параметров и заново войдите своим учебным пользователем. Отсутствие сохранённой настройки тоже обрабатывается.

  4. Во всех опытах имя другого пользователя не передаётся. Первый урок только читает системный ключ текущего пользователя; следующие не перезаписывают этот системный ключ.

  5. Последний урок сохраняет один собственный профиль под учебным ключом в ХранилищеОбщихНастроек. Нужна роль с правом СохранениеДанныхПользователя; не включайте привилегированный режим ради опыта.

  6. Проверка объекта и его сериализации не доказывает видимое применение темы, масштаба или расположения панелей. Эксперименты с внешним видом выполняйте только в собственной учебной базе.

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

Функция СоздатьСвойПрофиль85()
    Профиль = Новый НастройкиКлиентскогоПриложения;
    Профиль.ВариантИнтерфейсаКлиентскогоПриложения = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_5;
    Профиль.ВариантМасштабаФормКлиентскогоПриложения = ВариантМасштабаФормКлиентскогоПриложения.Обычный;
    Профиль.ВариантОткрытияОконКлиентскогоПриложения = ВариантОткрытияОконКлиентскогоПриложения.ОткрыватьДанныеВДиалоговыхОкнах;
    Профиль.ВариантОтображенияОсновногоОкнаКлиентскогоПриложения = ВариантОтображенияОсновногоОкнаКлиентскогоПриложения.НавигацияСлева;
    Профиль.ОтображатьПанелиНавигацииИДействий = Ложь;
    Профиль.ОтображатьПанельРазделов = Истина;
    Профиль.РежимОткрытияФормПриложения = РежимОткрытияФормПриложения.Закладки;
    Профиль.СкоростьКлиентскогоСоединения = СкоростьКлиентскогоСоединения.Обычная;
    Профиль.ТемаКлиентскогоПриложения = ТемаКлиентскогоПриложения.Светлая;
    Возврат Профиль;
КонецФункции

Функция СнимокСвоегоПрофиля(Профиль)
    Если ТипЗнч(Профиль) <> Тип("НастройкиКлиентскогоПриложения") Тогда
        ВызватьИсключение "Ожидался объект настроек клиентского приложения";
    КонецЕсли;
    Снимок = Новый Структура;
    Снимок.Вставить("ВариантИнтерфейсаКлиентскогоПриложения", Профиль.ВариантИнтерфейсаКлиентскогоПриложения);
    Снимок.Вставить("ВариантМасштабаКлиентскогоПриложения", Профиль.ВариантМасштабаКлиентскогоПриложения);
    Снимок.Вставить("ВариантМасштабаФормКлиентскогоПриложения", Профиль.ВариантМасштабаФормКлиентскогоПриложения);
    Снимок.Вставить("ВариантОткрытияОконКлиентскогоПриложения", Профиль.ВариантОткрытияОконКлиентскогоПриложения);
    Снимок.Вставить("ВариантОтображенияОсновногоОкнаКлиентскогоПриложения", Профиль.ВариантОтображенияОсновногоОкнаКлиентскогоПриложения);
    Снимок.Вставить("ОтображатьПанелиНавигацииИДействий", Профиль.ОтображатьПанелиНавигацииИДействий);
    Снимок.Вставить("ОтображатьПанельРазделов", Профиль.ОтображатьПанельРазделов);
    Снимок.Вставить("РежимОткрытияФормПриложения", Профиль.РежимОткрытияФормПриложения);
    Снимок.Вставить("СкоростьКлиентскогоСоединения", Профиль.СкоростьКлиентскогоСоединения);
    Снимок.Вставить("ТемаКлиентскогоПриложения", Профиль.ТемаКлиентскогоПриложения);
    Возврат Снимок;
КонецФункции

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

  1. Сформировать собственный профиль и уникальный ключ УчебныеПрофили85/<UUID>. Имя пользователя не задаётся, запись принадлежит текущему.

  2. Проверить, что новый ключ свободен, и вывести точную пару ключей до сохранения.

  3. Сохранить объект в ХранилищеОбщихНастроек, затем загрузить его оттуда же.

  4. Проверить реальный тип через функцию снимка и сравнить все десять параметров по именам.

  5. Запись оставлена для просмотра: нет автоматического удаления чужих или всех настроек, нет перезаписи Общее/НастройкиКлиентскогоПриложения.

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

  1. Одиннадцать булевых сообщений Истина: количество полей и десять совпадений исходного/загруженного объекта.

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

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

Сохранён отдельный учебный профиль с проверкой сериализации без назначения рабочим профилем запуска.

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

  1. Это упражнение действительно сохраняет один учебный образец: запускайте только в собственной базе и не повторяйте бесконечно, создавая лишние записи.

  2. Не переносите сохранение на системный ключ без отдельного проекта миграции и резервной копии настроек.

  3. Успешное чтение объекта не доказывает фактическое применение интерфейса, темы или режима окон.

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

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

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

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

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