Почему не срабатывает ОбработкаВыбора при выборе строки из таблицы управляемой формы 1С?

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

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

Рассмотрим подробнее механики работы платформы при переключении таблицы в режим выбора, разберем причины такого поведения и выясним, как правильно организовать передачу выбранных данных.

Причина поведения платформы и событие ВыборЗначения

Когда у таблицы управляемой формы включено свойство Режим выбора (РежимВыбора = Истина), стандартное поведение таблицы меняется. При двойном клике по строке, нажатии клавиши Enter или нажатии кнопки выбора платформой вызывается событие таблицы ВыборЗначения, а не привычное событие Выбор.

Если разработчик пытается перехватить выбор строки через событие Выбор или ожидает автоматического вызова метода ОбработкаВыбора без правильной обработки события ВыборЗначения, цепочка передачи данных может прерваться.

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

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

Вариант 1. Стандартная обработка выбора значения

Разберем по шагам базовый сценарий подбора значения из подчиненной формы. В вызывающей форме подготавливаем описание оповещения и открываем форму выбора:


&НаКлиенте
Процедура ОткрытьФормуВыбора()
    
    ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьИзСпискаЗавершение", ЭтаФорма);
    ОткрытьФорму("ОбщаяФорма.Форма1", , ЭтаФорма, , , , ОписаниеОповещения);
    
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьИзСпискаЗавершение(РезультатВыбора, ДополнительныеПараметры) Экспорт
    
    Если РезультатВыбора = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Обработка полученного значения
    
КонецПроцедуры

В форме выбора (в данном случае Форма1) у элемента таблицы должно быть установлено свойство РежимВыбора = Истина. При включенной стандартной обработке никаких дополнительных процедур писать не требуется — платформа автоматически передаст выбранную строку в процедуру ДобавитьИзСпискаЗавершение и закроет форму.

Вариант 2. Перехват события и кастомная передача данных

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

Посмотрим на пример обработки события таблицы:


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

Особенности работы с различными типами данных и режимами

При организации выбора строк таблицы важно учитывать следующие особенности платформы 1С:

Тип возвращаемого значения. Содержимое параметра Значение в событии ВыборЗначения зависит от источника данных таблицы управляемой формы:

  1. Для источника ДинамическийСписок возвращается ссылка на объект или ключ записи.
  2. Для источника ТаблицаЗначений или ДеревоЗначений возвращается идентификатор выбранной строки (или сама строка в зависимости от настроек).

Множественный выбор. Если у таблицы активировано свойство МножественныйВыбор = Истина, в параметр Значение передается массив выделенных элементов. В этом случае форма может не закрываться автоматически, предполагая работу в режиме множественного подбора элементов.

Указание элемента-владельца. Если выбранное значение должно сразу заполнять конкретное поле формы без написания лишнего кода, в параметре Владелец метода ОткрытьФорму следует передавать сам элемент интерфейса, например Элементы.ПолеВводаЗначения.

← На главную