Как перехватить нажатие на ячейку отчета и открыть внешнюю обработку в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Принцип работы расшифровки в 1С 7.7

Для реализации перехода к внешней обработке при клике по ячейке таблицы используется предопределенная процедура ОбработкаЯчейкиТаблицы, а также специальное свойство ячейки в макете таблицы — «Значение» (или «Расшифровка»).

Рассмотрим порядок работы этого механизма по шагам:

  1. В макете отчета для нужной ячейки заполняем свойство «Значение» (или «Расшифровка»), указав в нем переменную или выражение с передаваемыми данными.
  2. При формировании отчета задаем режим отображения Таб.ТолькоПросмотр(1). Без установки этого флага платформа откроет таблицу в режиме редактирования текста ячеек.
  3. При двойном клике мыши или нажатии клавиши Enter платформа автоматически вызывает процедуру ОбработкаЯчейкиТаблицы, передавая в нее вычисленное значение ячейки и сопутствующие параметры.

Синтаксис и параметры процедуры ОбработкаЯчейкиТаблицы

Процедура ОбработкаЯчейкиТаблицы располагается в модуле формы отчета и имеет следующий синтаксис:


Процедура ОбработкаЯчейкиТаблицы(Значение, ФлагСтандОбраб, Таблица, Адрес)
    // Отменяем стандартную обработку 1С
    ФлагСтандОбраб = 0;
    
    // Проверяем переданное значение и выполняем открытие обработки
    Если ТипЗначенияСтр(Значение) = "Дата" Тогда
        ОткрытьФорму("Отчет", Значение, КаталогИБ() + "ExtForms\Детализация.ert");
    КонецЕсли;
КонецПроцедуры

Проанализируем назначение каждого из параметров процедуры:

Открытие внешней обработки с передачей параметров

Рассмотрим пример, когда при нажатии на ячейку ДатаСоб требуется передать во внешнюю обработку комплексные данные (например, дату и код сотрудника).

Для передачи нескольких параметров удобнее всего использовать СписокЗначений. Посмотрим, как это реализуется в коде формирования отчета:


// Создаем список параметров для ячейки
ПараметрыРасшифровки = СоздатьОбъект("СписокЗначений");
ПараметрыРасшифровки.Установить("ДатаСоб", ТЧ2.ДатаСоб);
ПараметрыРасшифровки.Установить("КодСотрудника", ТЧ2.Код);
ПараметрыРасшифровки.Установить("Филиал", ТЧ2.Филиал);

// В свойствах ячейки макета в поле "Значение" указываем переменную РасшифровкаЯчейки
РасшифровкаЯчейки = ПараметрыРасшифровки;
Таб.ВывестиСекцию("Т3");

Теперь разберем обработчик клика в модуле формы отчета:


Процедура ОбработкаЯчейкиТаблицы(Значение, ФлагСтандОбраб, Таблица, Адрес)
    // Проверяем, что передан список значений с нашими параметрами
    Если ТипЗначенияСтр(Значение) = "СписокЗначений" Тогда
        ФлагСтандОбраб = 0; // Отключаем стандартное действие
        
        // Формируем путь к внешней обработке в каталоге ИБ
        ПутьКОбработке = КаталогИБ() + "ExtForms\РасшифровкаСобытий.ert";
        
        // Открываем внешнюю обработку и передаем параметры
        ОткрытьФорму("Отчет", Значение, ПутьКОбработке);
    КонецЕсли;
КонецПроцедуры

В самой открываемой внешней обработке переданный список значений считывается при открытии через системный атрибут Форма.Параметр:


Процедура ПриОткрытии()
    Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" Тогда
        СписокПараметров = Форма.Параметр;
        ВыбраннаяДата = СписокПараметров.Получить("ДатаСоб");
        КодСотрудника = СписокПараметров.Получить("КодСотрудника");
        
        Сообщить("Открыта расшифровка по дате: " + ВыбраннаяДата);
    КонецЕсли;
КонецПроцедуры

Важные рекомендации

Выясним несколько критически важных правил для корректной работы интерактивных отчетов:

  1. Режим просмотра: Всегда указывайте Таб.ТолькоПросмотр(1) перед вызовом Таб.Показать(). Если режим «Только просмотр» отключен, клик по ячейке переводит ее в режим редактирования текста, а процедура ОбработкаЯчейкиТаблицы не вызывается.
  2. Сброс флага обработки: Обязательно устанавливайте ФлагСтандОбраб = 0 внутри обработчика, чтобы отменить стандартное действие платформы.
  3. Формирование путей: Не прописывайте жесткие пути к файлам (например, C:\База\...). Для обращения к внешним файлам обработок используйте функцию КаталогИБ().
← На главную