Навигатор получает ссылку от настоящей собственной отчётной формы без payload/представления. Непустая Строка должна реально совпасть с canonical ссылкой своих метаданных и иметь локальный route. Перед переходом проверка повторяется; отсутствие actual окна даёт диагностику, не успех. Это не ссылка-снимок настроек и не проверка температур/визуальной активации.
Где и как запускать
Полный модуль Общие → Общие формы → УчебныйНавигаторТемператур85 → Модуль формы. Все процедуры на уровне модуля; директивы уже включены. Только толстый управляемый desktop-клиент 8.5.1.1343, Такси; runtime не проверен.
Подготовка
Здесь фактический запуск 1С не выполнен. Статические/native проверки не компилируют и не запускают 1С, не доказывают появление индикатора, hover, окно или числовой состав сформированного отчёта.
Создайте новую отдельную пустую учебную базу платформы 8.5.1.1343. Имя конфигурации УчебныеВзаимодействияОтчета85; основной режим запуска УправляемоеПриложение; режим совместимости НеИспользовать; РежимСовместимостиИнтерфейса=Такси. Не используйте рабочую конфигурацию.
Создайте отдельного нового учебного пользователя только собственной новой базы. Запускайте именно толстый клиент в режиме управляемого приложения и интерфейсе Такси. Тонкий/web/мобильный стенд здесь не заявлен; не меняйте режим рабочего сеанса.
В этой своей новой конфигурации создайте учебную роль УчебныйДоступТемператур85 с доступом к собственному отчёту УчебныеТемпературы85, подготовленным общим формам и общим командам запуска. Назначьте её только отдельному новому учебному пользователю; роли и права рабочего пользователя не меняйте.
У собственной учебной роли отдельно разрешите глобальное право ТолстыйКлиент — запуск толстого клиента, и РежимОсновногоОкнаОбычный — запуск с обычным основным окном. Новый учебный сеанс использует обычный режим основного окна. Это НЕ ОбычноеПриложение: режим приложения остаётся управляемым, интерфейс Такси. Если запуск или основное окно запрещены правами, сначала проверьте права именно этого нового учебного пользователя; доступ к отчёту сам по себе не разрешает запуск приложения. Административные и чужие роли не копируйте.
В дереве конфигурации Отчёты создайте УчебныеТемпературы85. Прикладные реквизиты, справочники, документы, регистры и записи не требуются. Модуль объекта отчёта оставьте пустым: новые события ПриКомпоновкеРезультата/ПослеКомпоновкиРезультата назначаются ФОРМЕ, не объекту.
Полный отдельный серверный модуль УчебныеВзаимодействияОтчета85 вставьте в Общие → Общие модули → УчебныеВзаимодействияОтчета85 → Модуль. Включите Сервер; выключите Клиент, Глобальный и Вызов сервера. Функция вызывается только из серверных обработчиков собственных отчётных форм.
Схема создаётся полностью программно; файловый макет не нужен. Source УчебныйИсточникТемператур имеет ТипИсточникаДанных Local. Dataset УчебныеТемпературы выполняет приложенный запрос трёх собственных константных записей Утро/18, День/23, Вечер/19, без чтения прикладных данных.
Выбраны ровно два поля Период и Температура. В структуре одна используемая группировка без полей группировки — детальные записи с АвтоВыбраннымПолем. Ресурсы, итоги, параметры, пользовательские варианты и фиктивные auto-имена не создаются.
В каждой собственной отчётной форме создайте дополнительные реквизиты СостояниеУрока типа Строка неограниченной длины, СобытийДо и СобытийПосле типа Число длиной 6/точность 0/неотрицательный, КомпоновкаЗавершена типа Булево. Поля с путями к этим реквизитам сделайте ТолькоПросмотр=Истина.
В свойствах событий каждой ФОРМЫ назначьте ПриСозданииНаСервере → ПриСозданииНаСервере, ПриКомпоновкеРезультата → ПриКомпоновкеРезультата, ПослеКомпоновкиРезультата → ПослеКомпоновкиРезультата. Сигнатуры уже в полном модуле. Старое трёхпараметрическое событие объекта отчёта не используйте.
КомпоновкаЗавершена означает только получение параметра события типа ТабличныйДокумент; счётчики — только наблюдение вызовов. Это НЕ сверка чисел отчёта. Периоды и температуры прочитайте вручную из actual результата; значения не подменяются вычислениями или ожидаемым массивом.
Все четыре собственные формы при создании до открытия назначают РежимБлокировкиПриОткрытииОкна=РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать. Это native значение 8.5.1, доступное управляемому Taxi-стенду; пульт не должен блокироваться отчётным окном. Оно не доказывает визуальную активацию окна.
АвтоматическоеСохранениеДанныхВНастройках собственных форм оставьте НеИспользовать. Не выполняйте команды сохранения вариантов, профилей, настроек, файлов или печати. Новый пользователь/база изолируют внутренние действия платформы, но отсутствие явно вызванного сохранения НЕ доказывает отсутствие системных сохранений/истории.
После подготовки всех своих объектов, форм, модулей и команд в Конфигураторе выполните Конфигурация → Обновить конфигурацию базы данных (F7). Если получены ошибки собственной учебной конфигурации, исправьте их до запуска. Закройте старый учебный сеанс, заново откройте именно эту новую базу своим учебным пользователем в толстом управляемом клиенте Такси; не обновляйте рабочую базу.
В Отчёты → УчебныеТемпературы85 → Формы создайте управляемую форму отчёта УчебнаяСсылка85 (Основная), не общую форму. Основной реквизит Отчет: ОтчетОбъект.УчебныеТемпературы85, признак Основной. Реквизит Результат: ТабличныйДокумент; собственное поле ПолеРезультата: поле табличного документа, ПутьКДанным=Результат. Проверяйте эти реальные имена, не угадывайте имена конструктора.
Полный модуль УчебнаяСсылка85 вставьте целиком в Отчёты → УчебныеТемпературы85 → Формы → УчебнаяСсылка85 → Модуль формы. Заменяйте только исходный модуль этой своей новой учебной формы. Стандартную команду Сформировать оставьте доступной, команды сохранения/печати в опыте не используйте.
Полный отдельный supporting модуль УчебнаяСсылка85 вставьте в Отчёты → УчебныеТемпературы85 → Формы → УчебнаяСсылка85 → Модуль формы. Подготовьте стандартные реквизиты/события из общей подготовки; создайте команду/кнопку СформироватьУчебныйОтчет с одноимённым обработчиком.
В свойствах отчёта УчебныеТемпературы85 установите именно собственную УчебнаяСсылка85 как основную форму отчёта. Навигация по ссылке отчёта целиком использует штатный маршрут основной формы; другое имя не подставляйте.
Создайте свою управляемую общую форму УчебныйНавигаторТемператур85. Полный основной блок вставьте в Общие → Общие формы → УчебныйНавигаторТемператур85 → Модуль формы; её событие ПриСозданииНаСервере назначьте одноимённому обработчику. Общая форма не является формой отчёта: report-метод вызывается у ОтчетнаяФорма, не у ЭтаФорма навигатора.
В навигаторе создайте КлючЭкземпляра и СсылкаУчебногоОтчета, СостояниеУрока типа Строка неограниченной длины, СсылкаДопущена и МаршрутПодтвержден типа Булево. Поля ссылки/состояния/двух флагов сделайте ТолькоПросмотр=Истина; КлючЭкземпляра на форму не выводите.
Создайте команды/кнопки ОткрытьИСнятьСсылку, ПерейтиКОтчету, ПроверитьНаличиеОкна с одноимёнными обработчиками. Навигатор получает свой экземпляр отчёта по одному стабильному ключу temperature-link-+UUID и не закрывается вместе с отчётным окном.
Перед отрицательным опытом наличия окна вручную закройте только все три свои отчётные формы отчёта УчебныеТемпературы85, включая возможно переиспользованное окно после навигации; навигатор оставьте открытым. Не закрывайте чужие окна. Наличие другой своей формы этого отчёта может дать найденное окно по тому же report URL.
Методы ПолучитьНавигационнуюСсылкуОтчета и глобальный серверный ПолучитьНавигационнуюСсылку вызываются без представления и внешнего payload. Сохранённые варианты/пользовательские настройки/внешнее хранилище ссылки не создаются нашим кодом. Prefix e1cib/app/ — наш защитный допуск relative локального route; иной native формат честно блокируется, не нормализуется и не переписывается.
Полный отдельный модуль запуска ОткрытьУчебныйНавигаторТемператур85 вставьте в Общие → Общие команды → ОткрытьУчебныйНавигаторТемператур85 → Модуль команды. Команду без параметра включите в командный интерфейс нового учебного приложения. Новый UUID ключа уникальности каждого запуска не должен случайно переиспользовать предыдущий экземпляр.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() <> ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда
Отказ = Истина;
ВызватьИсключение "Подготовьте собственный учебный сеанс Такси";
КонецЕсли;
ЭтаФорма.РежимБлокировкиПриОткрытииОкна = РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать;
ЭтаФорма.КлючЭкземпляра = "temperature-link-" + Строка(Новый УникальныйИдентификатор);
ЭтаФорма.СсылкаУчебногоОтчета = "";
ЭтаФорма.СсылкаДопущена = Ложь;
ЭтаФорма.МаршрутПодтвержден = Ложь;
ЭтаФорма.СостояниеУрока = "Откройте свою отчётную форму и снимите её actual ссылку";
КонецПроцедуры
&НаСервере
Функция КаноническаяСсылкаНаСвойОтчет()
Возврат ПолучитьНавигационнуюСсылку(Метаданные.Отчеты.УчебныеТемпературы85);
КонецФункции
&НаКлиенте
Функция ПолучитьСвоюОтчетнуюФорму()
ОтчетнаяФорма = ПолучитьФорму("Отчет.УчебныеТемпературы85.Форма.УчебнаяСсылка85", , ЭтаФорма, ЭтаФорма.КлючЭкземпляра);
Если ОтчетнаяФорма = Неопределено Тогда
ВызватьИсключение "Не получен собственный подготовленный экземпляр отчёта";
КонецЕсли;
Если ТипЗнч(ОтчетнаяФорма) <> Тип("ФормаКлиентскогоПриложения") Тогда
ВызватьИсключение "Не получена клиентская форма собственного отчёта";
КонецЕсли;
Возврат ОтчетнаяФорма;
КонецФункции
&НаКлиенте
Процедура ПроверитьЛокальнуюСсылку(Фактическая, Каноническая)
Если ТипЗнч(Фактическая) <> Тип("Строка") Или ТипЗнч(Каноническая) <> Тип("Строка") Тогда
ВызватьИсключение "Обе actual ссылки должны иметь тип Строка";
КонецЕсли;
Если Фактическая = "" Или Каноническая = "" Тогда
ВызватьИсключение "Пустая actual ссылка не допускается";
КонецЕсли;
Если Фактическая <> Каноническая Тогда
ВызватьИсключение "Ссылка формы не совпала с canonical собственного отчёта";
КонецЕсли;
Если Не СтрНачинаетсяС(Каноническая, "e1cib/app/") Тогда
ВызватьИсключение "Каноническая ссылка не является локальным report route; переход запрещён";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьИСнятьСсылку(Команда)
ЭтаФорма.СсылкаДопущена = Ложь;
ЭтаФорма.МаршрутПодтвержден = Ложь;
ЭтаФорма.СсылкаУчебногоОтчета = "";
Попытка
ОтчетнаяФорма = ПолучитьСвоюОтчетнуюФорму();
Если Не ОтчетнаяФорма.Открыта() Тогда
ОтчетнаяФорма.Открыть();
КонецЕсли;
Фактическая = ОтчетнаяФорма.ПолучитьНавигационнуюСсылкуОтчета();
Каноническая = КаноническаяСсылкаНаСвойОтчет();
ПроверитьЛокальнуюСсылку(Фактическая, Каноническая);
ЭтаФорма.СсылкаУчебногоОтчета = Фактическая;
ЭтаФорма.СсылкаДопущена = Истина;
ЭтаФорма.СостояниеУрока = "Actual ссылки совпали и локальны. Навигация и наличие окна ещё не проверены";
Исключение
ЭтаФорма.СсылкаДопущена = Ложь;
ЭтаФорма.СсылкаУчебногоОтчета = "";
ЭтаФорма.СостояниеУрока = "Ссылка не допущена: " + ОписаниеОшибки();
КонецПопытки;
Сообщить(ЭтаФорма.СостояниеУрока);
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКОтчету(Команда)
ЭтаФорма.МаршрутПодтвержден = Ложь;
Попытка
Если Не ЭтаФорма.СсылкаДопущена Тогда
ВызватьИсключение "Сначала снимите допущенную ссылку собственной формы";
КонецЕсли;
ОтчетнаяФорма = ПолучитьСвоюОтчетнуюФорму();
Если Не ОтчетнаяФорма.Открыта() Тогда
ВызватьИсключение "Исходная отчётная форма закрыта; сначала откройте и снимите ссылку снова";
КонецЕсли;
Фактическая = ОтчетнаяФорма.ПолучитьНавигационнуюСсылкуОтчета();
Каноническая = КаноническаяСсылкаНаСвойОтчет();
ПроверитьЛокальнуюСсылку(Фактическая, Каноническая);
ПроверитьЛокальнуюСсылку(ЭтаФорма.СсылкаУчебногоОтчета, Каноническая);
ПерейтиПоНавигационнойСсылке(ЭтаФорма.СсылкаУчебногоОтчета);
Окно = НайтиОкноПоНавигационнойСсылке(ЭтаФорма.СсылкаУчебногоОтчета);
Если Окно = Неопределено Тогда
ВызватьИсключение "После перехода окно по actual ссылке не найдено";
КонецЕсли;
Если ТипЗнч(Окно) <> Тип("ОкноКлиентскогоПриложения") Тогда
ВызватьИсключение "По ссылке получен неожиданный тип окна";
КонецЕсли;
ЭтаФорма.МаршрутПодтвержден = Истина;
ЭтаФорма.СостояниеУрока = "Локальный переход выполнен и actual окно найдено: " + Окно.Заголовок + ". Активацию и содержимое проверьте вручную";
Исключение
ЭтаФорма.МаршрутПодтвержден = Ложь;
ЭтаФорма.СсылкаДопущена = Ложь;
ЭтаФорма.СостояниеУрока = "Маршрут не подтверждён: " + ОписаниеОшибки();
КонецПопытки;
Сообщить(ЭтаФорма.СостояниеУрока);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаличиеОкна(Команда)
ЭтаФорма.МаршрутПодтвержден = Ложь;
Попытка
Если Не ЭтаФорма.СсылкаДопущена Тогда
ВызватьИсключение "Нет допущенной собственной ссылки";
КонецЕсли;
Каноническая = КаноническаяСсылкаНаСвойОтчет();
ПроверитьЛокальнуюСсылку(ЭтаФорма.СсылкаУчебногоОтчета, Каноническая);
Окно = НайтиОкноПоНавигационнойСсылке(ЭтаФорма.СсылкаУчебногоОтчета);
Если Окно = Неопределено Тогда
ЭтаФорма.СостояниеУрока = "Диагностика: окно по собственной ссылке не найдено; успех маршрута не подтверждён";
Возврат;
КонецЕсли;
Если ТипЗнч(Окно) <> Тип("ОкноКлиентскогоПриложения") Тогда
ВызватьИсключение "По ссылке получен неожиданный тип окна";
КонецЕсли;
ЭтаФорма.СостояниеУрока = "Фактически найдено окно: " + Окно.Заголовок + ". Эта проверка не выполняла переход и не подтверждает активацию";
Исключение
ЭтаФорма.СсылкаДопущена = Ложь;
ЭтаФорма.СостояниеУрока = "Проверка окна остановлена: " + ОписаниеОшибки();
КонецПопытки;
Сообщить(ЭтаФорма.СостояниеУрока);
КонецПроцедурыУчебныеВзаимодействияОтчета85
Общие → Общие модули → УчебныеВзаимодействияОтчета85 → Модуль
Полный отдельный серверный общий модуль собственной учебной схемы. Толстый управляемый desktop-стенд 8.5.1.1343, Такси; запуск 1С не выполнен.
Функция СоздатьСхемуТемператур() Экспорт
Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточникТемператур";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТемпературы";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
| ""Утро"" КАК Период,
| 18 КАК Температура
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""День"", 23
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Вечер"", 19";
Настройки = Схема.НастройкиПоУмолчанию;
Для Каждого ИмяПоля Из СтрРазделить("Период,Температура", ",") Цикл
Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
Возврат Схема;
КонецФункцииУчебнаяСсылка85
Отчёты → УчебныеТемпературы85 → Формы → УчебнаяСсылка85 → Модуль формы
Полный отдельный модуль именно управляемой отчётной формы УчебнаяСсылка85; не модуль общей формы навигатора. Толстый managed desktop-клиент 8.5.1.1343, Такси, runtime 0.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() <> ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда
Отказ = Истина;
ВызватьИсключение "Подготовьте собственный учебный сеанс Такси";
КонецЕсли;
ЭтаФорма.РежимБлокировкиПриОткрытииОкна = РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать;
Если ЭтаФорма.ТипФормыОтчета <> ТипФормыОтчета.Основная Тогда
Отказ = Истина;
ВызватьИсключение "Нужна управляемая форма собственного отчёта Основная";
КонецЕсли;
ОбъектОтчета = ЭтаФорма.РеквизитФормыВЗначение("Отчет");
Схема = УчебныеВзаимодействияОтчета85.СоздатьСхемуТемператур();
ОбъектОтчета.СхемаКомпоновкиДанных = Схема;
ОбъектОтчета.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
ОбъектОтчета.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
ЭтаФорма.ЗначениеВРеквизитФормы(ОбъектОтчета, "Отчет");
ЭтаФорма.СобытийДо = 0;
ЭтаФорма.СобытийПосле = 0;
ЭтаФорма.КомпоновкаЗавершена = Ложь;
ЭтаФорма.СостояниеУрока = "Собственная схема готова; взаимодействие и числа ещё не проверены";
КонецПроцедуры
&НаСервере
Процедура ПриКомпоновкеРезультата(СтандартнаяОбработка)
СтандартнаяОбработка = Истина;
ЭтаФорма.КомпоновкаЗавершена = Ложь;
ЭтаФорма.СобытийДо = ЭтаФорма.СобытийДо + 1;
КонецПроцедуры
&НаСервере
Процедура ПослеКомпоновкиРезультата(Результат, СтандартнаяОбработка)
СтандартнаяОбработка = Истина;
ЭтаФорма.КомпоновкаЗавершена = Ложь;
ЭтаФорма.СобытийПосле = ЭтаФорма.СобытийПосле + 1;
Если ТипЗнч(Результат) <> Тип("ТабличныйДокумент") Тогда
ЭтаФорма.СостояниеУрока = "Событие не передало ТабличныйДокумент; взаимодействие остановлено";
Возврат;
КонецЕсли;
ЭтаФорма.КомпоновкаЗавершена = Истина;
ЭтаФорма.СостояниеУрока = "Событие передало фактический ТабличныйДокумент. Это не сверка чисел отчёта";
КонецПроцедуры
&НаКлиенте
Процедура СформироватьУчебныйОтчет(Команда)
До = ЭтаФорма.СобытийДо;
После = ЭтаФорма.СобытийПосле;
Попытка
ЭтаФорма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);
Если ЭтаФорма.СобытийДо <> До + 1 Или ЭтаФорма.СобытийПосле <> После + 1 Или Не ЭтаФорма.КомпоновкаЗавершена Тогда
ВызватьИсключение "Нет подтверждённого маршрута двух событий формы";
КонецЕсли;
Исключение
ЭтаФорма.КомпоновкаЗавершена = Ложь;
ЭтаФорма.СостояниеУрока = "Формирование не подтверждено: " + ОписаниеОшибки();
КонецПопытки;
Сообщить(ЭтаФорма.СостояниеУрока);
КонецПроцедурыОткрытьУчебныйНавигаторТемператур85
Общие → Общие команды → ОткрытьУчебныйНавигаторТемператур85 → Модуль команды
Полный отдельный клиентский модуль общей команды запуска своей подготовленной формы, толстый управляемый desktop-клиент 8.5.1.1343, Такси.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("ОбщаяФорма.УчебныйНавигаторТемператур85", , , "temperature-workshop-" + Строка(Новый УникальныйИдентификатор));
КонецПроцедурыРазбор по шагам
Запустите ОткрытьУчебныйНавигаторТемператур85. Новый общий пульт проверит свой стенд и создаст единственный стабильный UUID ключ своего отчётного экземпляра.
Нажмите ОткрытьИСнятьСсылку. ПолучитьФорму возвращает собственную УчебнаяСсылка85, которая при необходимости открывается. Её реальный report-метод без параметров даёт actual ссылку.
На сервере каноническая ссылка получается от Метаданные.Отчеты.УчебныеТемпературы85 без внешних параметров. Клиент проверяет обе actual строки, непустоту, точное совпадение и защитный локальный prefix.
СсылкаДопущена означает только эту проверку двух actual ссылок, не открытие окна или выполнение перехода. В случае несовпадения/иного формата поле остаётся пустым, флаг отрицателен.
Вернитесь к навигатору и нажмите ПерейтиКОтчету. Живой исходный экземпляр должен оставаться открытым. Report URL и canonical получаются снова; сохранённая readonly ссылка также сверяется с текущим canonical непосредственно перед переходом.
Только после проверок вызывается ПерейтиПоНавигационнойСсылке. НайтиОкноПоНавигационнойСсылке затем возвращает actual окно либо Неопределено; тип/заголовок читаются только после проверки наличия.
МаршрутПодтвержден означает прошедшие проверки, выполненный локальный переход и найденный actual объект окна. Вручную подтвердите активацию и собственный отчёт в реальном клиенте; новый экземпляр окна/UUID, перенос настроек или содержимого не обещаются.
Сформируйте отчёт его собственной кнопкой и отдельно вручную прочитайте три периода/температуры. Проверка ссылки или окна не является проверкой отчётных чисел.
Для отрицательного опыта закройте только свои отчётные окна, оставив пульт. Нажмите ПроверитьНаличиеОкна: при Неопределено есть диагностика и МаршрутПодтвержден=Ложь, переход не выполняется. Для следующего опыта снова ОткрытьИСнятьСсылку.
Как проверить результат
Проверка actual ссылки требует обеих непустых строк, фактического равенства и e1cib/app/. Придуманный UUID, жёстко собранная ссылка или похожий prefix чужого адреса не заменяют canonical собственного метаданного отчёта.
Report-метод вызывается у реально полученной ОтчетнаяФорма, общий глобальный вариант для метаданных вызывается только в &НаСервере. Параметры внешних данных/представления нигде не передаются.
Перед переходом совпадают текущая actual ссылка формы, текущий actual canonical и сохранённая readonly ссылка. При исключении СсылкаДопущена=Ложь и МаршрутПодтвержден=Ложь.
После перехода Неопределено/неожиданный тип окна дают только диагностику. Заголовок найденного actual окна читается, не присваивается.
ПроверитьНаличиеОкна никогда не выполняет переход и никогда не устанавливает МаршрутПодтвержден=Истина даже при найденном окне; это отдельное наблюдение.
Активация/переиспользование окна и числовой отчёт проверяются вручную. Не выводите из найденного окна восстановление прежних настроек или гарантированно новый экземпляр.
Ожидаемый результат
Подготовлен fail-closed маршрут actual собственного report URL → actual canonical → только локальный допуск → повторная сверка → переход → actual окно/диагностика.
На что обратить внимание
Runtime 0. Полученное свойство/тип/счётчик события не доказывает визуальное отображение или правильность числового отчёта; все три температуры и реальный UI проверяются вручную.
Стандартная СКД может использовать собственную разметку/порядок. В этих уроках нет придуманной фиксированной координаты, имени auto-области или автоматического reader чисел.
Платформа может выполнять серверные вызовы и системное сохранение/историю. Наш код не сохраняет профили, файлы или прикладные записи, но это не гарантия отсутствия внутренних операций платформы.
Работайте только с собственными подготовленными формами, новым пользователем и новой базой. Не открывайте/закрывайте чужие окна и не переносите опыт на рабочего пользователя.
Не отключайте диагностику и не ставьте подтверждающие флаги вручную. Ошибка API, неверный тип или неподтверждённый маршрут оставляют соответствующую проверку отрицательной.
ПерейтиПоНавигационнойСсылке поддерживает внешние ссылки/команды ОС. Именно поэтому произвольная строка от пользователя никогда не передаётся: поле readonly, источник собственная форма и обязательна текущая серверная canonical сверка.
НайтиОкноПоНавигационнойСсылке возвращает Неопределено при отсутствии окна; в обычном приложении также Неопределено. Не путайте служебные/модальные окна подсказок с окнами этой коллекции.
Даже native строка и совпадение двух методов не гарантируют канонический сериализованный формат e1cib/app/ во всех контекстах. Иной формат наш урок блокирует; не добавляйте обход с внешним URL ради положительного флага.
Возможное переиспользование окна не означает получение того же экземпляра формы по исходному UUID. Этот урок такого тождества не проверяет.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.