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