При разработке отчетов в платформе 1С:Предприятие 7.7 часто возникает необходимость сделать отчет интерактивным. Например, при двойном клике по ячейке с датой или сотрудником должна открываться детальная расшифровка либо отдельная внешняя обработка (файл с расширением .ert). Разберем, как правильно настроить макет и написать обработчик события для решения этой задачи.
Для реализации перехода к внешней обработке при клике по ячейке таблицы используется предопределенная процедура ОбработкаЯчейкиТаблицы, а также специальное свойство ячейки в макете таблицы — «Значение» (или «Расшифровка»).
Рассмотрим порядок работы этого механизма по шагам:
Таб.ТолькоПросмотр(1). Без установки этого флага платформа откроет таблицу в режиме редактирования текста ячеек.ОбработкаЯчейкиТаблицы, передавая в нее вычисленное значение ячейки и сопутствующие параметры.Процедура ОбработкаЯчейкиТаблицы располагается в модуле формы отчета и имеет следующий синтаксис:
Процедура ОбработкаЯчейкиТаблицы(Значение, ФлагСтандОбраб, Таблица, Адрес)
// Отменяем стандартную обработку 1С
ФлагСтандОбраб = 0;
// Проверяем переданное значение и выполняем открытие обработки
Если ТипЗначенияСтр(Значение) = "Дата" Тогда
ОткрытьФорму("Отчет", Значение, КаталогИБ() + "ExtForms\Детализация.ert");
КонецЕсли;
КонецПроцедуры
Проанализируем назначение каждого из параметров процедуры:
СписокЗначений.ФлагСтандОбраб = 0 предотвращает стандартную обработку значения системой (например, стандартное открытие карточки справочника).Таблица). Позволяет считывать или изменять данные сформированной таблицы.Рассмотрим пример, когда при нажатии на ячейку ДатаСоб требуется передать во внешнюю обработку комплексные данные (например, дату и код сотрудника).
Для передачи нескольких параметров удобнее всего использовать СписокЗначений. Посмотрим, как это реализуется в коде формирования отчета:
// Создаем список параметров для ячейки
ПараметрыРасшифровки = СоздатьОбъект("СписокЗначений");
ПараметрыРасшифровки.Установить("ДатаСоб", ТЧ2.ДатаСоб);
ПараметрыРасшифровки.Установить("КодСотрудника", ТЧ2.Код);
ПараметрыРасшифровки.Установить("Филиал", ТЧ2.Филиал);
// В свойствах ячейки макета в поле "Значение" указываем переменную РасшифровкаЯчейки
РасшифровкаЯчейки = ПараметрыРасшифровки;
Таб.ВывестиСекцию("Т3");
Теперь разберем обработчик клика в модуле формы отчета:
Процедура ОбработкаЯчейкиТаблицы(Значение, ФлагСтандОбраб, Таблица, Адрес)
// Проверяем, что передан список значений с нашими параметрами
Если ТипЗначенияСтр(Значение) = "СписокЗначений" Тогда
ФлагСтандОбраб = 0; // Отключаем стандартное действие
// Формируем путь к внешней обработке в каталоге ИБ
ПутьКОбработке = КаталогИБ() + "ExtForms\РасшифровкаСобытий.ert";
// Открываем внешнюю обработку и передаем параметры
ОткрытьФорму("Отчет", Значение, ПутьКОбработке);
КонецЕсли;
КонецПроцедуры
В самой открываемой внешней обработке переданный список значений считывается при открытии через системный атрибут Форма.Параметр:
Процедура ПриОткрытии()
Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" Тогда
СписокПараметров = Форма.Параметр;
ВыбраннаяДата = СписокПараметров.Получить("ДатаСоб");
КодСотрудника = СписокПараметров.Получить("КодСотрудника");
Сообщить("Открыта расшифровка по дате: " + ВыбраннаяДата);
КонецЕсли;
КонецПроцедуры
Выясним несколько критически важных правил для корректной работы интерактивных отчетов:
Таб.ТолькоПросмотр(1) перед вызовом Таб.Показать(). Если режим «Только просмотр» отключен, клик по ячейке переводит ее в режим редактирования текста, а процедура ОбработкаЯчейкиТаблицы не вызывается.ФлагСтандОбраб = 0 внутри обработчика, чтобы отменить стандартное действие платформы.C:\База\...). Для обращения к внешним файлам обработок используйте функцию КаталогИБ().