Стабильный собственный ключ предназначен для повторного открытия того же вида окна. Отдельная кнопка показывает устаревшее имя сохранения и отличие его назначения от UUID экземпляра.
Где и как запускать
Полный модуль отдельного собственного Пульта обычных форм. Только толстый клиент; не запускался.
Подготовка
Создайте НОВУЮ пустую конфигурацию УчебныеОкна85 на платформе 8.5.1.1343, без бизнес-объектов, расширений, подписок и регламентных заданий. Уроки относятся только к обычным формам толстого клиента, не к управляемой форме, тонкому или веб-клиенту. Ничего в рабочих УТ, КА, УНФ или БП не изменяйте. Здесь база, формы и код в 1С не запускались: runtimeVerifiedScenarios=0.
Создайте общий модуль УчебныеОкна85: Клиент (обычное приложение)=Да, Сервер=Нет, Глобальный=Нет, Вызов сервера=Нет. Вставьте полный отдельный модуль проверки стенда из блока ниже. Он проверяет собственную пустую конфигурацию.
Добавьте только свою обработку УчебнаяПанель85 с обычными формами Пульт и Панель. Пульт — основная форма. Панель: реквизит ТекстПанели (Строка,80), поле ввода и кнопки ПоказатьТекст/ЗакрытьПанель. Кнопка ПоказатьТекст — кнопка по умолчанию; она только выводит текст, не закрывает окно. Размер панели в редакторе сделайте не больше 120×90 логических единиц.
Назначьте одноимённые действия кнопок и событие ПриОткрытии обеих форм. Вставьте отдельно полный основной модуль Пульта и полный модуль Панели ниже. Код нельзя перенести в модуль управляемой формы. Проверьте F7.
Для этого отдельного опыта модуль Пульта берите именно из данного урока. Добавьте кнопки СовременныйКлюч, СтароеИмя, ЗакрытьСвоюПанель. Создание панели использует свежий 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 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
UUID метода ПолучитьФорму идентифицирует экземпляр окна. КлючСохраненияПоложенияОкна — строка для восстановления его размеров и положения; это не тот же механизм и не ключ записи справочника.
СовременныйКлюч до открытия задаёт своё стабильное имя УчебнаяПанель85.МойПрофиль.Обычный. После ручного изменения размера/положения и закрытия следующая такая панель должна использовать тот же профиль пользователя.
СтароеИмя показывает ИмяСохраненияПоложенияОкна, которое не рекомендуется с 8.2; для нового кода используйте современное свойство. Значения старого имени и современного ключа не считаются независимыми хранилищами: код выводит реальное текущее значение ключа после установки имени.
Сохранение и восстановление выполняет платформа при работе окон. Урок не записывает бизнес-объектов, но не является чистой операцией памяти; внутренние параметры своего пользователя могут сохраняться.
Как проверить результат
В будущем ручном опыте СовременныйКлюч → изменить размер/положение своей панели → закрыть → СовременныйКлюч. Проверьте восстановление фактического окна, а не только совпадение строкового ключа.
На отдельной копии стенда повторите СтароеИмя. Сверьте выведенный современный ключ; не делайте вывод о двух независимых профилях, если платформа связывает эти свойства.
Используйте только своего нового пользователя и своё пространство имён. Не меняйте ключи чужих форм и не очищайте весь профиль ради опыта. Здесь сохранение, повторное открытие и внешний вид не проверены.
Ожидаемый результат
Подготовлен полный Пульт для своего пользовательского профиля положения и отдельного изучения устаревшего свойства. Служебное сохранение платформы не выполнялось: runtimeVerifiedScenarios=0.
На что обратить внимание
Не используйте новые UUID в качестве стабильного ключа, если хотите восстановить прежнее расположение.
ИмяСохраненияПоложенияОкна устарело; пример оставлен для чтения старого кода, не как рекомендация для нового.
Профиль собственного окна может сохраниться внутри платформы. Урок не удаляет профили и не доказывает их переносимость между пользователями или базами.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.