Разработка конфигураций на платформе 1С:Предприятие часто требует от программиста реализации интерфейсов для подбора данных из справочников или документов. Стандартный механизм "выбор из списка" не всегда покрывает потребности сложных бизнес-процессов, где необходим специфический отбор или уникальный внешний вид. Понимание того, как вызвать форму выбора программно, открывает доступ к гибкости платформы.

В этой статье мы подробно разберем методы открытия диалоговых окон, особенности работы с объектами метаданных и способы передачи параметров. Использование штатных средств системы гарантирует корректное отображение данных и поддержание высокой производительности приложения.

Для начала работы вам понадобится знание встроенного языка и понимание объектной модели платформы. Мы рассмотрим как простые случаи открытия формы списка, так и сложные сценарии с модальным режимом работы.

Стандартные методы открытия формы выбора

Самый простой способ получить доступ к данным — использовать метод ОткрытьФорму. Этот подход универсален и подходит для большинства типовых задач, когда пользователю нужно выбрать один или несколько элементов. Однако,

Для реализации логики "выбрал — получил значение" необходимо использовать параметр возврата или обработчик события формы. В современных версиях платформы рекомендуется применять асинхронный вызов с передачей описания оповещения. Это позволяет интерфейсу оставаться отзывчивым даже при работе с большими объемами данных.

Существует несколько вариантов имен форм, которые можно передать в метод открытия. Вы можете ссылаться на полную путь к форме в конфигураторе или использовать сокращенные имена объектов метаданных.

  • 📂 Использование полного пути: Справочник.Номенклатура.Форма.ФормаЭлемента
  • ⚡ Использование сокращенного имени: СправочникСсылка.Номенклатура
  • 🔄 Открытие списка для множественного выбора: Справочник.Номенклатура.Форма.ФормаСписка

⚠️ Внимание: При открытии формы списка убедитесь, что в настройках формы разрешен режим выбора. Иначе пользователь увидит список, но не сможет нажать кнопку "Выбрать".

📊 Какой метод открытия форм вы используете чаще?
ОткрытьФорму
ОткрытьФормуМодально
ВыборИзСписка
Динамический список

Использование модального режима и выбор значения

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

Результат работы модальной формы возвращается как значение функции. Если пользователь нажал "ОК" или "Выбрать", вы получите объект ссылки или структуру данных. В случае отмены действия возвращаемое значение будет равно Неопределено. Всегда проверяйте результат перед дальнейшей обработкой.

Ниже приведен пример кода, демонстрирующий вызов формы выбора номенклатуры с фильтрацией по виду номенклатуры. Мы передаем параметры отбора непосредственно при открытии.

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

ПараметрыФормы.Вставить("ВидНоменклатуры", Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Услуга"));

ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);

ВыбранноеЗначение = ОткрытьФормуМодально("Справочник.Номенклатура.Форма.ФормаВыбора", ПараметрыФормы);

Если ВыбранноеЗначение <> Неопределено Тогда

Сообщить("Выбран элемент: " + ВыбранноеЗначение);

КонецЕсли;

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

💡

Используйте параметр "Отбор" в структуре параметров формы, чтобы сразу отфильтровать список нужными значениями, не загружая лишние данные.

Асинхронный вызов с обработчиком оповещения

Современные стандарты разработки диктуют отказ от модальных окон в пользу асинхронных вызовов. Это обеспечивает лучшую отзывчивость интерфейса. Для реализации такого подхода используется метод ОткрытьФорму с указанием имени процедуры-обработчика.

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

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

  • 🚀 Повышение отзывчивости интерфейса для пользователя
  • ⛔ Отсутствие блокировки потока выполнения основного кода
  • 📦 Возможность передачи сложного контекста через дополнительные параметры

Пример реализации асинхронного вызова выглядит следующим образом. Мы создаем описание оповещения и передаем его в метод открытия.

ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНоменклатуры", ЭтотОбъект);

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

В самой процедуре ПослеВыбораНоменклатуры вы проверяете параметр Источник на равенство Неопределено и выполняете необходимую логику обработки выбранного элемента.

Настройка отборов и параметров формы

Часто возникает задача показать пользователю не весь справочник, а только его часть, соответствующую текущему контексту задачи. Для этого используются параметры формы, которые настраиваются на стороне формы или передаются из вызывающего кода.

Наиболее гибкий способ — использование динамического списка с предустановленными отборами. Вы можете передать структуру отборов, которая будет применена к основному запросу формы. Это особенно актуально для больших справочников, где загрузка всех записей невозможна.

Параметр Тип значения Описание
Отбор Структура Набор условий фильтрации данных
МножественныйВыбор Булево Разрешить выбор нескольких элементов
Заголовок Строка Текст заголовка окна формы
РежимВыбора Булево Включить кнопки выбора и отмены

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

⚠️ Внимание: Интерфейс и доступные параметры форм могут изменяться в новых версиях платформы. Всегда сверяйте состав параметров в справке по конфигурации или в конфигураторе.

Секреты оптимизации отборов

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

Выбор из табличной части и сложных структур

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

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

Ключевой момент здесь — корректная обработка возврата. При выборе из табличной части вы обычно получаете не ссылку, а структуру с данными строки или индекс строки. Убедитесь, что ваша форма возвращает данные в ожидаемом формате.

Пример кода для создания временного набора записей и его отображения:

НаборЗаписей = Новый НаборЗаписей;

НаборЗаписей.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));

// Заполнение данными..

Параметры = Новый Структура("Данные", НаборЗаписей);

ОткрытьФормуМодально("ФормаСпискаВременныхДанных", Параметры);

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

💡

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

Обработка ошибок и исключительных ситуаций

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

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

Также стоит учитывать права доступа. Если у пользователя нет прав на чтение справочника, форма может открыться пустой или выдать предупреждение. Проверка прав перед вызовом формы — хорошая практика, экономящая ресурсы системы.

  • 🛡️ Проверка прав доступа методом ПраваДоступа
  • ⚠️ Перехват исключений при открытии несуществующей формы
  • ✅ Валидация входных параметров перед передачей в форму

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

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

Нет, форма выбора — это визуальный элемент. Если вам нужно получить данные без участия пользователя, используйте запросы к базе данных или методы объекта справочника напрямую.

Как вернуть несколько выбранных элементов?

Установите параметр МножественныйВыбор в значение Истина. В результате вы получите массив ссылок на выбранные объекты.

Почему форма выбора открывается пустой?

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

Как изменить заголовок окна формы выбора?

Передайте параметр Заголовок в структуре параметров при вызове метода ОткрытьФорму или ОткрытьФормуМодально.