Отдельный полный модуль формыА сохраняет настоящие длинный и краткий заголовки своего клиента, временно задаёт учебную метку, подтверждает значения native-getter-ами и возвращает исходные значения без догадки о заголовке по умолчанию.
Где и как запускать
Полный модуль собственной управляемой общей формы УчебноеОкноА85: отдельная серверная функция без контекста возвращает имя конфигурации, UI выполняется в новом тонком клиенте УчебныеОкна85, платформа8.5.1.1343; legacy-совместимость с явным восстановлением.
Подготовка
Создайте новую пустую конфигурацию УчебныеОкна85 на платформе8.5.1.1343; тонкий клиент, Управляемое приложение, Такси. Рабочую базу не переименовывайте. Общие реквизиты-разделители, расширения и чужие обработчики отсутствуют.
Общие формы → УчебноеОкноА85, тип Управляемая. Основной код этого урока — весь модуль именно этой формы, включая отдельное серверное чтение имени конфигурации и клиентские действия. Не вставляйте сюда код менеджера тестов.
Добавьте строковый реквизит МеткаСеанса и одноимённое поле только для просмотра. Команды ПодготовитьСвойСеанс, ПоказатьСвоеСообщение, ЗавершитьСвойСеанс имеют одноимённые клиентские действия и кнопки, ИзменяетСохраняемыеДанные=Ложь.
Назначьте ПриОткрытии(Отказ) и ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка). Закрытие во время собственного изменения отклоняется до явного восстановления.
Для открытия формы создайте свою общую команду ОткрытьУчебноеОкноА85, без параметра, с дополнительным модулем ниже и видимой кнопкой в единственной учебной подсистеме. Не открывайте второе окно этого урока параллельно.
Нажмите F7 и обновите только этот стенд. runtimeVerifiedScenarios=0: здесь приложение и действия не запускались. Это legacy-совместимость, не рекомендация для нового прикладного кода.
Откройте свою форму, запомните видимый текущий заголовок. Нажмите ПодготовитьСвойСеанс: метка берётся из реального нового UUID и проверяются настоящие значения заголовков.
Нажмите ПоказатьСвоеСообщение для сообщения с той же действительной меткой. Затем ЗавершитьСвойСеанс возвращает исходные заголовки, после чего форму можно закрыть.
Четыре legacy-функции не рекомендуются с8.3.10. Установленная справка рекомендует Установить/ПолучитьЗаголовок и Установить/ПолучитьКраткийЗаголовок соответствующего контекста. Не переносите краткий legacy-заголовок в Обычное приложение: там он недоступен.
Перем СвойСеансПодготовлен;
Перем ИсходныйЗаголовок;
Перем ИсходныйКраткийЗаголовок;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЭтотОбъект.АвтоЗаголовок = Ложь;
ЭтотОбъект.Заголовок = "Учебное окноА85";
СвойСеансПодготовлен = Ложь;
МеткаСеанса = "";
КонецПроцедуры
&НаКлиенте
Процедура ПодготовитьСвойСеанс(Команда)
Если СвойСеансПодготовлен Тогда
ВызватьИсключение "Сначала восстановите свои исходные заголовки";
КонецЕсли;
ИсходныйЗаголовок = ПолучитьЗаголовокКлиентскогоПриложения();
ИсходныйКраткийЗаголовок = ПолучитьКраткийЗаголовокПриложения();
МеткаСеанса = "УчебныеОкна85-" + Строка(Новый УникальныйИдентификатор);
СвойСеансПодготовлен = Истина;
УстановитьЗаголовокКлиентскогоПриложения(МеткаСеанса);
УстановитьКраткийЗаголовокПриложения("Учебный тест85");
Если ПолучитьЗаголовокКлиентскогоПриложения() <> МеткаСеанса
Или ПолучитьКраткийЗаголовокПриложения() <> "Учебный тест85" Тогда
ВызватьИсключение "Legacy-заголовки своего клиента ещё не подтвердились";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСвоеСообщение(Команда)
Если Не СвойСеансПодготовлен Или МеткаСеанса = "" Тогда
ВызватьИсключение "Сначала подготовьте свой сеанс";
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Учебное сообщение85: " + МеткаСеанса;
Сообщение.Сообщить();
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьСвойСеанс(Команда)
Если Не СвойСеансПодготовлен Тогда
Возврат;
КонецЕсли;
УстановитьКраткийЗаголовокПриложения(ИсходныйКраткийЗаголовок);
УстановитьЗаголовокКлиентскогоПриложения(ИсходныйЗаголовок);
Если ПолучитьКраткийЗаголовокПриложения() <> ИсходныйКраткийЗаголовок
Или ПолучитьЗаголовокКлиентскогоПриложения() <> ИсходныйЗаголовок Тогда
ВызватьИсключение "Исходные собственные заголовки ещё не восстановлены";
КонецЕсли;
СвойСеансПодготовлен = Ложь;
МеткаСеанса = "";
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
СтандартнаяОбработка = Истина;
Если СвойСеансПодготовлен Тогда
Отказ = Истина;
ТекстПредупреждения = "Сначала восстановите собственные заголовки кнопкой ЗавершитьСвойСеанс";
КонецЕсли;
КонецПроцедуры
ОткрытьУчебноеОкноА85
УчебныеОкна85 → Общие команды → ОткрытьУчебноеОкноА85 → Модуль
Полный модуль собственной общей команды без параметра в подготовленном учебном разделе: серверная функция читает имя конфигурации, клиент проверяет полученную строку и открывает свою общую форму.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("ОбщаяФорма.УчебноеОкноА85");
КонецПроцедуры
Разбор по шагам
Перед изменением вызываются действительные getters длинного и краткого заголовков собственного клиента; значения сохраняются в закрытых переменных этого единственного окна.
Флаг собственного изменения выставляется до setters, поэтому исключение не забывает необходимость восстановления. Новый UUID — только локальная учебная метка заголовка, не идентификатор чужой службы.
УстановитьКраткийЗаголовокПриложения получает обычную собственную строку Учебный тест85. Native-getter затем подтверждает именно заданную строку, а не предполагаемое оформление окна ОС.
Системный полный заголовок окна может содержать дополнительные компоненты и разделители. Контроль getter-а краткого заголовка проверяет значение API, а не объявляет точное внешнее оформление одинаковым на всех клиентах.
Завершение возвращает реальные сохранённые значения обоими setters и повторно проверяет getters. Флаг и метка очищаются только после подтверждения; при ошибке ручная повторная попытка сохраняет действительные исходные значения.
ПередЗакрытием только отклоняет потерю незавершённого учебного изменения. Отдельная серверная функция при проверке формы и общей команды возвращает фактическое имя своей конфигурации; оно проверяется как строка на клиенте. Автоматического закрытия приложения, файлов и записи прикладных данных нет.
Как проверить результат
В иной конфигурации или версии форма должна отказаться от открытия до setters. В собственном тонком клиенте исходные значения должны быть получены до первого изменения.
После подготовки getter краткого заголовка должен вернуть Учебный тест85, а поле метки содержит фактический UUID этого опыта.
Повторная подготовка до восстановления запрещена; исходное значение не перезаписывается уже учебным заголовком.
При попытке закрыть форму до завершения закрытие отклоняется. После ЗавершитьСвойСеанс обе проверки исходных значений проходят и метка становится пустой.
Текст сообщения содержит ту же метку и приходит от настоящего СообщениеПользователю. Наличие сообщения не означает запись объекта в базу.
Ожидаемый результат
В разрешённом ручном опыте краткий legacy-заголовок своего клиента изменён, native-getter подтвердил значение, затем оба действительных исходных заголовка восстановлены. Здесь этот runtime-результат не получен.
На что обратить внимание
УстановитьКраткийЗаголовокПриложения поддерживается в этой версии ради совместимости, но не рекомендуется с8.3.10; для новой разработки применяйте рекомендованный метод соответствующего клиентского контекста.
Краткий заголовок недоступен в Обычное приложение. Даже широкая доступность отдельных вызовов в справке не делает этот клиентский визуальный опыт серверным или внешним соединением.
Заголовок API и полный текст окна ОС — разные значения; платформа добавляет системный заголовок и разделитель. Не проверяйте внешнее окно сравнением только с краткой строкой.
Сбой или принудительное завершение может потерять сохранённые значения памяти окна. Этот урок рассчитан на один новый собственный клиент и нормальное явное восстановление, не на production-управление заголовками всех сеансов.
Runtime не проверялся, runtimeVerifiedScenarios=0. База, файлы, сеть, резервные копии и архивы не менялись.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.