Разработка и Конфигурация · 10 мин
Как программно перейти на другую страницу в 1С
Как программно перейти на другую страницу в 1С: ПерейтиПоНавигационнойСсылке, ОткрытьФорму, ПоказатьЗначение. Примеры кода, ошибки и проверка результата.
В управляемых формах 1С «переход на другую страницу» может означать три разные задачи: открытие другой формы объекта или списка, переход по навигационной ссылке внутри информационной базы и переключение закладки (страницы) внутри текущей формы. У каждой задачи свой механизм, и путаница между ними — самая частая причина неработающего кода.
Для навигации между объектами базы используются методы глобального контекста ПерейтиПоНавигационнойСсылке, ОткрытьФорму и ПоказатьЗначение. Для переключения вкладок внутри формы применяется свойство ТекущаяСтраница элемента «Страницы». Ниже разобраны все сценарии с примерами кода на встроенном языке.
Важно понимать контекст исполнения: навигационные методы доступны только на клиенте (в управляемой форме, в клиентской процедуре общего модуля). Вызов их на сервере приведёт к ошибке выполнения, поэтому логику следует разделять: сервер готовит данные и ссылку, клиент выполняет переход.
Различение задач: навигация между объектами и страницами формы
Прежде чем писать код, определите, что именно требуется. Если нужно открыть другой документ, элемент справочника или отчёт — это переход по навигационной ссылке или открытие формы. Если нужно показать пользователю другую вкладку той же формы (например, переключить с «Основное» на «Дополнительно») — это работа с элементом формы «Страницы».
Третий сценарий — открытие внешнего ресурса (сайта, веб-страницы) из 1С. Для этого применяется метод ПерейтиПоНавигационнойСсылке с URL вида «http://…» или ЗапуститьПриложение в толстом клиенте. В веб-клиенте открытие внешних ссылок происходит в новой вкладке браузера и может блокироваться настройками всплывающих окон.
Переход по навигационной ссылке с помощью ПерейтиПоНавигационнойСсылке
Метод ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка) открывает объект по его адресу в базе. Сначала ссылку нужно получить — для ссылочного объекта это делает функция ПолучитьНавигационнуюСсылку(Ссылка), вызываемая на сервере.
Типовой пример: по нажатию кнопки открыть связанный документ-основание.
&НаСервере
Функция ПолучитьСсылкуНаОснование()
Возврат ПолучитьНавигационнуюСсылку(Объект.ДокументОснование);
КонецФункции
&НаКлиенте
Процедура ОткрытьОснование(Команда)
Если ЗначениеЗаполнено(Объект.ДокументОснование) Тогда
НавСсылка = ПолучитьСсылкуНаОснование();
ПерейтиПоНавигационнойСсылке(НавСсылка);
Иначе
ПоказатьПредупреждение(, "Документ-основание не указан");
КонецЕсли;
КонецПроцедуры
Метод также принимает ссылки на разделы интерфейса (например, «e1cib/app/Обработка.ПанельАдминистрирования») и внешние URL. Если передать строку, начинающуюся с «http», платформа откроет её в браузере. Проверяйте, что ссылка не пустая: при передаче пустой строки метод ничего не откроет и не выдаст понятной ошибки.
&НаКлиенте
Процедура ОткрытьСайт(Команда)
ПерейтиПоНавигационнойСсылке("https://example.ru");
КонецПроцедурыОткрытие формы объекта через ОткрытьФорму и ПоказатьЗначение
Метод ОткрытьФорму универсальнее: он позволяет открыть любую форму — объекта, списка, отчёта, обработки — с передачей параметров. Для открытия конкретного документа параметр «Ключ» принимает ссылку:
&НаКлиенте
Процедура ОткрытьДокумент(Команда)
ПараметрыФормы = Новый Структура("Ключ", Объект.ДокументОснование);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры
Для простого показа значения ссылочного типа удобнее ПоказатьЗначение(, Ссылка) — платформа сама определит нужную форму. Этот способ короче и устойчив к переименованию форм в конфигурации.
Дополнительные параметры ОткрытьФорму позволяют указать владельца формы, уникальность, окно и режим открытия (например, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца для модального поведения). Если нужно выполнить действие после закрытия открытой формы, передавайте описание оповещения через ОписаниеОповещенияОЗакрытии.
Сравнение способов перехода
Подходит для перехода по готовой ссылке и внешних URL. Ограничение: нельзя передать параметры открытия формы.
Подходит, когда нужны параметры, владелец, оповещение о закрытии. Требует точного имени формы.
Самый простой показ ссылочного объекта. Не подходит для списков, отчётов и форм с параметрами.
Переключение страниц (вкладок) внутри текущей формы
Если «другая страница» — это вкладка внутри открытой формы, навигационные методы не нужны. У элемента формы типа «ГруппаСтраницы» есть свойство ТекущаяСтраница, которое принимает ссылку на дочерний элемент-страницу:
&НаКлиенте
Процедура ПоказатьДополнительно(Команда)
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаДополнительно;
КонецПроцедуры
Имена элементов («Страницы», «СтраницаДополнительно») должны совпадать с именами, заданными в конфигураторе. Если страница скрыта (свойство Видимость = Ложь), переключение на неё не сработает — сначала сделайте её видимой. Переключение страниц доступно и на сервере, в отличие от навигационных методов.
Для пошаговых «мастеров» внутри формы удобно сочетать ТекущаяСтраница с управлением доступностью кнопок «Далее» и «Назад», проверяя заполненность обязательных реквизитов перед переходом на следующую вкладку.
- 1Определите целевой объект: ссылка, форма списка или внешний URL
- 2В клиентской процедуре проверьте, что данные для перехода заполнены
- 3При необходимости получите навигационную ссылку на сервере
- 4Вызовите ПерейтиПоНавигационнойСсылке, ОткрытьФорму или ПоказатьЗначение
- 5Проверьте в тонком и веб-клиенте, что открылась нужная форма
Открытие форм списков и отчётов с отбором
Частая задача — перейти не к одному объекту, а к списку с установленным отбором, например показать все документы по контрагенту. Для этого в параметры формы передаётся структура с элементом «Отбор»:
&НаКлиенте
Процедура ПоказатьДокументыКонтрагента(Команда)
Отбор = Новый Структура("Контрагент", Объект.Контрагент);
ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаСписка", ПараметрыФормы);
КонецПроцедуры
Ключи структуры отбора должны совпадать с именами полей, доступных для отбора в динамическом списке. Если поле не входит в состав отборов списка, платформа выдаст ошибку при открытии формы. Для отчётов на СКД параметры передаются через «ПараметрыДанных» или формируются программно в модуле отчёта.
Частые ошибки и их устранение
Первая типичная ошибка — вызов ПерейтиПоНавигационнойСсылке или ОткрытьФорму в серверной процедуре. Компилятор модуля может не остановить вас, но в runtime возникнет ошибка «Метод объекта не обнаружен» или подобная. Решение — вынести переход в клиентскую процедуру, а сервер использовать только для получения данных.
Вторая ошибка — неверное имя формы в ОткрытьФорму. Строка вида «Документ.ПоступлениеТоваров.Форма.ФормаДокумента» чувствительна к регистру и точному пути. Если форма не назначена основной, указывайте полный путь; если основная — достаточно «ФормаОбъекта» или «ФормаСписка».
Третья ошибка — попытка открыть объект, на который у пользователя нет прав. Форма откроется с ошибкой доступа или пустой. Проверяйте права заранее, если переход выполняется под пользователями с ограниченными ролями, и тестируйте сценарий под целевой ролью, а не под администратором.
Проверка результата и ограничения
После внедрения перехода проверьте сценарий в тонком клиенте и в веб-клиенте: открытие внешних ссылок и модальных окон в браузере может отличаться. Убедитесь, что при повторном нажатии кнопки не открывается множество одинаковых форм — при необходимости используйте параметр «Уникальность» в ОткрытьФорму.
Учтите ограничение: программный переход не заменяет стандартную навигацию панелей разделов. Если требуется открыть целый раздел прикладного решения, используйте навигационные ссылки вида «e1cib/app/…», которые можно скопировать из интерфейса через «Получить ссылку».
Как проверить результат
Открывается форма с данными нужного документа или элемента
Открывается пустая форма нового объекта — проверьте заполненность параметра Ключ
Браузер открывает страницу в новой вкладке
Ничего не происходит — проверьте блокировку всплывающих окон
Форма показывает нужную страницу
Страница не меняется — проверьте видимость и имя элемента
FAQ
Можно ли перейти на другую страницу из серверной процедуры?
Нет. Методы ПерейтиПоНавигационнойСсылке, ОткрытьФорму и ПоказатьЗначение доступны только на клиенте. На сервере можно лишь подготовить данные — например, получить навигационную ссылку — и вернуть её клиентской процедуре, которая выполнит переход.
Как открыть форму и получить результат после её закрытия?
Создайте ОписаниеОповещения с именем процедуры-обработчика и передайте его в ОткрытьФорму как параметр ОписаниеОповещенияОЗакрытии. В обработчике первым параметром придёт результат закрытия формы, который формируется методом Закрыть(Результат) в открываемой форме.
Как открыть внешний сайт из 1С?
Вызовите ПерейтиПоНавигационнойСсылке с URL, начинающимся с http или https. В веб-клиенте страница откроется в новой вкладке браузера; если вкладка заблокирована, пользователю нужно разрешить всплывающие окна для адреса базы.
Почему ОткрытьФорму открывает новый пустой документ вместо существующего?
Причина почти всегда в пустом или неверном параметре «Ключ». Проверьте, что переменная со ссылкой заполнена и имеет нужный тип. Дополнительно убедитесь, что открывается форма того же вида документа, что и переданная ссылка.
Как переключить вкладку формы при открытии?
Передайте в форму параметр-флаг, а в обработчике ПриОткрытии установите Элементы.Страницы.ТекущаяСтраница на нужную страницу по условию параметра. Альтернатива — установить текущую страницу в ПриСозданииНаСервере, что работает и без клиентского кода.
Что важно запомнить
Переход между объектами выполняется на клиенте через ПерейтиПоНавигационнойСсылке, ОткрытьФорму или ПоказатьЗначение; вкладки внутри формы переключаются свойством ТекущаяСтраница. Проверяйте заполненность ссылок, точность имён форм и права пользователя, а результат тестируйте в тонком и веб-клиенте.