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