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