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

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

Как изменить форму выбора в 1С

Как изменить форму выбора в 1С: обычные и управляемые формы, переопределение в конфигураторе, отборы, параметры выбора и типовые ошибки разработчика.

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

Способ доработки зависит от режима работы приложения. В управляемом приложении (1С:Предприятие 8.3, типовые конфигурации на БСП) формы описываются декларативно и изменяются через конфигуратор или расширение. В обычном приложении (старые конфигурации на 8.2 и ранние 8.1) форма редактируется как визуальный макет с кодом на встроенном языке.

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

Где находится форма выбора и как её открыть для редактирования

Форма выбора привязана к объекту метаданных: справочнику, документу, плану счетов, плану видов характеристик и т.д. В конфигураторе откройте дерево конфигурации, найдите нужный объект и перейдите на вкладку «Формы». Там перечислены все формы объекта, а в поле «Выбора» указана форма, назначенная основной.

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

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

Изменение управляемой формы выбора в конфигураторе

Откройте форму выбора в конфигураторе двойным щелчком. Редактор управляемой формы состоит из трёх областей: дерево элементов формы, список реквизитов и модуль формы с кодом. Основной элемент — динамический список, обычно называется «Список».

Чтобы добавить колонку, найдите в реквизитах формы объект «Список» и разверните его: там доступны поля, которые платформа отобрала автоматически. Перетащите нужное поле (например, «ИНН», «Артикул», «ОсновнойДоговор») в дерево элементов внутрь таблицы списка. Если поля нет в списке доступных — добавьте его через запрос динамического списка, включив произвольный режим.

Для изменения запроса динамического списка выделите реквизит «Список», в палитре свойств установите флаг «ПроизвольныйЗапрос» и откройте «Настройку списка». Там можно изменить текст запроса, добавить соединения с другими таблицами и задать отборы. Помните: произвольный запрос отключает часть автоматических оптимизаций платформы, поэтому без необходимости его лучше не включать.

Порядок действий в конфигураторе
  1. 1
    Откройте конфигуратор и найдите нужный справочник или документ в дереве метаданных
  2. 2
    На вкладке «Формы» откройте существующую форму выбора или создайте новую с типом «ФормаВыбора»
  3. 3
    Добавьте нужные колонки в таблицу динамического списка или измените запрос
  4. 4
    Назначьте форму основной для выбора в свойствах объекта
  5. 5
    Обновите конфигурацию базы данных (F7) и проверьте результат в режиме предприятия

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

Частая задача — показывать в форме выбора не все элементы, а только подходящие: не помеченные на удаление, действующие договоры, номенклатуру определённого вида. Для постоянного отбора, который пользователь не сможет снять, используйте свойство динамического списка «Отбор» в настройке списка или программную установку в обработчике ПриСозданииНаСервере.

Пример установки отбора в модуле формы:

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ЭлементОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(

Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

ЭлементОтбора.ПравоеЗначение = Ложь;

ЭлементОтбора.Использование = Истина;

ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

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

Если отбор должен зависеть от контекста вызова (например, выбирать только договоры конкретного контрагента), не зашивайте его в форму жёстко. Правильнее передавать параметр через свойство «Параметры» при открытии формы или использовать стандартный механизм «Параметры выбора» и «Связи параметров выбора» у поля ввода — тогда типовая форма отфильтрует список автоматически, без доработки.

Изменение формы выбора без снятия конфигурации с поддержки

В типовых конфигурациях прямая правка формы приведёт к проблемам при обновлении: изменённый объект сравнивается с новой версией поставщика, и ваши доработки могут конфликтовать с обновлением. Есть три безопасных пути.

Первый — расширение конфигурации. Создайте расширение (Конфигурация → Расширения конфигурации), заимствуйте в него форму выбора и доработайте: добавьте колонки, измените обработчики через аннотации &После, &Вместо, &ИзменениеИКонтроль. Расширение не затрагивает основную конфигурацию и сохраняется при обновлении.

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

Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма,

ДополнительнаяИнформация, СтандартнаяОбработка)

Если ВидФормы = "ФормаВыбора" Тогда

СтандартнаяОбработка = Ложь;

ВыбраннаяФорма = "МояФормаВыбора";

КонецЕсли;

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

Третий вариант — механизм «Параметры выбора» у поля ввода, который вообще не требует доработки формы и решает большинство задач с отборами. Выбирайте его в первую очередь, если нужно только ограничить список доступных значений.

Сравнение способов доработки

Прямая правка формы

Быстро и просто, но снимает объект с поддержки и усложняет обновление типовой конфигурации

Расширение конфигурации

Сохраняет поддержку и обновляемость; ограничение — не все изменения форм доступны в расширениях

ОбработкаПолученияФормы

Гибкая подмена формы по условиям; требует доработки модуля менеджера, что тоже затрагивает конфигурацию

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

Вообще без изменения формы; подходит только для отборов и связей, не меняет внешний вид списка

Форма выбора в обычном приложении

В обычных формах (режим «Обычное приложение») редактор формы визуальный: элементы размещаются на диалоге, у табличного поля списка есть свойства «ТекущаяСтрока», «НастройкаОтбора» и другие. Чтобы добавить колонку, откройте форму выбора, выделите табличное поле и в палитре свойств отредактируйте коллекцию колонок либо включите автозаполнение и настройку через «Данные».

Постоянный отбор в обычной форме задаётся в обработчике ПриОткрытии через объект отбора списка, например: СправочникСписок.Отбор.ПометкаУдаления.Установить(Ложь). Учтите, что пользователь может снять такой отбор через настройку списка, если не запретить это отдельно.

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

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

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

Если открывается старая форма — проверьте, назначена ли ваша форма основной в свойствах объекта, не подменяет ли её ОбработкаПолученияФормы в модуле менеджера и не активно ли расширение с собственной версией формы. Если список пуст после установки отбора — убедитесь, что отбор не противоречит параметрам выбора, переданным из поля ввода: два несовместимых условия дают пустой результат.

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

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

Открытие формы из поля ввода
Норма

Открывается изменённая форма с нужными колонками и отбором

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

Открывается типовая форма или возникает ошибка «Форма не найдена»

Выбор значения
Норма

Выбранный элемент корректно подставляется в поле ввода

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

После выбора поле остаётся пустым или появляется ошибка передачи значения

Работа под ролью пользователя
Норма

Форма открывается и фильтруется у пользователя с типовыми правами

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

Нарушение прав доступа или пустой список из-за RLS

Часто задаваемые вопросы

Как открыть свою форму выбора только для конкретного поля, а не для всего справочника?

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

Почему после добавления отбора форма выбора стала пустой?

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

Можно ли изменить форму выбора без конфигуратора, прямо в режиме предприятия?

Частично. Пользовательские настройки списка (отборы, сортировка, порядок колонок) меняются через «Ещё → Настроить список» и «Изменить форму», если у пользователя есть право настройки форм. Но добавить новые реквизиты, изменить запрос или логику можно только в конфигураторе или через расширение.

Как сделать, чтобы при вводе по строке подставлялись только нужные элементы?

Ввод по строке использует отдельный механизм — форму быстрого выбора и параметры выбора поля ввода. Настройте «Параметры выбора» у поля ввода или обработчики «АвтоПодбор» и «ОкончаниеВводаТекста», чтобы ограничить список подстановки теми же условиями, что и в форме выбора.

Что делать, если форма выбора доработана, а обновление конфигурации её перезаписало?

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

Итог

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

Форма выбора изменяется в конфигураторе на вкладке «Формы» объекта метаданных; для отборов предпочтительны параметры выбора поля ввода, а для доработки типовых конфигураций — расширения. После изменений обязательно проверьте открытие формы, возврат значения и работу под правами обычного пользователя.