Постановка задачи
-
Пусть есть некоторая конфигурация, написанная не нами, например типовая.
-
Нам необходимо разобраться, как работает некоторая функция системы: какие процедуры вызываются, в какой последовательности, из каких модулей.
-
Выполнять исследование с помощью отладчика — очень трудоемко, из-за очень большого количества процедур, модулей и уровня вложенности вызовов.
-
При этом мы хотим также зафиксировать результат в удобном для восприятия виде, чтобы можно было возвратиться к нему позднее или поделиться с другими.
-
Может также применяться в случаях, когда алгоритм очень объемный и необходимо определить где поставить точку останова, чтобы начать исследование интересующего нас кусочка этого алгоритма
Принцип работы
Выполняется программная обработка модулей исследуемого алгоритма. На входе и выходе каждой процедуры подставляется вызов условного метода. В данном случае условным методом является процедура Оповестить(). Перед запуском алгоритма открывается специальная форма, ловит оповещения и фиксирует в виде табличного документа на этой форме.
Детали доработки
-
В общем никаких дополнительных подсистем встраивать в конфигурацию не требуется.
-
Т.к. частичная загрузка файлов через метод “Загрузить конфигурацию из файлов” в некоторых случаях отрабатывает с ошибкой, обработка модулей выполняется через “старые” методы конфигурации “Выгрузить файлы конфигурации” и “Загрузить файлы конфигурации”, поэтому необходимо включить возможность изменения для всех обрабатываемых модулей.
Подготовка конфигурации к замеру «Полная»
-
Замер необходимо производить в копии базы. Поэтому нужно подготовить копию для замера
-
Включить возможность изменения для всех модулей конфигурации
-
Закрыть конфигуратор
-
Открыть обработку “Подготовка конфигурации к построению дерева вызова процедур”
-
проставить все галки
-
рабочий каталог можно оставить по умолчанию, обработка создаст в нем свой каталог и поместит в него служебные файлы
-
Дождаться, пока обработка :
-
Выгрузит модули текущей конфигурации в текстовые файлы
-
обработает файлы
-
загрузит модули из обработанных файлов
-
Войти в конфигурацию и применить изменения (F7)
Подготовка конфигурации к замеру «Быстрая»
Наиболее продолжительной по времени операцией в полном способе является операция 5-b. Чтобы ускорить эту операцию можно использовать ускоренный способ, при котором обрабатываются только те модули, которые мы хотим исследовать
-
Выполнить замер производительности для исследуемого алгоритма через стандартную функцию конфигуратора Отладка-Замер производительности
-
Выполнить все пункты из полной подготовки к замеру с той лишь разницей, что на шаге 4 установить не все флаги, а только модули, которые есть в замере производительности. Для этого есть специальная кнопка “Отметить из замера”. По этой кнопке откроется текстовое поле, в которое нужно вставить скопированный замер (“ctrl+A”, “ctrl+C”)
Подготовка к замеру демо конфигурации ERP таким способом занимает около 20 минут
-
— около 2 минут выгрузка всех модулей конфигурации в текстовые файлы
-
— около 2-5 минут обработка файлов (если их много)
-
— около 1 минуты загрузка файлов
-
— остальное время на копирование, сохранение, запуск
Построение дерева вызовов:
-
Подготовить систему к замеру, т.е. выполнить все подготовительные действия, которые не должны попасть в замер
-
Открыть обработку Построение дерева вызовов процедур
-
Запустить выполнение исследуемого алгоритма
-
По окончании выполнения алгоритма перейти в окно обработки, установить галку “Отключить замер” и нажать кнопку Форматировать, чтобы привести замер к более читаемому виду
Ограничения:
-
Работает только в режиме толстого клиента файловой версии. Тестировалось на 1С:ERP Управление предприятием 2 (2.1.3.82)
-
Разработку не следует использовать на рабочей базе, т.к. это может привести к нежелательным последствиям
-
Обработка всех текстов модулей выполняется очень продолжительное время.
-
Можно замерять в режиме обычного и управляемого приложения, но использовалось пока только в управляемом
-
Обработка для подготовки к замеру реализована только на управляемых формах
-
Обязательное требование: качественный читаемый код конфигурации, в котором по названию процедуры можно достаточно точно понять, что она делает
-
Длительность выполнения замеряемой операции может увеличиться в разы. Например, если в демо базе проведение выполнялось 5 секунд, то с замером это же проведение может выполняться минуту и больше. Поэтому лучше позаботиться, о том, чтобы лишние процедуры, которые не представляют интереса для исследования, не попали в замер.
Данная разработка является вариацией на тему аналогичных работ:
Содержание архива:
1. Обработка Подготовка конфигурации к построению дерева процедур
2. Обработка Построение дерева процедур
Жду конструктивной критики
Очень интересно, а в чем же вариация состоит с другим разработками, вы брали код обработок и допиливали его, либо создавали с нуля?
Создавал с нуля. Аналоги упомянул для большей полноты картины
Доброе утро!
Наконец-то есть отличная идея. Напоминает кино «Сеть», там правда анализировали код вируса (строилась в виде графической схемы алгоритма как в школе).
Несмотря на то, что что-то подобное уже есть, разработка весьма нужная и актуальная. В связи с особой
извращённостьюсложностью построения кода типовых решений от 1С.Привет, обработка подготовки добавила в серверный общий модуль строку:
Что не работает, т.к. метод оповестить не доступен на сервере. Вот из синтаксис помощника:
Оповестить (Notify)
Синтаксис:
Оповестить(<ИмяСобытия>, <Параметр>, <Источник>)
Параметры:
<ИмяСобытия> (необязательный)
Тип: Строка.
Имя события. Может быть использовано для идентификации сообщений принимающими их формами.
<Параметр> (необязательный)
Тип: Произвольный.
Параметр сообщения. Могут быть переданы любые необходимые данные.
<Источник> (необязательный)
Тип: Произвольный.
Источник события. Например, в качестве источника может быть указана другая форма.
Описание:
Посылает оповещение всем созданным формам и всем подключенным через метод ПодключитьОбработчикОповещения процедурам модуля управляемого приложения (модуля обычного приложения) или общего модуля. Если для формы задана процедура-обработчик события ОбработкаОповещения, то она будет запущена, в процедуру будут переданы указанные параметры.
Данный механизм может, например, применяться для организации обмена сообщениями между открытыми формами.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Показать
Я что-то не так делаю? Конфа под УФ платформа 8.3.6.2299
(5) monkbest, это ограничение данной версии. Оно описано в статье в разделе Ограничения п. 1.
Но в принципе могу докрутить в ближайшее время, чтобы работало и на серверной версии, если есть интерес