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