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








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

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

  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 секунд, то с замером это же проведение может выполняться минуту и больше. Поэтому лучше позаботиться, о том, чтобы лишние процедуры, которые не представляют интереса для исследования, не попали в замер.

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

//infostart.ru/public/164960/

//infostart.ru/public/203843/


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

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

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


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

6 Comments

  1. karpik666

    Очень интересно, а в чем же вариация состоит с другим разработками, вы брали код обработок и допиливали его, либо создавали с нуля?

    Reply
  2. json

    Создавал с нуля. Аналоги упомянул для большей полноты картины

    Reply
  3. zekrus

    Доброе утро!

    Наконец-то есть отличная идея. Напоминает кино «Сеть», там правда анализировали код вируса (строилась в виде графической схемы алгоритма как в школе).

    Reply
  4. DrAku1a

    Несмотря на то, что что-то подобное уже есть, разработка весьма нужная и актуальная. В связи с особой извращённостью сложностью построения кода типовых решений от 1С.

    Reply
  5. monkbest

    Привет, обработка подготовки добавила в серверный общий модуль строку:

    Выполнить(«Оповестить(«»*»», «»ОбщийМодуль.СтандартныеПодсистемыСервер.Модуль.УстановкаПараметровСеанса()»», Истина)»);

    Что не работает, т.к. метод оповестить не доступен на сервере. Вот из синтаксис помощника:

    Глобальный контекст (Global context)

    Оповестить (Notify)

    Синтаксис:

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

    Параметры:

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

    Тип: Строка.

    Имя события. Может быть использовано для идентификации сообщений принимающими их формами.

    <Параметр> (необязательный)

    Тип: Произвольный.

    Параметр сообщения. Могут быть переданы любые необходимые данные.

    <Источник> (необязательный)

    Тип: Произвольный.

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

    Описание:

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

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

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

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

    Показать

    Я что-то не так делаю? Конфа под УФ платформа 8.3.6.2299

    Reply
  6. json

    (5) monkbest, это ограничение данной версии. Оно описано в статье в разделе Ограничения п. 1.

    Но в принципе могу докрутить в ближайшее время, чтобы работало и на серверной версии, если есть интерес

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *