Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 10:31

Внешний набор данных

Автор QRFail, 21 сен 2015, 13:50

0 Пользователей и 1 гость просматривают эту тему.

QRFail

Подскажите в какую сторону копать. Нужно в БП 3.0 сделать внешний отчет на скд отражающий остатки по 41 и 43 счету на определенную дату через внешний набор данных. в принципе понятно, только что за внешний набор данных? и как это отличается от обычного отчета с помощью запросов?

Kironten

http://1clancer.ru/article/primer_ispolzovaniya_vneshnego_istochnika_dannykh_v_skd_890

: Статьи и материалы :: 1CLancer.ru

  • Добавить свою публикацию
для этого требуется регистрация

Динамика работы пользователей

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

Изображение

Динамику нужно показать за выбранный пользователем период. В качестве отображаемых данных будет количество действий на данными пользователями в разрезе часов. Информация для подобного отчета может быть получена из журнала регистрации.

Рассмотрим поэтапное создание подобного отчета и с помощью внешнего набора данных построим его на системе компоновки данных.

Читаем журнал регистрации

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

В соответствии с заданным периодом в отчете нам нужно получить все действия пользователя над данными информационной базы. Полученную таблицу сгруппировать по пользователю и вывести в виде диаграммы (см. скриншот выше).

Для получения информации из журнала регистрации будем использовать метод глобального контекста "ВыгрузитьЖурналРегистрации()". В событии "ПриКомпоновкеРезультата" созданного отчета добавим следующий программный код:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

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

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

// ..............

Первый параметр метода "ВыгрузитьЖурналРегистрации" устанавливает таблицу значений, в которую будет выгружен результат выборки из журнала регистрации. Второй параметр устанавливаем фильтр на выбираемые записи. Филтр представляет собой структуру, ключи в котором - это поля, по которым устанавливается отбор. Мы используем поля "ДатаНачала" и "ДатаОкончания" для установки периода анализа журнала регистрации, а также поле "Событие", в который передаем массив строк (наименований событий). Добавленные в массив события соответствуют действиям на данными в базе.

Подробнее о использовании метода "ВыгрузитьЖурналРегистрации" Вы можете прочитать в синтаксис-помощнике.

Передаем таблицу значений в СКД

Для того, чтобы СКД смогла работать с полученной таблице значений нужно проделать следующий действия:

1) Создать набор данных в схеме компоновки и задать его поля.Изображение2) В программный код модуля "ПриКомпоновкеРезультата" прописать передачу таблицы значений в СКД.

// Группируем результат
ЖурТаб.Свернуть("ИмяПользователя, Время", "КоличествоСобытий");

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаем данные расшифровки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; // Создаем компоновщик макета
// Инициализируем макет компоновки используя схему компоновки данных
// и созданные ранее настройки и данные расшифровки
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
Настройки, ДанныеРасшифровки);

// Скомпонуем результат
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,
// !!! Передаем таблицу "ЖурТаб" в процессор компоновки !!!
Новый Структура("ЖурналРегистрации", ЖурТаб),
ДанныеРасшифровки);

ДокументРезультат.Очистить();

// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

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

3) Настраиваем ресурсы и структуру отчета (подробнее смотри в файле отчета, ссылка на который дана в конце статьи).

На этом настройки отчета завершены и мы можем запустить его в режиме предприятия.

Итог

Внешний источник данных в СКД позвляет использовать в отчетах данные практически из любых источников, влючая те, данные которых мы не сможем получить запросами.

Использование СКД для таких источников позволяет создавать отчеты с гибкиой системой настроек, а также дает возможность пользователю изменять вывод отчета, его структуру. Все возможности системы компоновки данных будут задействованы для таких источников в полной мере.

Скачать отчет из примера Вы можете по следующей ссылке.


QRFail

а в строке "Имя объекта, содержащего данные" что указывать? как этот объект формировать?

vitasw

Объект - это таблица значений, называете самостоятельно.

QRFail

Если я правильно понимаю всю информацию для формирования отчета скд берет из этого объекта, следовательно где то нужно заполнять таблицу значений, чтобы потом им воспользоваться. или я что то не так понимаю? так вот где его заполнять?

Kironten

Цитата: QRFail от 21 сен 2015, 14:37
Если я правильно понимаю всю информацию для формирования отчета скд берет из этого объекта, следовательно где то нужно заполнять таблицу значений, чтобы потом им воспользоваться. или я что то не так понимаю? так вот где его заполнять?
То, что будет указано в объекте, это будет ваш внешний набор данных. Как он называться будет - это не важно, главное, чтобы совпадали имена колонок во внешнем наборе и описании объекта. Объект создаете сами. Внешний набор берете откуда хотите.
То, что указывается в "Имя объекта, содержащего данные" это конечное имя выходных данных из СКД. Это имя нужно для передачи в процессор компановки.

vitasw

Цитата: QRFail от 21 сен 2015, 14:37следовательно где то нужно заполнять таблицу значений, чтобы потом им воспользоваться. или я что то не так понимаю? так вот где его заполнять?
Вам жеж вроде дали толковую ссылку
Цитата: Kironten от 21 сен 2015, 13:54http://1clancer.ru/article/primer_ispolzovaniya_vneshnego_istochnika_dannykh_v_skd_890


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск