Почему недоступна кнопка «Выбрать» при подстановке значения из справочника в 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Рассмотрим подробно причины такого поведения платформы 1С и разберем способы решения данной проблемы.

Причины возникновения проблемы

Проблема кроется не столько в правах доступа, сколько в том, какую именно форму платформа 1С открывает для подстановки значения. Разберем основные причины, почему это происходит:

  1. Открытие формы списка вместо формы выбора. Если для справочника открывается стандартная форма списка, а не форма выбора, платформа работает в режиме просмотра. В таком режиме команда выбора значения отсутствует, а клик по строке переходит к редактированию/просмотру элемента.
  2. Кастомная форма не назначена формой выбора по умолчанию. Если в справочнике была создана новая форма, но в конфигураторе не было указано, что именно она является основной формой выбора, платформа может некорректно обрабатывать интерактивный выбор.
  3. Не заполнена «Основная таблица» у динамического списка. В случае использования произвольной формы выбора с динамическим списком, у реквизита Список может отсутствовать значение в свойстве Основная таблица. Без этого платформа не может определить ссылочный тип выбираемого значения.
  4. Включено свойство «Режим выбора из списка». В свойствах элемента формы (колонки табличной части или поля ввода) активирован параметр РежимВыбораИзСписка, из-за чего ожидается выбор из локального массива значений, а не открытие формы справочника.

Способ 1. Проверка настроек формы в конфигураторе

Проанализируем шаги настройки метаданных в конфигураторе для корректного открытия формы выбора:

  1. Откроем свойства справочника, из которого выполняется выбор (например, Справочник.ОсновныеСредства).
  2. Перейдем на вкладку «Формы» и убедимся, что в поле «Форма выбора» указана нужная форма.
  3. Если создана кастомная форма выбора, откроем её и проверим реквизит Список (тип ДинамическийСписок). В окне свойств реквизита поле «Основная таблица» должно содержать путь к объекту метаданных, например Справочник.ОсновныеСредства.
  4. В форме-источнике (где находится колонка или поле ввода) выделим элемент формы и проверим его свойства:
    • Свойство «Режим выбора из списка» должно быть установлено в значение Ложь.
    • В категории «Выбор» поле Форма выбора должно оставаться пустым (для вызова формы по умолчанию) или ссылаться на специальную форму выбора, но не на форму списка.

Способ 2. Программный вызов формы выбора через событие «НачалоВыбора»

Выясним, как принудительно открыть форму в режиме выбора, если стандартная обработка платформы сбрасывает режим или требуется переопределить поведение. Для этого перехватим событие НачалоВыбора у соответствующего элемента формы.

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


&НаКлиенте
Процедура ТабличнаяЧастьОсновныеСредстваНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	// Отменяем стандартное открытие формы платформой
	СтандартнаяОбработка = Ложь;
	
	// Формируем параметры с обязательным указанием режима выбора
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("РежимВыбора", Истина);
	ПараметрыОткрытия.Вставить("ЗакрыватьПриВыборе", Истина);
	
	// Открываем форму выбора, передавая элемент формы в качестве владельца
	ОткрытьФорму("Справочник.ОсновныеСредства.ФормаВыбора", ПараметрыОткрытия, Элемент);

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

Передача аргумента Элемент в качестве владельца формы гарантирует, что выбранное пользователем значение автоматически подставится в ячейку табличной части или поле ввода без написания дополнительного кода обработки оповещения.

Способ 3. Переопределение формы выбора в модуле менеджера

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


Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительныеПараметры, СтандартнаяОбработка)
	
	Если ВидФормы = "ФормаВыбора" Тогда
		ВыбраннаяФорма = "Справочник.ОсновныеСредства.ФормаВыбораПоУмолчанию";
		СтандартнаяОбработка = Ложь;
	КонецЕсли;

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

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

← На главную