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