Панель « Замер производительности »
Панель Замер производительности показывает результаты замера производительности, выполненного в процессе отладки.

Эта панель открывается автоматически после завершения замера (когда отжата кнопка Замер производительности в командной панели основного окна). При этом результаты замера автоматически сохраняются в рабочей области и могут быть использованы для просмотра в будущем, сравнения или для экспорта в другой проект. Каждый замер имеет стандартное имя, которое вы можете изменить.
Также вы можете открыть эту панель самостоятельно из главного меню основного окна, нажав Окно > Показать панель > Прочие… > 1С:Предприятие > Замер производительности .
Структура информации в панели
Стандартно результаты замера производительности представлены в виде списка выполнявшихся операторов, в котором, помимо оператора (колонка Строка ), указаны модуль (колонка Модуль ) и номер строки (колонка № строки ), в которой расположен этот оператор.
Помимо этого вы можете отобразить результаты замера в более общем виде — в виде списка методов, которые выполнялись. Этот список вы можете дополнительно сгруппировать по модулям.
Условные обозначения
Код выполняется на клиенте.
В процессе выполнения кода происходит обращение к серверу
Код выполняется на сервере.
В колонке Чистое время (с) цветом и шириной фона обозначается доля (процент), которую занимает выполнение данной строки в общем времени замера.
Стандартное имя текущего замера производительности. Состоит из имени проекта (ДемоУП_14), даты замера (15:44:11, Пт, 30 авг 2019) и предметов отладки (Тонкий клиент). К стандартному имени вы можете добавить свой префикс. Из выпадающего списка вы можете выбрать один из имеющихся в рабочей области замеров производительности для того, чтобы показать его результаты в панели.
Колонки
Модуль Модуль, которому принадлежит строка кода. Эта колонка показывается, если результаты замера представлены в виде таблицы операторов. № строки Номер строки в модуле. Эта колонка показывается, если результаты замера представлены в виде таблицы операторов. Строка Строка кода, которая выполнялась. Эта колонка показывается, если результаты замера представлены в виде таблицы операторов. Метод Метод, который выполнялся. Эта колонка показывается, если результаты замера представлены в виде списка методов. Кол-во вызовов Сколько раз выполнялась данная строка кода за время замера. Полное время (с) Полное время выполнения строки кода. Оно складывается из времени вызова метода (не показывается в таблице) и чистого времени выполнения оператора, которое показывается в колонке Чистое время (с) . Чистое время (с) Чистое время выполнения оператора (без учета времени вызова процедуры или функции). Также в этой колонке показывается доля (в процентах), которую заняло выполнение этого оператора в общем времени замера. Клиент В этой колонке пиктограммой
отмечаются строки, выполнявшиеся на клиенте. Сервер В этой колонке пиктограммой
отмечаются строки, выполнявшиеся на сервере. Вызов сервера В этой колонке пиктограммой
отмечаются строки, выполнение которых привело к вызову сервера.
Клики мышью
Командная панель

Переименовать результат Позволяет добавить произвольную строку в начало стандартного имени замера.
Сравнить с. Позволяет сравнить текущий замер производительности с другим замером.
Импорт результатов замеров Импортирует результаты замеров производительности в 1C:EDT .
Экспорт результатов замеров Экспортирует результаты замеров производительности из 1C:EDT .
Очистить результаты Очищает панель Замер производительности и историю замеров.
Развернуть все Раскрывает все уровни иерархии в панели.
Свернуть все Сворачивает все уровни иерархии, существующие в панели, до первого уровня.
Группировать методы по модулям Группирует методы по модулям в том случае, если результаты замера представлены в виде списка методов.
Результаты клиента Если нажата, показываются операторы, выполняемые на клиенте и, возможно, выполняемые на сервере (если нажата
). Если отжата — показываются только операторы, выполняемые на сервере.
Результаты сервера Если нажата, показываются операторы, выполняемые на сервере и, возможно, выполняемые на клиенте (если нажата
). Если отжата — показываются только операторы, выполняемые на клиенте.
Табличное представление Результаты замера представляются в виде таблицы выполнявшихся операторов с колонками Модуль , № строки и Строка .
Список методов Результаты замера представлены в виде списка выполнявшихся методов. Вы можете сгруппировать этот список по модулям.
Оценка производительности работы кода
В этой статье мы научимся делать замеры производительности работы 1С: Предприятия. Оценку производительности можно выполнять как в целом для всего приложения, начиная с момента его запуска и заканчивая закрытием, так и отдельного куска кода, если Вы хотите замерить одно какое-то узкое место. Все примеры по замерам производительности я буду показывать на демонстрационной конфигурации «Управляемое приложение 1С».
Научимся делать замер производительности всего приложения в целом от начала работы, до конца. Для этого необходимо запустить 1С: Предприятие в режиме конфигуратор, и в меню Отладка выбрать пункт «Замер производительности»

После этого выйдет сообщение о том, что нужно включить замер производительности, который начнется сразу после отладки

Соглашаемся, запускаем отладку (клавиша F5) и работаем. Конфигуратор 1С в это время должен быть включен!
Подробно о работе с отладкой читайте в этой статье:
Отладка в конфигураторе 1С
После того как Вы все сделаете и закроете 1С: Предприятие в пользовательском режиме, то откроется окно замера производительности.

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

Что бы его снять, нужно опять нажать на этот пункт меню.
Узнаем, как делать замер производительности в конкретном месте кода. Для этого откроем модуль документа «Поступление Денег» и установим точки останова в начале процедуры проведения и в конце.

После этого запустим отладку и попытаемся провести документ Оплата, а когда первая точка останова сработает, перейдем в меню «Отладка», где нажимаем уже знакомую нам кнопку «Замер производительности» 
После того как запустили замер производительности, нужно продолжить отладку с помощью соответствующей кнопки или клавиши F5. Как сработает вторая точка останова, вернемся в меню отладка и заново нажмем на кнопку «Замер производительности»
После этого откроется окно результатов замера, и форма в конфигураторе 1С приобретет следующий вид.
Разберемся с этим окном, для большей наглядности сделаем замер производительности для обработки замены товара в табличной части документа «Приход товара» 

Смотрите на последний рисунок, как видно, строк в таблице замера больше, чем строк в самом обработчике, который мы замеряли. Это потому что в таблицу замеров входят не только строки выделенного фрагмента кода, но и строки процедур и функций, которые в этом коде вызываются. В нашем случае это две функции ПолучитьТекущуюСтрокуТовары и ПолучитьЦенуТовар.
Строки 16,17, 20, 22 относятся к функции ПолучитьЦенуТовара, а строки 33,34 – ПолучитьТекущуюСтрокуТовары. Если мы кликнем по нужной строке мышкой, то перейдем на эту строку в модуле.
Разберем некоторые колонки:
«Кол» — в этой колонке указано сколько раз выполнялась данная строка
«Время чистое» — время в секундах, которое было потрачено на выполнение данной строки, в данном случае берется суммарное время, т.е. все время, когда строка вызывалась.
«% времени» — отношение «Время чистое» к общему времени выполнения замера. Причем за 100% принимается выполнение кода на клиент. Т.е. корректно эта колонка работает когда мы начали на клиенте и закончили на клиенте, а если мы начали на сервере, а закончили на клиенте, то результат может быть не всегда корректен.
На отображение в колонках «Время чистое» и «% времени» влияет флаг «Для вызова процедур и функций включать время выполнения». Этот флаг нужно включать, когда мы хотим показать время на вызов процедуры или функции.
После того как мы установили этот флаг, поменялись значения в колонках «Время» и «% времени». Т.е. мы увидели, сколько относительного и абсолютного времени в целом тратиться на эту строку
Стр.Цена = ПолучитьЦенуТовара(Объект.Дата, Стр.Товар);
Разберемся, откуда взялась цифра 98,64% – время выполнения этой строки.
Если сложить проценты времени на выполнение кода в процедуре ПолучитьЦенуТовара, а это строки 16, 17, 20 и 22, будет — 86,41 %, но на рисунке мы видим, что исполнение процедуры занимает 98,64 % общего времени. Где еще 98,64 – 86,41 = 12,23 процента? Посмотрите на предыдущий рисунок, 12.23% — это именно время на вызов серверной процедуры.
Таким образом, если установлен флаг «Для вызова процедур и функций включать время выполнения» то показывает относительное и абсолютное время выполнения и вызова процедуры или функции. В тоже время если этот флаг снят, то показывается время только на вызов метода. Поскольку вызов любой серверной процедуры или функции (без разницы в контексте она формы, или внеконтекстная) требует определенных затрат, то информации о продолжительности вызова метода может быть очень полезной.
С остальными колонками все более менее понятно. Колонка «Клиент» при помощи специальной пиктограммы указывает, что строка выполняется на клиенте. А колонка «Сервер» указывает, что строка выполняется на сервере. Колонка «Обр. сервер» указывает, что в данной строке происходит передача управления на сервер.
Так же имейте ввиду, что часть информации из таблицы замеров дублируется в модуле. Цифры процентов в этом случае идентичны цифрам, когда флаг «Для вызова процедур и функций включать время выполнения» снят.

И на последок отмечу, когда будите делать замеры тех или иных процессов, имейте ввиду что скорость выполнения зависит от многих факторов (загруженность процессора, оперативной памяти). Поэтому желательно делать несколько разных замеров, что бы вычислить среднюю величину и исключить случайные скачки.
Пять эффективных инструмента отладки
Я стараюсь как можно чаще выпускать различные интересные бесплатные статьи и видеоуроки. Поэтому буду очень рад, если Вы поддержите мой проект перечислив любую сумму:
Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Как использовать подсистему «Оценка производительности» для измерения времени операций (статья + видео)
В предыдущей статье мы рассказали, почему важны замеры производительности 1С и как их выполнить с помощью APDEX.
Теперь разберем, как измерить фактическое время операций. Чтобы не разрабатывать механизм замеров с нуля, воспользуемся подсистемой Оценка производительности из Библиотеки стандартных подсистем (БСП).
Отметим, что при первом запуске конфигурации после внедрения подсистемы Оценка производительности из БСП версии 3.1.5.171 и выше возникает ошибка. Почему так происходит и как это исправить, мы также разберем – в коротком видео, которое также опубликовано на этой странице.
Использование подсистемы оценки производительности в типовых конфигурациях
У подсистемы Оценки производительности есть одно очень важное преимущество перед аналогами. Она уже включена во все основные типовые конфигурации, и для ее использования нужно только установить флаг в настройках.
Продемонстрируем это на примере конфигурации 1С:Бухгалтерия 8, редакции 3.
Для того чтобы включить замеры, заходим в раздел Администрирование — Обслуживание. Находим подраздел под названием Оценка производительности.

Рисунок 1. Включение оценки производительности в 1С:Бухгалтерии 8
Устанавливаем флаг, и замеры производительности запускаются автоматически.
Обратите внимание на гиперссылку Настройки. Перейдя по ней, можно настроить период записи пакета замеров в регистр сведений Замеры времени и количество замеров в каждом записываемом пакете.
Дело в том, что замеры записываются в регистр сведений не по отдельности, а пакетами. Сделано это, чтобы оптимизировать нагрузку на систему.

Рисунок 2. Настройки оценки производительности в 1С:Бухгалтерия
После установки флага Оценка производительности в разделе Администрирование становится доступен отчет Оценка производительности.
Если отчет не виден в интерфейсе, то следует нажать на шестеренку в правом верхнем углу и выбрать пункт меню Настройка действий.
В открывшемся окне, в левой части, находим отчет Оценка производительности и перетаскиваем его в правую часть (либо нажимаем кнопку Добавить). Отчет станет виден в интерфейсе.

Рисунок 3. Настройки панели действий раздела Администрирование
Для оценки производительности в конфигурации 1С:Бухгалтерия 8 разработчиками заложено огромное количество ключевых операций:
- время проведения документов,
- время открытия форм,
- время формирования отчетности
- и много других.
Для того чтобы не выводить в отчете Оценка производительности сразу все ключевые операции, используется их разделение по профилям. В каждом профиле указывается отдельный список ключевых операций, которые потом выводятся в отчете.
Создадим профиль с единственной ключевой операцией Проведение реализация товаров и услуг, проведем несколько реализаций и сформируем отчет:

Рисунок 4. Отчет Оценка производительности по ключевым операциям
(нажмите, чтобы увеличить картинку)
Как видно из отчета, при целевом времени проведения реализации в 3 сек., среднее время проведения реализации составило 2,636 сек., что соответствует индексу APDEX, равному единице — оптимизация проведения этого документа не требуется.
Внедрение подсистемы оценки производительности в конфигурацию
Процесс внедрения подсистемы зависит от используемой конфигурации и может быть достаточно трудоемким. Полностью процедура описана на сайте ИТС. В типовых конфигурациях фирмы 1С, таких как 1С:Бухгалтерия или 1С:Управление торговлей, эта подсистема уже встроена в конфигурацию и может быть включена в настройках.
Как объединить рабочую конфигурацию с БСП
Для упрощения процесса объединения рабочей конфигурации и БСП воспользуемся обработкой ПервоеВнедрениеБСП.epf, входящей в состав дистрибутива БСП.
Эту обработку нужно запустить в пользовательском режиме демонстрационной конфигурации и отметить в ней подсистему Оценка Производительности.
После — нажать на кнопку «Сохранить настройки для конфигуратора».

Рисунок 5. Настройки объединения подсистем
Дальше необходимо зайти в конфигуратор демонстрационной базы и выполнить команду Конфигурация – Сравнить, объединить с конфигурацией из файла, указав файл с конфигурацией БСП.
Важно отметить, что для российских и международных конфигураций поставляются разные файлы конфигурации БСП:
- для российских конфигураций — 1Cv8.cf
- для международных конфигураций — 1Cv8_international.cf
В окне сравнения и объединения следует нажать на кнопку «Загрузить настройки объединения из файла».

Рисунок 6. Загрузка настроек из файла
Для корректной работы подсистемы Оценка производительности при нажатии на кнопку «Загрузить настройки объединения из файла» автоматически внедряются еще три подсистемы: Базовая функциональность, Обновления версии ИБ и Пользователи.
При этом в свойствах базы обязательно должны быть отмечены флажками следующие свойства:
- Основные роли
- Модуль приложения
- Модуль сеанса
- Модуль внешнего соединения
- Модуль обычного приложения
- Режим использования модальности
- Режим совместимости интерфейса
- Режим совместимости
Все остальные свойства корневого объекта должны быть отключены.
Далее нужно выбрать режим объединения Объединить с приоритетом файла (Действия – Установить режим для всех…) и проконтролировать изменения в объектах, которые присутствуют как в имеющейся, так и в загружаемой конфигурации.
Также следует снять флаг объединения с устаревших объектов, которые начинаются со слова «Удалить». Например, к таким объектам относится регистр сведений УдалитьЗамерыВремени3.

Рисунок 7. Дважды измененные объекты
Далее следует нажать кнопку «Выполнить». При появлении окна Неразрешимые ссылки нажать кнопку «Продолжить».
Дополнительные настройки конфигурации после объединения
После объединения необходимо провести ряд дополнительных настроек конфигурации. Это обязательные действия — без них при запуске система будет выдавать ошибки.
- Заполнить свойство Версия корневого объекта конфигурации в соответствии с шаблоном <номер редакции>.<номер подредакции>.<номер версии>.<номер сборки>.
Если этого не сделать, при запуске конфигурации возникнет ошибка «Не указана версия».
Для примера в свойстве Версия мы указали 1.0.0.1, Вам нужно написать свою версию.

Рисунок 8. Свойство Версия корневого объекта
В этом же корневом элементе на закладке Совместимость рекомендуется переключить свойство Режим совместимости интерфейса в положение Такси.
- Для пользователя Администратор следует включить роли Полные права и Администратор системы (Администрирование — Пользователи — Администратор — закладка Прочие). Указанные роли могут отсутствовать, поэтому к этому пункту нужно вернуться после обновления конфигурации, но до первого ее запуска. Если этого не сделать, то при запуске система выдаст ошибку.
- В ветке Общие — Определяемые типы для определяемого типа Организация в свойстве Тип указать ссылку на организацию.
- Создаем новый общий модуль ОбновлениеИнформационнойБазыДемо со свойствами Сервер и Внешнее соединение. Во вновь созданный модуль вставляем следующие процедуры:
- В общем модуле ПодсистемыКонфигурацииПереопределяемый имеется процедура ПриДобавленииПодсистем(). В ее тело необходимо вставить строку:
- В процедуру ПриДобавленииОбработчиковУстановкиПараметровСеанса общего модуля ОбщегоНазначенияПереопределяемый добавить следующую строку:
- У подсистемы ОценкаПроизводительности установить флаг «Включать в командный интерфейс» и перенести ее из подсистемы Стандартные подсистемы в корневой элемент. Вообще, не рекомендуется изменять положение подсистем в дереве конфигураций, и этот пункт мы делаем только для упрощения демонстрации работы подсистемы.

Рисунок 9. Подсистема Оценка производительности
- На момент подготовки статьи к публикации в БСП версии 3.1.5 в интерфейсе не было флага включения замеров производительности. Как это исправить:
- открыть обработку ОценкаПроизводительности,
- выбрать форму АвтоматическийЭкспортЗамеровПроизводительности,
- для элемента формы ВыполнятьЗамерыПроизводительностиВыполнятьЗамерыПроизводительности установить флаг «Видимость» в значение «Истина».

Рисунок 10. Установка видимости реквизита Выполнять замеры производительности
Возможно, в следующих версиях БСП эту особенность исправят и данный шаг выполнять не потребуется.
После того как мы сделали все предыдущие шаги и провели подготовку, сохраняем конфигурацию и обновляем базу данных. Но прежде, чем ее запустить, проверяем, был ли выполнен пункт № 2: включены ли для пользователя Администратор роли Полные права и Администратор системы. Если нет, делаем это сейчас.
Как включить и настроить замеры производительности
Теперь нужно включить замеры производительности. Для этого запустим конфигурацию в пользовательском режиме от имени пользователя Администратор, перейдем в раздел Оценка производительности – Сервис – Настройки оценки производительности и установим флаг «Выполнять замеры производительности».

Рисунок 11. Включение замеров производительности
Настройка Период записи определяет, с какой периодичностью замеры будут попадать в регистр, так как они записываются порциями, а не сразу при выполнении операции. Если значение не устанавливать, то запись будет происходить раз в пять минут. Можно установить значение в 60 сек., чтобы сразу видеть, выполняется замер или нет.
Настройка Удалять через определяет, сколько времени будут храниться данные в регистре замеров. Значение по умолчанию — 100 дней.
Остальные параметры не критичны, они нужны, только если планируется выгружать данные о замерах во внешнюю систему.
После сохранения этих настроек нужно еще раз перезайти в базу, чтобы обновились параметры сеанса.
На этом внедрение подсистемы Оценка производительности закончено. Можно переходить к замерам.
Разбор ошибки, которая возникает после внедрения подсистемы Оценка производительности из БСП версии 3.1.5.171 и выше
Даже если Вы выполнили все обязательные при внедрении подсистемы Оценка производительности из БСП действия, при первом запуске конфигурации может возникнуть ошибка «Недопустимое значение параметра (параметр номер 1)».
В видео разбираем, откуда взялась эта ошибка и как ее исправить.
Настройка замера времени выполнения операции
Перейдем к настройке замеров времени выполнения ключевых операций.
Настройка замера будет отличаться в зависимости от того, где начинается операция — на клиенте или на сервере.
Если операция, время которой нужно измерить, начинается на сервере, то начало и конец замера нужно прописывать на сервере.
Если операция, время которой нужно измерить, начинается на клиенте, то начало и конец замера нужно прописывать на клиенте.
Чаще всего и опытные, и начинающие разработчики совершают следующую ошибку. Они встраивают начало замера на сервере, хотя операция стартует на клиентском рабочем месте. Так делать нельзя — мы получим некорректные данные.
Возьмем документ Приход товара. Процесс его проведения стартует на клиенте, когда пользователь нажимает кнопку «Провести». Следовательно, правильно оценивать время этой операции со стороны пользователя — от нажатия «Провести» до завершения операции.
Если настроить замер для документа Приход товара не на клиенте, а в процедуре Обработка проведения модуля объекта, т. е. на сервере, то в замер не попадут обработчики событий формы и процедуры модуля объекта Перед Записью, При записи и прочие. Другими словами, в замере не отразятся события, которые происходят от момента нажатия кнопки «Провести» до поступления данных на сервер. Но они тоже влияют на общее время проведения документа — не учитывать их в замере неправильно.
Кроме того, нужно учитывать передачу данных по сети. Когда операция начинается на клиенте, а время измеряется только на сервере, не учитывается время передачи данных. И если в локальной сети это не очень критично, то на веб-клиенте задержки могут быть значительными — такие замеры не будут отражать реальное положение вещей.

Таблица 1. Возможные комбинации настроек для замера времени
Как завершить замер, если операция выполняется на клиенте
Для замера на клиенте есть два способа завершить замер. Первый — автоматический, то есть замер завершится сам. Второй способ — завершить явно или вручную, то есть закончить замер тогда, когда мы посчитаем нужным. Возможные комбинации приведены в таблице 1.
Явное завершение лучше использовать для замеров операций, при выполнении которых высока вероятность ошибки. К ним можно отнести операции, при которых идет запись данных в базу:
- проведение документов,
- запись каких-то объектов,
- выполнение обработок, которые перезаписывают некие объекты.
Автоматическое завершение стоит использовать для измерения операций, где вероятность ошибки низкая. Это могут быть операции чтения, открытия окон, расчетов.
В качестве примера настроим замер времени проведения документа Приход товара (в пользовательском режиме — Поступление товаров).
При проведении документа срабатывает следующая последовательность событий:

Рисунок 12. Последовательность событий при проведении документа
(нажмите, чтобы увеличить картинку)Нам нужно замерить операцию с начала, поэтому код начала замера в модуле формы мы вставляем в событие ПередЗаписью (событие ПередЗаписью возникает первым при нажатии пользователем кнопки «Провести»). Этот код будет закончен автоматически:
Ошибки при выполнении замеров
Выше мы уже говорили, что при выполнении операций, при которых идет запись в базу данных, может возникнуть ошибка. Для них лучше использовать явное завершение замера.
В этом случае есть выбор из двух сценариев работы:
- не сохранять замер с ошибкой;
- сохранить замер с пометкой, что была ошибка.
Сценарий 1. Не сохранять замер с ошибкой
Чтобы реализовать такой сценарий, в процедуре ПослеЗаписи необходимо вставить следующий код:
В данном сценарии в начале замера третий параметр в коде имеет значение «Ложь». Это говорит о том, что замер надо завершить явно. При возникновении ошибки записи не произойдет, процедура ПослеЗаписи не будет выполнена, следовательно, замер не будет сохранен в регистре.
В этом коде также используется переменная УИД, которая отвечает за идентификацию замера во время его фиксации.
Сценарий 2. Сохранить замер с признаком, что была ошибка
Этот сценарий позволяет посмотреть, сколько было ошибок при выполнении операции.
В регистре замеров предусмотрено специальное поле ВыполненСОшибкой, имя которого говорит само за себя. Поле заполняется либо как параметр функций НачатьЗамер и ЗавершитьЗамерВремени, либо процедурой УстановитьПризнакОшибкиЗамера.
Принцип работы следующий: в начале замера сразу считаем, что операция была выполнена с ошибкой, но в момент фиксации замера, если все хорошо, снимаем признак ошибки.
Допустим, мы хотим оставить автоматическую фиксацию замеров, но в случае сбоя сохранять замер с признаком ошибки, чтобы знать количество неудачных проведений документов.
В этом случае код замера примет следующий вид:
У функции ЗамерВремени второй параметр равен «Истина». Это значит, что замер сразу помечается как выполненный с ошибкой. Если же исполнение добралось до процедуры ПослеЗаписи, это значит, что проведение было успешным и признак ошибки у замера можно снять.
Если измеряются отдельные блоки кода, то возможны любые комбинации с «Попытка Исключение» и т. д. Главное — понимать сам принцип и учитывать возможные ошибки исполнения при встраивании замеров.
Примеры замеров времени выполнения операции
Давайте выполним несколько замеров операций, который выполняются и на клиенте, и на сервере, чтобы у нас были данные для расчета APDEX.
Примеры замера времени проведения документов на клиенте
Для замера времени проведения документа Приход товара достаточно передать в процедуру общего модуля ОценкаПроизводительностиКлиент наименование ключевой операции (она будет создана в справочнике автоматически) и признак автозавершения замера — третий параметр. При автозавершении замер заканчивается, как только управление снова передается пользователю.
Проведем документ Приход товара. Обратите внимание, что проводить документ нужно из формы документа по кнопке «Провести и закрыть», так как замер настроен на проведение из формы.
В регистре сведений Замеры времени (Оценка производительности — Замеры времени) появился первый замер. Замеры могут появиться не сразу, так как в настройках стоит «Период записи 60 сек».

Рисунок 13. Регистр сведений Замеры времени
Настроим созданную ключевую операцию. Для этого зайдем в нее (Оценка производительности – Ключевые операции) и установим следующие значения:
- приоритет – 1
- целевое время – 3 сек.
- минимально допустимый уровень выбираем «Хорошо (apdex >= 0.85)».

Рисунок 14. Настройки ключевой операции Проведение приход товара
Аналогично настроим замер времени проведения для документа Продажа товара.
Открываем форму документа Продажа товара и создаем обработчик события формы ПередЗаписью.
Обновляем базу данных, запускаем пользовательский режим, проводим документ Продажа товара и устанавливаем настройки ключевой операции.

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

Рисунок 16. Замеры времени проведения документов
Теперь перейдем к настройке замеров на сервере.
Пример замера времени выполнения операции на сервере
В отличие от замеров на клиенте, где замер может завершаться автоматически, на сервере требуется вручную прописывать код начала и окончания замера.
Продемонстрируем замер времени на сервере с помощью внешней обработки.
Создадим в конфигураторе внешнюю обработку с названием ЗамерНаСервере.epf, добавим в нее форму.
В форме создадим команду ЗамерНаСервере.
Перетащим команду на форму обработки и назначим команде обработчики, выполняемые на клиенте и на сервере без контекста.

Рисунок 17. Форма внешней обработки Замер на сервере

Рисунок 18. Модуль формы внешней обработки Замер на сервере
Перейдем к настройке замеров.
В процедуру ЗамерНаСервереНаСервере добавим следующий код:
Сохраняем обработку, открываем ее в пользовательском режиме, нажимаем кнопку «Замер на сервере». В результате в регистре сведений Замеры времени должна появиться строка с ключевой операцией ЗамерВремениСервер1.

Рисунок 19. Результат замера времени на сервере
Чтобы проиллюстрировать замер времени выполнения вложенной операции, модифицируем код процедуры ЗамерНаСервереНаСервере:
Сохраняем обработку и запускаем ее в пользовательском режиме. Результат выполнения следующий:

Рисунок 20. Результат замера вложенной процедуры на сервере
Таким образом можно проводить замеры любого серверного кода. Это очень удобный инструмент для поиска неоптимального кода, рекомендуем пользоваться им как можно чаще.
Просмотр APDEX с помощью отчета Оценка производительности
Мы настроили и провели все необходимые замеры. Теперь давайте увидим их результат с точки зрения методики APDEX (подробнее о ней мы рассказывали в этой статье ).
Для этого воспользуемся отчетом Оценка производительности. Он позволяет просматривать замеры времени с периодичностью в час, день, неделю или за весь период целиком. Также в нем можно установить отборы по конкретной ключевой операции или по пользователю, под которым эта ключевая операция запускалась.
Итак, перейдем в раздел Оценка производительности и откроем этот отчет.

Рисунок 21. Настройки отчета Оценка производительности
В первую очередь нужно настроить профиль. Профили используются для группировки различных ключевых операций. В реальной ситуации могут быть десятки, а то и сотни ключевых операций. Выводить их все в один отчет не имеет никакого смысла. Вот тут и приходят на помощь профили.
Создадим два профиля: Проведение прихода и расхода и Замер времени сервер. В первый профиль включим операции замера времени проведения документов Проведение приход товара и Проведение продажа товара, а во второй — Замер времени сервер 1 и Замер времени сервер 1.1.

Рисунок 22. Настройки профиля Проведение прихода и расхода

Рисунок 23. Настройки профиля Замер времени сервер
Посмотрим результаты замеров по профилю Проведение прихода и расхода. Для этого установим период, периодичность замеров — «Час», и нажмем кнопку «Сформировать».

Рисунок 24. Результаты замеров времени проведения документов
(нажмите, чтобы увеличить картинку)В табличное поле будет выведена диаграмма и таблица замеров с рассчитанным индексом APDEX. В таблице отображаются
- целевое время ключевой операции,
- ее приоритет,
- рассчитанный индекс APDEX,
- количество замеров и прочая необходимая информация.
Индекс APDEX для ключевых операций проведений документов равен единице — это означает, что оптимизация не требуется.
Теперь сформируем этот же отчет по профилю Замер времени сервер с другими ключевыми операциями. Для замеров времени на сервере использовались паузы в 1 и 2 сек., то есть индекс APDEX должен быть меньше единицы.

Рисунок 25. Результаты замеров времени на сервере (нажмите, чтобы увеличить картинку)
Действительно, при таком времени выполнения операций на сервере индекс APDEX равен 0,5. Значит, для этих операций требуется оптимизация.
Отчет Оценка производительности очень полезен в работе. Он помогает оценить текущее состояние системы, а также позволяет отследить динамику производительности 1С. Кроме того, с помощью отчета Оценка производительности мы можем понять, быстрее или медленнее работает система после обновления.
Подведем резюме
В заключение темы внедрения и использования подсистемы Оценка производительности из Библиотеки стандартных подсистем хочется обратить Ваше внимание на следующие моменты:
- Перед оптимизацией необходимо зафиксировать текущее состояние системы и сделать замеры производительности. Неважно, будете ли Вы использовать для этого подсистему Оценка производительности или напишете свой функционал. Главное, чтобы замеры были, иначе оценить изменения производительности системы будет невозможно.
- При замере групповых операций следует замерять операцию целиком, а не отдельные ее компоненты.
- Нужно учитывать, что в измеряемой операции может возникнуть ошибка.
Что осталось за рамками этой статьи
Иногда время открытия формы объекта может быть критичным. Например, это происходит, когда речь идет о формах выбора, дашбордах, формах списков. Многие думают, что встраивать замер длительности открытия формы следует в процедуру ПриОткрытии(). Некоторые считают, что сначала отрабатывает процедура ПриЧтенииНаСервере().
И те, и другие ошибаются 🙂
Как провести замер при открытии формы, мы подробно разбираем на курсе Ускорение и Оптимизация 1С. Базовый курс.
И в нем еще много других интересных вещей, которые можно применить в работе 🙂
Замер производительности в 1С
Режим замера производительности позволяет разработчику оценивать скорость работы как всей конфигурации в целом, так и отдельной ее части. В этом режиме измеряется частота использования конкретных участков кода и скорость их выполнения.
Подобный анализ помогает выбирать наиболее оптимальный способ программной реализации алгоритмов работы системы, а также определять пути для повышения быстродействия прикладного решения.
Результат замера производительности представляет собой список ссылок на конкретные строки модуля, с указанием частоты их выполнения и длительности (абсолютного времени выполнения и относительного, в процентах от общего времени выполнения замеряемого участка). Также в списке отмечаются строки кода, исполнявшиеся на клиенте, сервере и строки кода, приводящие к вызову сервера:

Результаты замера можно видеть также непосредственно в окне с исходным текстом модуля. Щелчком мыши на выбранной строке списка можно перейти к тексту модуля, для которого на отдельном поле будет отображено количество вызовов и относительное время выполнения каждой строки:

9Результаты замера могут быть отобраны по месту исполнения (клиент, сервер, клиент и сервер), а также отсортированы по любой из колонок, например, по количеству вызовов строки:

Кроме этого, режим замера производительности позволяет производить выборочное суммирование строк замера, для получения суммарных характеристик выполнения некоторых строк:

Дополнительной возможностью является включение в замер или исключение из замера времени выполнения вызываемых процедур и функций. Использование этой возможности позволяет получать картину замера, максимально приближенную к реальной, в случае, когда из замеряемого модуля вызываются внешние по отношению к нему, процедуры.
Разработчик может сохранить результаты замера в файл для последующего анализа и сравнения с результатами других замеров.