Выполняет переход по ссылке так, как если бы пользователь выполнил интерактивную вспомогательную команду "Перейти по ссылке ...". Если выполняется переход по ссылке на объект информационной базы, отчет или обработку, то происходит открытие нового вспомогательного окна (если окно с этим объектом еще не открыто). Если выполняется переход по ссылке на точку навигации, то переход будет выполнен в основном окне приложения, и оно станет активным. Если выполняется переход по ссылке на обсуждение системы взаимодействия: для неконтекстных обсуждений активизируется основная форма системы взаимодействия и соответствующее обсуждение становится текущим, для контекстных обсуждений открывается форма объекта контекста. Возможен переход по внешней ссылке. Для внешней ссылки, которая содержит сигнатуру "e1cib" выполняются следующие действия: Если начало ссылки совпадает с навигационной ссылкой информационной базы текущего сеанса, то выполняется переход по локальной ссылке; Если начало ссылки не совпадает с навигационной ссылкой информационной базы, то осуществляется поиск запущенного клиента, подключенного к базе, адрес которой соответствует ссылке. Если такой клиент найден, окно его приложения активизируется и в нем выполняется переход по ссылке. Если соответствующего запущенного экземпляра тонкого клиента нет, то выполняется попытка запуска нового экземляра тонкого клиента с соответствующей строкой соединения и в нем выполняется переход. Если выполняется переход по ссылке вида "http(s)" на о
Синтаксис
ПерейтиПоНавигационнойСсылке(<НавигационнаяСсылка>)Полное описание, параметры и ограничения
Глобальный контекст.ПерейтиПоНавигационнойСсылке (Global context.GotoURL)
Глобальный контекст (Global context)
ПерейтиПоНавигационнойСсылке (GotoURL)
Доступен, начиная с версии 8.2.
Синтаксис:
ПерейтиПоНавигационнойСсылке(<НавигационнаяСсылка>)
Параметры:
<НавигационнаяСсылка> (обязательный)
Тип: Строка.
Навигационная ссылка.
Описание:
Выполняет переход по ссылке так, как если бы пользователь выполнил интерактивную вспомогательную команду "Перейти по ссылке ...".
Если выполняется переход по ссылке на объект информационной базы, отчет или обработку, то происходит открытие нового вспомогательного окна (если окно с этим объектом еще не открыто).
Если выполняется переход по ссылке на точку навигации, то переход будет выполнен в основном окне приложения, и оно станет активным.
Если выполняется переход по ссылке на обсуждение системы взаимодействия:
для неконтекстных обсуждений активизируется основная форма системы взаимодействия и соответствующее обсуждение становится текущим,
для контекстных обсуждений открывается форма объекта контекста.
Возможен переход по внешней ссылке. Для внешней ссылки, которая содержит сигнатуру "e1cib" выполняются следующие действия:
Если начало ссылки совпадает с навигационной ссылкой информационной базы текущего сеанса, то выполняется переход по локальной ссылке;
Если начало ссылки не совпадает с навигационной ссылкой информационной базы, то осуществляется поиск запущенного клиента, подключенного к базе, адрес которой соответствует ссылке. Если такой клиент найден, окно его приложения активизируется и в нем выполняется переход по ссылке.
Если соответствующего запущенного экземпляра тонкого клиента нет, то выполняется попытка запуска нового экземляра тонкого клиента с соответствующей строкой соединения и в нем выполняется переход.
Если выполняется переход по ссылке вида "http(s)" на объект в другой информационной базе, то:
Выполняется попытка найти запущенный экземпляр тонкого клиента, работающего с соответствующей информационной базой.
Если запущенного экземпляра тонкого клиента нет, или в нем открыт модальный диалог, выполняется попытка запуска нового экземпляра тонкого клиента с соответствующей строкой соединения.
Если попытка запуска не успешна (например, тонкий клиент не установлен), переданная ссылка обрабатывается операционной системой.
Если внешняя ссылка не является навигационной ссылкой информационной базы (например, ссылки на сайты или файлы на диске), то в тонком клиенте данная ссылка выполняется как команда операционной системы. Ссылка открывается ассоциированной с данным типом ссылки программой. Если ссылка указывает на текстовый документ, табличный документ и т.п., в тонком клиенте документ будет открыт в клиентском приложении.В веб-клиенте отрабатывают только http-ссылки, которые открываются в том же браузере в отдельном окне.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение (клиент).
Вызов метода выполняет обращение к серверу.
Примечание:
Может быть вызван только в управляемом режиме.
В веб-клиенте внешние ссылки всегда открываются в новом окне.
Вызов метода для ссылок типа Данные (конкретный элемент справочника или документ) всегда приводит к вызову сервера.
Вызов метода для ссылок типа НавигационнаяСсылка (например, открыть раздел) кэшируется. Зависит от версии платформы, версии конфигурации, функциональных опций.
Вызов метода для перехода по ссылке других типов (например, справка, файловая система) не приводит к вызову сервера.
При переходе по навигационной ссылке не учитываются пробельные символы в начале и в конце строки:
В тонком и толстом клиентах - символы, относящиеся к пробельным с точки зрения ICU, и символ параграфа, который вставляет поле ввода вместо символов возврат каретки/перевод строки.
В веб-клиенте - символы, относящиеся к пробельным с точки зрения реализации регулярных выражений в браузере.
Ссылка, переданная в данный метод, передается на выполнение операционной системе в исходном виде.
В режиме совместимости конфигурации Версия8_3_6 или Версия8_3_5, ссылка, переданная в метод, перед передачей на выполнение операционной системе, декодируется.
В режиме совместимости конфигурации Версия8_3_4 и ниже ссылка, переданная в метод, передается на выполнение операционной системе в исходном виде.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Проверить actual ссылку собственного отчёта перед локальным переходом
Навигатор получает ссылку от настоящей собственной отчётной формы без 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. Этот урок такого тождества не проверяет.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.