Изменить legacy-краткий заголовок только своего клиента и восстановить действительное исходное значение

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

Отдельный полный модуль формыА сохраняет настоящие длинный и краткий заголовки своего клиента, временно задаёт учебную метку, подтверждает значения native-getter-ами и возвращает исходные значения без догадки о заголовке по умолчанию.

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

Полный модуль собственной управляемой общей формы УчебноеОкноА85: отдельная серверная функция без контекста возвращает имя конфигурации, UI выполняется в новом тонком клиенте УчебныеОкна85, платформа8.5.1.1343; legacy-совместимость с явным восстановлением.

Подготовка

  1. Создайте новую пустую конфигурацию УчебныеОкна85 на платформе8.5.1.1343; тонкий клиент, Управляемое приложение, Такси. Рабочую базу не переименовывайте. Общие реквизиты-разделители, расширения и чужие обработчики отсутствуют.

  2. Общие формы → УчебноеОкноА85, тип Управляемая. Основной код этого урока — весь модуль именно этой формы, включая отдельное серверное чтение имени конфигурации и клиентские действия. Не вставляйте сюда код менеджера тестов.

  3. Добавьте строковый реквизит МеткаСеанса и одноимённое поле только для просмотра. Команды ПодготовитьСвойСеанс, ПоказатьСвоеСообщение, ЗавершитьСвойСеанс имеют одноимённые клиентские действия и кнопки, ИзменяетСохраняемыеДанные=Ложь.

  4. Назначьте ПриОткрытии(Отказ) и ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка). Закрытие во время собственного изменения отклоняется до явного восстановления.

  5. Для открытия формы создайте свою общую команду ОткрытьУчебноеОкноА85, без параметра, с дополнительным модулем ниже и видимой кнопкой в единственной учебной подсистеме. Не открывайте второе окно этого урока параллельно.

  6. Нажмите F7 и обновите только этот стенд. runtimeVerifiedScenarios=0: здесь приложение и действия не запускались. Это legacy-совместимость, не рекомендация для нового прикладного кода.

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

  8. Нажмите ПоказатьСвоеСообщение для сообщения с той же действительной меткой. Затем ЗавершитьСвойСеанс возвращает исходные заголовки, после чего форму можно закрыть.

  9. Четыре legacy-функции не рекомендуются с8.3.10. Установленная справка рекомендует Установить/ПолучитьЗаголовок и Установить/ПолучитьКраткийЗаголовок соответствующего контекста. Не переносите краткий legacy-заголовок в Обычное приложение: там он недоступен.

Перем СвойСеансПодготовлен;
Перем ИсходныйЗаголовок;
Перем ИсходныйКраткийЗаголовок;

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ЭтотОбъект.АвтоЗаголовок = Ложь;
    ЭтотОбъект.Заголовок = "Учебное окноА85";
    СвойСеансПодготовлен = Ложь;
    МеткаСеанса = "";
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
    СтандартнаяОбработка = Истина;
    Если СвойСеансПодготовлен Тогда
        Отказ = Истина;
        ТекстПредупреждения = "Сначала восстановите собственные заголовки кнопкой ЗавершитьСвойСеанс";
    КонецЕсли;
КонецПроцедуры

ОткрытьУчебноеОкноА85

УчебныеОкна85 → Общие команды → ОткрытьУчебноеОкноА85 → Модуль

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

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("ОбщаяФорма.УчебноеОкноА85");
КонецПроцедуры

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

  1. Перед изменением вызываются действительные getters длинного и краткого заголовков собственного клиента; значения сохраняются в закрытых переменных этого единственного окна.

  2. Флаг собственного изменения выставляется до setters, поэтому исключение не забывает необходимость восстановления. Новый UUID — только локальная учебная метка заголовка, не идентификатор чужой службы.

  3. УстановитьКраткийЗаголовокПриложения получает обычную собственную строку Учебный тест85. Native-getter затем подтверждает именно заданную строку, а не предполагаемое оформление окна ОС.

  4. Системный полный заголовок окна может содержать дополнительные компоненты и разделители. Контроль getter-а краткого заголовка проверяет значение API, а не объявляет точное внешнее оформление одинаковым на всех клиентах.

  5. Завершение возвращает реальные сохранённые значения обоими setters и повторно проверяет getters. Флаг и метка очищаются только после подтверждения; при ошибке ручная повторная попытка сохраняет действительные исходные значения.

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

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

  1. В иной конфигурации или версии форма должна отказаться от открытия до setters. В собственном тонком клиенте исходные значения должны быть получены до первого изменения.

  2. После подготовки getter краткого заголовка должен вернуть Учебный тест85, а поле метки содержит фактический UUID этого опыта.

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

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

  5. Текст сообщения содержит ту же метку и приходит от настоящего СообщениеПользователю. Наличие сообщения не означает запись объекта в базу.

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

В разрешённом ручном опыте краткий legacy-заголовок своего клиента изменён, native-getter подтвердил значение, затем оба действительных исходных заголовка восстановлены. Здесь этот runtime-результат не получен.

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

  1. УстановитьКраткийЗаголовокПриложения поддерживается в этой версии ради совместимости, но не рекомендуется с8.3.10; для новой разработки применяйте рекомендованный метод соответствующего клиентского контекста.

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

  3. Заголовок API и полный текст окна ОС — разные значения; платформа добавляет системный заголовок и разделитель. Не проверяйте внешнее окно сравнением только с краткой строкой.

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

  5. Runtime не проверялся, runtimeVerifiedScenarios=0. База, файлы, сеть, резервные копии и архивы не менялись.

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

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

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

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

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