Разработка и Конфигурация · 12 мин
Как анализировать код 1С: инструменты и практические приёмы
Как анализировать код 1С: конфигуратор, отладчик, замеры производительности, поиск по модулю, типичные ошибки и инструменты проверки качества кода.
Анализ кода 1С нужен в трёх типичных ситуациях: когда в базе возникла ошибка и нужно найти её источник, когда конфигурация работает медленно и требуется найти «узкое место», и когда вы принимаете чужую доработку и должны понять, что она делает, не сломает ли типовые механизмы. Во всех случаях работа строится одинаково: сначала локализация проблемного участка, затем чтение логики, затем проверка гипотезы.
Основные инструменты уже встроены в платформу: конфигуратор с глобальным поиском по модулям, отладчик с точками останова и вычислением выражений, замер производительности и технологический журнал. Для статического анализа качества кода применяются внешние решения вроде 1C:EDT с проверками или SonarQube с плагином для языка BSL. Ниже разобрано, как использовать каждый из этих инструментов и в каком порядке.
С чего начать: локализация участка кода
Прежде чем читать код, нужно понять, где он находится. Если известен текст ошибки, скопируйте ключевой фрагмент сообщения и выполните глобальный поиск по конфигурации: меню «Правка → Глобальный поиск» или сочетание Ctrl+Shift+F в конфигураторе. Поиск по тексту сообщения обычно приводит прямо в процедуру, которая его вызывает.
Если ошибки нет, но нужно понять, как работает прикладной механизм (например, проведение документа), начните с объекта метаданных: откройте документ в дереве конфигурации, перейдите в модуль объекта и найдите обработчик ОбработкаПроведения. Оттуда по вызовам процедур и функций (Ctrl+клик или F12 по имени) можно пройти в общие модули, где сосредоточена основная логика.
Полезно сразу выяснить, типовой это код или доработка. Для этого сравните конфигурацию с конфигурацией поставщика («Конфигурация → Поддержка → Настройка поддержки») или посмотрите комментарии-метки, которыми разработчики обычно обрамляют изменения. Доработанный код анализируется в первую очередь: большинство проблем после обновлений возникает именно в нём.
Ищите фрагмент сообщения через Ctrl+Shift+F по всем модулям
Начинайте с замера производительности и технологического журнала
Сначала сравните с типовой конфигурацией и найдите доработки
Используйте точки останова с условием и технологический журнал
Чтение и навигация по модулям в конфигураторе
Модуль в 1С имеет структуру: раздел описания переменных, основная программа, раздел процедур и функций. В больших модулях ориентируйтесь через список процедур — кнопка со стрелкой вниз в правом верхнем углу окна модуля или сочетание Ctrl+Alt+P. Это быстрее, чем прокрутка на тысячи строк.
Ключевой приём — переход к определению: поставьте курсор на имя процедуры или функции и нажмите F12. Обратное действие — поиск всех мест, откуда вызывается процедура: правый клик по имени → «Найти использование». Это позволяет построить цепочку вызовов в обе стороны и понять, кто и при каких условиях запускает интересующий код.
Обращайте внимание на директивы компиляции: &НаСервере, &НаКлиенте, &НаСервереБезКонтекста. Они определяют, где выполняется код и какие данные ему доступны. Частая причина ошибок «Метод объекта не обнаружен» — попытка вызвать серверную функцию из клиентского контекста или наоборот. Также проверяйте признаки модуля: «Сервер», «Вызов сервера», «Привилегированный режим» — от них зависит, будет ли доступен модуль в нужном контексте и с какими правами он выполняется.
Отладчик: как проверить гипотезу на живых данных
Чтение кода даёт гипотезу, отладчик её подтверждает. Подключите отладку в конфигураторе («Отладка → Подключение»), убедившись, что в свойствах нужного предмета отладки включён режим отладки. Для серверного кода на клиент-серверной базе отладка должна быть разрешена на сервере (флаг -debug в параметрах службы агента или в консоли кластера).
Точки останова ставятся кликом по полю слева от строки или клавишей F9. Для плавающих ошибок используйте условные точки останова: правый клик по точке → «Точка останова с условием», например останов только когда СтрокаТаблицы.Сумма < 0. Это избавляет от сотен лишних остановов в циклах.
Во время останова используйте три приёма: табло (Ctrl+Alt+W) для вычисления произвольных выражений, стек вызовов для понимания, откуда пришло выполнение, и «Шаг через» (F10) / «Шаг в» (F11) для прохода по логике. Табло особенно ценно: в нём можно не только посмотреть значение переменной, но и развернуть структуру, таблицу значений или результат запроса и увидеть реальные данные в момент выполнения.
- 1Воспроизведите ошибку и зафиксируйте точный текст сообщения
- 2Найдите место формирования сообщения глобальным поиском
- 3Поставьте точку останова на несколько строк выше и подключите отладку
- 4Повторите действие пользователя и дождитесь останова
- 5Изучите стек вызовов и значения переменных в табло
- 6Поднимитесь по стеку до точки, где данные ещё корректны — источник ошибки между этой точкой и местом падения
Анализ производительности: замер и технологический журнал
Если код работает правильно, но медленно, чтение модулей малоэффективно — нужен замер. В конфигураторе: «Отладка → Замер производительности → Начать замер», затем выполните медленную операцию и остановите замер. Результат покажет, сколько раз вызывалась каждая строка кода и сколько времени она заняла в сумме и в среднем.
Интерпретируя замер, смотрите не только на процент времени, но и на количество вызовов. Классическая проблема — запрос в цикле: одна строка с выполнением запроса, вызванная тысячи раз. Решение в таких случаях архитектурное: вынести запрос из цикла, собрать данные одним пакетным запросом или использовать временные таблицы.
Когда «горячая» строка — это запрос, переходите к технологическому журналу: включите сбор событий DBMSSQL/DBPOSTGRS и TLOCK через файл logcfg.xml на сервере. Журнал покажет реальный SQL-текст запроса, длительность и блокировки. Долгий запрос анализируйте планом выполнения в СУБД: типичные причины — отсутствие индекса по условию отбора, соединение с виртуальной таблицей без отбора, функции над полями в условии.
Статический анализ качества кода
Когда нужно оценить не одну ошибку, а состояние всего кода доработок, используют статический анализ — проверку модулей без выполнения. Встроенный минимум есть в конфигураторе: «Конфигурация → Проверка конфигурации» с включённым поиском логических ошибок и проверкой модулей. Он находит синтаксические ошибки, обращения к несуществующим объектам и часть типовых дефектов.
Более глубокий анализ даёт 1C:EDT: среда содержит сотни проверок — от неиспользуемых переменных и устаревших методов до потенциальных обращений к неопределённым значениям. Альтернатива для командной разработки — SonarQube с плагином для языка BSL, который встраивается в конвейер и проверяет код при каждом коммите.
Отдельное направление — проверка на соответствие стандартам разработки фирмы «1С»: составление запросов, работа с исключениями, использование НайтиПоНаименованию вместо поиска по коду и т.п. Такие проверки полезны при приёмке доработок от подрядчика: они формализуют то, что иначе пришлось бы вычитывать вручную.
Инструменты анализа кода 1С
Подходит для точечного разбора ошибки или медленной операции; не масштабируется на аудит всей конфигурации
Быстрый встроенный контроль синтаксиса и обращений к метаданным; логические и архитектурные дефекты почти не находит
Глубокий статический анализ и проверки стандартов; требует переноса проекта в формат EDT
Автоматический контроль качества в конвейере разработки; требует настройки инфраструктуры и хранения кода в git
Типичные дефекты, которые стоит искать в первую очередь
Опыт приёмки доработок показывает, что большинство проблем концентрируется в нескольких повторяющихся паттернах. Зная их, можно выборочно просматривать код и находить дефекты без полного чтения всех модулей.
Ищите глобальным поиском характерные конструкции: Выполнить( и Вычислить( (риск исполнения произвольного кода и скрытых ошибок), Попытка ... Исключение КонецПопытки с пустым обработчиком (ошибки «проглатываются» и диагностика становится невозможной), обращения к СУБД в циклах, прямое изменение объектов в обход обработчиков проведения.
Анализ запросов и работы с данными
Запросы — самая ресурсоёмкая часть кода 1С, поэтому им уделяйте отдельное внимание. Читайте текст запроса целиком: какие таблицы соединяются, есть ли отборы по индексированным полям, не тянется ли «выборка всего» с последующей фильтрацией в коде. Конструктор запроса (правый клик по тексту → «Конструктор запроса») помогает визуально разобрать сложные соединения.
Особо проверяйте обращения к виртуальным таблицам регистров (Остатки, Обороты, СрезПоследних): без параметров периода и отборов они строятся по всей таблице регистра и на больших базах выполняются долго. Правильный паттерн — передавать период и условия параметрами виртуальной таблицы, а не фильтровать результат после.
Как проверить результат анализа
Исправление устраняет ошибку и подтверждено отладчиком на тех же данных
Ошибка исчезла случайно или перешла в другое место — причина не найдена
Повторный замер показывает снижение времени и числа обращений к СУБД
Время не изменилось — оптимизирован не тот участок
Список замечаний разобран, критичные исправлены, остальные зафиксированы
Проверка запущена, но замечания никто не разбирал
FAQ
Можно ли анализировать код 1С без доступа к конфигуратору?
Частично. Внешние обработки и расширения можно открыть в 1C:EDT, выгрузить конфигурацию в файлы XML и изучать текстом. Но полноценная отладка и замеры требуют конфигуратора и прав разработчика на базе.
Как найти, где в коде формируется конкретное сообщение об ошибке?
Скопируйте уникальный фрагмент текста сообщения и выполните глобальный поиск (Ctrl+Shift+F) по всем модулям конфигурации, включая модули расширений. Если сообщение собирается из частей, ищите самое длинное неизменяемое словосочетание.
Что делать, если ошибка возникает только у одного пользователя?
Проверьте права, функциональные опции и персональные настройки этого пользователя — часто код ветвится по этим условиям. Подключите отладку под его сеансом или воспроизведите ситуацию на копии базы с его данными и настройками.
Чем замер производительности отличается от технологического журнала?
Замер показывает время по строкам встроенного языка — какой код сколько выполнялся. Технологический журнал фиксирует события платформы и СУБД: реальные SQL-запросы, их длительность, блокировки. Для анализа медленных запросов нужны оба: замер находит строку, журнал — причину на уровне СУБД.
Как проверить доработку подрядчика перед установкой на рабочую базу?
Прогоните проверку конфигурации и статический анализ в EDT, найдите глобальным поиском рискованные конструкции (Выполнить, пустые исключения, запросы в циклах), сравните изменённые типовые модули с исходными. Обязательно протестируйте на копии рабочей базы с реальными данными.
Почему отладчик не останавливается на серверном коде?
На клиент-серверной базе отладка должна быть явно включена на сервере 1С (параметр -debug у службы агента). Также проверьте, что предмет отладки подключён: серверный код выполняется в отдельном процессе rphost, и его нужно добавить через «Отладка → Подключение».
Что важно запомнить
Анализ кода 1С строится по цепочке: локализация через глобальный поиск, чтение логики с переходами по вызовам, проверка гипотезы отладчиком, оценка скорости замером и технологическим журналом. Для аудита всей конфигурации подключайте статический анализ, а все эксперименты проводите на копии базы.