gifts2017

Дерево вызовов процедур

Опубликовал Пишу код как картины (yurii_host) в раздел Программирование - Инструментарий

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

Постановка задачи

  1. Пусть есть некоторая конфигурация, написанная не нами, например типовая.

  2. Нам необходимо разобраться, как работает некоторая функция системы: какие процедуры вызываются, в какой последовательности, из каких модулей.

  3. Выполнять исследование с помощью отладчика - очень трудоемко, из-за очень большого количества процедур, модулей и уровня вложенности вызовов.

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

  5. Может также применяться в случаях, когда алгоритм очень объемный и необходимо определить где поставить точку останова, чтобы начать исследование интересующего нас кусочка этого алгоритма

Принцип работы

Выполняется программная обработка модулей исследуемого алгоритма. На входе и выходе каждой процедуры подставляется вызов условного метода. В данном случае условным методом является процедура Оповестить(). Перед запуском алгоритма открывается специальная форма, ловит оповещения и фиксирует в виде табличного документа на этой форме.


Детали доработки

  1. В общем никаких дополнительных подсистем встраивать в конфигурацию не требуется.

  2. Т.к. частичная загрузка файлов через метод “Загрузить конфигурацию из файлов” в некоторых случаях отрабатывает с ошибкой, обработка модулей выполняется через “старые” методы конфигурации “Выгрузить файлы конфигурации” и “Загрузить файлы конфигурации”, поэтому необходимо включить возможность изменения для всех обрабатываемых модулей.

Подготовка конфигурации к замеру "Полная"

  1. Замер необходимо производить в копии базы. Поэтому нужно подготовить копию для замера

  2. Включить возможность изменения для всех модулей конфигурации

  3. Закрыть конфигуратор

  4. Открыть обработку “Подготовка конфигурации к построению дерева вызова процедур”

    1. проставить все галки

    2. рабочий каталог можно оставить по умолчанию, обработка создаст в нем свой каталог и поместит в него служебные файлы

  5. Дождаться, пока обработка :

    1. Выгрузит модули текущей конфигурации в текстовые файлы

    2. обработает файлы

    3. загрузит модули из обработанных файлов

  6. Войти в конфигурацию и применить изменения (F7)

Подготовка конфигурации к замеру "Быстрая"

Наиболее продолжительной по времени операцией в полном способе является операция 5-b. Чтобы ускорить эту операцию можно использовать ускоренный способ, при котором обрабатываются только те модули, которые мы хотим исследовать

  1. Выполнить замер производительности для исследуемого алгоритма через стандартную функцию конфигуратора Отладка-Замер производительности

  2. Выполнить все пункты из полной подготовки к замеру с той лишь разницей, что на шаге 4 установить не все флаги, а только модули, которые есть в замере производительности. Для этого есть специальная кнопка “Отметить из замера”. По этой кнопке откроется текстовое поле, в которое нужно вставить скопированный замер (“ctrl+A”, “ctrl+C”)

Подготовка к замеру демо конфигурации ERP таким способом занимает около 20 минут

  • - около 2 минут выгрузка всех модулей конфигурации в текстовые файлы

  • - около 2-5 минут обработка файлов (если их много)

  • - около 1 минуты загрузка файлов

  • - остальное время на копирование, сохранение, запуск

Построение дерева вызовов:

  1. Подготовить систему к замеру, т.е. выполнить все подготовительные действия, которые не должны попасть в замер

  2. Открыть обработку Построение дерева вызовов процедур

  3. Запустить выполнение исследуемого алгоритма

  4. По окончании выполнения алгоритма перейти в окно обработки, установить галку “Отключить замер” и нажать кнопку Форматировать, чтобы привести замер к более читаемому виду

Ограничения:

  1. Работает только в режиме толстого клиента файловой версии. Тестировалось на 1С:ERP Управление предприятием 2 (2.1.3.82)

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

  3. Обработка всех текстов модулей выполняется очень продолжительное время.

  4. Можно замерять в режиме обычного и управляемого приложения, но использовалось пока только в управляемом

  5. Обработка для подготовки к замеру реализована только на управляемых формах

  6. Обязательное требование: качественный читаемый код конфигурации, в котором по названию процедуры можно достаточно точно понять, что она делает

  7. Длительность выполнения замеряемой операции может увеличиться в разы. Например, если в демо базе проведение выполнялось 5 секунд, то с замером это же проведение может выполняться минуту и больше. Поэтому лучше позаботиться, о том, чтобы лишние процедуры, которые не представляют интереса для исследования, не попали в замер.

Данная разработка является вариацией на тему аналогичных работ:

http://infostart.ru/public/164960/

http://infostart.ru/public/203843/


Содержание архива:

1. Обработка Подготовка конфигурации к построению дерева процедур

2. Обработка Построение дерева процедур


Жду конструктивной критики

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Дерево вызовов процедур.zip
.zip 27,62Kb
08.04.16
10
.zip 27,62Kb 10 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Карпов (karpik666) 08.04.16 12:56
Очень интересно, а в чем же вариация состоит с другим разработками, вы брали код обработок и допиливали его, либо создавали с нуля?
2. Пишу код как картины (yurii_host) 08.04.16 13:13
Создавал с нуля. Аналоги упомянул для большей полноты картины
3. Николай Зевеке (zekrus) 13.04.16 07:51
Доброе утро!
Наконец-то есть отличная идея. Напоминает кино "Сеть", там правда анализировали код вируса (строилась в виде графической схемы алгоритма как в школе).
4. Андрей Акулов (DrAku1a) 14.04.16 02:24
Несмотря на то, что что-то подобное уже есть, разработка весьма нужная и актуальная. В связи с особой извращённостью сложностью построения кода типовых решений от 1С.
5. Антон Антонов (monkbest) 24.10.16 16:27
Привет, обработка подготовки добавила в серверный общий модуль строку:
Выполнить("Оповестить(""*"", ""ОбщийМодуль.СтандартныеПодсистемыСервер.Модуль.УстановкаПараметровСеанса()"", Истина)");


Что не работает, т.к. метод оповестить не доступен на сервере. Вот из синтаксис помощника:
Глобальный контекст (Global context)
Оповестить (Notify)
Синтаксис:

Оповестить(<ИмяСобытия>, <Параметр>, <Источник>)
Параметры:

<ИмяСобытия> (необязательный)

Тип: Строка.
Имя события. Может быть использовано для идентификации сообщений принимающими их формами.
<Параметр> (необязательный)

Тип: Произвольный.
Параметр сообщения. Могут быть переданы любые необходимые данные.
<Источник> (необязательный)

Тип: Произвольный.
Источник события. Например, в качестве источника может быть указана другая форма.
Описание:

Посылает оповещение всем созданным формам и всем подключенным через метод ПодключитьОбработчикОповещения процедурам модуля управляемого приложения (модуля обычного приложения) или общего модуля. Если для формы задана процедура-обработчик события ОбработкаОповещения, то она будет запущена, в процедуру будут переданы указанные параметры.
Данный механизм может, например, применяться для организации обмена сообщениями между открытыми формами.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).


Я что-то не так делаю? Конфа под УФ платформа 8.3.6.2299
6. Пишу код как картины (yurii_host) 24.10.16 16:56
(5) monkbest, это ограничение данной версии. Оно описано в статье в разделе Ограничения п. 1.
Но в принципе могу докрутить в ближайшее время, чтобы работало и на серверной версии, если есть интерес
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа