Как отловить событие нажатия кнопки выбора в колонке табличной части 1С?

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

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

Выясним причину проблемы и подключим событие

В управляемых формах события вызова форм выбора привязаны непосредственно к элементам формы (полям ввода в колонках таблицы), а не к реквизитам объекта или самой табличной части. Если пытаться найти событие выбора в свойствах реквизита или в контекстном меню самой таблицы, нужный обработчик отображаться не будет.

Разберем по шагам, как правильно назначить событие:

  1. Откроем управляемую форму в конфигураторе.
  2. В дереве элементов формы найдем таблицу и развернем ее состав до нужного поля (колонки).
  3. Нажмем правой кнопкой мыши по элементу колонки или откроем палитру свойств этого элемента (нажав F4).
  4. В разделе событий найдем событие НачалоВыбора и нажмем лупу для создания клиентского обработчика.

Перехват стандартной обработки и открытие своей формы

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

Для этого в обработчике события НачалоВыбора устанавливают флаг СтандартнаяОбработка = Ложь. При открытии своей формы через процедуру ОткрытьФорму в качестве третьего параметра (владельца) обязательного передают текущий элемент Элемент. В этом случае платформа автоматически подставит выбранное пользователем значение в ячейку табличной части.

Рассмотрим пример кода обработчика события НачалоВыбора:


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

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

Альтернативные способы управления выбором

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

  1. Перехват только выбора типа: Если требуется сохранить стандартный диалог выбора типа, но подменить форму только для выбранного объекта, используем событие элемента ВыборТипа вместо НачалоВыбора.
  2. Динамическое ограничение типов: Чтобы сузить доступный составной тип в зависимости от условий, можно программно установить свойство элемента ОграничениеТипа, передав объект типа ОписаниеТипов.
  3. Декларативные настройки: Для передачи параметров в форму выбора или установки жестких отборов код писать не обязательно. Достаточно настроить свойства элемента ПараметрыВыбора или СвязиПараметровВыбора в палитре свойств колонки.

Таким образом, правильное использование события НачалоВыбора на элементе колонки с отключением СтандартнаяОбработка = Ложь позволяет полностью контролировать процесс выбора значений в управляемых формах 1С.

← На главную