Имя: Пароль:
1C
1С v8
Определить длительность формирования отчета.
0 Bodrug
 
16.12.19
13:54
Всем добрый день!
Стоит задача определить сколько времени формируется тот или иной отчет. Пробовал сделать следующим образом:
- создал РС "Использование отчетов", в нем сделал несколько измерений, среди них "ДатаНачалаФормирования" и "ДатаОкончанияФормирования".
- в модуле объекта отчета добавил след. код:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    Запись = ОтразитьНачалоИспользованиеОтчета();
    
    ткУправлениеВыводомИнформацииСервер.УстановитьДатыЗапретаВОтчете(КомпоновщикНастроек);
        
    Параметр = НастройкаПараметра("ПоказыватьПродажи");
    Параметр.Использование = Истина;
    
    Параметр = НастройкаПараметра("ПланируемыеПродажи");
    Параметр.Использование = Истина;
    ПараметрВключаяЗапланированныеПродажи = НастройкаПараметра("ВключаяЗапланированныеПродажи");
    Если ПараметрВключаяЗапланированныеПродажи.Использование
     И ПараметрВключаяЗапланированныеПродажи.Значение Тогда
        Параметр.Значение = Истина;
    Иначе
        Параметр.Значение = Ложь;
    КонецЕсли;
    
    Параметр = НастройкаПараметра("ПланируемыеРасходы");
    Параметр.Использование = Истина;
    ПараметрВключаяЗапланированныеРасходы = НастройкаПараметра("ВключаяЗапланированныеРасходы");
    Если ПараметрВключаяЗапланированныеРасходы.Использование
     И ПараметрВключаяЗапланированныеРасходы.Значение Тогда
        Параметр.Значение = Истина;
    Иначе
        Параметр.Значение = Ложь;
    КонецЕсли;
    
    Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВалютаУправленческогоУчета"));
    Если Параметр <> Неопределено Тогда
        Параметр.Значение = Константы.ВалютаУправленческогоУчета.Получить();
        Параметр.Использование = Истина;
    КонецЕсли;
    
    ДатаНачала = Дата(1, 1, 1);
    ДатаОкончания = Дата(2399, 1, 1);
    
    ПараметрПериод = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
    Если ПараметрПериод <> Неопределено
       И ПараметрПериод.Использование Тогда
        ДатаНачала = НачалоМесяца(ПараметрПериод.Значение.ДатаНачала);
        ДатаОкончания = КонецМесяца(ПараметрПериод.Значение.ДатаОкончания);
    КонецЕсли;
    
    ПараметрДатаНачала = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаНачала"));
    Если ПараметрДатаНачала <> Неопределено Тогда
        ПараметрДатаНачала.Значение = ДатаНачала;
        ПараметрДатаНачала.Использование = Истина;
    КонецЕсли;
    
    ПараметрДатаОкончания = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаОкончания"));
    Если ПараметрДатаОкончания <> Неопределено Тогда
        ПараметрДатаОкончания.Значение = ДатаОкончания;
        ПараметрДатаОкончания.Использование = Истина;
    КонецЕсли;
    
    СегментыСервер.ВключитьОтборПоСегментуПартнеровВСКД(КомпоновщикНастроек);                            
    СегментыСервер.ВключитьОтборПоСегментуНоменклатурыВСКД(КомпоновщикНастроек);                                
    
    ОтразитьОкончаниеИспользованиеОтчета(Запись);
    
КонецПроцедуры

Функция ОтразитьНачалоИспользованиеОтчета()
    
    Запись = РегистрыСведений.ИспользованиеОтчетов.СоздатьМенеджерЗаписи();
    Запись.Период = ТекущаяДатаСеанса();
    
    Запись.ДатаНачалаФормирования = ТекущаяДатаСеанса();
    Запись.Отчет = ЭтотОбъект.Метаданные().Представление();
    Если ЭтотОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.Количество() > 0 Тогда
        Запись.ВариантОтчета = ЭтотОбъект.СхемаКомпоновкиДанных.ВариантыНастроек[0].Представление;
    КонецЕсли;
    Запись.Пользователь = ПараметрыСеанса.ТекущийПользователь;
    Возврат Запись;
    
КонецФункции

Процедура ОтразитьОкончаниеИспользованиеОтчета(Запись)
    
    Запись.ДатаОкончанияФормирования = ТекущаяДатаСеанса();
    Запись.Записать(Ложь);
    
КонецПроцедуры

Функция НастройкаПараметра(ИмяПараметра)

    ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
    Если ПараметрДанных <> Неопределено Тогда
        ПараметрПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки);
        Если ПараметрПользовательскойНастройки <> Неопределено Тогда
            Возврат ПараметрПользовательскойНастройки;
        Иначе
            Возврат ПараметрДанных;
        КонецЕсли;
    КонецЕсли;
    Возврат Неопределено;

КонецФункции


И несмотря на то, что отчет по факту может формироваться несколько минут, все равно в регистре ДатаНачалаФормирования и ДатаОкончанияФормирования равны до секунд.
Подскажите, пожалуйста, как отловить момент реального окочания формирования отчета?
1 Strogg
 
16.12.19
13:55
о боже мой. А замер производительности почему бы не сделать???
2 Bodrug
 
16.12.19
13:58
Суть задачи немного шире. В базе есть много отчетов, у которых есть много вариантов. И не все из них используются. Сделали регистр, чтобы туда писать, какие отчеты сейчас используют и в каких вариантах. Спутся какое-то время проанализируем, что не используется будем приводить в порядок
3 Strogg
 
16.12.19
14:00
(2). Да, недочитал немного. а зачем тебе время начала и время окончания? Просто сделай счетчик формирования нетиповых отчетов с вариантами. А уж сколько по времени они формируются, зачем?
4 Жан Пердежон
 
16.12.19
14:03
(2) бсп почитай, всё уже сделано
5 Bodrug
 
16.12.19
14:04
(3) База очень большая, и есть отчеты, которые формируются непростительно долго или вообще вылетают с ошибкой нехватки памяти. Надо понимать, какие отчеты надо оптимизировать. Для этого нам и надо время формирования.
6 Алексей_Р
 
17.12.19
05:00
Консоль заданий (ргел. и фон. задания) - Фоновые задания.

Есть столбцы Начало и Конец.
7 vicof
 
17.12.19
05:05
(4) +1
8 Алексей_Р
 
17.12.19
05:26
(4) а где именно "почитать" ?
9 vicof
 
17.12.19
06:11
(8) На ИТС
10 vicof
 
17.12.19
06:12
11 Алексей_Р
 
17.12.19
09:29
Это?

НачатьЗамерВремени
Начинает замер времени ключевой операции. Закончить замер нужно явно вызовом
процедуры ЗакончитьЗамерВремени или ЗакончитьЗамерВремениТехнологический.

Ну что ж, придется БСП внедрять)
12 palsergeich
 
17.12.19
11:56
(11) оно самое
13 palsergeich
 
17.12.19
11:57
(11) для ленивых можно взять подсистему Гилева, в  ней нет лишних зависимостей и не прийдется треть БСП брать, а результат тот же
14 palsergeich
 
17.12.19
11:58
(13) за пару часиков можно апдексный отчёт 1с переделать под данные из регистра Гилева, я такое уже делал