Собрать свой профиль 8.5 и изменить независимую копию для сравнения

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

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

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

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

Подготовка

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

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

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

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

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

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

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

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

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

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

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

  2. Сериализовать только свой объект и сразу восстановить его из своей строки. Не принимать эту строку из HTTP, файла или пользовательского ввода.

  3. В независимой копии изменить тему и направление навигации; исходный объект не присваивать копии.

  4. Сопоставить два снимка и снова прочитать оригинал, чтобы подтвердить независимость объектов.

  5. Смена значения темы в объекте не используется как доказательство изменения цветов открытого приложения.

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

  1. Девять булевых сообщений Истина: обе версии отличаются только выбранными темой и положением навигации; оригинал сохранился.

  2. ВариантМасштабаКлиентскогоПриложения одинаков до и после, присваивания этому свойству нет.

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

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

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

  1. Внутренняя строка — формат платформы, не JSON и не стабильный публичный контракт обмена.

  2. ЗначениеИзСтрокиВнутр здесь получает исключительно только что созданное собственное представление; не десериализуйте неизвестный внешний текст.

  3. Настройки 8.5 не гарантируют переход рабочего приложения на другой интерфейс: действуют ограничения конфигурации и клиента.

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

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

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

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

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