Анализ журнала регистрации (Обработчик)

В данной статье продемонстрирован пример выгрузки данных журнала регистрации с помощью Экстрактора 1С. В качестве источника данных здесь использован «Обработчик».

Итак, заходим в раздел «Проекты» Экстрактора 1С, нажимаем «Создать».

Выбираем тип источника данных «Обработчик».

В открывшемся окне задаем название и добавляем источник-обработчик.\

Теперь необходимо заполнить созданный обработчик. Указываем:

  • наименование обработчика;

  • тип обработчика (в нашем случае, это «Источник данных»);

  • Скрипт обработчика предложенный ниже.

Скрипт обработчика для копирования:
ПараметрыОтчета = Новый Структура; ПараметрыОтчета.Вставить("ДатаНачала", Параметры.Получить("ДатаНачала")); //Дата(2024,02,08)); // ПараметрыОтчета.Вставить("ДатаОкончания", Параметры.Получить("ДатаОкончания")); //Дата(2024,02,09)); // ПараметрыОтчета.Вставить("Пользователь", Параметры.Получить("Пользователь")); //Справочники.Пользователи.НайтиПоНаименованию("Администратор"));// ПараметрыОтчета.Вставить("ПользователиИГруппы", Неопределено); ПараметрыОтчета.Вставить("ВариантОтчета", "АктивностьПользователя"); ПараметрыОтчета.Вставить("ВыводитьСправочники", Истина); ПараметрыОтчета.Вставить("ВыводитьДокументы", Истина); ПараметрыОтчета.Вставить("ВыводитьБизнесПроцессы", Ложь); ПараметрыОтчета.Вставить("ВыводитьЗадачи", Ложь); ТЗ = Новый ТаблицаЗначений; Попытка ТЗ = Отчеты.АнализЖурналаРегистрации.ДанныеИзЖурналаРегистрации(ПараметрыОтчета).АнализАктивностиПользователей; Исключение КонецПопытки; Если Параметры.Получить("ЗапросОписанияПолей") = Истина Тогда Результат = ТЗ.Колонки; Иначе Результат = ТЗ; КонецЕсли;

  • параметры, используемые в обработчике:

    • ДатаНачала с типом «Дата»;

    • ДатаОкончания с типом «Дата»;

    • Пользователь с типом «Пользователь».

Как Вы можете видеть, в этом обработчике мы получаем данные из отчета конфигурации АнализЖурналаРегистрации, а из него получаем данные методом ДанныеИзЖурналаРегистрации, задав параметры отчета, используя параметры нашего обработчика. Обращение к параметрам обработчика через Параметры.Получить(“ИмяПараметра“). Далее обращаемся к одному из свойств результата выполнения отчета: АнализАктивностиПользователей, помещаем его в таблицу значений (ТЗ). И выводим в переменную Результат либо колонки, либо данные, в зависимости от настроек параметров обработчика.

Нажимаем «Записать и закрыть».

Теперь необходимо указать значения параметров данного обработчика.

Переходим к этапу настройки вычисляемых полей. Здесь мы выведем два расчетных поля:

  • ДатаВыгрузки;

  • ПользовательПартиция (это поле будет рассчитано в произвольном обработчике, который мы создадим далее).

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

  • активируем переключатель;

  • выбираем тип «Обработчик»

  • Добавляем обработчик данных источника:

  • Заполняем обработчик:

    • задаем «Наименование»;

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

Листинг обработчика данных источника:
//Данные.Свернуть("Дата, Неделя, Пользователь, ВидОбъекта, ОбъектСправочникДокумент","ЧасовРаботы, КоличествоЗапусков, СозданоДокументов, СозданоСправочников, ИзмененоДокументов, ИзмененоСправочников"); Для Каждого Строка Из Данные Цикл Строка.ПользовательПартиция = ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(Строка.Пользователь.Наименование); Строка.ПользовательПартиция = СтрЗаменить(Строка.ПользовательПартиция," ",""); КонецЦикла;

Нажимаем «Записать и закрыть».

Далее выбираем подключение и создаем таблицу-приемник (6 и 7 этапы инструкции по созданию проекта). На этапе сопоставления полей проверяем установленные флаги для сегментов.

Пропускаем этап расширенных настроек и завершаем настройку проекта: задаем наименование проекту в соответствующем поле и переходим к настройке строки проекта.

Обратите внимание!

В группе настроек «Оптимизация» установите Размер буфера — 0. От этой настройки зависит количество одновременно извлекаемых в память записей зависит от настройки строки проекта. Если установить здесь отрицательное значение, то будут выгружаться сразу все записи. Например, это необходимо, если нужно свернуть строки данных. В нашем листинге первая (закомментированная) строка — это пример, когда может понадобиться вся таблица целиком.

Отметим также, что с этой настройкой следует быть осторожным, так как это может вызвать переполнение памяти при больших объемах данных.

Обработчик формирования очереди с начала года

Настроим обработчик формирования очереди для первичной/полной выгрузки данных.

  • активируем переключатель «Обработчик:»;

  • выбираем вид «Обработчик»;

  • здесь мы будем использовать собственный обработчик формирования очереди с начала года;

    • в открывшемся окне:

      • задаем наименование обработчику в соответствующем поле;

      • в поле «Алгоритм» добавляем текст обработчика, предложенный ниже

      Листинг обработчика формирования очереди с начала года:
      Сегодня = ТекущаяДата(); НачалоГода = НачалоГода (Сегодня); КоличествоДней = (Сегодня-НачалоГода)/60/60/24; Для д = 0 По КоличествоДней Цикл ДатаВыгрузки = НачалоГода + д*60*60*24; ЗапросПользователи = Новый Запрос; ЗапросПользователи.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Пользователи.Ссылка КАК Пользователь |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.Служебный = ЛОЖЬ"; ПользовательФильтр = Новый Массив; мсвПользователи = ЗапросПользователи.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); для ы =0 по мсвПользователи.Количество()-1 Цикл ИмяПользователяИБ = мсвПользователи[ы]; Если ИмяПользователяИБ <> Неопределено Тогда ПараметрыОтчета = Новый Структура; ПараметрыОтчета.Вставить("ДатаНачала", НачалоДня(ДатаВыгрузки)); ПараметрыОтчета.Вставить("ДатаОкончания",КонецДня(ДатаВыгрузки)); ПараметрыОтчета.Вставить("Пользователь", ИмяПользователяИБ); СтрокаОчереди = Очередь.Добавить(); СтрокаОчереди.Параметры = ПараметрыОтчета; ПартицияДень = ГОД(ДатаВыгрузки) * 10000 + МЕСЯЦ(ДатаВыгрузки) * 100 + ДЕНЬ(ДатаВыгрузки); ПартицияПользователь = ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(ИмяПользователяИБ.Наименование); ПартицияПользователь = СтрЗаменить(ПартицияПользователь," ",""); //ПартицияПользователь = СтроковыеФункции.СтрокаЛатиницей(ПартицияПользователь); Партиции = Новый Массив; Партиции.Добавить(ПартицияДень); Партиции.Добавить(ПартицияПользователь); СтрокаОчереди.Партиция = Партиции ; КонецЕсли; КонецЦикла; д=д+1; КонецЦикла;
      • нажимаем «Записать и закрыть».

Нажимаем «Применить и закрыть»

Теперь осталось выполнить выгрузку: нажимаем поочередно кнопки «Записать», «Сформировать очередь» и «Выполнить проект».

Обработчик формирования очереди за последние сутки

Рассмотрим еще один вариант обработчика: обработчик событий строки проекта.

Приступим к настройке:

  • разворачиваем обработчик;

  • нажимаем кнопку «Добавить» и заполняем строку обработчика:

    • активируем флаг «Вкл»;

    • выбираем событие «Инициализация очереди строки проекта»;

    • выбираем вид «Обработчик»;

    • здесь мы будем использовать собственный обработчик формирования очереди за последние сутки.

  • задаем наименование обработчику в соответствующем поле;

  • в поле «Алгоритм» добавляем текст обработчика, предложенный ниже

Листинг обработчика формирования очереди за последние сутки:
Проект = Объект.Ссылка; СтрокаПроекта = 1; НЗ = РегистрыСведений.Экс_ОчередьВыгрузки.СоздатьНаборЗаписей(); НЗ.Отбор.Проект.Установить(Проект); Вчера = ТекущаяДата()-60*60*24; ЗапросПользователи = Новый Запрос; ЗапросПользователи.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Пользователи.Ссылка КАК Пользователь |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.Служебный = ЛОЖЬ"; ПользовательФильтр = Новый Массив; мсвПользователи = ЗапросПользователи.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); для ы =0 по мсвПользователи.Количество()-1 Цикл ИмяПользователяИБ = мсвПользователи[ы]; Если ИмяПользователяИБ <> Неопределено Тогда ПараметрыОтчета = Новый Структура; ПараметрыОтчета.Вставить("ДатаНачала", НачалоДня(Вчера)); ПараметрыОтчета.Вставить("ДатаОкончания",КонецДня(Вчера)); ПараметрыОтчета.Вставить("Пользователь", ИмяПользователяИБ); ПартицияДень = ГОД(Вчера) * 10000 + МЕСЯЦ(Вчера) * 100 + ДЕНЬ(Вчера); ПартицияПользователь = ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(ИмяПользователяИБ.Наименование); ПартицияПользователь = СтрЗаменить(ПартицияПользователь," ",""); //ПартицияПользователь = СтроковыеФункции.СтрокаЛатиницей(ПартицияПользователь); Партиции = Новый Массив; Партиции.Добавить(ПартицияДень); Партиции.Добавить(ПартицияПользователь); КлючЗаписи = Строка(Новый УникальныйИдентификатор); РежимУдаления = Перечисления.Экс_РежимыУдаленияЗаписейОчереди.ПриУспешнойВыгрузке; РегистрыСведений.Экс_ОчередьВыгрузки.ДобавитьЗаписьВНаборЗаписей(НЗ, Проект,СтрокаПроекта , , ПараметрыОтчета, Партиции, КлючЗаписи, РежимУдаления); КонецЕсли; КонецЦикла; НЗ.Записать(Истина);
  • нажимаем «Записать и закрыть» для обработчика.

  • нажимаем «Применить и закрыть» для всех настроек строки проекта.

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