ФормаКлиентскогоПриложения.ВыполнитьПереход

Методы · ExecuteNavigation

Если основным реквизитом формы является динамический список, и тип значения параметра <Объект> является ссылкой на объект, который содержится в главной таблице динамического списка, то у таблицы формы, отображающей этот динамический список (первой, если таких таблиц несколько) текущая строка устанавливается на переданный объект.

Синтаксис

ВыполнитьПереход(<Объект>)
Полное описание, параметры и ограничения

ФормаКлиентскогоПриложения.ВыполнитьПереход (ClientApplicationForm.ExecuteNavigation)

ФормаКлиентскогоПриложения (ClientApplicationForm)

ВыполнитьПереход (ExecuteNavigation)

Доступен, начиная с версии 8.3.6.

Синтаксис:
ВыполнитьПереход(<Объект>)
Параметры:

<Объект> (обязательный)
Тип: Ссылка на объект информационной базы.
Объект, на который необходимо перейти.
Описание:

Если основным реквизитом формы является динамический список, и тип значения параметра <Объект> является ссылкой на объект, который содержится в главной таблице динамического списка, то у таблицы формы, отображающей этот динамический список (первой, если таких таблиц несколько) текущая строка устанавливается на переданный объект.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.

Использование в версии:

Доступен, начиная с версии 8.3.6.

Методическая информация

Практические примеры

Перейти к своей карточке списка и передать активную ссылку наблюдателю

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

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

Полный модуль собственной управляемой формы списка; серверная запись двух своих элементов и клиентские позиционирование/оповещение.

Подготовка

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

  2. Справочники → УчебныеКарточки85: неиерархический, Наименование длиной80, стандартная автонумерация кода. Добавьте реквизит Метка85 типа Строка длиной36. В новом справочнике исходно нет ни одного элемента.

  3. Создайте управляемую форму списка УчебныйСписок85 и назначьте основной формой списка. Основной реквизит Список типа ДинамическийСписок, главная таблица Справочник.УчебныеКарточки85, без произвольного запроса. Таблица формы Карточки привязана к Список; в ней выводятся Код и Наименование.

  4. В списке создайте реквизиты Метка85 типа Строка36, ПерваяКарточка85, ВтораяКарточка85, НоваяКарточка85 типа СправочникСсылка.УчебныеКарточки85, ПодтверждаюПустойСтенд типа Булево и Итог85 типа Строка неограниченной длины. Ссылки, метку и Итог показывайте только для просмотра.

  5. Добавьте команды и кнопки ПодготовитьСвоиКарточки85, ОткрытьНаблюдателя85, ПерейтиККниге85, ПерейтиКРучке85, ОткрытьСвойРедактор85. Действия — одноимённые процедуры основного модуля списка. Назначьте форме ОбработкаЗаписиНового с точной сигнатурой из модуля.

  6. Общие формы → УчебныйНаблюдатель85, управляемая. Параметр Метка85 типа Строка36; реквизиты Метка85 Строка36, АктивнаяКарточка85 типа СправочникСсылка.УчебныеКарточки85 и Итог85 Строка. Все отображаемые поля только для просмотра. Вставьте модуль наблюдателя и назначьте ПриСозданииНаСервере и ОбработкаАктивизации.

  7. Общие формы → УчебныйРедактор85, управляемая. Параметр Метка85 Строка36; реквизиты Метка85 Строка36, Наименование85 Строка80, СозданнаяКарточка85 типа СправочникСсылка.УчебныеКарточки85, ПодтверждаюЗапись85 Булево, Итог85 Строка. Метка, ссылка и итог только для просмотра; добавьте кнопку ЗаписатьСвоюНовую85 и назначьте ПриСозданииНаСервере.

  8. Справочник → Формы → УчебнаяКарточка85, управляемая форма объекта, основная форма объекта. Основной реквизит Объект автоматически связан с учебным справочником. Добавьте несохраняемые реквизиты ПодтверждаюОпыт85 Булево и Итог85 Строка, команду ПроверитьСвоюБлокировку85 и её кнопку; модуль объектной формы указан отдельно.

  9. Нажмите F7 и обновите только новый стенд. runtimeVerifiedScenarios=0: 1С здесь не запускалась, учебные элементы не создавались, блокировки и оповещения не выполнялись. Код и проверки подготовлены статически.

  10. Вручную откройте свой список, подтвердите пустой стенд и подготовьте две карточки. Подготовка реально записывает Книга и Ручка только при вашем будущем запуске; обе получают один новый UUID. Повторная подготовка непустого справочника отклоняется, автоматического удаления данных нет.

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

&НаКлиенте
Перем Наблюдатель85;

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

&НаСервереБезКонтекста
Функция СоздатьСвоюПаруНаСервере()
    Выборка = Справочники.УчебныеКарточки85.Выбрать();
    Если Выборка.Следующий() Тогда
        ВызватьИсключение "Учебный справочник должен быть пустым до первой подготовки";
    КонецЕсли;
    МеткаПары = Строка(Новый УникальныйИдентификатор);
    НачатьТранзакцию();
    Попытка
        Первая = Справочники.УчебныеКарточки85.СоздатьЭлемент();
        Первая.Наименование = "Книга";
        Первая.Метка85 = МеткаПары;
        Первая.Записать();
        Вторая = Справочники.УчебныеКарточки85.СоздатьЭлемент();
        Вторая.Наименование = "Ручка";
        Вторая.Метка85 = МеткаПары;
        Вторая.Записать();
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Новый Структура("Метка85,Первая,Вторая", МеткаПары, Первая.Ссылка, Вторая.Ссылка);
КонецФункции

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

&НаКлиенте
Процедура ПерейтиККниге85(Команда)
    Если ПерваяКарточка85.Пустая() Тогда
        ВызватьИсключение "Сначала подготовьте собственную пару";
    КонецЕсли;
    ЭтаФорма.ВыполнитьПереход(ПерваяКарточка85);
    ЭтаФорма.ОповеститьОбАктивизации(ПерваяКарточка85);
    Итог85 = "Выбрана собственная Книга; проверьте поле наблюдателя после завершения команды";
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиКРучке85(Команда)
    Если ВтораяКарточка85.Пустая() Тогда
        ВызватьИсключение "Сначала подготовьте собственную пару";
    КонецЕсли;
    ЭтаФорма.ВыполнитьПереход(ВтораяКарточка85);
    ЭтаФорма.ОповеститьОбАктивизации(ВтораяКарточка85);
    Итог85 = "Выбрана собственная Ручка; проверьте поле наблюдателя после завершения команды";
КонецПроцедуры

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

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

УчебныеОповещенияФорм85 → Общие формы → УчебныйНаблюдатель85 → Модуль

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

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

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

УчебныеОповещенияФорм85 → Общие формы → УчебныйРедактор85 → Модуль

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Метка85 = Параметры.Метка85;
    Наименование85 = "Тетрадь";
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьСвоюНовую85(Команда)
    Если Не ПодтверждаюЗапись85 Тогда
        ВызватьИсключение "Подтвердите запись одной своей учебной карточки";
    КонецЕсли;
    Если ВладелецФормы = Неопределено Тогда
        ВызватьИсключение "Редактор должен быть открыт из собственного учебного списка";
    КонецЕсли;
    СсылкаНовой = СоздатьСвоюКарточкуНаСервере();
    ЭтаФорма.ОтобразитьИзменениеДанных(СсылкаНовой, ВидИзмененияДанных.Добавление);
    ЭтаФорма.ОповеститьОЗаписиНового(СсылкаНовой);
    Итог85 = "Собственная Тетрадь записана и владелец оповещён";
КонецПроцедуры

&НаСервере
Функция СоздатьСвоюКарточкуНаСервере()
    Если Не ПодтверждаюЗапись85 Тогда
        ВызватьИсключение "Только свой подтверждённый стенд";
    КонецЕсли;
    Если Не СозданнаяКарточка85.Пустая() Тогда
        ВызватьИсключение "В этом редакторе уже создана одна собственная карточка";
    КонецЕсли;
    Если Строка(Новый УникальныйИдентификатор(Метка85)) <> Метка85 Тогда
        ВызватьИсключение "Нужна настоящая метка собственной подготовленной пары";
    КонецЕсли;
    ИмяКарточки = СокрЛП(Наименование85);
    Если ИмяКарточки = "" Или СтрДлина(ИмяКарточки) > 80 Тогда
        ВызватьИсключение "Укажите учебное наименование длиной1–80 символов";
    КонецЕсли;
    Своя = Справочники.УчебныеКарточки85.СоздатьЭлемент();
    Своя.Наименование = ИмяКарточки;
    Своя.Метка85 = Метка85;
    Своя.Записать();
    СозданнаяКарточка85 = Своя.Ссылка;
    Возврат СозданнаяКарточка85;
КонецФункции

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

  1. Серверная подготовка допускается только в пустом учебном справочнике. Книга и Ручка записываются одной транзакцией; метка и обе реальные ссылки возвращаются клиенту после фиксации.

  2. ОповеститьОбИзменении получает реальный тип собственного справочника после фактического изменения нескольких объектов. Он обновляет динамические списки с главной таблицей, а не произвольные таблицы без неё.

  3. ПолучитьФорму открывает наблюдателя с ЭтаФорма в параметре Владелец. Метка передаётся параметром и ключом уникальности; она не заменяет отношение владения.

  4. ВыполнитьПереход получает собственную сохранённую ссылку Книга или Ручка, которая относится к главной таблице основного динамического списка.

  5. ОповеститьОбАктивизации явно передаёт ту же реальную ссылку подчинённой форме. Её ОбработкаАктивизации проверяет источник, владельца, имя формы, метку и тип ссылки.

  6. В обработчике активизации выполняются только чтение клиентских простых полей и установка локальных реквизитов. Серверные методы формы, ПолучитьОбъект и чтение реквизитов ссылки не вызываются.

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

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

  2. После завершения ПерейтиККниге85 текущая строка списка — Книга, а поле наблюдателя содержит ссылку на Книга.

  3. После ПерейтиКРучке85 текущая строка и ссылка наблюдателя относятся к Ручка.

  4. Проверяйте результат после возврата команды и отображения формы. Закрытый наблюдатель не обязан получать событие; снова откройте его собственной кнопкой.

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

Два реальных сохранённых объекта используются для позиционирования и передачи активизации, без подмены ссылки текстом.

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

  1. Главная таблица и основной динамический список обязательны для ВыполнитьПереход. Переход не создаёт объект и не выполняет поиск по его названию.

  2. ОповеститьОбАктивизации направляется подчинённым формам; форма без переданного владельца не становится наблюдателем только из-за одинаковой метки.

  3. ОповеститьОбИзменении очищает клиентские кэши и уведомляет списки; он не сохраняет изменённые данные. Здесь запись завершена до оповещения.

  4. ОбработкаАктивизации не должна обращаться к серверным методам формы или менять свойства с серверным вызовом. Не добавляйте в неё получение объекта ссылки ради красивого текста.

  5. Метка — контроль собственной партии, не механизм авторизации. Стенд должен быть новым и пустым, без других сеансов и чужих обработчиков.

  6. Две записи остаются в учебном стенде. В этом коде нет их удаления, удаления чужого справочника или попытки очистить production.

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

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

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

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

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