Обработка анализирует код общих модулей конфигурации (выгруженный в текстовые файлы с помощью ключа командной строки /DumpConfigFiles) и позволяет получать следующие отчёты:
- Процедуры и функции общих модулей по количеству их вызовов из других общих модулей конфигурации. Показатель можно применять для выявления потенциально наиболее востребованных процедур и функций с целью оптимизации их работы в системах критичных к производительности. Полезно, например, при крупном внедрении с заранее неизвестными и неотлаженными бизнес-процессами (когда мы не можем определить реально наиболее востребованные процедуры и функции), либо при создании типового тиражируемого решения.
- Количество вызовов других общих модулей из данного общего модуля. Большое количество вызовов других модулей — один из показателей сложности модуля (Высокий коэффициен разделения по выходу — более 7-ми в примере С. Макконела (Совершенный код, С. Макконнелл, Code Complete, 2-ое издание, 2005) по взаимодействию классов), возможно следует разделить функционал модуля на несколько модулей.
- Схема взаимодействия общих модулей. Схема (карта) вызовов строится как расшифровка к двум отчётам обработки двойным щелчком по названию модуля. Карта строится в MS Excel. Карта представляет из себя схему взаимодействия расшифровываемого модуля с другими общими модулями: модули, которые вызывают данный модуль, модули, которые вызывает данный модуль и связи между этими модулями.
Деление кода между общими модулями носит, как правило, функционально-прикладной (деление на модули с флагами Клиент, Сервер, ВнешнееСоединение и т.п.) и логический характер. При этом модули разделённые по функциональным причинам (например АдресныйКлассификатор, АдресныйКлассификаторКлиент, АдресныйКлассификаторКлиентСервер) образуют единый логический блок. Логическое деление производится для эффективного управления сложностью исходного кода конфигурации.
Если модуль взаимодействует с логически (но не функционально) связанными с ним модулями по принципу «все вызывают всех», то выгода от их деления исчезает (подробнее см. Совершенный код, С. Макконнелл, Code Complete, 2-ое издание, 2005, стр. 80 на примере подсистем). Энтропия в таких системах только возрастает, что приводит к сложностям в сопровождении. Нормальная схема взаимодействия логически разделённых модулей должна быть ациклическим графом.
Особенности и ограничения работы
1. Исходные коды модулей выгружаются с помощью команды системы:
ПутьКПрограмме+»1cv8.exe DESIGNER /F «»»+ПутьКБазе+»»»»+СтрокаПользователя+» /DumpConfigFiles «»»+ПутьККаталогуДляВыгрузки+»»» -Module»
Можно выгрузить самому, либо с помощью кнопки «Выгрузить» в обработке. Использование команды системы влечёт за собой соответствующие ограничения, остающиеся на совести пользователя обработки: у пользователя должны быть права на запись в каталог выгрузки, на чтение в каталоге базы. У пользователя 1С, под которым запускается обработка, должны быть права на запуск Конфигуратора анализируемой базы и т.п.
Ограничение: На данный момент выгрузка исходных кодов работает с файловыми базами и пользователем без пароля.
По кнопке «Полная карта вызовов» можно постросить полную схему взаимодействия общих модулей конфигурации. Практической ценности данная функция не несёт ввиду большого количества модулей в типовых конфигурациях и сложности их взаимодействия. Ценность исключительно «эстетическая».
Nota bene: Обработка писалась для себя, также тестировал на УТ 11, БП 3.0 (ознакомительной). Пока на правах бета версии. Если что-либо из моих рассуждений покажется неоднозначным — всегда готов к дискуссии в комментариях.






Дмитрий, вы говорите «По кнопке «Полная карта вызовов» можно постросить полную схему взаимодействия общих модулей конфигурации. Практической ценности данная функция не несёт ввиду большого количества модулей в типовых конфигурациях и сложности их взаимодействия». Но меня сразу же привлекла именно эта возможность увидеть структуру взаимодействия модулей в конфе. Считаю, что это очень полезно на начальном этапе освоения 8-ки.
Интересно, а можно ли формировать структуру взаиможействия модулей произвольно, по выбору? Если да, то как?
(1) Boroda,
Сам так думал, но связей слишком много получается если по всей конфигурации строить — просто нечитабельно становится.
На данный момент два варианта: полная карта и как расшифровка отчета по какому-либо модулю (модуль, связанные с ним и все связи между ними). Про функцию карты по произвольному списку модулей подумаю.
в догонку к boroda — указать какой-то объект метаданных и получить все вызовы общих модулей для него