1
0
mirror of https://github.com/Polyplastic/1c-parsing-tech-log.git synced 2025-11-23 22:04:45 +02:00

новые отчеты, исправление

This commit is contained in:
God
2023-09-17 23:53:21 +03:00
parent cd3c995a37
commit 22dbfb590d
37 changed files with 6890 additions and 11 deletions

View File

@@ -1,3 +1,3 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.17
Runtime-Version: 8.3.21
Base-Project: parsing-tech-log

View File

@@ -0,0 +1,97 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//Вставить содержимое обработчика
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ЗначениеЗаполнено(Замер) Тогда
ЗагрузитьНастройки(Неопределено);
КонецЕсли;
Элементы.ФункцияАгрегацииДополнительногоСвойства.СписокВыбора.Добавить("Максимум");
Элементы.ФункцияАгрегацииДополнительногоСвойства.СписокВыбора.Добавить("Слияние");
Элементы.ФункцияАгрегацииДополнительногоСвойства.СписокВыбора.Добавить("Сумма");
Элементы.ФункцияАгрегацииДополнительногоСвойства.СписокВыбора.Добавить("Минимум");
Элементы.ФункцияАгрегацииДополнительногоСвойства.СписокВыбора.Добавить("Первое");
Элементы.ФункцияАгрегацииДополнительногоСвойства.СписокВыбора.Добавить("Последнее");
Если НЕ ЗначениеЗаполнено(ФункцияАгрегацииДополнительногоСвойства) Тогда
ФункцияАгрегацииДополнительногоСвойства = "Первое";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьНастройки(Команда)
мНастройка = новый Структура();
мНастройка.Вставить("ЗамерИсточник",ЗамерИсточник);
мНастройка.Вставить("Свойство",Свойство);
мНастройка.Вставить("РазмерПакета",РазмерПакета);
мНастройка.Вставить("Аналитика1",Аналитика1);
мНастройка.Вставить("Аналитика2",Аналитика2);
мНастройка.Вставить("ГруппировкаБезПериода",ГруппировкаБезПериода);
мНастройка.Вставить("ГруппировкаГод",ГруппировкаГод);
мНастройка.Вставить("ГруппировкаДень",ГруппировкаДень);
мНастройка.Вставить("ГруппировкаМесяц",ГруппировкаМесяц);
мНастройка.Вставить("ГруппировкаНеделя",ГруппировкаНеделя);
мНастройка.Вставить("ДополнительноеСвойство",ДополнительноеСвойство);
мНастройка.Вставить("ФункцияАгрегацииДополнительногоСвойства",ФункцияАгрегацииДополнительногоСвойства);
мНастройка.Вставить("УдалятьЦифры",УдалятьЦифры);
мНастройка.Вставить("УдалятьСпецСимволы",УдалятьСпецСимволы);
УправлениеХранилищемНастроекВызовСервера.ЗаписатьДанныеВБезопасноеХранилищеРасширенный(Замер,мНастройка,"Настройка частотного анализа по замеру");
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьНастройки(Команда)
мНастройка = УправлениеХранилищемНастроекВызовСервера.ДанныеИзБезопасногоХранилища(Замер);
Если мНастройка<>Неопределено Тогда
ЗамерИсточник = мНастройка.ЗамерИсточник;
Свойство = мНастройка.Свойство;
РазмерПакета = мНастройка.РазмерПакета;
Аналитика1 = мНастройка.Аналитика1;
Аналитика2 = мНастройка.Аналитика2;
ГруппировкаБезПериода = мНастройка.ГруппировкаБезПериода;
ГруппировкаГод = мНастройка.ГруппировкаГод;
ГруппировкаДень = мНастройка.ГруппировкаДень;
ГруппировкаМесяц = мНастройка.ГруппировкаМесяц;
ГруппировкаНеделя = мНастройка.ГруппировкаНеделя;
ДополнительноеСвойство = мНастройка.ДополнительноеСвойство;
ФункцияАгрегацииДополнительногоСвойства = мНастройка.ФункцияАгрегацииДополнительногоСвойства;
УдалятьЦифры = мНастройка.УдалятьЦифры;
УдалятьСпецСимволы = мНастройка.УдалятьСпецСимволы;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьОбработкуНаСервере()
мОбъект = РеквизитФормыВЗначение("Объект");
мОбъект.ВыполнитьЧастотныйАнализСобытий(Замер);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
ВыполнитьОбработкуНаСервере();
КонецПроцедуры
&НаСервере
Процедура СформироватьКлючиНаСервере()
// нужно добавить ключи, если нет
КонецПроцедуры
&НаКлиенте
Процедура СформироватьКлючи(Команда)
СформироватьКлючиНаСервере();
КонецПроцедуры

View File

@@ -0,0 +1,173 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//Вставить содержимое обработчика
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Первые=0 Тогда
Первые=1000;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьРасчет(Команда)
КешСвертки = Новый Соответствие;
ВыполнитьРасчетСервер(КешСвертки);
Для каждого стр из КешСвертки Цикл
стр_н = ТаблицаОбработанныхСобытий.Добавить();
ЗаполнитьЗначенияСвойств(стр_н,стр.Значение);
КонецЦикла;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРезультат;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьРасчетСервер(КешСвертки)
Для каждого стр из ТаблицаДанных Цикл
Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
Хеш.Добавить(стр.Значение);
ЗначениеХеш = Хеш.ХешСумма;
// нет
Если ГруппировкаБезПериода=Истина Тогда
ДатаГрупировки = Дата('00010101');
ОбновитьКешПоГруппировке(ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "Нет");
КонецЕсли;
// Год
Если ГруппировкаГод=Истина Тогда
ДатаГрупировки = НачалоГода(стр.Дата);
ОбновитьКешПоГруппировке(ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "Год");
КонецЕсли;
// Месяц
Если ГруппировкаМесяц=Истина Тогда
ДатаГрупировки = НачалоМесяца(стр.Дата);
ОбновитьКешПоГруппировке(ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "Месяц");
КонецЕсли;
// Неделя
Если ГруппировкаНеделя=Истина Тогда
ДатаГрупировки = НачалоНедели(стр.Дата);
ОбновитьКешПоГруппировке(ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "Неделя");
КонецЕсли;
// День
Если ГруппировкаДень=Истина Тогда
ДатаГрупировки = НачалоДня(стр.Дата);
ОбновитьКешПоГруппировке(ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "День");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьКешПоГруппировке(ЗначениеХеш, КешСвертки, Источник, ДатаГруппировки, ТипГруппировки="Нет")
Перем Данные;
Ключ = НРег(Строка(ЗначениеХеш)+"->"+ТипГруппировки+":"+ДатаГруппировки+" "+Источник.ЗначениеАналитика1+" "+Источник.ЗначениеАналитика2);
Данные = КешСвертки.Получить(Ключ);
Если Данные=Неопределено Тогда
Данные = Новый Структура("КоличествоСовпадений,Хеш,Значение,ДатаПоследнейЗаписи,СобытиеЗамера",0,ЗначениеХеш,Источник.Значение,Источник.Дата,Источник.СобытиеЗамера);
Данные.Вставить("ДатаГруппировки",ДатаГруппировки);
Данные.Вставить("ТипГруппировки",ТипГруппировки);
Данные.Вставить("ДлительностьМксМаксимум",Источник.ДлительностьМкс);
Данные.Вставить("ДлительностьМксСумма",0);
Данные.Вставить("Аналитика1",Источник.Аналитика1);
Данные.Вставить("ЗначениеАналитика1",Источник.ЗначениеАналитика1);
Данные.Вставить("Аналитика2",Источник.Аналитика2);
Данные.Вставить("ЗначениеАналитика2",Источник.ЗначениеАналитика2);
КешСвертки.Вставить(Ключ,Данные);
КонецЕсли;
Данные.КоличествоСовпадений = Данные.КоличествоСовпадений+1;
Данные.ДлительностьМксСумма = Данные.ДлительностьМксСумма+Источник.ДлительностьМкс;
Если Данные.ДатаПоследнейЗаписи<=Источник.Дата И НЕ Данные.СобытиеЗамера = Источник.СобытиеЗамера Тогда
Данные.ДатаПоследнейЗаписи = Источник.Дата;
Данные.СобытиеЗамера = Источник.СобытиеЗамера;
КонецЕсли;
Если Данные.ДлительностьМксМаксимум<Источник.ДлительностьМкс Тогда
Данные.ДлительностьМксМаксимум=Источник.ДлительностьМкс;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолучитьДанныеНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1000
| СобытияЗамераКлючевыеСвойства.Ссылка КАК СобытиеЗамера,
| СобытияЗамераКлючевыеСвойства.Ссылка.Владелец КАК Замер,
| СобытияЗамераКлючевыеСвойства.Свойство КАК Свойство,
| СобытияЗамераКлючевыеСвойства.Значение КАК Значение,
| СобытияЗамераКлючевыеСвойства.ХешЗначения КАК Хеш,
| СобытияЗамераКлючевыеСвойства.Ссылка.ДатаСобытия КАК Дата,
| СобытияЗамераКлючевыеСвойства.Ссылка.ДлительностьМкс КАК ДлительностьМкс,
| &Аналитика1 КАК Аналитика1,
| НЕОПРЕДЕЛЕНО КАК ЗначениеАналитика1,
| &Аналитика2 КАК Аналитика2,
| НЕОПРЕДЕЛЕНО КАК ЗначениеАналитика2
|ИЗ
| Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства
|ГДЕ
| СобытияЗамераКлючевыеСвойства.Ссылка.Владелец = &Замер
| И СобытияЗамераКлючевыеСвойства.Свойство = &Свойство
| И СобытияЗамераКлючевыеСвойства.Ссылка.ДатаСобытия МЕЖДУ &ДатаНачала И &ДатаОкончания
|
|УПОРЯДОЧИТЬ ПО
| Дата,
| СобытияЗамераКлючевыеСвойства.Ссылка";
Запрос.УстановитьПараметр("Замер",Замер);
Запрос.УстановитьПараметр("Свойство",Свойство);
Запрос.УстановитьПараметр("Аналитика1",Аналитика1);
Запрос.УстановитьПараметр("Аналитика2",Аналитика2);
Запрос.УстановитьПараметр("ДатаНачала",Период.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания",Период.ДатаОкончания);
Запрос.Текст = СтрЗаменить(Запрос.Текст,"ВЫБРАТЬ ПЕРВЫЕ 1000","ВЫБРАТЬ ПЕРВЫЕ "+XMLСтрока(Первые));
Если ЗначениеЗаполнено(Аналитика1) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"НЕОПРЕДЕЛЕНО КАК ЗначениеАналитика1,",
"ЕстьNull(ЗнАн1.Значение,"""") КАК ЗначениеАналитика1,");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства",
"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СобытияЗамера.КлючевыеСвойства КАК ЗнАн1
|ПО ЗнАн1.Ссылка=СобытияЗамераКлючевыеСвойства.Ссылка
| И ЗнАн1.Свойство=&Аналитика1"+Символы.ПС);
КонецЕсли;
Если ЗначениеЗаполнено(Аналитика2) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"НЕОПРЕДЕЛЕНО КАК ЗначениеАналитика1,",
"ЕстьNull(ЗнАн1.Значение,"""") КАК ЗначениеАналитика1,");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства",
"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СобытияЗамера.КлючевыеСвойства КАК ЗнАн2
|ПО ЗнАн2.Ссылка=СобытияЗамераКлючевыеСвойства.Ссылка
| И ЗнАн2.Свойство=&Аналитика2"+Символы.ПС);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
стр_н = ТаблицаДанных.Добавить();
ЗаполнитьЗначенияСвойств(стр_н,Выборка);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьДанные(Команда)
ПолучитьДанныеНаСервере();
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаДанные;
КонецПроцедуры

View File

@@ -0,0 +1,545 @@
#Область ДополнительныеОбработки
Функция СведенияОВнешнейОбработке() Экспорт
МассивНазначений = Новый Массив;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Частотный анализ событий");
ПараметрыРегистрации.Вставить("Версия", "2023.07.29");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", ИнформацияПоИсторииИзменений());
ПараметрыРегистрации.Вставить("ВерсияБСП", "1.2.1.4");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Настройка 'Частотный анализ событий'",
"НастройкаЧастотныйАнализСобытий",
"ОткрытиеФормы",
Истина,
"",
"ФормаНастроек"
);
ДобавитьКоманду(ТаблицаКоманд,
"ЧастотныйАнализСобытийФоново",
"ЧастотныйАнализСобытийФоново",
"ВызовСерверногоМетода",
Ложь,
"",
"ФормаМонитора",
Ложь
);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("ПросмотрВсе", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ИмяФормы", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "", ИмяФормы="",ПросмотрВсе=Истина)
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
НоваяКоманда.ИмяФормы = ИмяФормы;
НоваяКоманда.ПросмотрВсе = ПросмотрВсе;
КонецПроцедуры
Функция ИнформацияПоИсторииИзменений()
Возврат "
| <div style='text-indent: 25px;'>Данная обработка позволяет выполнять частотную обработку данных</div>
| <div style='text-indent: 25px;'>Форма Настройка 'Частотный анализ' выполнить настройку </div>
| <hr />
| <div style='text-indent: 25px;'>Автор идеи: Крючков Владимир.</div>
| <div style='text-indent: 25px;'>Реализовали: Крючков Владимир.</div>
| <hr />
| Подробную информацию смотрите по адресу интернет: <a target='_blank' href='https://github.com/Polyplastic/1c-parsing-tech-log'>https://github.com/Polyplastic/1c-parsing-tech-log</a>";
КонецФункции
Процедура ВыполнитьКоманду(Знач ИдентификаторКоманды, ПараметрыКоманды=Неопределено) Экспорт
Если ИдентификаторКоманды="ЧастотныйАнализСобытийФоново" Тогда
// только при наличии параметров
Если ПараметрыКоманды=Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ЧастотныйАнализСобытий
Процедура ВыполнитьЗагрузкуДанных(Замер,ДополнительнаяОбработка=Неопределено) Экспорт
ВыполнитьЧастотныйАнализСобытий(Замер);
КонецПроцедуры
Функция ВыполнитьЧастотныйАнализСобытий(Замер) Экспорт
// получим настройки загрузки
мНастройка = УправлениеХранилищемНастроекВызовСервера.ДанныеИзБезопасногоХранилища(Замер);
Если мНастройка=Неопределено Тогда
ЗаписьЖурналаРегистрации("ЗагрузитьДанныеВЗамерСервер",УровеньЖурналаРегистрации.Ошибка,Неопределено,Замер,"Не созданы настройки для операции произвольной загрузки по замеру ("+Замер+")");
Возврат 0;
КонецЕсли;
//ЗаписыватьРезультатОбработкиВИсходныйЗамер = мНастройка.ЗаписыватьРезультатОбработкиВИсходныйЗамер;
РазмерФайла = 0;
ПрочитаноСтрок = 0;
//инициализация фильтров
РеквизитыЗамера = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Замер, "ФильтрТипСобытия,ФильтрСвойстваСобытия,ФильтрСвойстваСобытияКроме,ФильтрДлительность,НачалоПериода,КонецПериода,ТипЗамера,ДополнительнаяОбработка");
РеквизитыЗамера.Вставить("ФильтрТипСобытия", РеквизитыЗамера.ФильтрТипСобытия.Получить());
НачалоПериода = РеквизитыЗамера.НачалоПериода;
КонецПериода = РеквизитыЗамера.КонецПериода;
АдресURL = "/ЧастотныйАнализСобытий/"+Строка(Замер.UUID());
ФайлЗамера = Справочники.ФайлыЗамера.ПолучитьФайлПоПолномуИмени(Замер, АдресURL);
//получим состояние чтения
СостояниеЧтения = РегистрыСведений.СостояниеЧтения.ПолучитьСостояние(ФайлЗамера);
//по факту - количество прочитанных данных
ПрочитаноСтрок = СостояниеЧтения.ПрочитаноСтрок;
ДатаПрочитанныхДанных = СостояниеЧтения.ДатаПрочитанныхДанных;
ПоследнееОбработанноеСобытиеЗамера = СостояниеЧтения.СобытиеЗамера;
// читаем в границе
Если ДатаПрочитанныхДанных<НачалоПериода Тогда
ДатаПрочитанныхДанных = НачалоПериода;
КонецЕсли;
КешСвертки = Новый Соответствие;
КешСверткиИзБазы = Новый Соответствие;
// 1) обработка полученных данных
ТаблицаДанных = ПолучитьДанныеНаСервере(мНастройка,ДатаПрочитанныхДанных);
Если ТаблицаДанных.Количество()>0 Тогда
ПоследнееОбработанноеСобытиеЗамера = ТаблицаДанных[ТаблицаДанных.Количество()-1].СобытиеЗамера;
ДатаПрочитанныхДанных = ТаблицаДанных[ТаблицаДанных.Количество()-1].Дата;
ПрочитаноСтрок = ПрочитаноСтрок+ТаблицаДанных.Количество();
Иначе
// нет данных для обработки
Возврат 0;
КонецЕсли;
ВыполнитьРасчетПолученныхДанных(ТаблицаДанных,КешСвертки,мНастройка);
// 2) теперь добавим уже рассчитанные данные
ТаблицаРассчитанныхДанных = ПолучитьТаблицуРассчитанныхДанных(Замер,мНастройка);
СтруктураСвойств = Новый Структура;
СтруктураСвойств.Вставить("Значение",СправочникиСерверПовтИсп.ПолучитьСвойство("Значение"));
СтруктураСвойств.Вставить("ОбработанныйТекст",СправочникиСерверПовтИсп.ПолучитьСвойство("ОбработанныйТекст"));
СтруктураСвойств.Вставить("КоличествоСовпадений",СправочникиСерверПовтИсп.ПолучитьСвойство("КоличествоСовпадений"));
СтруктураСвойств.Вставить("Аналитика1",СправочникиСерверПовтИсп.ПолучитьСвойство("Аналитика1"));
СтруктураСвойств.Вставить("Аналитика2",СправочникиСерверПовтИсп.ПолучитьСвойство("Аналитика2"));
СтруктураСвойств.Вставить("ЗначениеАналитика1",СправочникиСерверПовтИсп.ПолучитьСвойство("ЗначениеАналитика1"));
СтруктураСвойств.Вставить("ЗначениеАналитика2",СправочникиСерверПовтИсп.ПолучитьСвойство("ЗначениеАналитика2"));
СтруктураСвойств.Вставить("ТипГруппировки",СправочникиСерверПовтИсп.ПолучитьСвойство("ТипГруппировки"));
СтруктураСвойств.Вставить("ДатаГруппировки",СправочникиСерверПовтИсп.ПолучитьСвойство("ДатаГруппировки"));
СтруктураСвойств.Вставить("Хеш",СправочникиСерверПовтИсп.ПолучитьСвойство("Хеш"));
СтруктураСвойств.Вставить("ДатаПоследнейЗаписи",СправочникиСерверПовтИсп.ПолучитьСвойство("ДатаПоследнейЗаписи"));
СтруктураСвойств.Вставить("ДлительностьМксМаксимум",СправочникиСерверПовтИсп.ПолучитьСвойство("ДлительностьМксМаксимум"));
СтруктураСвойств.Вставить("ДлительностьМксСумма",СправочникиСерверПовтИсп.ПолучитьСвойство("ДлительностьМксСумма"));
СтруктураСвойств.Вставить("ДополнительноеСвойство",СправочникиСерверПовтИсп.ПолучитьСвойство("ДополнительноеСвойство"));
СтруктураСвойств.Вставить("ЗначениеДополнительноеСвойство",СправочникиСерверПовтИсп.ПолучитьСвойство("ЗначениеДополнительноеСвойство"));
КлючиПоискаИмениПоСвойству = Новый Соответствие;
Для каждого стр из СтруктураСвойств Цикл
КлючиПоискаИмениПоСвойству.Вставить(стр.Значение,стр.Ключ);
КонецЦикла;
// сформируем таблицу из рассчитанных данных, кеш по ключу
КешРассчитанных = Новый Соответствие;
Для каждого стр из ТаблицаРассчитанныхДанных Цикл
СтруктураСтроки = КешРассчитанных.Получить(стр.Ссылка);
Если СтруктураСтроки=Неопределено Тогда
СтруктураСтроки = Новый Структура;
СтруктураСтроки.Вставить("СобытияЗамера",стр.Ссылка);
КонецЕсли;
ИмяСвойства = КлючиПоискаИмениПоСвойству.Получить(стр.Свойство);
Если ИмяСвойства=Неопределено Тогда
Продолжить;
КонецЕсли;
СтруктураСтроки.Вставить(ИмяСвойства,стр.Значение);
КешРассчитанных.Вставить(стр.Ссылка,СтруктураСтроки);
КонецЦикла;
// Сформируем ключи
Для каждого стр из КешРассчитанных Цикл
ТипГруппировки = "";
ДатаГруппировки = "";
ЗначениеАналитика1 = "";
ЗначениеАналитика2 = "";
ЗначениеХеш = "";
Если стр.Значение.Свойство("ЗначениеАналитика1") Тогда
ЗначениеАналитика1 = стр.Значение.ЗначениеАналитика1;
КонецЕсли;
Если стр.Значение.Свойство("ЗначениеАналитика2") Тогда
ЗначениеАналитика2 = стр.Значение.ЗначениеАналитика2;
КонецЕсли;
Если стр.Значение.Свойство("ТипГруппировки") Тогда
ТипГруппировки = стр.Значение.ТипГруппировки;
КонецЕсли;
Если стр.Значение.Свойство("ДатаГруппировки") Тогда
ДатаГруппировки = стр.Значение.ДатаГруппировки;
КонецЕсли;
Если стр.Значение.Свойство("Хеш") Тогда
ЗначениеХеш = стр.Значение.Хеш;
КонецЕсли;
Ключ = НРег(Строка(ЗначениеХеш)+"->"+ТипГруппировки+":"+ДатаГруппировки+" "+ЗначениеАналитика1+" "+ЗначениеАналитика2);
стр.Значение.Вставить("Ключ",Ключ);
КешСверткиИзБазы.Вставить(Ключ,стр.Значение);
КонецЦикла;
// 3) Выполним добавление и обмен
// пройдемся по полученным данным
Для каждого стр из КешСвертки Цикл
СобытиеЗамераОбъект = Неопределено;
// 1 найдем это новый или старый
ЭлементИзБазы = КешСверткиИзБазы.Получить(стр.Ключ);
Если ЭлементИзБазы=Неопределено Тогда
СобытиеЗамераОбъект = Справочники.СобытияЗамера.СоздатьЭлемент();
СобытиеЗамераОбъект.Владелец = Замер;
СобытиеЗамераОбъект.Файл = ФайлЗамера;
СобытиеЗамераОбъект.ДатаСобытия = стр.Значение.ДатаГруппировки;
СобытиеЗамераОбъект.ДлительностьМкс = стр.Значение.ДлительностьМксМаксимум;
// табличная часть
Для каждого тч из стр.Значение Цикл
// пропускаем свойства, которые нам не нужны
Если СтруктураСвойств.Свойство(тч.Ключ)=Ложь Тогда
Продолжить;
КонецЕсли;
стр_н = СобытиеЗамераОбъект.КлючевыеСвойства.Добавить();
стр_н.Свойство = СтруктураСвойств[тч.Ключ];
Если ТипЗнч(тч.Значение)=Тип("Число") Тогда
стр_н.ЗначениеЧисло = тч.Значение;
стр_н.Значение = XMLСтрока(тч.Значение);
Иначе
стр_н.Значение = Строка(тч.Значение);
КонецЕсли;
КонецЦикла;
Иначе
СобытиеЗамераОбъект = ЭлементИзБазы.СобытияЗамера.ПолучитьОбъект();
// изменим КоличествоСовпадений
мОтбор = новый Структура("Свойство",СтруктураСвойств.КоличествоСовпадений);
строка_события = СобытиеЗамераОбъект.КлючевыеСвойства.НайтиСтроки(мОтбор);
Если строка_события.Количество()>0 Тогда
строка_события[0].ЗначениеЧисло = строка_события[0].ЗначениеЧисло+стр.Значение.КоличествоСовпадений;
строка_события[0].Значение = строка_события[0].ЗначениеЧисло;
КонецЕсли;
// изменим ДатаПоследнейЗаписи
мОтбор = новый Структура("Свойство",СтруктураСвойств.ДатаПоследнейЗаписи);
строка_события = СобытиеЗамераОбъект.КлючевыеСвойства.НайтиСтроки(мОтбор);
Если строка_события.Количество()>0 Тогда
строка_события[0].Значение = стр.Значение.ДатаПоследнейЗаписи;
КонецЕсли;
// изменим ДлительностьМксМаксимум
мОтбор = новый Структура("Свойство",СтруктураСвойств.ДлительностьМксМаксимум);
строка_события = СобытиеЗамераОбъект.КлючевыеСвойства.НайтиСтроки(мОтбор);
Если строка_события.Количество()>0 Тогда
Если строка_события[0].ЗначениеЧисло<стр.Значение.ДлительностьМксМаксимум Тогда
строка_события[0].ЗначениеЧисло = стр.Значение.ДлительностьМксМаксимум;
строка_события[0].Значение = стр.Значение.ДлительностьМксМаксимум;
СобытиеЗамераОбъект.ДлительностьМкс = стр.Значение.ДлительностьМксМаксимум;
КонецЕсли;
КонецЕсли;
// изменим ДлительностьМксСумма
мОтбор = новый Структура("Свойство",СтруктураСвойств.ДлительностьМксСумма);
строка_события = СобытиеЗамераОбъект.КлючевыеСвойства.НайтиСтроки(мОтбор);
Если строка_события.Количество()>0 Тогда
строка_события[0].ЗначениеЧисло = строка_события[0].ЗначениеЧисло+стр.Значение.ДлительностьМксСумма;
строка_события[0].Значение = строка_события[0].ЗначениеЧисло;
КонецЕсли;
КонецЕсли;
Если НЕ СобытиеЗамераОбъект=Неопределено Тогда
СобытиеЗамераОбъект.Записать();
КонецЕсли;
КонецЦикла;
// Обновление инфорации о количестве прочитанных строк
РегистрыСведений.СостояниеЧтения.УстановитьСостояние(
ФайлЗамера,
ДатаПрочитанныхДанных,
ПрочитаноСтрок,
ДатаПрочитанныхДанных,
РазмерФайла,
ДатаПрочитанныхДанных,
ПоследнееОбработанноеСобытиеЗамера);
Возврат 1;
КонецФункции
Процедура ВыполнитьРасчетПолученныхДанных(ТаблицаДанных,КешСвертки,мНастройка)
Для каждого стр из ТаблицаДанных Цикл
Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
ОбработанныйТекст = стр.Значение;
ОбработанныйТекст = ОбработатьТекст(ОбработанныйТекст,мНастройка);
Хеш.Добавить(стр.Значение);
ЗначениеХеш = Хеш.ХешСумма;
// нет
Если мНастройка.ГруппировкаБезПериода=Истина Тогда
ДатаГрупировки = Дата('00010101');
ОбновитьКешПоГруппировке(ТаблицаДанных, мНастройка, ОбработанныйТекст, ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "Нет");
КонецЕсли;
// Год
Если мНастройка.ГруппировкаГод=Истина Тогда
ДатаГрупировки = НачалоГода(стр.Дата);
ОбновитьКешПоГруппировке(ТаблицаДанных, мНастройка, ОбработанныйТекст, ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "Год");
КонецЕсли;
// Месяц
Если мНастройка.ГруппировкаМесяц=Истина Тогда
ДатаГрупировки = НачалоМесяца(стр.Дата);
ОбновитьКешПоГруппировке(ТаблицаДанных, мНастройка, ОбработанныйТекст, ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "Месяц");
КонецЕсли;
// Неделя
Если мНастройка.ГруппировкаНеделя=Истина Тогда
ДатаГрупировки = НачалоНедели(стр.Дата);
ОбновитьКешПоГруппировке(ТаблицаДанных, мНастройка, ОбработанныйТекст, ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "Неделя");
КонецЕсли;
// День
Если мНастройка.ГруппировкаДень=Истина Тогда
ДатаГрупировки = НачалоДня(стр.Дата);
ОбновитьКешПоГруппировке(ТаблицаДанных, мНастройка, ОбработанныйТекст, ЗначениеХеш, КешСвертки, стр, ДатаГрупировки, "День");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ОбработатьТекст(Знач Текст,мНастройки)
// удалить специ символы и цифры
Текст = УбратьЛишниеСимволыИзСтроки(Текст,мНастройки.УдалятьСпецСимволы,мНастройки.УдалятьЦифры);
Возврат Текст;
КонецФункции
Функция УбратьЛишниеСимволыИзСтроки(Строка,УдалятьСпецСимволы=Истина,УдалятьЦифры=Истина) Экспорт
Если УдалятьСпецСимволы=Ложь И УдалятьЦифры=Ложь Тогда
Возврат Строка;
КонецЕсли;
РезультирующаяСтрока = "";
Для н = 1 По СтрДлина(Строка) Цикл
ДобавитьСимвол = Истина;
// УдалятьСпецСимволы
Если УдалятьСпецСимволы=Истина
И НЕ ((КодСимвола(Строка, н) >= 48 И КодСимвола(Строка, н) <= 57)
ИЛИ (КодСимвола(Строка, н) >= 65 И КодСимвола(Строка, н) <= 90)
ИЛИ (КодСимвола(Строка, н) >= 97 И КодСимвола(Строка, н) <= 122)
ИЛИ (КодСимвола(Строка, н) >= 1040 И КодСимвола(Строка, н) <= 1103)) Тогда
ДобавитьСимвол = Ложь;
КонецЕсли;
// УдалятьЦифры
Если УдалятьЦифры=Истина
И ( КодСимвола(Строка, н) >= 48 И КодСимвола(Строка, н) <= 57 ) Тогда
ДобавитьСимвол = Ложь;
КонецЕсли;
Если ДобавитьСимвол=Истина Тогда
РезультирующаяСтрока = РезультирующаяСтрока + Сред(Строка, н, 1);
КонецЕсли;
КонецЦикла;
Возврат РезультирующаяСтрока;
КонецФункции
Процедура ОбновитьКешПоГруппировке(ТаблицаДанных, мНастройка, ОбработанныйТекст, ЗначениеХеш, КешСвертки, Источник, ДатаГруппировки, ТипГруппировки="Нет")
Перем Данные;
Ключ = НРег(Строка(ЗначениеХеш)+"->"+ТипГруппировки+":"+ДатаГруппировки+" "+Источник.ЗначениеАналитика1+" "+Источник.ЗначениеАналитика2);
Данные = КешСвертки.Получить(Ключ);
Если Данные=Неопределено Тогда
Данные = Новый Структура("КоличествоСовпадений,Хеш,Значение,ДатаПоследнейЗаписи,СобытиеЗамера",0,ЗначениеХеш,Источник.Значение,Источник.Дата,Источник.СобытиеЗамера);
Данные.Вставить("ДатаГруппировки",ДатаГруппировки);
Данные.Вставить("ТипГруппировки",ТипГруппировки);
Данные.Вставить("ДлительностьМксМаксимум",Источник.ДлительностьМкс);
Данные.Вставить("ДлительностьМксСумма",0);
Данные.Вставить("Аналитика1",Источник.Аналитика1);
Данные.Вставить("ЗначениеАналитика1",Источник.ЗначениеАналитика1);
Данные.Вставить("Аналитика2",Источник.Аналитика2);
Данные.Вставить("ЗначениеАналитика2",Источник.ЗначениеАналитика2);
Данные.Вставить("ОбработанныйТекст",ОбработанныйТекст);
Данные.Вставить("ДополнительноеСвойство",Источник.ДополнительноеСвойство);
Данные.Вставить("ЗначениеДополнительноеСвойство",Источник.ЗначениеДополнительноеСвойство);
КешСвертки.Вставить(Ключ,Данные);
КонецЕсли;
Данные.КоличествоСовпадений = Данные.КоличествоСовпадений+1;
Данные.ДлительностьМксСумма = Данные.ДлительностьМксСумма+Источник.ДлительностьМкс;
Если Данные.ДатаПоследнейЗаписи<=Источник.Дата И НЕ Данные.СобытиеЗамера = Источник.СобытиеЗамера Тогда
Данные.ДатаПоследнейЗаписи = Источник.Дата;
Данные.СобытиеЗамера = Источник.СобытиеЗамера;
КонецЕсли;
Если Данные.ДлительностьМксМаксимум<Источник.ДлительностьМкс Тогда
Данные.ДлительностьМксМаксимум=Источник.ДлительностьМкс;
КонецЕсли;
// доп свойство
Если ЗначениеЗаполнено(мНастройка.ДополнительноеСвойство) Тогда
Если мНастройка.ФункцияАгрегацииДополнительногоСвойства="Первое" Тогда
ИначеЕсли мНастройка.ФункцияАгрегацииДополнительногоСвойства="Последнее" Тогда
Данные.Вставить("ЗначениеДополнительноеСвойство",Источник.ЗначениеДополнительноеСвойство);
ИначеЕсли мНастройка.ФункцияАгрегацииДополнительногоСвойства="Максимум" Тогда
Если Источник.ЗначениеДополнительноеСвойство>Данные.ЗначениеДополнительноеСвойство Тогда
Данные.Вставить("ЗначениеДополнительноеСвойство",Источник.ЗначениеДополнительноеСвойство);
КонецЕсли;
ИначеЕсли мНастройка.ФункцияАгрегацииДополнительногоСвойства="Минимум" Тогда
Если Источник.ЗначениеДополнительноеСвойство<Данные.ЗначениеДополнительноеСвойство Тогда
Данные.Вставить("ЗначениеДополнительноеСвойство",Источник.ЗначениеДополнительноеСвойство);
КонецЕсли;
ИначеЕсли мНастройка.ФункцияАгрегацииДополнительногоСвойства="Слияние" Тогда
Данные.Вставить("ЗначениеДополнительноеСвойство",Строка(Данные.ЗначениеДополнительноеСвойство)+Символы.ПС+Строка(Источник.ЗначениеДополнительноеСвойство));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПолучитьТаблицуРассчитанныхДанных(Замер,мНастройка)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КлючевыеСвойства.Ссылка КАК Ссылка,
| КлючевыеСвойства.Свойство.Наименование КАК ИмяСвойства,
| КлючевыеСвойства.Свойство КАК Свойство,
| КлючевыеСвойства.Значение КАК Значение,
| КлючевыеСвойства.ЗначениеЧисло КАК ЗначениеЧисло
|ИЗ
| Справочник.СобытияЗамера.КлючевыеСвойства КАК КлючевыеСвойства
|ГДЕ
| КлючевыеСвойства.Ссылка.Владелец = &Замер";
Запрос.УстановитьПараметр("Замер",Замер);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция ПолучитьДанныеНаСервере(мНастройки,ДатаНачалаЧтения)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1000
| СобытияЗамераКлючевыеСвойства.Ссылка КАК СобытиеЗамера,
| СобытияЗамераКлючевыеСвойства.Ссылка.Владелец КАК Замер,
| СобытияЗамераКлючевыеСвойства.Свойство КАК Свойство,
| СобытияЗамераКлючевыеСвойства.Значение КАК Значение,
| СобытияЗамераКлючевыеСвойства.ХешЗначения КАК Хеш,
| СобытияЗамераКлючевыеСвойства.Ссылка.ДатаСобытия КАК Дата,
| СобытияЗамераКлючевыеСвойства.Ссылка.ДлительностьМкс КАК ДлительностьМкс,
| &Аналитика1 КАК Аналитика1,
| НЕОПРЕДЕЛЕНО КАК ЗначениеАналитика1,
| &Аналитика2 КАК Аналитика2,
| НЕОПРЕДЕЛЕНО КАК ЗначениеАналитика2,
| &ДополнительноеСвойство КАК ДополнительноеСвойство,
| НЕОПРЕДЕЛЕНО КАК ЗначениеДополнительноеСвойство,
| """" КАК ОбработанныйТекст
|ИЗ
| Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства
|ГДЕ
| СобытияЗамераКлючевыеСвойства.Ссылка.Владелец = &Замер
| И СобытияЗамераКлючевыеСвойства.Свойство = &Свойство
| И СобытияЗамераКлючевыеСвойства.Ссылка.ДатаСобытия > &ДатаНачалаЧтения
|
|УПОРЯДОЧИТЬ ПО
| Дата,
| СобытияЗамераКлючевыеСвойства.Ссылка";
Запрос.УстановитьПараметр("Замер",мНастройки.ЗамерИсточник);
Запрос.УстановитьПараметр("Свойство",мНастройки.Свойство);
Запрос.УстановитьПараметр("Аналитика1",мНастройки.Аналитика1);
Запрос.УстановитьПараметр("Аналитика2",мНастройки.Аналитика2);
Запрос.УстановитьПараметр("ДополнительноеСвойство",мНастройки.ДополнительноеСвойство);
Запрос.УстановитьПараметр("ДатаНачалаЧтения",ДатаНачалаЧтения);
Если мНастройки.РазмерПакета=0 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"ВЫБРАТЬ ПЕРВЫЕ 1000","ВЫБРАТЬ ");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст,"ВЫБРАТЬ ПЕРВЫЕ 1000","ВЫБРАТЬ ПЕРВЫЕ "+XMLСтрока(мНастройки.РазмерПакета));
КонецЕсли;
Если ЗначениеЗаполнено(мНастройки.Аналитика1) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"НЕОПРЕДЕЛЕНО КАК ЗначениеАналитика1,",
"ЕстьNull(ЗнАн1.Значение,"""") КАК ЗначениеАналитика1,");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства",
"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СобытияЗамера.КлючевыеСвойства КАК ЗнАн1
|ПО ЗнАн1.Ссылка=СобытияЗамераКлючевыеСвойства.Ссылка
| И ЗнАн1.Свойство=&Аналитика1"+Символы.ПС);
КонецЕсли;
Если ЗначениеЗаполнено(мНастройки.Аналитика2) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"НЕОПРЕДЕЛЕНО КАК ЗначениеАналитика2,",
"ЕстьNull(ЗнАн2.Значение,"""") КАК ЗначениеАналитика2,");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства",
"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СобытияЗамера.КлючевыеСвойства КАК ЗнАн2
|ПО ЗнАн2.Ссылка=СобытияЗамераКлючевыеСвойства.Ссылка
| И ЗнАн2.Свойство=&Аналитика2"+Символы.ПС);
КонецЕсли;
Если ЗначениеЗаполнено(мНастройки.ДополнительноеСвойство) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"НЕОПРЕДЕЛЕНО КАК ЗначениеДополнительноеСвойство,",
"ЕстьNull(ДопСв.Значение,"""") КАК ЗначениеДополнительноеСвойство,");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства",
"Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СобытияЗамера.КлючевыеСвойства КАК ДопСв
|ПО ДопСв.Ссылка=СобытияЗамераКлючевыеСвойства.Ссылка
| И ДопСв.Свойство=&ДополнительноеСвойство"+Символы.ПС);
КонецЕсли;
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
#КонецОбласти

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ExternalDataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a30580fd-cd5a-4ba3-99ac-3c6e4770e513">
<producedTypes>
<objectType typeId="0e99cf99-ea0a-49d9-a3ac-eb47e0ad58e8" valueTypeId="69833904-294b-4262-af12-61d1c399b735"/>
</producedTypes>
<name>ЧастотныйАнализСобытий</name>
<synonym>
<key>ru</key>
<value>Частотный анализ событий</value>
</synonym>
<containedObjects classId="c3831ec8-d8d5-4f93-8a22-f9bfae07327f" objectId="3214c302-3ca4-4fa4-8b01-7eed8a8196fb"/>
<defaultForm>ExternalDataProcessor.ЧастотныйАнализСобытий.Form.ФормаНастроек</defaultForm>
<forms uuid="72abc9ec-da99-4185-a316-da15a80d3a54">
<name>ФормаОтладка</name>
<synonym>
<key>ru</key>
<value>Форма отладка</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="44347248-7af1-4ff3-b34f-a2674238086f">
<name>ФормаНастроек</name>
<synonym>
<key>ru</key>
<value>Форма настроек</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
</mdclass:ExternalDataProcessor>

View File

@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormGroup">
<name>ОсновнаяКоманднаяПанель</name>
<id>1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Основная командная панель</value>
</title>
<extendedTooltip>
<name>ОсновнаяКоманднаяПанельРасширеннаяПодсказка</name>
<id>2</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Left</horizontalAlign>
<commandSource>Form</commandSource>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>КомпоновщикНастроекПользовательскиеНастройки</name>
<id>3</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа пользовательских настроек</value>
</title>
<verticalStretch>false</verticalStretch>
<extendedTooltip>
<name>КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка</name>
<id>4</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Результат</name>
<id>5</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Результат</segments>
</dataPath>
<defaultItem>true</defaultItem>
<titleLocation>None</titleLocation>
<extendedTooltip>
<name>РезультатРасширеннаяПодсказка</name>
<id>7</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>РезультатКонтекстноеМеню</name>
<id>6</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>SpreadsheetDocumentField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:SpreadSheetDocFieldExtInfo">
<width>100</width>
<autoMaxWidth>true</autoMaxWidth>
<height>10</height>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<pointerType>Special</pointerType>
<verticalScrollBar>ScrollAuto</verticalScrollBar>
<horizontalScrollBar>ScrollAuto</horizontalScrollBar>
<selectionShowMode>Always</selectionShowMode>
<drawingSelectionShowMode>Auto</drawingSelectionShowMode>
<showGroups>true</showGroups>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
</extInfo>
</items>
<commandBarLocation>None</commandBarLocation>
<autoCommandBar>
<name></name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Отчет</name>
<id>1</id>
<valueType>
<types>ExternalReportObject.КоличествоСенасовЛицензий</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<attributes>
<name>Результат</name>
<title>
<key>ru</key>
<value>Результат</value>
</title>
<id>2</id>
<valueType>
<types>SpreadsheetDocument</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<extInfo xsi:type="form:SpreadsheetDocumentExtInfo"/>
</attributes>
<attributes>
<name>ДанныеРасшифровки</name>
<id>3</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ReportFormExtInfo">
<reportResult>Результат</reportResult>
<detailsInformation>ДанныеРасшифровки</detailsInformation>
<userSettingsGroup>КомпоновщикНастроекПользовательскиеНастройки</userSettingsGroup>
</extInfo>
</form:Form>

View File

@@ -0,0 +1,80 @@
#Область ДополнительныеОбработки
Функция СведенияОВнешнейОбработке() Экспорт
МассивНазначений = Новый Массив;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Количество сенасов лицензий");
ПараметрыРегистрации.Вставить("Версия", "2023.03.28");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", ИнформацияПоИсторииИзменений());
ПараметрыРегистрации.Вставить("ВерсияБСП", "1.2.1.4");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Количество сенасов лицензий",
"КоличествоСенасовЛицензий",
"ОткрытиеФормы",
Истина,
"",
"ФормаОтчета"
);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("ПросмотрВсе", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ИмяФормы", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "", ИмяФормы="",ПросмотрВсе=Истина)
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
НоваяКоманда.ИмяФормы = ИмяФормы;
НоваяКоманда.ПросмотрВсе = ПросмотрВсе;
КонецПроцедуры
Функция ИнформацияПоИсторииИзменений()
Возврат "
| <div style='text-indent: 25px;'>Данный отчет позволяет получить представление ио изменении производительности между двумя неделями - текущей и предыдущей</div>
| <hr />
| Подробную информацию смотрите по адресу интернет: <a target='_blank' href='https://github.com/Polyplastic/1c-parsing-tech-log'>https://github.com/Polyplastic/1c-parsing-tech-log</a>";
КонецФункции
Процедура ВыполнитьКоманду(Знач ИдентификаторКоманды, ПараметрыКоманды=Неопределено) Экспорт
Если ИдентификаторКоманды="" Тогда
// только при наличии параметров
Если ПараметрыКоманды=Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@@ -0,0 +1,314 @@
<?xml version="1.0" encoding="UTF-8"?>
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcscom="http://v8.1c.ru/8.1/data-composition-system/common" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataSource>
<name>ИсточникДанных1</name>
<dataSourceType>Local</dataSourceType>
</dataSource>
<dataSet xsi:type="DataSetQuery">
<name>НаборДанных1</name>
<field xsi:type="DataSetFieldField">
<dataPath>Свойство</dataPath>
<field>Свойство</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Минута</dataPath>
<field>Минута</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Минута</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ЗначениеЧисло</dataPath>
<field>ЗначениеЧисло</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Ключ</dataPath>
<field>Ключ</field>
</field>
<dataSource>ИсточникДанных1</dataSource>
<query>ВЫБРАТЬ
Свойства.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВтСвойства
ИЗ
Справочник.Свойства КАК Свойства
ГДЕ
Свойства.Наименование ПОДОБНО &amp;СвойствоСодержит
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СобытияЗамераКлючевыеСвойства.Ссылка.Ключ КАК Ключ,
СобытияЗамераКлючевыеСвойства.Свойство КАК Свойство,
НАЧАЛОПЕРИОДА(СобытияЗамераКлючевыеСвойства.Ссылка.ДатаСобытия, МИНУТА) КАК Минута,
СУММА(СобытияЗамераКлючевыеСвойства.ЗначениеЧисло) КАК ЗначениеЧисло
ИЗ
Справочник.СобытияЗамера.КлючевыеСвойства КАК СобытияЗамераКлючевыеСвойства
ГДЕ
СобытияЗамераКлючевыеСвойства.Ссылка.НомерСтрокиФайла = 0
И СобытияЗамераКлючевыеСвойства.Ссылка.ТипСобытия = &amp;ТипСобытия
И СобытияЗамераКлючевыеСвойства.Ссылка.ДатаСобытия МЕЖДУ &amp;ДатаНачала И &amp;ДатаОкончания
И СобытияЗамераКлючевыеСвойства.Свойство В
(ВЫБРАТЬ
Т.Ссылка
ИЗ
ВтСвойства КАК Т)
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(СобытияЗамераКлючевыеСвойства.Ссылка.ДатаСобытия, МИНУТА),
СобытияЗамераКлючевыеСвойства.Свойство,
СобытияЗамераКлючевыеСвойства.Ссылка.Ключ</query>
</dataSet>
<totalField>
<dataPath>ЗначениеЧисло</dataPath>
<expression>Сумма(ЗначениеЧисло)</expression>
</totalField>
<parameter>
<name>ДатаНачала</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Дата начала</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>true</useRestriction>
<expression>&amp;СтандартныйПериод.ДатаНачала</expression>
</parameter>
<parameter>
<name>ДатаОкончания</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Дата окончания</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>true</useRestriction>
<expression>&amp;СтандартныйПериод.ДатаОкончания</expression>
</parameter>
<parameter>
<name>ТипСобытия</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Тип события</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type xmlns:d4p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d4p1:CatalogRef.События</v8:Type>
</valueType>
<value xsi:nil="true"/>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>СтандартныйПериод</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Стандартный период</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>v8:StandardPeriod</v8:Type>
</valueType>
<value xsi:type="v8:StandardPeriod">
<v8:variant xsi:type="v8:StandardPeriodVariant">Custom</v8:variant>
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>СвойствоСодержит</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Свойство содержит</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</valueType>
<value xsi:type="xs:string"/>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:presentation xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество лицензий</v8:content>
</v8:item>
</dcsset:presentation>
<dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ЗначениеЧисло</dcsset:field>
</dcsset:item>
</dcsset:selection>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>ТипСобытия</dcscor:parameter>
<dcscor:value xsi:nil="true"/>
<dcsset:userSettingID>a977e37a-5be2-4537-8a9c-6af17efaaf09</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>СтандартныйПериод</dcscor:parameter>
<dcscor:value xsi:type="v8:StandardPeriod">
<v8:variant xsi:type="v8:StandardPeriodVariant">Today</v8:variant>
</dcscor:value>
<dcsset:userSettingID>2a7a5cb6-a0d5-474d-8e9d-17c13d87bf4c</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>СвойствоСодержит</dcscor:parameter>
<dcscor:value xsi:type="xs:string">%series -&gt;%</dcscor:value>
<dcsset:userSettingID>3f926319-1960-4d50-831e-db2bf5aae687</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:outputParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>ТипДиаграммы</dcscor:parameter>
<dcscor:value xsi:type="v8ui:ChartType">StackedArea</dcscor:value>
</dcscor:item>
</dcsset:outputParameters>
<dcsset:item xsi:type="dcsset:StructureItemChart">
<dcsset:point>
<dcsset:groupItems>
<dcsset:item xsi:type="dcsset:GroupItemField">
<dcsset:field>Минута</dcsset:field>
<dcsset:groupType>Items</dcsset:groupType>
<dcsset:periodAdditionType>None</dcsset:periodAdditionType>
<dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
<dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
</dcsset:item>
</dcsset:groupItems>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:point>
<dcsset:series>
<dcsset:groupItems>
<dcsset:item xsi:type="dcsset:GroupItemField">
<dcsset:field>Свойство</dcsset:field>
<dcsset:groupType>Items</dcsset:groupType>
<dcsset:periodAdditionType>None</dcsset:periodAdditionType>
<dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
<dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
</dcsset:item>
</dcsset:groupItems>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:series>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:item>
</dcsset:settings>
</settingsVariant>
<settingsVariant>
<dcsset:name>Вариант1</dcsset:name>
<dcsset:presentation xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество лицензий по серверам</v8:content>
</v8:item>
</dcsset:presentation>
<dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ЗначениеЧисло</dcsset:field>
</dcsset:item>
</dcsset:selection>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>ТипСобытия</dcscor:parameter>
<dcscor:value xsi:nil="true"/>
<dcsset:userSettingID>a977e37a-5be2-4537-8a9c-6af17efaaf09</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>СтандартныйПериод</dcscor:parameter>
<dcscor:value xsi:type="v8:StandardPeriod">
<v8:variant xsi:type="v8:StandardPeriodVariant">Today</v8:variant>
</dcscor:value>
<dcsset:userSettingID>2a7a5cb6-a0d5-474d-8e9d-17c13d87bf4c</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>СвойствоСодержит</dcscor:parameter>
<dcscor:value xsi:type="xs:string">%series -&gt;%</dcscor:value>
<dcsset:userSettingID>3f926319-1960-4d50-831e-db2bf5aae687</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:outputParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>ТипДиаграммы</dcscor:parameter>
<dcscor:value xsi:type="v8ui:ChartType">StackedArea</dcscor:value>
</dcscor:item>
</dcsset:outputParameters>
<dcsset:item xsi:type="dcsset:StructureItemChart">
<dcsset:point>
<dcsset:groupItems>
<dcsset:item xsi:type="dcsset:GroupItemField">
<dcsset:field>Минута</dcsset:field>
<dcsset:groupType>Items</dcsset:groupType>
<dcsset:periodAdditionType>None</dcsset:periodAdditionType>
<dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
<dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
</dcsset:item>
</dcsset:groupItems>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:point>
<dcsset:series>
<dcsset:groupItems>
<dcsset:item xsi:type="dcsset:GroupItemField">
<dcsset:field>Ключ</dcsset:field>
<dcsset:groupType>Items</dcsset:groupType>
<dcsset:periodAdditionType>None</dcsset:periodAdditionType>
<dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
<dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
</dcsset:item>
</dcsset:groupItems>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:series>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:item>
</dcsset:settings>
</settingsVariant>
</DataCompositionSchema>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ExternalReport xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="dc91809c-6b9f-421e-b943-1780d91778e9">
<producedTypes>
<objectType typeId="8661fefb-0dfa-4952-8ad5-271b59b4f2d2" valueTypeId="5875064e-2c24-4f9d-b2dd-0a37f92e56a9"/>
</producedTypes>
<name>КоличествоСенасовЛицензий</name>
<synonym>
<key>ru</key>
<value>Количество сенасов лицензий</value>
</synonym>
<containedObjects classId="e41aff26-25cf-4bb6-b6c1-3f478a75f374" objectId="b79918cd-d5cf-46f3-a5d1-67ef75c0b1e2"/>
<defaultForm>ExternalReport.КоличествоСенасовЛицензий.Form.ФормаОтчета</defaultForm>
<mainDataCompositionSchema>ExternalReport.КоличествоСенасовЛицензий.Template.ОсновнаяСхемаКомпоновкиДанных</mainDataCompositionSchema>
<forms uuid="54493068-6ebe-4adf-9d39-6b58c6b60eeb">
<name>ФормаОтчета</name>
<synonym>
<key>ru</key>
<value>Форма отчета</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="decba8ec-a2f4-4b55-8d20-99b54e94980a">
<name>ОсновнаяСхемаКомпоновкиДанных</name>
<synonym>
<key>ru</key>
<value>Основная схема компоновки данных</value>
</synonym>
<templateType>DataCompositionSchema</templateType>
</templates>
</mdclass:ExternalReport>

View File

@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormGroup">
<name>ОсновнаяКоманднаяПанель</name>
<id>1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Основная командная панель</value>
</title>
<extendedTooltip>
<name>ОсновнаяКоманднаяПанельРасширеннаяПодсказка</name>
<id>2</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Left</horizontalAlign>
<commandSource>Form</commandSource>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>КомпоновщикНастроекПользовательскиеНастройки</name>
<id>3</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа пользовательских настроек</value>
</title>
<verticalStretch>false</verticalStretch>
<extendedTooltip>
<name>КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка</name>
<id>4</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Результат</name>
<id>5</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Результат</segments>
</dataPath>
<defaultItem>true</defaultItem>
<titleLocation>None</titleLocation>
<extendedTooltip>
<name>РезультатРасширеннаяПодсказка</name>
<id>7</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>РезультатКонтекстноеМеню</name>
<id>6</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>SpreadsheetDocumentField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:SpreadSheetDocFieldExtInfo">
<width>100</width>
<autoMaxWidth>true</autoMaxWidth>
<height>10</height>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<pointerType>Special</pointerType>
<verticalScrollBar>ScrollAuto</verticalScrollBar>
<horizontalScrollBar>ScrollAuto</horizontalScrollBar>
<selectionShowMode>Always</selectionShowMode>
<drawingSelectionShowMode>Auto</drawingSelectionShowMode>
<showGroups>true</showGroups>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
</extInfo>
</items>
<commandBarLocation>None</commandBarLocation>
<autoCommandBar>
<name></name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Отчет</name>
<id>1</id>
<valueType>
<types>ExternalReportObject.КонтрольИзмененияПроизводительности</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<attributes>
<name>Результат</name>
<title>
<key>ru</key>
<value>Результат</value>
</title>
<id>2</id>
<valueType>
<types>SpreadsheetDocument</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<extInfo xsi:type="form:SpreadsheetDocumentExtInfo"/>
</attributes>
<attributes>
<name>ДанныеРасшифровки</name>
<id>3</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ReportFormExtInfo">
<reportResult>Результат</reportResult>
<detailsInformation>ДанныеРасшифровки</detailsInformation>
<userSettingsGroup>КомпоновщикНастроекПользовательскиеНастройки</userSettingsGroup>
</extInfo>
</form:Form>

View File

@@ -0,0 +1,80 @@
#Область ДополнительныеОбработки
Функция СведенияОВнешнейОбработке() Экспорт
МассивНазначений = Новый Массив;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Контроль изменения производительности");
ПараметрыРегистрации.Вставить("Версия", "2023.02.08");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", ИнформацияПоИсторииИзменений());
ПараметрыРегистрации.Вставить("ВерсияБСП", "1.2.1.4");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Контроль изменения производительности",
"КонтрольИзмененияПроизводительности",
"ОткрытиеФормы",
Истина,
"",
"ФормаОтчета"
);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("ПросмотрВсе", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ИмяФормы", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "", ИмяФормы="",ПросмотрВсе=Истина)
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
НоваяКоманда.ИмяФормы = ИмяФормы;
НоваяКоманда.ПросмотрВсе = ПросмотрВсе;
КонецПроцедуры
Функция ИнформацияПоИсторииИзменений()
Возврат "
| <div style='text-indent: 25px;'>Данный отчет позволяет получить представление ио изменении производительности между двумя неделями - текущей и предыдущей</div>
| <hr />
| Подробную информацию смотрите по адресу интернет: <a target='_blank' href='https://github.com/Polyplastic/1c-parsing-tech-log'>https://github.com/Polyplastic/1c-parsing-tech-log</a>";
КонецФункции
Процедура ВыполнитьКоманду(Знач ИдентификаторКоманды, ПараметрыКоманды=Неопределено) Экспорт
Если ИдентификаторКоманды="" Тогда
// только при наличии параметров
Если ПараметрыКоманды=Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@@ -0,0 +1,391 @@
<?xml version="1.0" encoding="UTF-8"?>
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcscom="http://v8.1c.ru/8.1/data-composition-system/common" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataSource>
<name>ИсточникДанных1</name>
<dataSourceType>Local</dataSourceType>
</dataSource>
<dataSet xsi:type="DataSetQuery">
<name>НаборДанных1</name>
<field xsi:type="DataSetFieldField">
<dataPath>День</dataPath>
<field>День</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>День</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ДеньПредНед</dataPath>
<field>ДеньПредНед</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>День пред нед</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>РазнДлитСек</dataPath>
<field>РазнДлитСек</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Разн длит сек</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ДлитСек</dataPath>
<field>ДлитСек</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Длит сек</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ЭкономияПревышениеСек</dataPath>
<field>ЭкономияПревышениеСек</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Экономия превышение сек</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ДлитПредНед</dataPath>
<field>ДлитПредНед</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Длит пред нед</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>РазнКолВо</dataPath>
<field>РазнКолВо</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Разн кол во</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>КолВо</dataPath>
<field>КолВо</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Кол во</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>КолВоПердНед</dataPath>
<field>КолВоПердНед</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Кол во перд нед</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ЭкономияПревышениеМин</dataPath>
<field>ЭкономияПревышениеМин</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Экономия превышение мин</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ЭкономияПревышениеЧас</dataPath>
<field>ЭкономияПревышениеЧас</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Экономия превышение час</v8:content>
</v8:item>
</title>
</field>
<dataSource>ИсточникДанных1</dataSource>
<query>ВЫБРАТЬ
НАЧАЛОПЕРИОДА(СобытияЗамера.ДатаСобытия, ДЕНЬ) КАК День,
СРЕДНЕЕ(СобытияЗамера.ДлительностьМкс / 1000000) КАК ДлительностьМксСред,
КОЛИЧЕСТВО(*) КАК КолВо
ПОМЕСТИТЬ ВтДанные
ИЗ
Справочник.СобытияЗамера КАК СобытияЗамера
ГДЕ
СобытияЗамера.Владелец = &amp;Владелец
И СобытияЗамера.ДатаСобытия МЕЖДУ ДОБАВИТЬКДАТЕ(&amp;ДатаНачало, ДЕНЬ, -&amp;СмещениеДней) И &amp;ДатаОкончания
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(СобытияЗамера.ДатаСобытия, ДЕНЬ)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВтДанные.День КАК День,
ВтДанные1.День КАК ДеньПредНед,
ВЫРАЗИТЬ(ВтДанные.ДлительностьМксСред КАК ЧИСЛО(15, 2)) КАК ДлитСек,
ВЫРАЗИТЬ(ВтДанные1.ДлительностьМксСред КАК ЧИСЛО(15, 2)) КАК ДлитПредНед,
ВЫРАЗИТЬ(ВтДанные.ДлительностьМксСред - ВтДанные1.ДлительностьМксСред КАК ЧИСЛО(15, 2)) КАК РазнДлитСек,
ВтДанные.КолВо КАК КолВо,
ВтДанные1.КолВо КАК КолВоПердНед,
ВтДанные.КолВо - ВтДанные1.КолВо КАК РазнКолВо,
(ВЫРАЗИТЬ(ВтДанные.ДлительностьМксСред - ВтДанные1.ДлительностьМксСред КАК ЧИСЛО(15, 2))) * (ВтДанные.КолВо - ВтДанные1.КолВо) КАК ЭкономияПревышениеСек,
ВЫРАЗИТЬ((ВтДанные.ДлительностьМксСред - ВтДанные1.ДлительностьМксСред) / 60 * (ВтДанные.КолВо - ВтДанные1.КолВо) КАК ЧИСЛО(15, 2)) КАК ЭкономияПревышениеМин,
ВЫРАЗИТЬ((ВтДанные.ДлительностьМксСред - ВтДанные1.ДлительностьМксСред) / 3600 * (ВтДанные.КолВо - ВтДанные1.КолВо) КАК ЧИСЛО(15, 2)) КАК ЭкономияПревышениеЧас
ИЗ
ВтДанные КАК ВтДанные
ЛЕВОЕ СОЕДИНЕНИЕ ВтДанные КАК ВтДанные1
ПО (ВтДанные1.День = ДОБАВИТЬКДАТЕ(ВтДанные.День, ДЕНЬ, -&amp;СмещениеДней))
ГДЕ
ВтДанные.День МЕЖДУ &amp;ДатаНачало И &amp;ДатаОкончания
УПОРЯДОЧИТЬ ПО
День</query>
</dataSet>
<totalField>
<dataPath>КолВо</dataPath>
<expression>Сумма(КолВо)</expression>
</totalField>
<totalField>
<dataPath>КолВоПердНед</dataPath>
<expression>Сумма(КолВоПердНед)</expression>
</totalField>
<totalField>
<dataPath>РазнДлитСек</dataPath>
<expression>Сумма(РазнДлитСек)</expression>
</totalField>
<totalField>
<dataPath>РазнКолВо</dataPath>
<expression>Сумма(РазнКолВо)</expression>
</totalField>
<totalField>
<dataPath>ЭкономияПревышениеМин</dataPath>
<expression>Сумма(ЭкономияПревышениеМин)</expression>
</totalField>
<totalField>
<dataPath>ЭкономияПревышениеСек</dataPath>
<expression>Сумма(ЭкономияПревышениеСек)</expression>
</totalField>
<totalField>
<dataPath>ЭкономияПревышениеЧас</dataPath>
<expression>Сумма(ЭкономияПревышениеЧас)</expression>
</totalField>
<totalField>
<dataPath>ДлитСек</dataPath>
<expression>Сумма(ДлитСек)</expression>
</totalField>
<totalField>
<dataPath>ДлитПредНед</dataPath>
<expression>Сумма(ДлитПредНед)</expression>
</totalField>
<parameter>
<name>Владелец</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Владелец</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type xmlns:d4p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d4p1:CatalogRef.Замеры</v8:Type>
</valueType>
<value xsi:nil="true"/>
<useRestriction>false</useRestriction>
<denyIncompleteValues>true</denyIncompleteValues>
</parameter>
<parameter>
<name>ДатаНачало</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Дата начало</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>true</useRestriction>
<expression>&amp;СтандартныйПериод.ДатаНачала</expression>
</parameter>
<parameter>
<name>ДатаОкончания</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Дата окончания</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>true</useRestriction>
<expression>&amp;СтандартныйПериод.ДатаОкончания</expression>
</parameter>
<parameter>
<name>СтандартныйПериод</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Стандартный период</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>v8:StandardPeriod</v8:Type>
</valueType>
<value xsi:type="v8:StandardPeriod">
<v8:variant xsi:type="v8:StandardPeriodVariant">Custom</v8:variant>
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
<denyIncompleteValues>true</denyIncompleteValues>
</parameter>
<parameter>
<name>СмещениеДней</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Смещение дней</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>0</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Any</v8:AllowedSign>
</v8:NumberQualifiers>
</valueType>
<value xsi:type="xs:decimal">7</value>
<useRestriction>false</useRestriction>
<availableValue>
<value xsi:type="xs:decimal">7</value>
</availableValue>
<availableValue>
<value xsi:type="xs:decimal">14</value>
</availableValue>
<availableValue>
<value xsi:type="xs:decimal">21</value>
</availableValue>
<availableValue>
<value xsi:type="xs:decimal">28</value>
</availableValue>
<denyIncompleteValues>true</denyIncompleteValues>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:presentation xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Контроль изменения</v8:content>
</v8:item>
</dcsset:presentation>
<dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>День</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ДеньПредНед</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ДлитСек</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ДлитПредНед</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>РазнДлитСек</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>КолВо</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>КолВоПердНед</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>РазнКолВо</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ЭкономияПревышениеЧас</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ЭкономияПревышениеМин</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ЭкономияПревышениеСек</dcsset:field>
</dcsset:item>
</dcsset:selection>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>Владелец</dcscor:parameter>
<dcscor:value xsi:nil="true"/>
<dcsset:userSettingID>18fe5efd-39e9-4c5e-a823-9f3467515d0f</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>СтандартныйПериод</dcscor:parameter>
<dcscor:value xsi:type="v8:StandardPeriod">
<v8:variant xsi:type="v8:StandardPeriodVariant">ThisWeek</v8:variant>
</dcscor:value>
<dcsset:userSettingID>b6cac906-c7ae-4b53-9831-f2fca8a173a6</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>СмещениеДней</dcscor:parameter>
<dcscor:value xsi:type="xs:decimal">7</dcscor:value>
<dcsset:userSettingID>8f5748b7-4d76-4d4b-8a26-d1cba5bc6278</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:outputParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>МакетОформления</dcscor:parameter>
<dcscor:value xsi:type="xs:string">Античный</dcscor:value>
</dcscor:item>
</dcsset:outputParameters>
<dcsset:item xsi:type="dcsset:StructureItemGroup">
<dcsset:groupItems>
<dcsset:item xsi:type="dcsset:GroupItemField">
<dcsset:field>День</dcsset:field>
<dcsset:groupType>Items</dcsset:groupType>
<dcsset:periodAdditionType>None</dcsset:periodAdditionType>
<dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
<dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
</dcsset:item>
<dcsset:item xsi:type="dcsset:GroupItemField">
<dcsset:field>ДеньПредНед</dcsset:field>
<dcsset:groupType>Items</dcsset:groupType>
<dcsset:periodAdditionType>None</dcsset:periodAdditionType>
<dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
<dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
</dcsset:item>
</dcsset:groupItems>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:item>
</dcsset:settings>
</settingsVariant>
</DataCompositionSchema>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ExternalReport xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fb5216ce-c552-4849-8750-806ad5f1a00e">
<producedTypes>
<objectType typeId="eeec8429-c12b-4b1f-a05d-83df8bb702aa" valueTypeId="131319a2-02cb-4cf1-83a0-e53e9ea77851"/>
</producedTypes>
<name>КонтрольИзмененияПроизводительности</name>
<synonym>
<key>ru</key>
<value>Контроль изменения производительности</value>
</synonym>
<containedObjects classId="e41aff26-25cf-4bb6-b6c1-3f478a75f374" objectId="fd3094ca-e1cd-4eb8-a44d-05d19dba230f"/>
<defaultForm>ExternalReport.КонтрольИзмененияПроизводительности.Form.ФормаОтчета</defaultForm>
<mainDataCompositionSchema>ExternalReport.КонтрольИзмененияПроизводительности.Template.ОсновнаяСхемаКомпоновкиДанных</mainDataCompositionSchema>
<forms uuid="ea32687f-9737-4ab5-82d2-0f1fbce8c7e7">
<name>ФормаОтчета</name>
<synonym>
<key>ru</key>
<value>Форма отчета</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="610badc4-8f37-454e-be1c-f0d825a75838">
<name>ОсновнаяСхемаКомпоновкиДанных</name>
<synonym>
<key>ru</key>
<value>Основная схема компоновки данных</value>
</synonym>
<templateType>DataCompositionSchema</templateType>
</templates>
</mdclass:ExternalReport>

View File

@@ -1,3 +1,3 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.17
Runtime-Version: 8.3.21
Store-Version: 1.0.0

View File

@@ -353,9 +353,14 @@
Если СледующаяСтрока <> Неопределено Тогда
ПрочитаноСтрок = ПрочитаноСтрок + 1;
Совпадения = Анализатор.Execute(СледующаяСтрока);
Если Совпадения.Count() = 0 Тогда
Совпадения = Неопределено;
Попытка
Совпадения = Анализатор.Execute(СледующаяСтрока);
Исключение
ТекстОшибки = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("РазобратьФайлВСправочник",УровеньЖурналаРегистрации.Ошибка,,Замер,ТекстОшибки);
КонецПопытки;
Если Совпадения=Неопределено ИЛИ Совпадения.Count() = 0 Тогда
// если следующая строка не соответствует шаблону - добавляем ее к текущей строке и пытаемся распознать объединенную часть
СтрокаТекста = СтрокаТекста + Символы.ПС + СледующаяСтрока; //#11 сохраняем переносы строк
Продолжить;
@@ -371,8 +376,15 @@
Длительность = Число(Совпадение.SubMatches.Item(3));
ИмяСобытия = Совпадение.SubMatches.Item(4);
УровеньСобытия = Совпадение.SubMatches.Item(5);
Иначе
ВызватьИсключение "Нет соответствия шаблону! " + СтрокаТекста;
Иначе
ТекстОшибки = "ERROR - Нет соответствия шаблону! "+Символы.ПС;
ТекстОшибки = ТекстОшибки+" Имя файла: "+ИмяФайлаДляРазбора+Символы.ПС;
ТекстОшибки = ТекстОшибки+" Прочитано строк: " + ПрочитаноСтрок+Символы.ПС;
ТекстОшибки = ТекстОшибки+" Текст: " + Лев(СтрокаТекста,300)+"...";
ЗаписьЖурналаРегистрации("РазобратьФайлВСправочник",УровеньЖурналаРегистрации.Ошибка,,Замер,ТекстОшибки);
ОбработатьСбойныйЗамер(СтрокаТекста,СтруктураЗаписи,ПрочитаноСтрок,ПериодФайла);
СтрокаТекста = СледующаяСтрока;
Продолжить;
КонецЕсли;
//фильтр длительность
@@ -440,12 +452,12 @@
ЗначениеСвойства = ЗначениеСвойстваБезЭкранирования(Совпадение.SubMatches.Item(1));
Если ЗаменитьДвойныеКавычкиВДвойныхКавычках Тогда
//обратно заменяем на ОДНУ двойную кавычку
ЗначениеСвойства = СтрЗаменить(ЗначениеСвойства, ЗаменительДвойныхКавычек, """");
ЗначениеСвойства = СтрЗаменить(ЗначениеСвойства, ЗаменительДвойныхКавычек, """""");
КонецЕсли;
Если ЗаменитьОдитнарныеДвойныеКавычкиВОдинарныхДвойныхКавычках Тогда
//обратно заменяем на ОДНУ двойную кавычку
ЗначениеСвойства = СтрЗаменить(ЗначениеСвойства, ЗаменительДвойныхОдинарныхКавычек, "'");
ЗначениеСвойства = СтрЗаменить(ЗначениеСвойства, ЗаменительДвойныхОдинарныхКавычек, "''");
КонецЕсли;
Отказ = Ложь;
@@ -458,9 +470,11 @@
КонецЕсли;
КонецЦикла;
СтруктураЗаписи.ВсеСвойства = СтрокаТекста; //сохраним в оригинале
СтруктураЗаписи.ВсеСвойства = СтрЗаменить(СтруктураЗаписи.ВсеСвойства, ЗаменительДвойныхКавычек, """""");
СтруктураЗаписи.ВсеСвойства = СтрЗаменить(СтруктураЗаписи.ВсеСвойства, ЗаменительДвойныхОдинарныхКавычек, "''");
КонецЕсли;
Справочники.СобытияЗамера.ЗаписатьСобытие(СтруктураЗаписи);
Справочники.СобытияЗамера.ЗаписатьСобытиеЧисло(СтруктураЗаписи);
СтрокаТекста = СледующаяСтрока;
КонецЦикла;
@@ -479,6 +493,19 @@
Возврат 0;
КонецФункции
Процедура ОбработатьСбойныйЗамер(СтрокаТекста,СтруктураЗаписи,ПрочитаноСтрок,ПериодФайла)
СтруктураЗаписи.НомерСтрокиФайла = ПрочитаноСтрок;
СтруктураЗаписи.ТипСобытия = "";
СтруктураЗаписи.ДатаСобытия = ПериодФайла;
СтруктураЗаписи.ДатаСобытияМкс = 0;
СтруктураЗаписи.УровеньСобытия = 0;
СтруктураЗаписи.ДлительностьМкс = 0;
СтруктураЗаписи.КлючевыеСвойства.Очистить();
Справочники.СобытияЗамера.ЗаписатьСобытиеЧисло(СтруктураЗаписи);
КонецПроцедуры
Процедура ВыполнитьНормализациюЗначенияСвойства(СтруктураЗаписи, Свойство, ЗначениеСвойства, Отказ)
НастройкиНормализации = СправочникиСерверПовтИсп.РеквизитыСвойства(Свойство);
Если НастройкиНормализации.НормализацияЗначения Тогда

View File

@@ -167,7 +167,7 @@
Если ТипЗамера=ПредопределенноеЗначение("Перечисление.ТипыЗамеров.ТехнологическийЖурнал") Тогда
Для Каждого строкарезультата Из ФайлыДляЗагрузки Цикл
ОбновлениеДанных.РазобратьФайлВСправочник(Замер, строкарезультата.ПолноеИмя);
Ответ = ОбновлениеДанных.РазобратьФайлВСправочник(Замер, строкарезультата.ПолноеИмя);
КонецЦикла;
ИначеЕсли ТипЗамера=ПредопределенноеЗначение("Перечисление.ТипыЗамеров.PerfomanceMonitor") Тогда
Для Каждого строкарезультата Из ФайлыДляЗагрузки Цикл