Встала задача замерить производительность открытия документов, отчетов и пр.
Стандартный ADPEX вполне походил для задачи, однако, серверный вариант замера производительности не удобен для управляемых форм. Пришлось немного допилить его.
Добавляем в серверный модуль
#Область ОценкаПроизводительности
Функция ОП_СодержитСвойство(Переменная, ИмяСвойства)
// Инициализируем структуру для теста с ключом (значение переменной "ИмяСвойства") и значением NULL
СтруктураПроверка = Новый Структура;
СтруктураПроверка.Вставить(ИмяСвойства, NULL);
// Заполняем созданную структуру из переданного значения переменной
ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная);
// Если значение для свойства структуры осталось NULL, то искомое свойство не найдено, и наоборот.
Если СтруктураПроверка[ИмяСвойства] = NULL Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
Процедура ОП_НачатьЗамерФорма(Форма) Экспорт
Если НЕ ОП_СодержитСвойство(Форма, "ИМС_ЗамерПроизводительности") Тогда
ОписаниеТипа = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(14, 0, ДопустимыйЗнак.Неотрицательный));
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("ИМС_ЗамерПроизводительности", ОписаниеТипа));
Форма.ИзменитьРеквизиты(Реквизиты);
КонецЕсли;
Форма.ИМС_ЗамерПроизводительности = ОценкаПроизводительности.НачатьЗамерВремени();
КонецПроцедуры
Процедура ОП_ЗавершитьЗамерФорма(Форма, Операция = ".Открытие") Экспорт
Объект = Форма.РеквизитФормыВЗначение("Объект");
ИмяОбъекта = Объект.Метаданные().Имя;
ОценкаПроизводительности.ЗакончитьЗамерВремени("Имс:"+ИмяОбъекта+Операция,Форма.ИМС_ЗамерПроизводительности);
КонецПроцедуры
#КонецОбласти |
#Область ОценкаПроизводительности
Функция ОП_СодержитСвойство(Переменная, ИмяСвойства)
// Инициализируем структуру для теста с ключом (значение переменной "ИмяСвойства") и значением NULL
СтруктураПроверка = Новый Структура;
СтруктураПроверка.Вставить(ИмяСвойства, NULL);
// Заполняем созданную структуру из переданного значения переменной
ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная);
// Если значение для свойства структуры осталось NULL, то искомое свойство не найдено, и наоборот.
Если СтруктураПроверка[ИмяСвойства] = NULL Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
Процедура ОП_НачатьЗамерФорма(Форма) Экспорт
Если НЕ ОП_СодержитСвойство(Форма, "ИМС_ЗамерПроизводительности") Тогда
ОписаниеТипа = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(14, 0, ДопустимыйЗнак.Неотрицательный));
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("ИМС_ЗамерПроизводительности", ОписаниеТипа));
Форма.ИзменитьРеквизиты(Реквизиты);
КонецЕсли;
Форма.ИМС_ЗамерПроизводительности = ОценкаПроизводительности.НачатьЗамерВремени();
КонецПроцедуры
Процедура ОП_ЗавершитьЗамерФорма(Форма, Операция = ".Открытие") Экспорт
Объект = Форма.РеквизитФормыВЗначение("Объект");
ИмяОбъекта = Объект.Метаданные().Имя;
ОценкаПроизводительности.ЗакончитьЗамерВремени("Имс:"+ИмяОбъекта+Операция,Форма.ИМС_ЗамерПроизводительности);
КонецПроцедуры
#КонецОбласти
Дальше, добавляем новое расширение конфигурации. В расширение добавляем требуемые формы документов и на форме:
&НаСервере
Процедура ОП_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
РУ.ОП_НачатьЗамерФорма(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОП_ПриОткрытии(Отказ)
ОП_ПриОткрытииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОП_ПриОткрытииНаСервере()
РУ.ОП_ЗавершитьЗамерФорма(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ОП_ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
РУ.ОП_НачатьЗамерФорма(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОП_ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
РУ.ОП_ЗавершитьЗамерФорма(ЭтаФорма,".Проведение");
КонецЕсли;
КонецПроцедуры |
&НаСервере
Процедура ОП_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
РУ.ОП_НачатьЗамерФорма(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОП_ПриОткрытии(Отказ)
ОП_ПриОткрытииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОП_ПриОткрытииНаСервере()
РУ.ОП_ЗавершитьЗамерФорма(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ОП_ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
РУ.ОП_НачатьЗамерФорма(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОП_ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
РУ.ОП_ЗавершитьЗамерФорма(ЭтаФорма,".Проведение");
КонецЕсли;
КонецПроцедуры
Главное, не забыть снять флаг “Безопасный режим” с расширения. Замеры производительности в безопасном режиме не работают.