Почему не срабатывает событие ОбработкаРасшифровки в модуле формы 1С

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

При разработке отчетов с использованием объекта ПостроительОтчета и выводом результата в ПолеТабличногоДокумента разработчики часто сталкиваются с ситуацией: при двойном клике по ячейкам вновь добавленной группировки событие ОбработкаРасшифровки в модуле формы попросту не вызывается. Указатель мыши при этом не меняет форму на «лупу», и реакция на клик отсутствует.

Рассмотрим подробнее механику работы платформы 1С, выясним причину такого поведения и разберем варианты решения этой проблемы.

Механизм генерации события ОбработкаРасшифровки

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

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

  1. При наведении указателя мыши на ячейку платформа не меняет курсор на значок «лупа».
  2. При двойном клике мыши платформа считает, что ячейка не содержит данных для расшифровки, и полностью игнорирует действие — процедура-обработчик ОбработкаРасшифровки в модуле формы физически не вызывается.

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

Основная причина проблемы при добавлении группировки

При использовании построителя отчета выводимые области формируются на основе макета. Для того чтобы построитель автоматически заполнял свойство Расшифровка сгенерированных ячеек, в макете у соответствующих ячеек должно быть явно заполнено свойство «ПараметрРасшифровки».

Если в макет добавлена новая группировка (например, ДатаПредоплаты), но в свойствах ячейки макета поле «ПараметрРасшифровки» оставлено пустым, построитель отчета записывает в свойство Расшифровка итогового табличного документа значение Неопределено. В результате клик по этой группировке не приводит к вызовы обработчика.

Способы решения проблемы

Разберем по шагам варианты исправления ситуации в зависимости от структуры и настроек отчета.

Способ 1. Заполнение параметра расшифровки в макете (основной)

Если отчет использует стандартный механизм построителя отчета, выполняем следующие действия:

  1. Открываем макет отчета в конфигураторе.
  2. Выделяем ячейку добавляемой группировки (например, области группировки ДатаПредоплаты).
  3. В палитре свойств ячейки находим поле «ПараметрРасшифровки».
  4. Задаем имя параметра расшифровки (например, РасшифровкаДатаПредоплаты или имя соответствующего измерения).
  5. Сохраняем изменения и перезапускаем отчет.

После этого ПостроительОтчета начнет автоматически помещать данные расшифровки в ячейки, у курсора появится иконка «лупа», и событие ОбработкаРасшифровки начнет успешно вызываться.

Способ 2. Проверка ключевых свойств элемента и построителя

Если параметр в макете заполнен, но событие все равно не срабатывает, проверим дополнительные настройки:

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

Способ 3. Программное заполнение расшифровки или использование события «Выбор»

Если макет формируется программным путем или выводится произвольными секциями, значение расшифровки можно проставить программно после вывода отчета:


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

Альтернативный вариант — использовать событие Выбор элемента ПолеТабличногоДокумента. Данное событие срабатывает при двойном клике по любой ячейке табличного документа, независимо от наличия у нее свойства Расшифровка:


Процедура ПолеТабличногоДокументаВыбор(Элемент, Область, СтандартнаяОбработка)
    
    // Отменяем стандартную обработку
    СтандартнаяОбработка = Ложь;
    
    // Получаем текущую ячейку и обрабатываем клик
    Если Область.Имя = "ДатаПредоплаты" Тогда
        // Ваша логика обработки клика по группировке
    КонецЕсли;

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

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

← На главную