Обработка поиска дублей кода. Исходного кода модулей 1С

22.04.11

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

Цель разработки - помочь в поиске похожих блоков кода для дальнейшего выделения их в отдельные процедуры.

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

Наименование Файл Версия Размер
ПоискПохожегоПрограммногоКода.epf
.epf 696,03Kb
220
.epf 696,03Kb 220 Скачать бесплатно

Эпиграф

"Парад дурных запахов открывает дублирующийся код. Увидев одинаковые кодовые структуры в нескольких местах, можно быть уверенным, что если удастся их объединить, программа от этого только выиграет

Кент Бек и Мартин Фаулер "Рефакторинг. Улучшение существующего кода"

Для чего нужно

Повторяющийся код - это плохо.

Повторяющийся код - это практически неизбежно.

Речь, конечно, идёт о проектах,  объём исходного кода которых измеряется мегабайтами.

Цель данной разработки - помочь в поиске похожих блоков кода для дальнейшего выделения их в отдельные процедуры.

 

Умные слова

Блок кода - последовательность операторов, заключённая между двумя ключевыми словами языка 1С.

Лексема - минимальная значащая единица языка 1С. В этом смысле оператор "+" и строковая константа на 3 экрана равнозначны.

Сигнатура блока - строка, обобщённо описывающая блок кода. Может быть одинаковой для блоков, текст которых отличается.

Как работает

Для модуля строится синтаксическое дерево алгоритма, после чего каждой ветви дерева сопоставляется сигнутура.

При составлении сигнатуры предполагается, что значения имеют ключевые слова 1С, операторы, имена функций/методов и типы констант. Для единообразия сигнатуры операторов и методов выглядят одинаково.


Таким образом сигнатуры Сообщить("Привет, Мир!") и Сообщить("Мама мыла раму") будут одинаковыми, а Сообщить("Привет, Мир!") и Предупреждение("Привет, Мир!") - разными. 

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

Предуведомление

Для создания вспомогательных структур данных обработка использует внешнюю компоненту, расположенную в макете обработки. На данный момент компонента может быть несовместима с платформой "1С: Предприятие 8.2"

Как с этим работать

В окне "Поиск и просмотр дублей" можно как запустить поиск дублей кода, просмотреть результаты сохранённого ранее поиска.

 

Параметры поиска:

Минимальная сигнатура - сигнатуры меньшей длины в результат поиска не включаются. Длина сигнатуры примерно в 2.5-3 раза больше количества лексем в блоке.

Минимальная подпоследовательность - количество строк кода, считающееся отдельным блоком. Если 0 - учитываются только блоки, заключённые между Цикл ... КонецЦикла, Тогда ... КонецЕсли и т.д.

Не учитывать тип констант - делает сигнатуры для кода переменная = 1, переменная = "1" и переменная = другаяПеременная идентичными.

Поиск:

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

 

Результаты поискка:

По окончании поиска или загрузки ранее сохранённого поиска в нижней части формы заполняются списки найденных блоков с одинаковой сигнатурой.

В левом списке перечисляются дубли в формате "{количество дублей}:{длина сигнатуры}"

При выборе одного из них в правом верхнем выводится список блоков в формате "[{начальная строка блока} .. {конечная строка блока} @ {имя файла модуля}] {первая строка блока}"

Ниже выводится сама сигнатура.

При выборе одного из блоков открывается окно с текстом его исходного кода.

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

 

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    121569    670    389    

710

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7257    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3492    11    1    

33

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177720    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

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

5000 руб.

07.02.2018    99336    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

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

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18097    6    8    

39

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28089    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

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

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23592    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. German 413 12.04.11 16:57 Сейчас в теме
супер, сейчас пробежимся по УПП ;)
2. artbear 1448 12.04.11 17:15 Сейчас в теме
Самое главное в обработке описано совсем слегка :(
Цитата: "Сигнатура блока - строка, обобщённо описывающая блок кода. Может быть одинаковой для блоков, текст которых отличается."
Поясни, плиз, подробнее.
И еще бы примеры блоков кода и сигнатур увидеть.
4. bk-81 50 12.04.11 18:03 Сейчас в теме
(2)
Самое главное в обработке описано совсем слегка

Цитата: "Сигнатура блока - строка, обобщённо описывающая блок кода. Может быть одинаковой для блоков, текст которых отличается."

Алгорим составления сигнатуры находится в обработке и, вроде как, должен быть легко понятен целевой аудитории

Поясни, плиз, подробнее.

При составлении сигнатуры предполагается, что значения имеют ключевые слова 1С, операторы, имена функций/методов и типы констант. Для единообразия сигнатуры операторов и констант выглядят одинаково.

Таким образом сигнатуры {Сообщить("Привет, Мир!")} и {Сообщить("Мама мыла раму")} будут одинаковыми, и {Сообщить("Привет, Мир!")} и {Предупреждение("Привет, Мир!")} - разными.

И еще бы примеры блоков кода и сигнатур увидеть.

А для этого должно быть достаточно скормить обработке не сильно пострадавший от рефакторинга кусок кода.
Если что-то не работает или остаётся непонятным - я по мере сил готов прояснить.
3. bk-81 50 12.04.11 17:53 Сейчас в теме
German пишет:

супер, сейчас пробежимся по УПП

Это если только по каждому модулю отдельно.
Пакетная работа предусмотрена, но до конца не реализована.
Доработки в этом направлении приветствуются, но и сам со временем допишу.
Опять-таки в тестовом прогоне на 30 Мб. исходного кода была отмечена ошибка платформы.
5. Поручик 4670 12.04.11 23:56 Сейчас в теме
>>>>>Умные слова
Лучше: Не для средних умов. Или: Не для ламеров. И вынести в заголовок.
6. bk-81 50 13.04.11 00:03 Сейчас в теме
(5) Я ещё определяюсь в терминологии и осваиваюсь с местным редактором. Этот этот "едитор" и без того половину разметки мне потерял.
7. Поручик 4670 13.04.11 00:08 Сейчас в теме
Местный редактор - это широко известный в узких кругах TinyMCE (пруф), вещь упоротая и нормально не работающая, по-моему, нигде.
8. bk-81 50 13.04.11 00:20 Сейчас в теме
(7)
Местный редактор - это широко известный в узких кругах TinyMCE

Я так и думал, но проверять желания даже не возникало. Мне JCE более симпатичен.
вещь упоротая и нормально не работающая, по-моему, нигде.

Ну не настолько же, чтобы цвет текста изменить не мог... Впрочем фигня на фоне дня космонавтики.
15. An-Aleksey 64 13.04.11 15:29 Сейчас в теме
Похоже, до выяснения флаг "1С: Предприятие 8.2" с материала придётся снять.

С 8.2 не связанно - установил 8.1, запустил - теперь из программы не вылетает, но шлет в конфигуратор:

{ВнешняяОбработка.ПостоительДерева(8)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней компоненты
ЗагрузитьВнешнююКомпоненту(ПутьЛексемизатора + "\Lexer.dll");
16. bk-81 50 13.04.11 15:44 Сейчас в теме
(15) Кроме проблем с правами пользователя и, с меньшей вероятностью, нехваткой каких-либо библиотек, в голову ничего не приходит.
9. An-Aleksey 64 13.04.11 12:43 Сейчас в теме
Запуск внешней компоненты Translator.dll отваливается по ошибке системы.
Зависит-ли работа от винды? (Пробовал на 7-ой)
10. bk-81 50 13.04.11 12:56 Сейчас в теме
(9)
Запуск внешней компоненты Translator.dll отваливается по ошибке системы.

На какой из операций - ЗагрузитьВнешнююКомпоненту, Новый("AddIn.Translator") или Лексемизатор.ПостроитьДеревоКода?
Сообщение об ошибке стандартное или платформа падает в дамп?
Зависит-ли работа от винды? (Пробовал на 7-ой)

В основном от прав пользователя зависит. Сам проверял на Ultimate 7 x64
11. An-Aleksey 64 13.04.11 13:17 Сейчас в теме
На какой из операций - ЗагрузитьВнешнююКомпоненту, Новый("AddIn.Translator") или Лексемизатор.ПостроитьДеревоКода?
Сообщение об ошибке стандартное или платформа падает в дамп?

На операции ЗагрузитьВнешнююКомпоненту.
Стандартное сообщение винды "Прекращена работы программы "1cv8" (Искать решение в интернете / Закрыть программу).
Пробовал на нескольких машинах, стоит Windows 7 Максимальная.

Перед запуском обработку конвертировал в 8.2.
Запускал под толстым клиентом.
13. bk-81 50 13.04.11 14:25 Сейчас в теме
(11)(12)Спасибо, что помогли.

Похоже, до выяснения флаг "1С: Предприятие 8.2" с материала придётся снять.
Никогда не писал ВК для 8.2 и где-то напортачил. Буду учить мат.часть.

Тем не менее анализировать код от 8.0, 8.1 и 8.2 обработка должна с одинаковым успехом.
12. tormozit 7136 13.04.11 13:21 Сейчас в теме
Такая же проблема (при нажатии на лупу).
Windows 7 x32 Ultimate.
1С 8.2.13.218 (обычное приложение, режим совместимости выключен)

Problem signature:
Problem Event Name: APPCRASH
Application Name: 1CV8.exe
Application Version: 8.2.13.218
Application Timestamp: 4d6e57bd
Fault Module Name: StackHash_c6d1
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Code: c0000005
Exception Offset: 10cdd4cf
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1049
Additional Information 1: c6d1
Additional Information 2: c6d16f48f35e70c84b29619c9ba4cc97
Additional Information 3: 0484
Additional Information 4: 0484288381e5c7f6e1c0a5e157634e40
14. bk-81 50 13.04.11 14:31 Сейчас в теме
Внёс ряд изменений:

Убрал окно выбора файла. Теперь файл выбирается из верхнего меню.
Добавил выбор каталога исходников при просмотре сохранённых результатов.
Добавил во внешнюю компоненту обработку некоторых исключительных случаев.
17. bulpi 215 13.04.11 21:10 Сейчас в теме
Идея хорошая. Но не работает. Не загружает компоненту. Система XP SP2, 1с 8.1
Проверяй работу компоненты на разных системах. Иначе это разработка лично для тебя, а не для публикации.
18. bk-81 50 13.04.11 21:27 Сейчас в теме
(17)
Идея хорошая. Но не работает. Не загружает компоненту. Система XP SP2, 1с 8.1

Как ни странно, в кратком описании - у меня точно такая же система, как и у Вас.
Проверил. Работает.
Вас не затруднит проверить под отладчиком путь, по которому пытается загрузиться компонента и наличие такого файла на диске?
Такими мелочами, как права доступа, и настройки безопасности я даже не смею Вас беспокоить.

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

Отсуствие у меня под рукой десятка тестовых стендов является одной из причин публикации. Покорнейше прошу простить меня за отнятое у Вас моей поделкой время.
21. bulpi 215 14.04.11 00:39 Сейчас в теме
(18)
Ладно, наезд отменяю :D и прошу прощения за резкость.
Просто жалко, такая интересная публикация, а посмотреть не получается.
С путем все нормально. С правами тоже, это домашний компьютер, я на нем Бог.
И новую сборку проверил.
Может , релиз 1с 8.1 виноват. У меня старый, 8.1.12.98
19. bk-81 50 13.04.11 22:06 Сейчас в теме
Выложил с ВК, пересорбранной с другими параметрами компиляции
20. An-Aleksey 64 13.04.11 22:58 Сейчас в теме
Вас не затруднит проверить под отладчиком путь, по которому пытается загрузиться компонента и наличие такого файла на диске?
Такими мелочами, как права доступа, и настройки безопасности я даже не смею Вас беспокоить.

Путь к компоненте роли не играет - я копировал компоненту на рабочий стол и запускал по прямому пути, не помогло.
Права доступа тоже не при чем - у меня админские.
Может действительно файрвол? - Отключать и проверять уже не осталось желания ;)
22. bk-81 50 14.04.11 01:28 Сейчас в теме
(20)
Может действительно файрвол? - Отключать и проверять уже не осталось желания

Там антивирус на упаковщик мог косо смотреть. Последняя сборка - в числе прочих шаманств - не сжата.
(21)Ничего. Бывает.
Просто жалко, такая интересная публикация, а посмотреть не получается.

С путем все нормально. С правами тоже, это домашний компьютер, я на нем Бог.

Будем копать. Интересно - у кого-нибудь запустилось?

Может , релиз 1с 8.1 виноват. У меня старый, 8.1.12.98

У меня 8.1.14.72, но, боюсь, всё не так просто.
Возможно, идея каждый раз распаковывать ВК в новый временный каталог была ошибочной, или GUID из шаблона оказался где-то засвечен. По крайней мере при пересборке с новым GUID компонента отказалась грузиться и у меня. Днём посмотрю - как это отображается в реестре и технологическом журнале.
23. Арчибальд 2706 14.04.11 07:39 Сейчас в теме
Какой приятный дебют :)
24. bk-81 50 14.04.11 12:35 Сейчас в теме
(23)
Какой приятный дебют

Весеннее обострение :)
Ещё приятнее было бы разобраться с проблемой внешней компоненты - как часто и по какой причине возникает.
25. bk-81 50 17.04.11 03:09 Сейчас в теме
Воспроизвёл и скорее обошёл, чем устранил проблему загрузки внешней компоненты.
Добавил режим анализа каталога с файлами исходного кода.
Добавил сравнение средствами 1С первых двух похожих блоков из списка.
26. An-Aleksey 64 18.04.11 10:28 Сейчас в теме
Открываю файл с модулем - промелькнуло черное окно загрузки exe (уповаю на порядочность и отсутствие вируса) :)

Далее окошечко:
The application has tncountered a problem. We are sorry for the inconvenience.
Stnd Error Report | Don`t Send
:) ТА-ДА - ДАМП 1С...
28. bk-81 50 18.04.11 12:02 Сейчас в теме
(26)
Открываю файл с модулем - промелькнуло черное окно загрузки exe (уповаю на порядочность и отсутствие вируса)

А можно ещё в коде посмотреть - что за команда системы выполняется.


Далее окошечко:

The application has tncountered a problem. We are sorry for the inconvenience.

Stnd Error Report | Don`t Send

ТА-ДА - ДАМП 1С...
Что за файл загружается?
Что пишется при нажатии в окне с ошибкой ссылки "click here."?
27. cool.vlad4 2 18.04.11 10:55 Сейчас в теме
Может выложить код? прошу прощения за наглость..но может кто-нибудь поправил...вещь очень нужная и полезная...
29. bk-81 50 22.04.11 15:09 Сейчас в теме
- Исправил проблемы распознавания лексемизатором функции "Новый"
- Исправил проблему с комментариями внутр многострочных констант.
- Исправил проблему с падением платформы при ошибке лексемизатора.

+ Добавил кнопку повторного поиска без нового построения вспомогательных структур.
30. dandrontiy 12.01.12 14:31 Сейчас в теме
А кто автор translator.dll ? эта компонента имеет исходный код ? глянуть можно ?
Интересует в большей степени сам принцип чтения кода конфигурации из 1С (и есть ли возможность его программно менять ?)

А разработка мне кажется очень полезная.
31. bk-81 50 18.01.12 10:32 Сейчас в теме
(30)
А кто автор translator.dll ?
Я

эта компонента имеет исходный код ?
Да.

глянуть можно ?
Нет. Права принадлежат моему работодателю.

Интересует в большей степени сам принцип чтения кода конфигурации из 1С
Выгрузка файлов конфигурации в каталог. Сама обработка этого не делает, но сложности в этом нет - пакетный режим конфигуратора это позволяет. Или V8UnPack / EI в произвольных сочетаниях.

(и есть ли возможность его программно менять ?)
Загрузка изменённых файлов конфигурации из каталога. Или V8UnPack / EI в произвольных сочетаниях.
33. AlexO 135 30.10.12 11:12 Сейчас в теме
(31)
т.е. нужен еще и V8UnPack?
Под 8.3 ВК не понадобится - там уже планируют выгрузку в XML конфигурации.
Другой вопрос - насколько кто сумеет корректно реализовать "пробег" по всей конфе а-ля УПП...
32. tormozit 7136 30.10.12 10:53 Сейчас в теме
Ну че, так и не работает компонента на 8.2?
35. bk-81 50 30.10.12 12:22 Сейчас в теме
(32) tormozit, когда последний раз смотрел - работала. С тех пор разве что решил проблему с ЗагрузитьВнешнююКомпоненту. При случае выложу.

(33)
т.е. нужен еще и V8UnPack
Совсем не обязательно. Обработка в первую очередь рассчитана на работу с каталогом, полученный командой "Выгрузить файлы конфигурации". V8UnPack упоминался в другом контексте.
Под 8.3 ВК не понадобится - там уже планируют выгрузку в XML конфигурации
ВК делает совсем другие преобразования. Не думаю, что даже 8.8 будет выгружать синтаксическое дерево алгоритмов. Если я не ошибаюсь, то что действительно не понадобится - так это преобразование сериализованних форм в XML для получения списка реквизитов.

(34)
Повторяющийся код - это стиль 1С
Не читал таких руководств по стилю :)
Повторяющийся код - это неизбежно, пока 1С будет делать то, что она делает уже почти 20 лет
Наверное я чего-то не знаю... Что же такое делается всё это время?
Просьба сменить эпиграф на более актуальный - все-таки ресурс по 1С :)
Оставлю, всё же, как есть. Пара лет внедрения в проект элементов АОП ещё больше убедили меня в его правильности.
34. AlexO 135 30.10.12 11:15 Сейчас в теме
Повторяющийся код - это плохо.
Повторяющийся код - это практически неизбежно.

Повторяющийся код - это стиль 1С.
Повторяющийся код - это неизбежно, пока 1С будет делать то, что она делает уже почти 20 лет.
Просьба сменить эпиграф на более актуальный - все-таки ресурс по 1С :)
36. ildarovich 7850 12.09.13 10:09 Сейчас в теме
Интереснейшая тема. Нельзя ли побольше узнать об истории разработки:
- как возникла идея;
- откуда терминология, методика ("сигнатуры", синтаксическое дерево алгоритма) - из книжки?(какой?);
- сколько длился проект (дипломный?);
- чем закончился;
- используется ли сейчас;
- это случайно не "ИжТиСи";
- почему ВК, на чем сделано, какой объем кода;
- был ли коммерческий интерес.
37. Angel_19 6 23.09.19 08:59 Сейчас в теме
Получаю ошибку:

{ВнешняяОбработка.ПоискПохожегоПрограммногоКода.Форма.ПросмотрДублей.Форма(143)}: Индекс находится за границами массива
МетодыМодуля = СтруктураОбъекта.Строки[0].Строки.НайтиСтроки(Новый Структура("Тип", 3));
Оставьте свое сообщение