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