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