Скд источник данных запрос к внешней базе

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Рис на пару в мультиварке панасоник

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

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

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

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

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

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

Решения возможны следующие:

  • Изменить запрос в СКД
  • Сформировать запрос обычным способом и подставить эти данные в СКД как внешние

Рассмотрим последний вариант:

Внешний источник данных, грузим из ТЗ

Для вывода отчета я использую шаблон All4CF.ru_Template_SKD_v4.1 в нем уже реализованы почти все необходимые функции и работает в Обычных и УП формах.

В модуле объекта уже есть функция

установим в ней наш запрос, получается примерно так:

Ниже в коде происходит установка внешних данных из нашей ТЗ с именем ТаблицаВнешнегоНабораДанных

В самой компоновке добавляем набор Объект с именем ТаблицаВнешнегоНабораДанных и перечисляем поля, которые будут использоваться в отчете:

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

Получение остатков на документ в СКД

Набор данных Запрос – назвали его Остатки:

Теперь установим связи Запроса и Объекта

Читайте также:  Свободная энергия миф или реальность

Остатки нужно получать на дату документа и по контрагенту

Далее, если нужно, задайте вычисляемые поля, ресурсы, параметры и Настройте Список вывода.

Платформа:

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

1. Настройка схемы компоновки данных.

1.1. Создаём основную схему компоновки данных.

1.2. На закладке "Наборы данных" добавляем набор данных – объект.

1.3. Добавляем необходимые поля набора данных (достаточно указать Поле) и указываем Имя объекта, содержащего данные.

1.4. Если в СКД есть другие наборы данных (например, Запрос), то создаём связи наборов данных на закладке "Связи наборов данных".

1.5. Настраиваем вывод отчёта нужным образом.

2. Программный вывод отчёта.

2.1. В модуле объекта отчёта создаём процедуру-обработчик ПриКомпоновкеРезультата.

2.2. В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку.

2.3. Формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с полями набора данных в СКД (п.1.3).

2.4. Получаем схему компоновки данных из макета.

2.5. Из схемы получаем настройки по умолчанию.

2.6. Помещаем данные о расшифровке в соответствующую переменную.

2.7. Формируем макет с помощью компоновщика макета.

2.8. Передаём в макет компоновки схему, настройки и данные расшифровки.

2.9. Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных (п.1.3), значение – сформированная таблица значений), данные расшифровки.

2.10. Очищаем поле табличного документа.

2.11. Выводим результат в табличный документ.

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

Пример сформированного отчёта:

Справочная информация из синтакс-помощника:

Комментарии

Обычный Александр (не проверено)

вт, 13/09/2016 – 10:25

Спасибо огромное за статью и прикреплённый пример. Очень помогло в работе.

Щукина Татьяна (не проверено)

пт, 16/12/2016 – 15:28

Спасибо – просто спасли. Только у меня Период не видит в модуле

Читайте также:  Распиновка блока питания компьютера atx 20 4

пт, 16/12/2016 – 16:03

Можете файл отчёта выложить?

Щукина Татьяна (не проверено)

пт, 16/12/2016 – 17:14

положила все в модуль Объекта(база ЗиК 3), в СКД в Параметры добавила "Период" =стандартный период,НачалоПериода=&Период.ДатаНачала ; КонецПериода.. Не видит здесь Период и все..

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

СтандартнаяОбработка = Ложь;
//ДанныеПечати = ПолучитьИзВременногоХранилища(Адр);
Запрос = Новый Запрос;
Запрос.Текст = " ВЫБРАТЬ
| РазовоеНачисление.Ссылка,
| РазовоеНачисление.МесяцНачисления,
| РазовоеНачисление.Подразделение.Наименование как СовмещПодразделениеКуда ,
| РазовоеНачисление.СпособОтраженияЗарплатыВБухучете.Наименование как СовмещСпособОтражения,
| РазовоеНачисление.СпособОтраженияЗарплатыВБухучете как СовмещСпособОтраженияСсылка,
| РазовоеНачисление.Начисление.Наименование как СовмещНаименование,
| РазовоеНач.Ссылка,
| РазовоеНач.Результат как СовмещСумма,
| РазовоеНач.Сотрудник как СовмещСотрудник,
| РазовоеНач.Подразделение.Наименование как СовмещПодразделениеОТКуда_отдел,
| РазовоеНач.Подразделение.РОДИТЕЛЬ.Наименование как СовмещПодразделениеОТКуда
|ИЗ
| Документ.РазовоеНачисление КАК РазовоеНачисление
| левое СОЕДИНЕНИЕ Документ.РазовоеНачисление.Начисления КАК РазовоеНач
| по РазовоеНачисление.Ссылка = РазовоеНач.Ссылка
| ГДЕ
| РазовоеНачисление.МесяцНачисления >= &НачалоПериода И РазовоеНачисление.МесяцНачисления = &НачалоПериода И НачисленияУдержанияПоСотрудникам.Период 0 Тогда
Для Каждого Ст Из МассивНайденныеСтроки Цикл
Стр.ВидДеятельностиНаш = Ст.СовмещСпособОтражения;
Если Ст.СовмещПодразделениеКуда = NULL Тогда
Счет ="";
СубСчет ="";
ПодразделениеСпрОтр ="";
ВидДеятельностиСпрОтр ="";
резЗапр = 0;

если резЗапр = 0 Тогда
ааа = "ОШИБКА нет в спр.СовмещСпособОтраженияСсылка записи = "+Ст.СовмещСпособОтраженияСсылка+" по "+Стр.Сотрудник +" cумма = "+ Стр.Сумма+" => ПодразделенияРодитель И ВидДеятельностиНаш берем из спр.Сотрудники" ;
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
иначе
Стр.ПодразделенияРодитель = ПодразделениеСпрОтр ;
Стр.ВидДеятельностиНаш = ВидДеятельностиСпрОтр;
конецесли;
иначе
Стр.ПодразделенияРодитель = Ст.СовмещПодразделениеКуда ; //это должен быть родитель подразделения
Стр.ВидДеятельностиНаш = Ст.СовмещСпособОтражения;
конецесли;
конецЦикла;
ИНАЧЕ
ааа = "ОШИБКА нет в табл.СовмещСотрРЕЗУЛЬТАТ "+Стр.Сотрудник +" cумма = "+ Стр.Сумма+" => ПодразделенияРодитель И ВидДеятельностиНаш берем из спр.Сотрудники" ;
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
конецЕсли ;
ИНАЧЕ
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
конецЕсли ;
КонецЦикла;
КонецЕсли;
ДанныеПечати.сортировать("Сотрудник");
//***************************************************************
//Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

//Очищаем поле табличного документа
ДокументРезультат.Очистить();

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

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>