|
Professor Seleznov
|
 MetaVision for 1C Хорошулин Андрей Викторович, разработчик.
 Откуда взялась идея Я 1С-разработчик с десятилетним стажем. Думаю, вы тоже проходили через это: открываешь модуль чужой конфигурации, а там 50 тысяч строк. Чтобы понять, кто кого вызывает, где открывается транзакция и почему документ проводится полчаса, ты вооружаешься блокнотом, Ctrl+F и собственным воображением. В голове пытаешься удержать граф вызовов, а глаз дёргается от попытки найти парный оператор «КонецЕсли» где-то на строке 17 432. Платформа 1С за все годы так и не дала нам:
- визуализации логики функций,
- карты зависимостей между методами,
- статического анализатора уязвимостей,
- поиска узких мест производительности,
- нормального полнотекстового поиска по всей кодовой базе.
В какой-то момент я устал ждать и написал MetaVision for 1C. Это десктоп-приложение, которое загружает выгруженную конфигурацию и делает всю грязную работу по анализу за вас. Проект опубликован на Инфостарте, а исходный код выложен на GitHub под лицензией MIT. В этой статье я расскажу:
- Как устроен MetaVision изнутри и почему он работает быстро,
- Какие реальные проблемы он решает (с конкретными примерами находок),
- Почему интерфейс получился интуитивным с первого запуска,
- Что уже нашли в реальных конфигурациях за первые месяцы использования,
- И что будет дальше.
Как это работает: архитектура без магии Расскажу про технические решения, потому что многие спрашивают. Парсинг конфигурации. Программа берёт XML-файлы выгрузки конфигурации и разбирает их напрямую. Никаких COM-соединений с платформой 1С, никаких внешних зависимостей. Написано на C#, данные хранятся в SQLite. Загрузка конфигурации размером ~8 Гб (типовая ERP) занимает 5–7 минут на машине с 32 Гб ОЗУ и SSD. База данных приложения при этом весит примерно 70% от размера исходных файлов. Почему не BSL Language Server. BSL — отличный проект с глубоким синтаксическим разбором. Но для моих задач он избыточен. Мне нужен был быстрый парсер, который выделяет:
- структуру функций (условия, циклы, транзакции, блокировки),
- вызовы методов,
- вложенность конструкций,
- потенциально опасные паттерны.
Поэтому я написал собственный анализатор подмножества языка 1С. Он легче, быстрее и заточен именно под те задачи, которые решает MetaVision. Безопасность превыше всего. Программа работает полностью локально. Код вашей конфигурации не отправляется в интернет, не анализируется на сторонних серверах, не передаётся третьим лицам. Единственная сетевая активность — проверка обновлений самой программы и анонимная статистика использования (без единой строчки вашего кода). Исходный код открыт — можете убедиться лично. Почему интерфейс получился интуитивным Я делал MetaVision в первую очередь для себя. А когда делаешь инструмент для собственной ежедневной работы — интерфейс получается удобным естественно, без спринтов, дизайн-макетов и фокус-групп. Вот ключевые моменты. Первое, что видишь — дерево метаданных. Оно работает быстрее, чем в конфигураторе. Клик по объекту — и сразу видишь список его функций с иконками и счётчиком. Выбираешь функцию — и моментально получаешь три вещи:
- Граф структуры функции (узлы: условия, циклы, транзакции, вызовы).
- Полный текст функции с подсветкой синтаксиса.
- Список тех, кто эту функцию вызывает.
Двусторонняя навигация между графом и кодом работает мгновенно. Кликнул по узлу на графе — строка в коде подсветилась. Кликнул по строке — узел на графе подсветился. Это настолько естественно, что через пять минут после запуска ты уже не понимаешь, как жил без этого раньше. Граф можно крутить, масштабировать, сохранять в PDF. Для больших функций (а мне попадались экземпляры на 200+ узлов) это незаменимо. Визуализация делает понятным то, что в тексте скрыто за десятками вложенных конструкций. Все проверки доступны в один клик. Открыл вкладку «Сканер проблем» — нажал кнопку «Безопасность» — получил список всех уязвимостей с описанием, уровнем критичности и рекомендациями. Никаких конфигурационных файлов, никаких сложных настроек порогов срабатывания. Всё готово к работе сразу. Шесть вкладок, которые закрывают основные боли Расскажу про каждую вкладку коротко, но с примерами — чтобы было понятно, что именно MetaVision даёт разработчику. 1. Анализатор кода Центральная вкладка. Дерево метаданных → список функций → граф + код. В этой вкладке проходит 80% работы по изучению незнакомой конфигурации. Пример из жизни: приходит жалоба, что документ долго проводится. Открываешь функцию проведения — на графе видны три вложенных цикла и транзакция внутри. Причина понятна за 20 секунд, хотя в коде это было размазано на 800 строк.
 2. Работа с модулем Компактная IDE для бытовых задач: преобразование запросов (вертикальные черты ↔ обычный текст), проверка синтаксических ошибок (незакрытые скобки, нарушенные блоки Если/КонецЕсли), автоформатирование, проверка орфографии в комментариях и строках через Яндекс.Спеллер. Мелочи, которые экономят кучу времени, когда под рукой нет полноценной IDE. 3. Поиск по модулям Полнотекстовый поиск по всем модулям конфигурации. Ввёл название метода — получил таблицу с контекстом и мгновенным переходом к коду. В отличие от штатного поиска 1С, работает молниеносно и ищет по всей конфигурации сразу. 4. Сканер проблем в коде То, ради чего ко мне приходят безопасники и тимлиды. Шесть направлений проверок: безопасность (RCE, SSRF, COM-инъекции, пароли в коде), многопоточность (фоновые задания без обработки ошибок), транзакции (корректность закрытия, диалоги внутри транзакций), блокировки (вызовы внутри циклов, рекурсия), плохие имена переменных (a, b, tmp, сч), доступ к реквизитам через точку внутри циклов. Каждая проблема сопровождается понятным описанием, уровнем опасности и рекомендацией по исправлению. При выборе проблемы сразу подсвечивается нужная строка в коде. 5. Производительность Два режима: поиск запросов внутри циклов (с оценкой глубины вложенности) и анализ вложенных конструкций. Строит граф цепочки вызовов, показывая, как проблема «путешествует» между функциями. Это позволяет находить узкие места, которые размазаны по нескольким модулям и почти невидимы при ручном анализе.
 6. Статистика Панорамный взгляд на конфигурацию: количество объектов, модулей, функций, циклов, транзакций, блокировок, запросов. Диаграммы распределения и таблица метаданных. Полезна тимлидам для оценки сложности проекта, обоснования рефакторинга перед руководством и сравнения версий конфигурации.
 Что мы уже нашли в реальных проектах Самое интересное — это результаты. Вот несколько реальных находок, которые лично меня впечатлили (названия компаний не называю, но это живые проекты): Уязвимости безопасности
- В одной крупной ERP нашли 4 вектора SSRF в HTTP-сервисах. Код работал в продакшене несколько лет.
- Там же обнаружили COM-инъекцию в обработке 10-летней давности. Никто не знал.
- В разных проектах регулярно находятся пароли и секреты в комментариях — то, что разработчики оставляли для отладки и забывали удалить.
Проблемы производительности
- Более 30 запросов внутри циклов в legacy-конфигурации 1С:ERP.
- 12 незакрытых транзакций, которые приводили к плавающим блокировкам.
- Цепочка «цикл → транзакция → блокировка», растянутая между тремя функциями в разных модулях. На графе она видна целиком, глазами её найти практически невозможно.
Технический долг В одном проекте сканер нашёл больше 1500 переменных с именами a, b, tmp, сч. Тимлид был в шоке. После первого прогона команда сократила время на код-ревью примерно втрое — просто потому, что инструмент сразу подсвечивает то, что обычно ищут часами. Кому это реально нужно MetaVision я делал для себя, но оказалось, что он нужен целой экосистеме специалистов. Вот кто, на мой взгляд, получит максимум пользы:
- Разработчики 1С — быстрое понимание чужого кода, визуализация сложных функций, раннее выявление проблем производительности.
- Техлиды и архитекторы — аудит кода команды без ручного чтения тысяч строк, объективные метрики сложности, контроль качества перед релизами.
- Аудиторы и консультанты — быстрая оценка чужой конфигурации с отчётами и наглядными графами для заказчика.
- Специалисты по безопасности — автоматический поиск уязвимостей, паролей и опасных вызовов во всей кодовой базе.
- Преподаватели и менторы — визуальное объяснение структуры кода студентам, демонстрация «плохих» паттернов на реальных примерах.
Планы развития Текущая версия — это только начало. Вот что в ближайших планах:
- Поддержка нескольких конфигураций одновременно и сравнение между ними.
- Полноценная работа с расширениями (анализ перекрытий, конфликтов, точек внедрения).
- Анализ ролей и прав доступа с построением матриц.
- Интеграция с CI/CD для автоматического аудита при сборке.
- Типизация функций и интеллектуальный анализ типов.
MetaVision — не разовая утилита, а платформа, которая будет расти вместе с потребностями сообщества. Каждое скачивание, каждый отзыв, каждое сообщение об ошибке — это топливо для развития. Почему это важно для сообщества MetaVision — мой вклад в 1С-экосистему. Я хочу, чтобы у разработчиков наконец появился удобный, быстрый и интуитивный инструмент для анализа кода. Не нужно больше тратить часы на рутинный поиск, рисовать графы в блокноте или гадать, что скрывается в модуле на 80 тысяч строк. Инструмент полностью бесплатный. Исходный код открыт под лицензией MIT: https://github.com/AndreyHhh/MetaVision. Вы можете не только пользоваться, но и изучать код, модифицировать под свои задачи, распространять копии. Скачайте MetaVision сегодня. Проверьте свою конфигурацию. Возможно, вы найдёте то, о чём даже не подозревали. А если инструмент окажется полезным — поставьте звезду на GitHub, расскажите коллегам, напишите отзыв. Это прямо влияет на скорость разработки и появление новых возможностей. Сделано с заботой о времени разработчиков 1С. Потому что своё время жалко.-Источник
|