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

28.04.18

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

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

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
Анализ процедур и функций
.epf 18,98Kb
31 4 550 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

Я лучше воспринимаю графическое представление и для целей анализа структуры кода мне изначально подошла следующая обработка «Граф вызовов для модулей 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С.

15500 руб.

02.09.2020    202372    1116    410    

1021

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

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

8400 руб.

20.08.2024    35562    206    104    

195

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    23954    62    26    

92

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

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

16000 руб.

10.11.2023    16445    69    39    

88

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

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

9360 руб.

17.05.2024    34643    123    53    

165

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    1709    1    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

6000 руб.

07.02.2018    107144    249    100    

313

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

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

3600 руб.

27.12.2024    2860    6    0    

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