Стиль.По умолчанию

Конструкторы

Создает значение, которое будет восприниматься как стиль по умолчанию (стиль "Авто").

Синтаксис

Новый Стиль()
Полное описание, параметры и ограничения

Стиль.По умолчанию

Стиль (Style)

Конструктор по умолчанию

Доступен, начиная с версии 8.0.

Синтаксис:
Новый Стиль()
Описание:

Создает значение, которое будет восприниматься как стиль по умолчанию (стиль "Авто").

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Настроить собственное окно до открытия и восстановить профиль

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

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

Полный модуль собственной обычной формы Пульт; настраивает только ещё закрытую Панель. Толстый клиент, не запускался.

Подготовка

  1. Создайте НОВУЮ пустую конфигурацию УчебныеОкна85 на платформе 8.5.1.1343, без бизнес-объектов, расширений, подписок и регламентных заданий. Уроки относятся только к обычным формам толстого клиента, не к управляемой форме, тонкому или веб-клиенту. Ничего в рабочих УТ, КА, УНФ или БП не изменяйте. Здесь база, формы и код в 1С не запускались: runtimeVerifiedScenarios=0.

  2. Создайте общий модуль УчебныеОкна85: Клиент (обычное приложение)=Да, Сервер=Нет, Глобальный=Нет, Вызов сервера=Нет. Вставьте полный отдельный модуль проверки стенда из блока ниже. Он проверяет собственную пустую конфигурацию.

  3. Добавьте только свою обработку УчебнаяПанель85 с обычными формами Пульт и Панель. Пульт — основная форма. Панель: реквизит ТекстПанели (Строка,80), поле ввода и кнопки ПоказатьТекст/ЗакрытьПанель. Кнопка ПоказатьТекст — кнопка по умолчанию; она только выводит текст, не закрывает окно. Размер панели в редакторе сделайте не больше 120×90 логических единиц.

  4. Назначьте одноимённые действия кнопок и событие ПриОткрытии обеих форм. Вставьте отдельно полный основной модуль Пульта и полный модуль Панели ниже. Код нельзя перенести в модуль управляемой формы. Проверьте F7.

  5. В Пульт добавьте кнопки ОбычноеОкно, ПрикрепленнаяПанель, ПроверитьВосстановление, ЗакрытьСвоюПанель и одноимённые обработчики. Каждую новую видимую панель сначала закрывайте своей кнопкой; модуль отказывается менять профиль уже открытого окна.

Перем Окно;

Процедура ПриОткрытии()
    УчебныеОкна85.ПроверитьСвойПустойСтенд();
    Если Метаданные.Обработки.Количество() <> 1 Или Метаданные.Обработки[0].Имя <> "УчебнаяПанель85" Тогда
        ВызватьИсключение "Подготовьте только собственную обработку УчебнаяПанель85";
    КонецЕсли;
    Окно = Неопределено;
КонецПроцедуры

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

Функция СоздатьПрофиль(Прикрепленный)
    Если Прикрепленный Тогда
        Возврат Новый Структура("Ширина,Высота,ИзменениеРазмера,ПоложениеОкна,СостояниеОкна,СпособОтображенияОкна,ИзменятьСпособОтображенияОкна,СоединяемоеОкно,РежимРабочегоСтола,ПоложениеПрикрепленногоОкна,РазрешитьСоединятьОкно,РазрешитьСостояниеОбычное,РазрешитьСостояниеПрикрепленное,РазрешитьСостояниеПрячущееся,РазрешитьСостояниеСвободное,РазрешитьЗакрытие,ПоведениеКлавишиEnter",
            160, 110, ИзменениеРазмераОкна.НеИзменять, ВариантПоложенияОкна.НеПерекрыватьВладельца,
            ВариантСостоянияОкна.Прикрепленное, ВариантСпособаОтображенияОкна.Нормальное,
            ИзменениеСпособаОтображенияОкна.Запретить, Истина, Ложь, ВариантПрикрепленияОкна.Лево,
            Истина, Истина, Истина, Истина, Истина, Истина, ТипПоведенияКлавишиEnter.КнопкаПоУмолчанию);
    Иначе
        Возврат Новый Структура("Ширина,Высота,ИзменениеРазмера,ПоложениеОкна,СостояниеОкна,СпособОтображенияОкна,ИзменятьСпособОтображенияОкна,СоединяемоеОкно,РежимРабочегоСтола,ПоложениеПрикрепленногоОкна,РазрешитьСоединятьОкно,РазрешитьСостояниеОбычное,РазрешитьСостояниеПрикрепленное,РазрешитьСостояниеПрячущееся,РазрешитьСостояниеСвободное,РазрешитьЗакрытие,ПоведениеКлавишиEnter",
            220, 150, ИзменениеРазмераОкна.Изменять, ВариантПоложенияОкна.Центрировать,
            ВариантСостоянияОкна.Обычное, ВариантСпособаОтображенияОкна.Нормальное,
            ИзменениеСпособаОтображенияОкна.Разрешить, Ложь, Ложь, ВариантПрикрепленияОкна.Право,
            Ложь, Истина, Ложь, Ложь, Ложь, Истина, ТипПоведенияКлавишиEnter.ПереходПоЭлементамФормы);
    КонецЕсли;
КонецФункции

Процедура ПрименитьПрофиль(ФормаПанели, Профиль)
    ПроверитьЗакрытоеОкно(ФормаПанели);
    ФормаПанели.Ширина = Профиль.Ширина;
    ФормаПанели.Высота = Профиль.Высота;
    ФормаПанели.ИзменениеРазмера = Профиль.ИзменениеРазмера;
    ФормаПанели.ПоложениеОкна = Профиль.ПоложениеОкна;
    ФормаПанели.СостояниеОкна = Профиль.СостояниеОкна;
    ФормаПанели.СпособОтображенияОкна = Профиль.СпособОтображенияОкна;
    ФормаПанели.ИзменятьСпособОтображенияОкна = Профиль.ИзменятьСпособОтображенияОкна;
    ФормаПанели.СоединяемоеОкно = Профиль.СоединяемоеОкно;
    ФормаПанели.РежимРабочегоСтола = Профиль.РежимРабочегоСтола;
    ФормаПанели.ПоложениеПрикрепленногоОкна = Профиль.ПоложениеПрикрепленногоОкна;
    ФормаПанели.РазрешитьСоединятьОкно = Профиль.РазрешитьСоединятьОкно;
    ФормаПанели.РазрешитьСостояниеОбычное = Профиль.РазрешитьСостояниеОбычное;
    ФормаПанели.РазрешитьСостояниеПрикрепленное = Профиль.РазрешитьСостояниеПрикрепленное;
    ФормаПанели.РазрешитьСостояниеПрячущееся = Профиль.РазрешитьСостояниеПрячущееся;
    ФормаПанели.РазрешитьСостояниеСвободное = Профиль.РазрешитьСостояниеСвободное;
    ФормаПанели.РазрешитьЗакрытие = Профиль.РазрешитьЗакрытие;
    ФормаПанели.ПоведениеКлавишиEnter = Профиль.ПоведениеКлавишиEnter;
КонецПроцедуры

Функция СнятьПрофиль(ФормаПанели)
    ПроверитьЗакрытоеОкно(ФормаПанели);
    Возврат Новый Структура("Ширина,Высота,ИзменениеРазмера,ПоложениеОкна,СостояниеОкна,СпособОтображенияОкна,ИзменятьСпособОтображенияОкна,СоединяемоеОкно,РежимРабочегоСтола,ПоложениеПрикрепленногоОкна,РазрешитьСоединятьОкно,РазрешитьСостояниеОбычное,РазрешитьСостояниеПрикрепленное,РазрешитьСостояниеПрячущееся,РазрешитьСостояниеСвободное,РазрешитьЗакрытие,ПоведениеКлавишиEnter",
        ФормаПанели.Ширина, ФормаПанели.Высота, ФормаПанели.ИзменениеРазмера,
        ФормаПанели.ПоложениеОкна, ФормаПанели.СостояниеОкна, ФормаПанели.СпособОтображенияОкна,
        ФормаПанели.ИзменятьСпособОтображенияОкна, ФормаПанели.СоединяемоеОкно, ФормаПанели.РежимРабочегоСтола,
        ФормаПанели.ПоложениеПрикрепленногоОкна, ФормаПанели.РазрешитьСоединятьОкно, ФормаПанели.РазрешитьСостояниеОбычное,
        ФормаПанели.РазрешитьСостояниеПрикрепленное, ФормаПанели.РазрешитьСостояниеПрячущееся, ФормаПанели.РазрешитьСостояниеСвободное,
        ФормаПанели.РазрешитьЗакрытие, ФормаПанели.ПоведениеКлавишиEnter);
КонецФункции

Процедура ОбычноеОкно(Кнопка)
    ФормаПанели = СоздатьЗакрытоеОкно();
    Профиль = СоздатьПрофиль(Ложь);
    ПрименитьПрофиль(ФормаПанели, Профиль);
    ПроверитьПрофиль(ФормаПанели, Профиль);
    ФормаПанели.Открыть();
КонецПроцедуры

Процедура ПрикрепленнаяПанель(Кнопка)
    ФормаПанели = СоздатьЗакрытоеОкно();
    Профиль = СоздатьПрофиль(Истина);
    ПрименитьПрофиль(ФормаПанели, Профиль);
    ПроверитьПрофиль(ФормаПанели, Профиль);
    ФормаПанели.Открыть();
КонецПроцедуры

Процедура ПроверитьВосстановление(Кнопка)
    ФормаПанели = СоздатьЗакрытоеОкно();
    ПрименитьПрофиль(ФормаПанели, СоздатьПрофиль(Ложь));
    Снимок = СнятьПрофиль(ФормаПанели);
    Попытка
        Профиль = СоздатьПрофиль(Истина);
        ПрименитьПрофиль(ФормаПанели, Профиль);
        ПроверитьПрофиль(ФормаПанели, Профиль);
    Исключение
        ПрименитьПрофиль(ФормаПанели, Снимок);
        ПроверитьПрофиль(ФормаПанели, Снимок);
        ВызватьИсключение;
    КонецПопытки;
    ПрименитьПрофиль(ФормаПанели, Снимок);
    ПроверитьПрофиль(ФормаПанели, Снимок);
    Сообщить("17 скалярных настроек восстановлены до открытия окна");
КонецПроцедуры

Процедура ЗакрытьСвоюПанель(Кнопка)
    Если Окно <> Неопределено И Окно.Открыта() Тогда
        Окно.Закрыть();
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьЗакрытоеОкно(ФормаПанели)
    Если ТипЗнч(ФормаПанели) <> Тип("Форма") Или ФормаПанели.Открыта() Тогда
        ВызватьИсключение "Профиль задаётся только своей закрытой форме";
    КонецЕсли;
КонецПроцедуры

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

Своя обработка УчебнаяПанель85 → Формы → Панель → Модуль

Полный отдельный модуль обычной формы Панель, не вставлять внутрь модуля Пульта; не выполнялся.

Процедура ПриОткрытии()
    УчебныеОкна85.ПроверитьСвойПустойСтенд();
    ТекстПанели = "Собственная учебная панель";
КонецПроцедуры

Процедура ПоказатьТекст(Кнопка)
    Сообщить(ТекстПанели);
КонецПроцедуры

Процедура ЗакрытьПанель(Кнопка)
    ЭтаФорма.Закрыть();
КонецПроцедуры
УчебныеОкна85.ПроверкаСтенда

Своя конфигурация УчебныеОкна85 → Общие → Общие модули → УчебныеОкна85

Полный общий модуль только обычного клиента; не выполнялся.

Процедура ПроверитьСвойПустойСтенд() Экспорт
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. СоздатьЗакрытоеОкно получает только свою Панель с новым UUID. Уникальный ключ сохранения снижает влияние старого пользовательского расположения на новый опыт; последующие открытия могут сохранять внутренние параметры этого окна. Это не очистка чужих профилей.

  2. Ширина/Высота — логические единицы, не пиксели. Обычный профиль 220×150 разрешает изменение размера; прикреплённый 160×110 запрещает. Свойства проверяются до показа; действительный размер экрана и ограничения интерфейса проверяются отдельно.

  3. ПоложениеОкна относится к обычному/свободному состоянию, ПоложениеПрикрепленногоОкна — к прикреплённому/прячущемуся. СостояниеОкна и СпособОтображенияОкна — разные перечисления. Оба профиля открываются нормально, не минимизированно.

  4. РазрешитьСостояние... задают допустимые переключения, но сами по себе не переводят окно в состояние. СоединяемоеОкно и РазрешитьСоединятьОкно также не равны друг другу. Эти настройки, положение и состояние задаются только перед Открыть.

  5. РежимРабочегоСтола=Ложь и РазрешитьЗакрытие=Истина заданы явно: учебная панель не перекрывает системные панели и её можно закрыть. Для отдельного ручного опыта поменяйте только эти флаги в копии профиля; программная кнопка ЗакрытьПанель остаётся доступным способом выхода.

  6. ПоведениеКлавишиEnter сравнивает переход по полям с нажатием безопасной кнопки ПоказатьТекст. КартинкаЗаголовка=Новый Картинка убирает значок; Стиль=Новый Стиль задаёт Авто. Эти два объекта не входят в скалярный снимок и не изменяются при цикле.

  7. ПроверитьВосстановление снимает состояние после собственного обычного профиля, применяет прикреплённый, проверяет типы/значения и возвращает 17 полей. При исключении тоже восстанавливает их и передаёт ошибку дальше; окно в цикле вообще не открывается.

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

  1. В будущем ручном запуске сначала проверьте закрытый цикл. Затем по отдельности ОбычноеОкно и ПрикрепленнаяПанель: положение, размер, разрешённые переключения и Enter нужно сверить глазами, не только через свойства.

  2. Если сохранённый профиль или ограничение экрана меняет видимое положение, не объявляйте успех по присвоенным значениям. Положение, СостояниеОкна и соединение применяются только при отсутствии ранее сохранённых параметров; здесь используются отдельные новые ключи.

  3. Для проверки обнаружения ошибки на копии модуля в цикле после ПрименитьПрофиль(ФормаПанели, Профиль), до ПроверитьПрофиль вставьте ФормаПанели.ПоведениеКлавишиEnter = ТипПоведенияКлавишиEnter.ПереходПоЭлементамФормы;. Сравнение должно отказать и восстановить исходные 17 полей. Не меняйте ожидание или восстановление.

  4. Свободное и прячущееся состояния дополнительно испытайте в копии прикреплённого профиля, сохранив разрешающие флаги. Для РежимРабочегоСтола=Истина свободная или модальная форма может перекрыть системные панели Windows; делайте это только на своём стенде и с рабочей кнопкой выхода. Здесь таких окон не было.

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

Подготовлены полный модуль Пульта, полный модуль Панели и проверка пустого стенда. Ожидается настройка двух оконных профилей и восстановление 17 скалярных полей до открытия. runtimeVerifiedScenarios=0.

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

  1. Не задавайте свойства, отмеченные «до открытия», в ПриОткрытии самой Панели: их устанавливает Пульт до Открыть.

  2. Оконный профиль может сохраняться платформой. Уникальные собственные ключи не доказывают отсутствие внутренних записей и не удаляют их.

  3. Стиль Авто и пустая картинка — отдельные неизменяемые значения в этом опыте; урок не обещает глубокое клонирование любых стилей и картинок.

  4. Положение НеПерекрыватьВладельца ограничено доступным пространством родительского окна. Разрешения и считанные значения не являются доказательством внешнего вида.

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

Сохранить положение только своей учебной панели

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

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

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

Подготовка

  1. Создайте НОВУЮ пустую конфигурацию УчебныеОкна85 на платформе 8.5.1.1343, без бизнес-объектов, расширений, подписок и регламентных заданий. Уроки относятся только к обычным формам толстого клиента, не к управляемой форме, тонкому или веб-клиенту. Ничего в рабочих УТ, КА, УНФ или БП не изменяйте. Здесь база, формы и код в 1С не запускались: runtimeVerifiedScenarios=0.

  2. Создайте общий модуль УчебныеОкна85: Клиент (обычное приложение)=Да, Сервер=Нет, Глобальный=Нет, Вызов сервера=Нет. Вставьте полный отдельный модуль проверки стенда из блока ниже. Он проверяет собственную пустую конфигурацию.

  3. Добавьте только свою обработку УчебнаяПанель85 с обычными формами Пульт и Панель. Пульт — основная форма. Панель: реквизит ТекстПанели (Строка,80), поле ввода и кнопки ПоказатьТекст/ЗакрытьПанель. Кнопка ПоказатьТекст — кнопка по умолчанию; она только выводит текст, не закрывает окно. Размер панели в редакторе сделайте не больше 120×90 логических единиц.

  4. Назначьте одноимённые действия кнопок и событие ПриОткрытии обеих форм. Вставьте отдельно полный основной модуль Пульта и полный модуль Панели ниже. Код нельзя перенести в модуль управляемой формы. Проверьте F7.

  5. Для этого отдельного опыта модуль Пульта берите именно из данного урока. Добавьте кнопки СовременныйКлюч, СтароеИмя, ЗакрытьСвоюПанель. Создание панели использует свежий UUID, но профиль положения затем получает стабильный собственный ключ.

Перем Окно;

Процедура ПриОткрытии()
    УчебныеОкна85.ПроверитьСвойПустойСтенд();
    Если Метаданные.Обработки.Количество() <> 1 Или Метаданные.Обработки[0].Имя <> "УчебнаяПанель85" Тогда
        ВызватьИсключение "Подготовьте только собственную обработку УчебнаяПанель85";
    КонецЕсли;
    Окно = Неопределено;
КонецПроцедуры

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

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

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

Процедура ЗакрытьСвоюПанель(Кнопка)
    Если Окно <> Неопределено И Окно.Открыта() Тогда
        Окно.Закрыть();
    КонецЕсли;
КонецПроцедуры
УчебнаяПанель85.Панель

Своя обработка УчебнаяПанель85 → Формы → Панель → Модуль

Полный отдельный модуль обычной формы Панель, не вставлять внутрь модуля Пульта; не выполнялся.

Процедура ПриОткрытии()
    УчебныеОкна85.ПроверитьСвойПустойСтенд();
    ТекстПанели = "Собственная учебная панель";
КонецПроцедуры

Процедура ПоказатьТекст(Кнопка)
    Сообщить(ТекстПанели);
КонецПроцедуры

Процедура ЗакрытьПанель(Кнопка)
    ЭтаФорма.Закрыть();
КонецПроцедуры
УчебныеОкна85.ПроверкаСтенда

Своя конфигурация УчебныеОкна85 → Общие → Общие модули → УчебныеОкна85

Полный общий модуль только обычного клиента; не выполнялся.

Процедура ПроверитьСвойПустойСтенд() Экспорт
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. UUID метода ПолучитьФорму идентифицирует экземпляр окна. КлючСохраненияПоложенияОкна — строка для восстановления его размеров и положения; это не тот же механизм и не ключ записи справочника.

  2. СовременныйКлюч до открытия задаёт своё стабильное имя УчебнаяПанель85.МойПрофиль.Обычный. После ручного изменения размера/положения и закрытия следующая такая панель должна использовать тот же профиль пользователя.

  3. СтароеИмя показывает ИмяСохраненияПоложенияОкна, которое не рекомендуется с 8.2; для нового кода используйте современное свойство. Значения старого имени и современного ключа не считаются независимыми хранилищами: код выводит реальное текущее значение ключа после установки имени.

  4. Сохранение и восстановление выполняет платформа при работе окон. Урок не записывает бизнес-объектов, но не является чистой операцией памяти; внутренние параметры своего пользователя могут сохраняться.

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

  1. В будущем ручном опыте СовременныйКлюч → изменить размер/положение своей панели → закрыть → СовременныйКлюч. Проверьте восстановление фактического окна, а не только совпадение строкового ключа.

  2. На отдельной копии стенда повторите СтароеИмя. Сверьте выведенный современный ключ; не делайте вывод о двух независимых профилях, если платформа связывает эти свойства.

  3. Используйте только своего нового пользователя и своё пространство имён. Не меняйте ключи чужих форм и не очищайте весь профиль ради опыта. Здесь сохранение, повторное открытие и внешний вид не проверены.

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

Подготовлен полный Пульт для своего пользовательского профиля положения и отдельного изучения устаревшего свойства. Служебное сохранение платформы не выполнялось: runtimeVerifiedScenarios=0.

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

  1. Не используйте новые UUID в качестве стабильного ключа, если хотите восстановить прежнее расположение.

  2. ИмяСохраненияПоложенияОкна устарело; пример оставлен для чтения старого кода, не как рекомендация для нового.

  3. Профиль собственного окна может сохраниться внутри платформы. Урок не удаляет профили и не доказывает их переносимость между пользователями или базами.

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

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

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

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

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