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

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 анализ кода

См. также

SALE! 15%

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159401    872    399    

861

SALE! 15%

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

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

8400 7140 руб.

20.08.2024    7766    55    22    

66

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

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

9360 руб.

17.05.2024    23431    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10414    36    20    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15395    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187972    1138    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17301    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7694    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JohnConnor 57 27.04.18 09:29 Сейчас в теме
2. zenechka 547 27.04.18 09:41 Сейчас в теме
(1) пожалуйста :)
На выходных постараюсь выложить обновление обработки с загрузкой текстов модулей из файлов(полученных через функционал "Выгрузить в файлы") включая парсинг "bin" файлов (бинарные файлы с данными не управляемых форм)
3. zekrus 150 16.08.18 10:06 Сейчас в теме
Добрый день!
Тема весьма актуальная.
А не пробовали вести анализ переменных и полей таблиц модулей?
С уважением
4. zenechka 547 16.08.18 11:23 Сейчас в теме
(3) День добрый, Николай.
Не совсем понял о чем речь. Что Вы имеете ввиду под "полей таблиц модулей"?
Есть потребность, в частности, добавить анализ и вывод информации по фактическим и формальным параметрам процедур/функций.
Но пока не доходят до этого руки.
5. zekrus 150 16.08.18 14:57 Сейчас в теме
(4) Это для реализации графической блок-схемы может пригодиться
- в коде используются таблицы данных, а у таблиц поля (их и анализировать).
6. zenechka 547 17.08.18 09:16 Сейчас в теме
(5) нет, такой задачи не стояло пока
7. zekrus 150 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) Обработка написана на обычных формах. Запуститесь в режиме обычных форм. Скорей всего в этом дело. Если нет, напишите в личку решим разберемся.
Оставьте свое сообщение