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