К статье
Практический материал

Разработка и Конфигурация · 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. 1
    Воспроизведите ошибку и зафиксируйте точный текст сообщения
  2. 2
    Найдите место формирования сообщения глобальным поиском
  3. 3
    Поставьте точку останова на несколько строк выше и подключите отладку
  4. 4
    Повторите действие пользователя и дождитесь останова
  5. 5
    Изучите стек вызовов и значения переменных в табло
  6. 6
    Поднимитесь по стеку до точки, где данные ещё корректны — источник ошибки между этой точкой и местом падения

Анализ производительности: замер и технологический журнал

Если код работает правильно, но медленно, чтение модулей малоэффективно — нужен замер. В конфигураторе: «Отладка → Замер производительности → Начать замер», затем выполните медленную операцию и остановите замер. Результат покажет, сколько раз вызывалась каждая строка кода и сколько времени она заняла в сумме и в среднем.

Интерпретируя замер, смотрите не только на процент времени, но и на количество вызовов. Классическая проблема — запрос в цикле: одна строка с выполнением запроса, вызванная тысячи раз. Решение в таких случаях архитектурное: вынести запрос из цикла, собрать данные одним пакетным запросом или использовать временные таблицы.

Когда «горячая» строка — это запрос, переходите к технологическому журналу: включите сбор событий DBMSSQL/DBPOSTGRS и TLOCK через файл logcfg.xml на сервере. Журнал покажет реальный SQL-текст запроса, длительность и блокировки. Долгий запрос анализируйте планом выполнения в СУБД: типичные причины — отсутствие индекса по условию отбора, соединение с виртуальной таблицей без отбора, функции над полями в условии.

Статический анализ качества кода

Когда нужно оценить не одну ошибку, а состояние всего кода доработок, используют статический анализ — проверку модулей без выполнения. Встроенный минимум есть в конфигураторе: «Конфигурация → Проверка конфигурации» с включённым поиском логических ошибок и проверкой модулей. Он находит синтаксические ошибки, обращения к несуществующим объектам и часть типовых дефектов.

Более глубокий анализ даёт 1C:EDT: среда содержит сотни проверок — от неиспользуемых переменных и устаревших методов до потенциальных обращений к неопределённым значениям. Альтернатива для командной разработки — SonarQube с плагином для языка BSL, который встраивается в конвейер и проверяет код при каждом коммите.

Отдельное направление — проверка на соответствие стандартам разработки фирмы «1С»: составление запросов, работа с исключениями, использование НайтиПоНаименованию вместо поиска по коду и т.п. Такие проверки полезны при приёмке доработок от подрядчика: они формализуют то, что иначе пришлось бы вычитывать вручную.

Инструменты анализа кода 1С

Конфигуратор (поиск, отладка, замер)

Подходит для точечного разбора ошибки или медленной операции; не масштабируется на аудит всей конфигурации

Проверка конфигурации

Быстрый встроенный контроль синтаксиса и обращений к метаданным; логические и архитектурные дефекты почти не находит

1C:EDT

Глубокий статический анализ и проверки стандартов; требует переноса проекта в формат EDT

SonarQube + BSL-плагин

Автоматический контроль качества в конвейере разработки; требует настройки инфраструктуры и хранения кода в git

Типичные дефекты, которые стоит искать в первую очередь

Опыт приёмки доработок показывает, что большинство проблем концентрируется в нескольких повторяющихся паттернах. Зная их, можно выборочно просматривать код и находить дефекты без полного чтения всех модулей.

Ищите глобальным поиском характерные конструкции: Выполнить( и Вычислить( (риск исполнения произвольного кода и скрытых ошибок), Попытка ... Исключение КонецПопытки с пустым обработчиком (ошибки «проглатываются» и диагностика становится невозможной), обращения к СУБД в циклах, прямое изменение объектов в обход обработчиков проведения.

Типичные ошибки в коде 1С
01
Запрос внутри цикла — экспоненциальный рост обращений к СУБД и падение производительности
02
Пустой блок Исключение — реальная ошибка теряется, проблема всплывает позже в неожиданном месте
03
Обмен данными через Выполнить/Вычислить — невозможность статической проверки и риск уязвимости
04
Обращение к реквизиту через точку без проверки на Неопределено — падение на незаполненных данных
05
Доработка типового модуля без комментариев-меток — конфликты и потеря изменений при обновлении
06
Получение всей таблицы запросом без отбора — рост потребления памяти и времени выполнения

Анализ запросов и работы с данными

Запросы — самая ресурсоёмкая часть кода 1С, поэтому им уделяйте отдельное внимание. Читайте текст запроса целиком: какие таблицы соединяются, есть ли отборы по индексированным полям, не тянется ли «выборка всего» с последующей фильтрацией в коде. Конструктор запроса (правый клик по тексту → «Конструктор запроса») помогает визуально разобрать сложные соединения.

Особо проверяйте обращения к виртуальным таблицам регистров (Остатки, Обороты, СрезПоследних): без параметров периода и отборов они строятся по всей таблице регистра и на больших базах выполняются долго. Правильный паттерн — передавать период и условия параметрами виртуальной таблицы, а не фильтровать результат после.

Контрольные точки

Как проверить результат анализа

Гипотеза об ошибке
Норма

Исправление устраняет ошибку и подтверждено отладчиком на тех же данных

Тревожный признак

Ошибка исчезла случайно или перешла в другое место — причина не найдена

Оптимизация запроса
Норма

Повторный замер показывает снижение времени и числа обращений к СУБД

Тревожный признак

Время не изменилось — оптимизирован не тот участок

Статический анализ
Норма

Список замечаний разобран, критичные исправлены, остальные зафиксированы

Тревожный признак

Проверка запущена, но замечания никто не разбирал

FAQ

Можно ли анализировать код 1С без доступа к конфигуратору?

Частично. Внешние обработки и расширения можно открыть в 1C:EDT, выгрузить конфигурацию в файлы XML и изучать текстом. Но полноценная отладка и замеры требуют конфигуратора и прав разработчика на базе.

Как найти, где в коде формируется конкретное сообщение об ошибке?

Скопируйте уникальный фрагмент текста сообщения и выполните глобальный поиск (Ctrl+Shift+F) по всем модулям конфигурации, включая модули расширений. Если сообщение собирается из частей, ищите самое длинное неизменяемое словосочетание.

Что делать, если ошибка возникает только у одного пользователя?

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

Чем замер производительности отличается от технологического журнала?

Замер показывает время по строкам встроенного языка — какой код сколько выполнялся. Технологический журнал фиксирует события платформы и СУБД: реальные SQL-запросы, их длительность, блокировки. Для анализа медленных запросов нужны оба: замер находит строку, журнал — причину на уровне СУБД.

Как проверить доработку подрядчика перед установкой на рабочую базу?

Прогоните проверку конфигурации и статический анализ в EDT, найдите глобальным поиском рискованные конструкции (Выполнить, пустые исключения, запросы в циклах), сравните изменённые типовые модули с исходными. Обязательно протестируйте на копии рабочей базы с реальными данными.

Почему отладчик не останавливается на серверном коде?

На клиент-серверной базе отладка должна быть явно включена на сервере 1С (параметр -debug у службы агента). Также проверьте, что предмет отладки подключён: серверный код выполняется в отдельном процессе rphost, и его нужно добавить через «Отладка → Подключение».

Итог

Что важно запомнить

Анализ кода 1С строится по цепочке: локализация через глобальный поиск, чтение логики с переходами по вызовам, проверка гипотезы отладчиком, оценка скорости замером и технологическим журналом. Для аудита всей конфигурации подключайте статический анализ, а все эксперименты проводите на копии базы.