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

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

Как передать параметры в форму выбора в 1С

Как передать параметры в форму выбора 1С: Отбор, ТекущаяСтрока, РежимВыбора, ОткрытьФорму и ОповеститьОВыборе. Примеры кода, ошибки и проверка результата.

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

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

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

Какие параметры понимает форма выбора

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

  • Отбор — структура, где ключ — имя поля, значение — отбираемое значение (или массив/список значений). Это самый востребованный параметр.
  • ТекущаяСтрока — ссылка на элемент, на котором нужно спозиционировать список при открытии.
  • РежимВыбора — булево, принудительно включает режим выбора.
  • ЗакрыватьПриВыборе — булево, форма закроется после выбора.
  • МножественныйВыбор — булево, разрешает выбрать несколько элементов.
  • ВыборГруппИЭлементов — для иерархических справочников: что разрешено выбирать.
  • РазрешитьВыборКорня, Отображение (список/дерево/иерархический список) — управление видом.

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

Открытие формы выбора с параметрами через ОткрытьФорму

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

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

ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", Контрагент));

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

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

ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора",

ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор);

Третий аргумент — владелец формы. Он важен: именно владельцу придёт оповещение о выборе. Четвёртый — ключ уникальности; если передать УникальныйИдентификатор текущей формы, повторный вызов не откроет дубликат, а активирует уже открытое окно.

Для отбора по нескольким значениям передайте массив или список значений — платформа превратит его в условие «В списке»:

СписокГрупп = Новый Массив;

СписокГрупп.Добавить(Группа1);

СписокГрупп.Добавить(Группа2);

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

Новый Структура("Родитель", СписокГрупп));

bsl
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", Контрагент));
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора", ПараметрыФормы, ЭтотОбъект);

Получение результата выбора

Через ОбработкаВыбора у владельца формы

Если форма выбора открыта с владельцем, после выбора у владельца срабатывает обработчик ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора). Это классический способ для управляемых форм:

&НаКлиенте

Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

Если ТипЗнч(ВыбранноеЗначение) =

Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда

Договор = ВыбранноеЗначение;

КонецЕсли;

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

Через описание оповещения

Альтернатива — передать в ОткрытьФорму пятым аргументом описание оповещения. Тогда результат придёт в указанную процедуру, а ОбработкаВыбора не понадобится. Этот вариант удобнее, когда из одной формы открывается несколько разных форм выбора и логику нужно развести по отдельным процедурам.

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

ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора",

ПараметрыФормы, ЭтотОбъект, , , , Оповещение);

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

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

Передача параметров без кода: свойство ПараметрыВыбора поля ввода

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

&НаСервере

Процедура УстановитьПараметрыВыбораДоговора()

МассивПараметров = Новый Массив;

МассивПараметров.Добавить(Новый ПараметрВыбора(

"Отбор.Владелец", Объект.Контрагент));

Элементы.Договор.ПараметрыВыбора =

Новый ФиксированныйМассив(МассивПараметров);

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

Дополнительно полезно свойство СвязиПараметровВыбора: оно автоматически обновляет отбор при изменении связанного поля и очищает зависимое поле, если выбранное значение перестало соответствовать отбору. Для связи «Контрагент → Договор» это стандартная связка.

Отбор по владельцу и другие типовые сценарии

Подчинённый справочник

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

Позиционирование на текущем значении

Чтобы при открытии курсор стоял на уже выбранном элементе, передайте ТекущаяСтрока:

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

Множественный выбор

Параметр МножественныйВыбор = Истина включает возможность выбрать несколько строк. В этом случае в ОбработкаВыбора придёт массив значений, а не одна ссылка — обязательно проверяйте тип результата.

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

ОткрытьФорму со структурой параметров

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

ПараметрыВыбора у поля ввода

Работает без кода открытия, автоматически при стандартном выборе. Не действует при ручном ОткрытьФорму.

СвязиПараметровВыбора

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

Типичные ошибки и как их проверить

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

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

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

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

Список после открытия
Норма

Показаны только элементы, удовлетворяющие отбору

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

Видны все элементы — проверьте имена полей и типы значений в Отбор

Возврат значения
Норма

ОбработкаВыбора или оповещение срабатывает, поле заполняется

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

Ничего не происходит — проверьте владельца формы и РежимВыбора

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

Курсор стоит на текущем значении

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

Курсор в начале списка — проверьте ТекущаяСтрока и что элемент проходит отбор

Ограничения и когда нужна своя форма выбора

Стандартных параметров не хватает, если нужен сложный отбор (по условию «ИЛИ», по вычисляемому полю, по данным регистра) или нестандартная логика выбора. В этом случае создайте свою форму выбора в конфигураторе, добавьте ей параметры и обрабатывайте их в ПриСозданииНаСервере, программно настраивая отбор динамического списка через Список.КомпоновщикНастроек.

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

Итог

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

Параметры форме выбора передаются структурой через ОткрытьФорму или свойством ПараметрыВыбора у поля ввода. Ключевые параметры — Отбор, ТекущаяСтрока, РежимВыбора, МножественныйВыбор. Результат приходит в ОбработкаВыбора владельца или в описание оповещения — всегда проверяйте тип выбранного значения.

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

Как передать отбор по нескольким значениям одного поля?

Передайте в структуре Отбор массив или список значений вместо одиночного значения: Новый Структура("Родитель", МассивГрупп). Платформа преобразует это в условие «В списке», и форма покажет элементы из всех указанных групп.

Почему отбор не применяется, хотя параметр передан?

Чаще всего — опечатка в имени поля структуры Отбор (платформа не сообщает об ошибке), несоответствие типа значения типу поля или открытие формы списка вместо формы выбора. Проверьте имя поля в конфигураторе и тип передаваемого значения.

Как открыть форму выбора и сразу получить результат без ОбработкаВыбора?

Передайте в ОткрытьФорму параметр ОписаниеОповещения — результат придёт в указанную процедуру. Либо используйте ОткрытьФормуМодально, который вернёт выбранное значение напрямую, но модальный режим не рекомендуется и ограничен в веб-клиенте.

Чем ПараметрыВыбора отличается от передачи Отбор в ОткрытьФорму?

ПараметрыВыбора работает только при стандартном открытии формы выбора из поля ввода и не требует кода открытия. Структура в ОткрытьФорму действует при любом ручном открытии, но требует самостоятельно обрабатывать результат выбора.

Как запретить выбор групп в иерархическом справочнике?

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

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

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