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