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

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

Как открыть форму списка в 1С

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

Форма списка — основной рабочий экран для справочников, документов, регистров сведений и других объектов 1С. Открыть её можно двумя путями: интерактивно через интерфейс пользователя или программно из встроенного языка. Первый способ нужен пользователям и администраторам, второй — разработчикам при создании кнопок, команд и переходов между формами.

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

Ниже разобраны оба подхода с примерами кода, вариантами параметров и типичными ошибками, из-за которых форма не открывается или открывается не так, как ожидалось.

Как открыть форму списка интерактивно

В управляемом интерфейсе (тонкий клиент, веб-клиент) списки открываются через панель разделов и панель функций. Пользователь выбирает раздел (например, «Продажи»), затем в списке команд находит нужный объект — «Реализация товаров и услуг», «Номенклатура» и т. д. Клик по команде открывает форму списка в основном окне.

Если нужной команды нет на панели функций, её можно добавить через «Настройки навигации» (шестерёнка в правом верхнем углу панели). Это не меняет конфигурацию, а только настраивает видимость команд для текущего пользователя.

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

Программное открытие: метод ОткрытьФорму

Основной инструмент разработчика — глобальный метод ОткрытьФорму(). Минимальный вызов выглядит так:

ОткрытьФорму("Справочник.Номенклатура.ФормаСписка");

Имя формы строится по шаблону: тип объекта, имя объекта, имя формы. Вместо ФормаСписка можно указать имя конкретной формы списка, созданной разработчиком в конфигураторе, например Справочник.Контрагенты.Форма.ФормаСпискаАбонентов. Если форма списка одна и основная, допустимо короткое имя ФормаСписка.

Метод работает только на клиенте — в клиентских процедурах и функциях. Вызов из серверного контекста приведёт к ошибке компиляции или выполнения. Это частая причина проблем у начинающих разработчиков: код открытия формы размещают в процедуре с директивой &НаСервере.

bsl
&НаКлиенте
Процедура ПоказатьНоменклатуру(Команда)
	ОткрытьФорму("Справочник.Номенклатура.ФормаСписка");
КонецПроцедуры

Параметры открытия: отбор, режим выбора, владелец

Второй параметр метода — структура с параметрами формы. Чаще всего используются три ключа: Отбор, РежимВыбора и ТекущаяСтрока. Отбор — это вложенная структура, где ключ соответствует имени поля списка, а значение — искомому значению:

ПараметрыФормы = Новый Структура;

Отбор = Новый Структура;

Отбор.Вставить("Организация", ТекущаяОрганизация);

ПараметрыФормы.Вставить("Отбор", Отбор);

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

Режим выбора включается параметром РежимВыбора = Истина — список откроется для выбора элемента, а не для просмотра. Этот режим применяется, когда форма открывается из поля ввода или для подбора. Третий параметр метода — владелец формы: если передать текущую форму или элемент формы, открытый список будет связан с ним, и результат выбора вернётся в поле владельца.

Открытие с позиционированием на записи

Чтобы список открылся с курсором на конкретном элементе, передайте параметр ТекущаяСтрока со ссылкой на объект. Это удобно при переходе из отчёта или обработки к списку документов с подсветкой нужного документа.

Порядок действий при программном открытии
  1. 1
    Определите точное имя формы: тип объекта, имя объекта, имя формы
  2. 2
    Сформируйте структуру параметров: Отбор, РежимВыбора, ТекущаяСтрока
  3. 3
    Вызовите ОткрытьФорму() в клиентской процедуре
  4. 4
    Проверьте результат: список открылся, отбор применён, курсор на нужной строке

Открытие формы списка в обычном приложении

В устаревшем обычном приложении (толстый клиент) используется другой подход: форму получают через менеджер объекта и затем открывают:

ФормаСписка = Справочники.Номенклатура.ПолучитьФормуСписка();

ФормаСписка.Открыть();

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

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

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

Управляемое приложение, все современные конфигурации. Работает в тонком, толстом и веб-клиенте

ПолучитьФормуСписка() + Открыть()

Только обычное приложение (толстый клиент). Не работает в управляемом режиме

Интерактивное открытие

Без программирования, но без возможности передать отбор и параметры

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

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

Вторая типичная проблема — отбор не применяется. Причины: имя поля в структуре отбора не совпадает с именем реквизита объекта, либо поле не входит в состав динамического списка формы. Отбор по неиндексированным или несуществующим полям молча игнорируется или вызывает ошибку, в зависимости от настроек формы.

Третья ошибка — вызов ОткрытьФорму() на сервере или в фоновом задании. Формы существуют только в клиентском контексте; на сервере и в регламентных заданиях открывать их нельзя в принципе.

Типичные ошибки
01
Вызов ОткрытьФорму() в процедуре &НаСервере — ошибка выполнения, метод недоступен
02
Опечатка в имени формы — сообщение «Форма не найдена» при выполнении
03
Неверное имя поля в структуре Отбор — отбор молча не применяется
04
Использование ПолучитьФормуСписка() в управляемом приложении — метод отсутствует
05
Передача отбора по полю, которого нет в запросе динамического списка — отбор игнорируется

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

После открытия формы убедитесь, что она соответствует ожиданиям: заголовок списка совпадает с нужным объектом, отбор виден в строке отбора или в настройках списка (кнопка «Ещё — Настроить список»), а при передаче ТекущаяСтрока курсор стоит на нужной записи.

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

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

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

Открылась ли форма
Норма

Список отображается без сообщений об ошибке

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

Ошибка «Форма не найдена» или «Метод недоступен»

Применился ли отбор
Норма

В списке только записи, удовлетворяющие условию

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

Отображаются все записи или список пуст при наличии данных

Позиционирование курсора
Норма

Курсор на переданной ссылке

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

Курсор на первой строке списка

Ограничения и безопасные границы

Программное открытие формы не обходит права доступа: если у пользователя нет права просмотра объекта, форма не откроется либо откроется пустой. Это нормальное поведение, а не ошибка кода. Проверяйте права роли, а не только текст программы.

Открытие формы с параметром РежимВыбора из кода, не связанного с полем ввода, требует обработчика оповещения о выборе — иначе выбранное значение никуда не вернётся. Используйте ОписаниеОповещения для обработки результата выбора в асинхронной модели.

Итог

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

Интерактивно список открывается через панель функций или «Все функции», программно — методом ОткрытьФорму() только на клиенте. Отбор передаётся структурой в параметре «Отбор», режим выбора — параметром «РежимВыбора». Ошибки чаще всего связаны с неверным именем формы, серверным вызовом или несовпадением имён полей отбора.

Частые вопросы

Как открыть форму списка регистра сведений?

Аналогично: ОткрытьФорму("РегистрСведений.КурсыВалют.ФормаСписка"). Для регистров, подчинённых регистратору, обычно передают отбор по регистратору, чтобы показать записи конкретного документа.

Можно ли открыть форму списка в новом окне?

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

Почему отбор по ссылочному полю не работает?

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

Как открыть список с произвольным отбором по нескольким условиям?

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

Работает ли ОткрытьФорму в веб-клиенте?

Да, метод полностью поддерживается в веб-клиенте. Ограничения касаются только модальных вызовов и некоторых синхронных методов, но не открытия форм как такового.