ОПИСАНИЕ
На идею создания этой ВК меня подтолкнул fixin, когда он в процессе обсуждения посетовал, что разработчики 1С проигнорировали его предложение включить трассировку в стандартный отладочный механизм платформы. Зря они так, конечно, с ним обошлись, поскольку предложение - толковое.
Предлагаю свое решение проблемы автоматизации трассировки программных модулей на базе внешней компоненты.
Tracer автоматически формирует сообщения:
- о входе-выходе из процедур и функций,
- о возвращаемых значениях функций
- о входе в условные операторы
- о вычисляемых значениях локальных переменных модуля
Все сообщения формируются динамически, в процессе работы, т.е. НЕ ТРЕБУЕТСЯ вручную вносить каких-либо изменений в программные модули справочников, документов и отчетов. Также Tracer не портит Ваши модули: внесенные изменения не сохраняются.
В качестве примера поместил в "Подробное описание" лог трассировки проведения расходной накладной из демо-базы 1С:Торговля и склад 7.7
ВЫКЛАДЫВАЮ ИСХОДНИКИ для желающих что-либо доработать под себя, поскольку тема трассировки достаточно интересна, и идей тут может быть сколько угодно: умная трассирочка таблиц значений, окно настройки и т.д. Я решил задачу лишь в общем. Платформа - Delphi 7
Кто уже понял, прототипом был взят метод, описанный в "OnSave" romix-ом. Кстати, с этим связана одна проблема, о которой я скажу чуть ниже...
УСТАНОВКА
1. Скопировать Tracer1C.dll в каталог информационной базы
2. В глобальный модуль внести небольшие изменения
// В начале модуля добавляем Перем глТрейсер Экспорт; ... Процедура ПриНачалеРаботыСистемы() ... // В конце процедуры добавляем ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"Tracer1C.dll"); глТрейсер=СоздатьОбъект("AddIn.Tracer1C"); глТрейсер.Open(); // Если используется внешняя обработка трассировки, то включить строку: глТрейсер.ExtTracer(); // Если необходимо трассировать не все, а лишь те модули, где вначале стоит //TRACER ON, то включить строку: глТрейсер.TraceAll(0); КонецПроцедуры Процедура ПриЗавершенииРаботыСистемы() // В начале процедуры добавляем глТрейсер.Close(); ... КонецПроцедуры
После этого просто работайте в своей программе, а сообщения трассировки будут появляться в окне сообщений. Конечно, ни что не мешает их выводить в файл.
РЕЖИМЫ РАБОТЫ И РАСШИРЕНИЯ
Метод TraceAll позволяет управлять работой внешней компоненты. По умолчанию происходит трассировка всех модулей. После вызова глТрейсер.TraceAll(0) трассируются только те модули, первой строчкой которых стоит комментарий
//TRACER ON
Соответственно, вызов глТрейсер.TraceAll(1) возвращает режим трассировки всех модулей
Текущая реализация позволяет направлять формируемые компонентой сообщения трассировки на вход процедуры в глобальном модуле и соответственно, обрабатывать на уровне 1С. Включение метода глТрейсер.ExtTracer() говорит трейсеру о том, что в состав глобального модуля включена функция
глСформироватьСообщениеТрассировки(Ключ,Имя,Значение).
Выкладываю свой пример реализации расширения трассировки, позволяющий формировать печатную таблицу сообщений трассировки, направлять вывод в файл и в окно сообщений, а также включать/отключать различные режимы трассировки. Подробное описание по использованию смотреть в модуле Трассировка.ert Разумеется, каждый может взять за основу эту обработку и сделать нечто свое, супер навороченное. С удовольствием дам ссылки на такие разработки и выложу их здесь по желанию авторов.
БЫЛА ПРОБЛЕМА, НАДЕЮСЬ РЕШИЛИ
Иногда в процессе работы выпадал из адресного пространства 1С, и платформа свертывалась, вылетая по ошибке, при попытке записать что-то в пустоту. Происходило не часто, но неприятно. Похоже, всеобщими усилиями проблему решили, но стоит потестить. По крайней мере, у меня не вылетает больше.
Особые благодарности в виде рукопожатий, пива, поцелуев при встрече (девушки) и всяческих похвал, А ТАКЖЕ плюсиков в комментах и веб-маней (особо благодарные) выражаем slavapil, artbear и MMF, без чьего участия ничего бы не получилось
Кстати, если Вы хотите поблагодарить плюсиками вышеназванных разработчиков, то можно не лазить по топику. Просто щелкаем по этим ссылкам прямо здесь:
slavapil: //infostart.ru/projects/2826/rate.php?rate=1&cid=63&cp=all
artbear: //infostart.ru/projects/2826/rate.php?rate=1&cid=32&cp=all
MMF: //infostart.ru/projects/2826/rate.php?rate=1&cid=13&cp=all
Если разработка действительно окажется кому-то полезной, то справедливости ради стоит упомянуть fixin-а. Если бы он не создал тот топик, за который, кстати, нахватал минусов, то ничего бы не было, ни моей идеи, ни дружной работы по устранению бага.
Тема нашла продолжение здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1232197179
Купи премиум доступ - поддержи наше Сообщество!
Если Вы приобретаете премиум-аккаунт с этой страницы, то я, как автор, предоставляю Вам гарантированную скидку 10 % на все мои платные разработки, которые Вас заинтересуют... Для приобретения премиум-аккаунта перейдите по этой С С Ы Л К Е
________________
Буду рад услышать комментарии, пожелания по доработке!