При открытии новых филиалов компании, для расчета нагрузки на сервер 1С:Предприятия и других задач пожет понадобиться посмотреть динамику работы пользователей в информационной базе в виде диаграммы.
Динамику нужно показать за выбранный пользователем период. В качестве отображаемых данных будет количество действий на данными пользователями в разрезе часов. Информация для подобного отчета может быть получена из журнала регистрации.
Рассмотрим поэтапное создание подобного отчета и с помощью внешнего набора данных построим его на системе компоновки данных.
И так, отчет будем строить на СКД. Данные же мы будем получать не с помощью запроса из базы данных, а из журнала регистрации. О способе хранения журнала регистрации платформой писал в предыдущей статье.
В соответствии с заданным периодом в отчете нам нужно получить все действия пользователя над данными информационной базы. Полученную таблицу сгруппировать по пользователю и вывести в виде диаграммы (см. скриншот выше).
Для получения информации из журнала регистрации будем использовать метод глобального контекста "ВыгрузитьЖурналРегистрации()". В событии "ПриКомпоновкеРезультата" созданного отчета добавим следующий программный код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; // отключаем стандартный вывод отчета - будем выводить программно // Получаем настрокий отчета, в т.ч. период Настройки = КомпоновщикНастроек.ПолучитьНастройки(); // Получаем настройки отчета ПараметрПериод = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("Период").Значение; ЖурТаб = Новый ТаблицаЗначений; ОтборЖурнала = Новый Структура; // Создадим структуру отбора журнала регистрации // Заполним отбор по периоду ОтборЖурнала.Вставить("ДатаНачала", ПараметрПериод.ДатаНачала); ОтборЖурнала.Вставить("ДатаОкончания", ПараметрПериод.ДатаОкончания); // Установим отбор на события МассивСобытий = Новый Массив; МассивСобытий.Добавить("_$Data$_.Delete"); МассивСобытий.Добавить("_$Data$_.New"); МассивСобытий.Добавить("_$Data$_.Post"); МассивСобытий.Добавить("_$Data$_.TotalsPeriodUpdate"); МассивСобытий.Добавить("_$Data$_.Unpost"); МассивСобытий.Добавить("_$Data$_.Update"); ОтборЖурнала.Вставить("Событие", МассивСобытий); // Выгружаем журнал регистрации ВыгрузитьЖурналРегистрации(ЖурТаб, МассивСобытий); // Создаем и заполняем данные для вывода в отчет ЖурТаб.Колонки.Добавить("Время"); ЖурТаб.Колонки.Добавить("КоличествоСобытий"); Для Каждого Стр Из ЖурТаб Цикл Стр.Время = Час(Стр.Дата); Стр.КоличествоСобытий = 1; КонецЦикла; // Группируем результат ЖурТаб.Свернуть("ИмяПользователя, Время", "КоличествоСобытий"); // ..............
Первый параметр метода "ВыгрузитьЖурналРегистрации" устанавливает таблицу значений, в которую будет выгружен результат выборки из журнала регистрации. Второй параметр устанавливаем фильтр на выбираемые записи. Филтр представляет собой структуру, ключи в котором - это поля, по которым устанавливается отбор. Мы используем поля "ДатаНачала" и "ДатаОкончания" для установки периода анализа журнала регистрации, а также поле "Событие", в который передаем массив строк (наименований событий). Добавленные в массив события соответствуют действиям на данными в базе.
Подробнее о использовании метода "ВыгрузитьЖурналРегистрации" Вы можете прочитать в синтаксис-помощнике.
Для того, чтобы СКД смогла работать с полученной таблице значений нужно проделать следующий действия:
1) Создать набор данных в схеме компоновки и задать его поля.2) В программный код модуля "ПриКомпоновкеРезультата" прописать передачу таблицы значений в СКД.
// Группируем результат ЖурТаб.Свернуть("ИмяПользователя, Время", "КоличествоСобытий"); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаем данные расшифровки КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; // Создаем компоновщик макета // Инициализируем макет компоновки используя схему компоновки данных // и созданные ранее настройки и данные расшифровки СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); // Скомпонуем результат ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, // !!! Передаем таблицу "ЖурТаб" в процессор компоновки !!! Новый Структура("ЖурналРегистрации", ЖурТаб), ДанныеРасшифровки); ДокументРезультат.Очистить(); // Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры
3) Настраиваем ресурсы и структуру отчета (подробнее смотри в файле отчета, ссылка на который дана в конце статьи).
На этом настройки отчета завершены и мы можем запустить его в режиме предприятия.
Внешний источник данных в СКД позвляет использовать в отчетах данные практически из любых источников, влючая те, данные которых мы не сможем получить запросами.
Использование СКД для таких источников позволяет создавать отчеты с гибкиой системой настроек, а также дает возможность пользователю изменять вывод отчета, его структуру. Все возможности системы компоновки данных будут задействованы для таких источников в полной мере.
Скачать отчет из примера Вы можете по следующей ссылке.