Анализатор кода 1с v7.7

Опубликовал Майкопчанин (Майкопчанин) в раздел Программирование - Инструментарий

Внешняя обработка для 7.7, позволяющая проанализировать код модуля. Это всего лишь инструмент, дающий возможность разобраться в порядке вызовов процедур и в том, как та или иная переменная получает свое значение. Используется внешняя компонента ActiveMD.

Так получилось, что в наследство мне досталась конфигурация написанная программистом не то что плохим, но со своеобразной логикой и уникальным стилем программирования. В результате родилась эта обработка. Дальнейшее развитие не планируется, и в таком виде программа меня устраивает. Изучив методы работы своего предшественника, я уже довольно быстро нахожу критичные места программы, хотя обработка по прежнему интенсивно используется.
Возможности.
1) Анализ процедур и функций: строятся таблицы вызовов, какая процедура откуда вызывается и в свою очередь, что вызывает. Можно построить дерево вызовов для определенной процедуры.
2) Анализируется диалог, связь реквизитов формы с реквизитами объекта метаданных, места программы, где используется реквизит.
3) Реквизиты объекта: аналогично реквизитам формы.
4) Переменные. Отслеживается объявление переменных и их использование. Позволяет легко получить всю цепочку, по которой происходит работа с переменной: присвоение, передача значения, использование к качестве параметра процедуры и т.д.
Недостатки:
1) ActiveMD не позволяет открывать файлы ert, но это ограничение можно обойти загрузив модуль обработки из текстового файла.
2) Не оптимальный алгоритм парсинга программного кода
3) Неверная работа с переменными, если имена глобальной переменной совпадает с именем локальной переменной.
4) При построении дерева вызовов учитывается рекурсия только в том случае, если процедура вызывает саму себя. Если рекурсия имеет более сложный характер (две процедуры вызывающие взаимно друг друга), то программа зацикливается.

Скачать файлы

Наименование Файл Версия Размер
-
.1216411025 15,72Kb
25.09.09
372
.1216411025 15,72Kb 372 Скачать бесплатно

См. также

Комментарии
1. Vlad (VladimirKuzn) 23.07.08 06:32 Сейчас в теме
Доступ к модулю закрыт паролем, видимо разработчик является таким же программистом, о котором пишет. Т.к. при общем доступе, как то не корректно закрывать модуль
2. Майкопчанин (Майкопчанин) 80 23.07.08 09:31 Сейчас в теме
Не вижу состава преступления, разве в правилах это как-то определено? Моя разработка, что хочу, то и делаю. А потом пароль на модуль в 1с - это такая формальность...
3. Sergey (AmigoKZ) 23.07.08 09:50 Сейчас в теме
рез=МД.Открыть(СокрЛП(Конфа),Пароль);
{D:\DATA_1C\TS\KOMPLEKSNAYAFREE\EXTFORMS\АНАЛИЗАТОРКОДА.ERT(1440)}: Поле агрегатного объекта не обнаружено (Открыть)

Что за хрень? :-) (ActiveMD ver04 beta)
4. Sergey (AmigoKZ) 23.07.08 10:38 Сейчас в теме
Вопрос снимаю, с v2 все нормально
5. V. L. (Vladal) 410 23.07.08 11:30 Сейчас в теме
(1) А у меня пароль не спрашивает...
6. V. L. (Vladal) 410 23.07.08 11:35 Сейчас в теме
Автор - молодец! Полезная штука
7. soll79 (soll79) 24.07.08 09:25 Сейчас в теме
А вот где бы найти ActiveMD v2?
Поможет кто?
8. Майкопчанин (Майкопчанин) 80 24.07.08 10:45 Сейчас в теме
9. soll79 (soll79) 24.07.08 10:56 Сейчас в теме
Благодарю.
Хотя можно было бы и не так грубо.
10. Майкопчанин (Майкопчанин) 80 24.07.08 11:17 Сейчас в теме
Сорри, это была не грубость, а неподдельное удивление :)
и спасибо за плюсик...
11. soll79 (soll79) 24.07.08 11:40 Сейчас в теме
12. Олег Пономаренко (O-Planet) 6658 24.07.08 15:39 Сейчас в теме
Кстати, у Абадонны есть пример, как ActiveMD с ert работает...
13. Майкопчанин (Майкопчанин) 80 24.07.08 23:17 Сейчас в теме
2(12) что-то я ничего не нашел. Возможно плохо искал... Если и буду переделывать прогу, то впредь буду использовать Compound.dll и писать буду скорей всего не на 1с - уж больно медленно текст обрабатывается.

Если кому то уж очень хочется анализировать код внешних обработок, то можно рекомендовать следующий рецепт: в конфе добавить "лишнюю" обработку или отчет и туда загружать еэртэшку.
14. aspirator 23 (aspirator23) 291 16.08.08 09:13 Сейчас в теме
Разворачиваю обработку на полный экран, затем сворачиваю "взад". Все поля, элементы диалога и таблицы обработки "поплыли", кроме закладок Диалог и Модуль. На закладке Переменные и Реквизиты это заметно, если пощелкать по Переменным, Ревизитам. На Закладке Подключение кнопку Читать нажать уже не удается - попадешь на флаг.

Открываю ТиС 952 Справочник Контрагенты, формаЭлемента. Нажимаю Читать. Читает, одновременно выдает сообщение
Формула = СписокПараметров.ПолучитьЗначение(12);
{F:\UTILITS\АНАЛИЗАТОРКОДА\АНАЛИЗАТОРКОДА.ERT(1023)}: Индекс не входит в границы списка значений.
15. aspirator 23 (aspirator23) 291 16.08.08 09:22 Сейчас в теме
Вдогонку. На закладке Модуль неясен смысл символов в первых двух колонках. Краткое описания не помешало бы, хотя бы для неочевидных вещей. Можно конечно по коду обработки разобраться, но как уже написано выше стоит пароль.
16. Терминатор (константин) 571 05.12.08 21:48 Сейчас в теме
Однозначно, ставлю плюс
17. Сергей (Che) Коцюра (CheBurator) 3371 03.03.10 11:49 Сейчас в теме
А положить в архив АктивМД - религия не позволяет?
18. Сергей (Che) Коцюра (CheBurator) 3371 03.03.10 11:50 Сейчас в теме
19. Майкопчанин (Майкопчанин) 80 03.03.10 12:58 Сейчас в теме
(18) Спасибо, а то предыдущая ссылка в посте № 8 уж совсем затерялась.
;)
20. Ирина Ситникова (ir.sitnikowa) 21.04.10 15:00 Сейчас в теме
21. Глеб Терещенко (baikot) 08.11.13 20:41 Сейчас в теме
А как ее запустить, подскажите! Пароль какой?
22. Глеб Терещенко (baikot) 11.11.13 11:35 Сейчас в теме
(2) Майкопчанин, Толкаете на преступление!
Но, всё равно, спасибо за обработку!
23. Алекс Маслюков (Alex_1066) 22.04.14 17:19 Сейчас в теме
И как с этой обработкой работать.. При открытии выдаёт "Неудачная попытка подключения внешней компоненнты ActiveMD". Открыть в конфигураторе обработку и подкорректировать нет возможности - запоролено.... Можно конечно сказать автору спасибо... ну и ладно.. скажем.. не жалко.. :(
24. Алекс Маслюков (Alex_1066) 23.04.14 12:05 Сейчас в теме
Подключил...как и у (14)Тоже выскакивает...
Формула = СписокПараметров.ПолучитьЗначение(12);
{Z:\WORK\АНАЛИЗАТОРКОДА.ERT(1023)}: Индекс не входит в границы списка значений.
РеквизитМета = СписокПараметров.ПолучитьЗначение(13);
{Z:\WORK\АНАЛИЗАТОРКОДА.ERT(1024)}: Индекс не входит в границы списка значений.
25. Петр Лунегов (pvlunegov) 93 08.12.16 08:29 Сейчас в теме
27. Петр Лунегов (pvlunegov) 93 08.12.16 09:23 Сейчас в теме
Поправил файл обработки. Запустил в нестандартной базе 1с 7.
Вроде стало работать. Буду тестировать дальше. Если найду ошибки, буду вручную исправлять ошибки в коде.
Горе-автор непрофессионально пишет код.
Корявые ошибки исправил в коде. сами посудите. Из кода:

типКолонки = СписокПараметров.ПолучитьЗначение(1);
типПоля = СписокПараметров.ПолучитьЗначение(4);
Если типКолонки = "2" Тогда //Это номер строки
	Продолжить;
КонецЕсли;
тФорма.НоваяСтрока();
тФорма.Заголовок = СписокПараметров.ПолучитьЗначение(2);
тФорма.ТЧ = 1;
тФорма.ЭлементУправления = типПоля;
тФорма.Идентификатор = СписокПараметров.ПолучитьЗначение(8);
тФорма.Формула = СписокПараметров.ПолучитьЗначение(7);
...Показать Скрыть


Конструкции типа СписокПараметров.ПолучитьЗначение(2) Повсеместно в коде вызывали ошибки!
Таких конструкций надо или избегать, или ставить проверки.
Я исправил код так:

типКолонки = ?(СписокПараметров.РазмерСписка()<1 ,"",СписокПараметров.ПолучитьЗначение(1));
типПоля = ?(СписокПараметров.РазмерСписка()<4 ,"",СписокПараметров.ПолучитьЗначение(4));
Если типКолонки = "2" Тогда //Это номер строки
	Продолжить;
КонецЕсли;
тФорма.НоваяСтрока();
тФорма.Заголовок = ?(СписокПараметров.РазмерСписка()<2 ,"",СписокПараметров.ПолучитьЗначение(2));
тФорма.ТЧ = 1;
тФорма.ЭлементУправления = типПоля;

тФорма.Идентификатор 	= ?(СписокПараметров.РазмерСписка()<8 ,"",СписокПараметров.ПолучитьЗначение(8));
тФорма.Формула 			= ?(СписокПараметров.РазмерСписка()<7 ,"",СписокПараметров.ПолучитьЗначение(7));
...Показать Скрыть