К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как программно перейти на другую страницу в 1С

Как программно перейти на другую страницу в 1С: ПерейтиПоНавигационнойСсылке, ОткрытьФорму, ПоказатьЗначение. Примеры кода, ошибки и проверка результата.

В управляемых формах 1С «переход на другую страницу» может означать три разные задачи: открытие другой формы объекта или списка, переход по навигационной ссылке внутри информационной базы и переключение закладки (страницы) внутри текущей формы. У каждой задачи свой механизм, и путаница между ними — самая частая причина неработающего кода.

Для навигации между объектами базы используются методы глобального контекста ПерейтиПоНавигационнойСсылке, ОткрытьФорму и ПоказатьЗначение. Для переключения вкладок внутри формы применяется свойство ТекущаяСтраница элемента «Страницы». Ниже разобраны все сценарии с примерами кода на встроенном языке.

Важно понимать контекст исполнения: навигационные методы доступны только на клиенте (в управляемой форме, в клиентской процедуре общего модуля). Вызов их на сервере приведёт к ошибке выполнения, поэтому логику следует разделять: сервер готовит данные и ссылку, клиент выполняет переход.

Различение задач: навигация между объектами и страницами формы

Прежде чем писать код, определите, что именно требуется. Если нужно открыть другой документ, элемент справочника или отчёт — это переход по навигационной ссылке или открытие формы. Если нужно показать пользователю другую вкладку той же формы (например, переключить с «Основное» на «Дополнительно») — это работа с элементом формы «Страницы».

Третий сценарий — открытие внешнего ресурса (сайта, веб-страницы) из 1С. Для этого применяется метод ПерейтиПоНавигационнойСсылке с URL вида «http://…» или ЗапуститьПриложение в толстом клиенте. В веб-клиенте открытие внешних ссылок происходит в новой вкладке браузера и может блокироваться настройками всплывающих окон.

Переход по навигационной ссылке с помощью ПерейтиПоНавигационнойСсылке

Метод ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка) открывает объект по его адресу в базе. Сначала ссылку нужно получить — для ссылочного объекта это делает функция ПолучитьНавигационнуюСсылку(Ссылка), вызываемая на сервере.

Типовой пример: по нажатию кнопки открыть связанный документ-основание.

&НаСервере

Функция ПолучитьСсылкуНаОснование()

Возврат ПолучитьНавигационнуюСсылку(Объект.ДокументОснование);

КонецФункции

&НаКлиенте

Процедура ОткрытьОснование(Команда)

Если ЗначениеЗаполнено(Объект.ДокументОснование) Тогда

НавСсылка = ПолучитьСсылкуНаОснование();

ПерейтиПоНавигационнойСсылке(НавСсылка);

Иначе

ПоказатьПредупреждение(, "Документ-основание не указан");

КонецЕсли;

КонецПроцедуры

Метод также принимает ссылки на разделы интерфейса (например, «e1cib/app/Обработка.ПанельАдминистрирования») и внешние URL. Если передать строку, начинающуюся с «http», платформа откроет её в браузере. Проверяйте, что ссылка не пустая: при передаче пустой строки метод ничего не откроет и не выдаст понятной ошибки.

bsl
&НаКлиенте
Процедура ОткрытьСайт(Команда)
    ПерейтиПоНавигационнойСсылке("https://example.ru");
КонецПроцедуры

Открытие формы объекта через ОткрытьФорму и ПоказатьЗначение

Метод ОткрытьФорму универсальнее: он позволяет открыть любую форму — объекта, списка, отчёта, обработки — с передачей параметров. Для открытия конкретного документа параметр «Ключ» принимает ссылку:

&НаКлиенте

Процедура ОткрытьДокумент(Команда)

ПараметрыФормы = Новый Структура("Ключ", Объект.ДокументОснование);

ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);

КонецПроцедуры

Для простого показа значения ссылочного типа удобнее ПоказатьЗначение(, Ссылка) — платформа сама определит нужную форму. Этот способ короче и устойчив к переименованию форм в конфигурации.

Дополнительные параметры ОткрытьФорму позволяют указать владельца формы, уникальность, окно и режим открытия (например, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца для модального поведения). Если нужно выполнить действие после закрытия открытой формы, передавайте описание оповещения через ОписаниеОповещенияОЗакрытии.

Сравнение способов перехода

ПерейтиПоНавигационнойСсылке

Подходит для перехода по готовой ссылке и внешних URL. Ограничение: нельзя передать параметры открытия формы.

ОткрытьФорму

Подходит, когда нужны параметры, владелец, оповещение о закрытии. Требует точного имени формы.

ПоказатьЗначение

Самый простой показ ссылочного объекта. Не подходит для списков, отчётов и форм с параметрами.

Переключение страниц (вкладок) внутри текущей формы

Если «другая страница» — это вкладка внутри открытой формы, навигационные методы не нужны. У элемента формы типа «ГруппаСтраницы» есть свойство ТекущаяСтраница, которое принимает ссылку на дочерний элемент-страницу:

&НаКлиенте

Процедура ПоказатьДополнительно(Команда)

Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаДополнительно;

КонецПроцедуры

Имена элементов («Страницы», «СтраницаДополнительно») должны совпадать с именами, заданными в конфигураторе. Если страница скрыта (свойство Видимость = Ложь), переключение на неё не сработает — сначала сделайте её видимой. Переключение страниц доступно и на сервере, в отличие от навигационных методов.

Для пошаговых «мастеров» внутри формы удобно сочетать ТекущаяСтраница с управлением доступностью кнопок «Далее» и «Назад», проверяя заполненность обязательных реквизитов перед переходом на следующую вкладку.

Порядок действий при переходе на другой объект
  1. 1
    Определите целевой объект: ссылка, форма списка или внешний URL
  2. 2
    В клиентской процедуре проверьте, что данные для перехода заполнены
  3. 3
    При необходимости получите навигационную ссылку на сервере
  4. 4
    Вызовите ПерейтиПоНавигационнойСсылке, ОткрытьФорму или ПоказатьЗначение
  5. 5
    Проверьте в тонком и веб-клиенте, что открылась нужная форма

Открытие форм списков и отчётов с отбором

Частая задача — перейти не к одному объекту, а к списку с установленным отбором, например показать все документы по контрагенту. Для этого в параметры формы передаётся структура с элементом «Отбор»:

&НаКлиенте

Процедура ПоказатьДокументыКонтрагента(Команда)

Отбор = Новый Структура("Контрагент", Объект.Контрагент);

ПараметрыФормы = Новый Структура("Отбор", Отбор);

ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаСписка", ПараметрыФормы);

КонецПроцедуры

Ключи структуры отбора должны совпадать с именами полей, доступных для отбора в динамическом списке. Если поле не входит в состав отборов списка, платформа выдаст ошибку при открытии формы. Для отчётов на СКД параметры передаются через «ПараметрыДанных» или формируются программно в модуле отчёта.

Частые ошибки и их устранение

Первая типичная ошибка — вызов ПерейтиПоНавигационнойСсылке или ОткрытьФорму в серверной процедуре. Компилятор модуля может не остановить вас, но в runtime возникнет ошибка «Метод объекта не обнаружен» или подобная. Решение — вынести переход в клиентскую процедуру, а сервер использовать только для получения данных.

Вторая ошибка — неверное имя формы в ОткрытьФорму. Строка вида «Документ.ПоступлениеТоваров.Форма.ФормаДокумента» чувствительна к регистру и точному пути. Если форма не назначена основной, указывайте полный путь; если основная — достаточно «ФормаОбъекта» или «ФормаСписка».

Третья ошибка — попытка открыть объект, на который у пользователя нет прав. Форма откроется с ошибкой доступа или пустой. Проверяйте права заранее, если переход выполняется под пользователями с ограниченными ролями, и тестируйте сценарий под целевой ролью, а не под администратором.

Типичные ошибки
01
Вызов навигационного метода на сервере — ошибка выполнения, переход не происходит
02
Передача пустой ссылки в параметр Ключ — откроется форма нового объекта вместо существующего
03
Неверное имя формы или поля отбора — исключение при открытии
04
Переключение на скрытую страницу формы — ТекущаяСтраница не меняется
05
Тестирование только в толстом клиенте — в веб-клиенте поведение всплывающих окон иное

Проверка результата и ограничения

После внедрения перехода проверьте сценарий в тонком клиенте и в веб-клиенте: открытие внешних ссылок и модальных окон в браузере может отличаться. Убедитесь, что при повторном нажатии кнопки не открывается множество одинаковых форм — при необходимости используйте параметр «Уникальность» в ОткрытьФорму.

Учтите ограничение: программный переход не заменяет стандартную навигацию панелей разделов. Если требуется открыть целый раздел прикладного решения, используйте навигационные ссылки вида «e1cib/app/…», которые можно скопировать из интерфейса через «Получить ссылку».

Контрольные точки

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

Открытие формы объекта
Норма

Открывается форма с данными нужного документа или элемента

Тревожный признак

Открывается пустая форма нового объекта — проверьте заполненность параметра Ключ

Переход по внешней ссылке
Норма

Браузер открывает страницу в новой вкладке

Тревожный признак

Ничего не происходит — проверьте блокировку всплывающих окон

Переключение вкладки
Норма

Форма показывает нужную страницу

Тревожный признак

Страница не меняется — проверьте видимость и имя элемента

FAQ

Можно ли перейти на другую страницу из серверной процедуры?

Нет. Методы ПерейтиПоНавигационнойСсылке, ОткрытьФорму и ПоказатьЗначение доступны только на клиенте. На сервере можно лишь подготовить данные — например, получить навигационную ссылку — и вернуть её клиентской процедуре, которая выполнит переход.

Как открыть форму и получить результат после её закрытия?

Создайте ОписаниеОповещения с именем процедуры-обработчика и передайте его в ОткрытьФорму как параметр ОписаниеОповещенияОЗакрытии. В обработчике первым параметром придёт результат закрытия формы, который формируется методом Закрыть(Результат) в открываемой форме.

Как открыть внешний сайт из 1С?

Вызовите ПерейтиПоНавигационнойСсылке с URL, начинающимся с http или https. В веб-клиенте страница откроется в новой вкладке браузера; если вкладка заблокирована, пользователю нужно разрешить всплывающие окна для адреса базы.

Почему ОткрытьФорму открывает новый пустой документ вместо существующего?

Причина почти всегда в пустом или неверном параметре «Ключ». Проверьте, что переменная со ссылкой заполнена и имеет нужный тип. Дополнительно убедитесь, что открывается форма того же вида документа, что и переданная ссылка.

Как переключить вкладку формы при открытии?

Передайте в форму параметр-флаг, а в обработчике ПриОткрытии установите Элементы.Страницы.ТекущаяСтраница на нужную страницу по условию параметра. Альтернатива — установить текущую страницу в ПриСозданииНаСервере, что работает и без клиентского кода.

Итог

Что важно запомнить

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