Анализ процедур и функций (структура кода)

28.04.18

Разработка - Инструментарий разработчика

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Анализ процедур и функций
.epf 18,98Kb
29
29 Скачать (10 SM) Купить за 4 550 руб.

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

Я лучше воспринимаю графическое представление и для целей анализа структуры кода мне изначально подошла следующая обработка «Граф вызовов для модулей 1С…», которая парсит предложенный текст на процедуры и функции, строит дерево взаимосвязей и рисует по полученным данным связанный граф в виде картинки.
Все прекрасно, но при большом объеме кода граф получается перегружен и не всегда удачно формируется с точки зрения визуализации.
Затем указанную обработку доработал Павел Заяш (Pavl0), добавив возможность выгрузки в формате gml. Это значительно повысило возможности визуализации полученного графа.

Но хотелось еще большего удобства :)

Так, было бы не плохо анализировать выбранный список функций и процедур, анализировать асинхронные вызовы, выводить граф используемых и/или использующих процедуры и/или функции из списка.

В итоге я решил создать свой велосипед, учитывающий эти хотелки, а заодно и ознакомиться с замечательным форматом yml.

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

Шаблон для процедур и функций получил следующий: «^Процедура([^КонецПроцедуры].*\n+)+КонецПроцедуры» и «^Функция([^КонецФункции].*\n+)+КонецФункции»
Шаблон для процедур и функций с параметрами такой: «^Процедура([^\)])+\)» и «^Функция([^\)])+\)»
Шаблон для имени процедур и функций: «^Процедура([^\(])+\(» и «^Функция([^\(])+\(»
Формат gml достаточно хорошо описан здесь у разработчика программы yEd, читающей этот формат.

Для моих целей на текущий момент оказалось достаточно следующих блоков gml:

//Описание: http://docs.yworks.com/yfiles/doc/developers-guide/gml.html#HierarchyExtension.graph.interedge_level
// node: type                     - "ellipse"/"oval"/"circle", "rectangle", "triangle", "parallelogram", "hexagon", "diamond", "octagon", "roundrectangle", "rectangle3d", "trapezoid", "trapezoid2"
// edge: type                     - "arc", "spline", "bezier", or "quadCurve"
// edge: targetArrow, sourceArrow - "delta", "standard", "diamond", "short", "white_delta", "white_diamond", or "none"
// edge: arrow                    - "last", "first", or "both"
Если ИмяШаблона = "СвязиСекции" Тогда 
	Возврат 
		"	edge
		|	[
		|		source ""%source%""
		|		target ""%target%""
		|		label ""%label%""
		|		graphics
		|		[
		|		fill ""#000000""
		|		targetArrow	""standard""
		|		]
		|	]
		|";
ИначеЕсли ИмяШаблона = "СодержимоеСекции" Тогда 
	Возврат 
		"	node
		|	[
		|		id	""%id%""
		|		label	""%label%""
		|		graphics
		|		[
		|			type	""%type%""
		|			fill	""%fill%""
		|			outline	""#000000""
		|			outlineWidth %outlineWidth%
		|			h %height%
		|			w %width%
		|		]
		|		%gid%
		|	]
		|";
ИначеЕсли ИмяШаблона = "ГруппаМодуль" Тогда 
	Возврат 
		"	node
		|	[
		|		id	""%id%""
		|		label	""%label%""
		|		isGroup 1
		|	]
		|";		
ИначеЕсли ИмяШаблона = "Общий" Тогда 
	Возврат
	"Creator ""lavelin.ru/code_structure""
	|Version 0.1
	|graph
	|[
	|	hierarchic 1
	|	label """"
	|	directed 1
	|%СодержимоеСекций%
	|%СвязиСекций%
	|]";
Иначе
	Возврат ""
КонецЕсли;

В итоге получил следующий инструмент  «АнализПроцедурИФункций»:

 

Это нельзя назвать законченным решение, но первичный анализ он проводить уже позволяет.

Вы можете поучаствовать в развитие разработки на github.

Разработка велась на платформе: 8.3.11.2954.

Ограничения и обнаруженные ошибки можно посмотреть здесь

 

Новое:  

- добавлена загрузка модулей из файлов, выгруженных с помощью функционала платформы 1с «Выгрузить в файлы»
- добавлена выгрузка обработки в файлы (через пакетный вызов конфигуратора)

Подробнее добавленный функционал описан в статье "Извлечение текстов модулей из внешней обработки 1С"

структура кода gml анализ кода

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    170018    939    403    

906

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    13086    100    46    

104

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    26753    90    48    

134

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16936    41    15    

75

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    190718    1151    0    

918

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11457    40    27    

66

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    935    2    0    

5

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    103998    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JohnConnor 57 27.04.18 09:29 Сейчас в теме
2. zenechka 547 27.04.18 09:41 Сейчас в теме
(1) пожалуйста :)
На выходных постараюсь выложить обновление обработки с загрузкой текстов модулей из файлов(полученных через функционал "Выгрузить в файлы") включая парсинг "bin" файлов (бинарные файлы с данными не управляемых форм)
3. zekrus 151 16.08.18 10:06 Сейчас в теме
Добрый день!
Тема весьма актуальная.
А не пробовали вести анализ переменных и полей таблиц модулей?
С уважением
4. zenechka 547 16.08.18 11:23 Сейчас в теме
(3) День добрый, Николай.
Не совсем понял о чем речь. Что Вы имеете ввиду под "полей таблиц модулей"?
Есть потребность, в частности, добавить анализ и вывод информации по фактическим и формальным параметрам процедур/функций.
Но пока не доходят до этого руки.
5. zekrus 151 16.08.18 14:57 Сейчас в теме
(4) Это для реализации графической блок-схемы может пригодиться
- в коде используются таблицы данных, а у таблиц поля (их и анализировать).
6. zenechka 547 17.08.18 09:16 Сейчас в теме
(5) нет, такой задачи не стояло пока
7. zekrus 151 17.08.18 13:04 Сейчас в теме
(6) пока да. но рано или поздно до этого дойдет.
8. SagittariusA 30.11.20 10:56 Сейчас в теме
Хорошая идея. Здорово.
9. quares 21 06.09.21 18:59 Сейчас в теме
Запароленые модули тоже вскрываются?
10. quares 21 06.09.21 19:38 Сейчас в теме
(9) засада. Скачал, а общие модули вообще никак не анализируются, хотя там структура блоков в модулях такая же...
11. zenechka 547 06.09.21 21:23 Сейчас в теме
(10) А что значит "не анализируются" ? Сейчас выгрузил конфигурацию, процедуры общего модуля подгрузились.. Или что-то другое имеется ввиду?
Надо понимать, что здесь нет полноценного синтаксического анализитора.. здесь используется примитивный парсинг модулей на процедуры и функции.
12. bambucho 06.06.23 13:21 Сейчас в теме
Результат замера производительности так возможно представить?
13. zenechka 547 06.06.23 13:56 Сейчас в теме
(12) В принципе можно реализовать вывод любой иерархической структуры, но данное решение выводит только взаимосвязь между процедурами / функциями.
14. dedded 01.04.24 09:22 Сейчас в теме
Добрый день, на 1С:Предприятие 8.3 (8.3.23.2040) - увы. Пустое окно(
15. zenechka 547 05.04.24 00:25 Сейчас в теме
(14) Обработка написана на обычных формах. Запуститесь в режиме обычных форм. Скорей всего в этом дело. Если нет, напишите в личку решим разберемся.
Оставьте свое сообщение