Сворачивание активности пользователя
// если объектов в списке активности пользователя много(более 10000), это скажется на скорости работы программы.
// данный скрипт перемещает объекты списка в отдельный список и сворачивает по классу окна
// примерное время выполнения скрипта 3 минуты
Сообщения.Очистить();
Статистика = Этот.Владелец.Определить(0, Объекты.Группа, Свойства.Наименование, "Статистика");
Активность = Этот.Владелец.Определить(Статистика, Объекты.Сведения, Свойства.Наименование, "Активность пользователя");
Данные = Активность.Определить(0, Объекты.Список, Свойства.Наименование, "Данные");
Сообщить("Количество объектов в списке активности", Данные.Количество());
Если (Данные.Количество()<5000) Тогда Возврат; Конец;
Архив = Этот.Владелец.Определить(Активность, Объекты.Сведения, Свойства.Наименование, "Архив активности");
Список = Архив.Определить(0, Объекты.Список, Свойства.Наименование, "Данные");
// для проверки сохраним общий интервал
ОбщийИнтервал = Данные.Итог("Интервал")+ Список.Итог("Интервал");
Архив.'Наименование поля с моментом' = "Дата";
Архив.'Наименование поля с итогом' = "Интервал";
Архив.'Наименование поля с аналитикой' = "Класс окна";
Архив.'Сортировать по итогу' = 1;
Список.Колонки.Определить(Свойства.Дата);
Список.Колонки.Определить(Свойства.'Класс окна');
Список.Колонки.Определить(Свойства.Интервал);
н = 0;
Перенесено = 0;
кондата = Моменты.НачалоМесяца(Моменты.Текущий, 3); // переносить будем данные старее трех месяцев
Сообщить("Переносим данные до даты", кондата);
Сообщить(" некоторые классы окон объединяем...");
Для Объект Из Данные Цикл
м = Моменты.НачалоДня(Объект.'Момент времени начала');
Если (м<кондата) Тогда
ОбъектНовый = Список.Добавить(Объекты.Объект);
ОбъектНовый.Дата = м;
ОбъектНовый.Интервал = Объект.Интервал;
класс = Объект.'Класс окна';
Если (Строки.Найти(класс, "Afx")==1) Тогда класс = "Afx"; Конец;
Если (Строки.Найти(класс, "V8NewLocalFrameBaseWnd")==1) Тогда класс = "V8TopLevelFrame"; Конец;
Если (Строки.Найти(класс, "V8NewLocalFrame")==1) Тогда класс = "V8TopLevelFrame"; Конец;
Если (Строки.Найти(класс, "V8PopupBar")==1) Тогда класс = "V8TopLevelFrame"; Конец;
Если (Строки.Найти(класс, "MozillaUIWindowClass")==1) Тогда класс = "MozillaWindowClass"; Конец;
ОбъектНовый.'Класс окна' = класс;
Объект.Неиспользуемый = 1;
Перенесено = Перенесено + 1;
Конец;
н = н + 1;
Конец;
Если (Перенесено>0) Тогда
Данные.Удалить("Неиспользуемый", 1); // удаляем из объекта"Активность пользователя"старые данные
Свернуто = Список.Свернуть("Дата,Класс окна", "Интервал");
Сообщить("Перенесено", Перенесено);
Сообщить("Свернуто", Свернуто);
Если (ОбщийИнтервал<>(Данные.Итог("Интервал")+Список.Итог("Интервал"))) Тогда
Сообщить("Общий интервал не равен!");
Конец;
Конец;
Сообщить("Скрипт выполнен, осталось объектов", Данные.Количество());