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

Разработка и Конфигурация · 14 мин

Отладчик 1С: что это такое и как с ним работать

Отладчик 1С — встроенный инструмент конфигуратора для пошагового выполнения кода. Разбираем запуск, точки останова, просмотр переменных и типичные ошибки.

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

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

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

Что такое отладчик 1С и зачем он нужен

Главная задача отладчика — показать разницу между тем, что программист думает о своём коде, и тем, что код делает на самом деле. Типичная ситуация: функция должна возвращать сумму с НДС, а возвращает сумму без него. Чтение кода глазами ошибку не выявляет, потому что взгляд «достраивает» ожидаемое. Отладчик же показывает факт: вот строка, вот значение переменной после её выполнения — и расхождение становится очевидным.

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

Отладчик не изменяет данные сам по себе: он лишь наблюдает за выполнением. Однако через него можно вручную менять значения переменных и выполнять произвольные выражения — это уже влияет на ход работы программы, поэтому на рабочей базе такие действия требуют осторожности.

Как включить и запустить отладку

Отладка запускается из конфигуратора. Стандартный путь: открыть конфигуратор, нажать F5 или выбрать пункт меню «Отладка — Начать отладку». Конфигуратор запустит клиентское приложение в режиме отладки и автоматически подключится к нему. Если база серверная, дополнительно нужно убедиться, что на сервере 1С разрешена отладка — этот режим включается параметром запуска сервера, и без него серверный код отлаживаться не будет.

Порядок запуска отладки
  1. 1
    Откройте конфигуратор нужной базы и убедитесь, что конфигурация обновлена до рабочей версии кода
  2. 2
    Убедитесь, что в меню «Отладка» включён нужный тип подключения: автоматическое или поиск предметов отладки
  3. 3
    Нажмите F5 — запустится клиентское приложение в режиме отладки
  4. 4
    Воспроизведите в приложении действие, которое приводит к ошибке
  5. 5
    Дождитесь остановки на точке останова и анализируйте состояние переменных
  6. 6
    По завершении нажмите Shift+F5 или закройте отладку через меню

Если приложение уже запущено (например, отладку нужно провести в открытом сеансе или в фоновом задании), используется подключение: меню «Отладка — Подключение». В диалоге отображаются доступные предметы отладки — сеансы и фоновые задания, у которых включена возможность отладки. Для тонкого клиента и веб-клиента предмет отладки становится видимым, если приложение запущено с ключом отладки или отладка включена в настройках.

Отдельный случай — отладка на сервере. В файловой базе серверный код часто исполняется в том же процессе, и проблем не возникает. В клиент-серверном варианте сервер 1С:Предприятия должен быть запущен с параметром, разрешающим отладку (для службы агента это параметр -debug). Без него точки останова в серверных модулях просто не сработают, и это одна из самых частых причин «неработающего» отладчика.

Точки останова и управление выполнением

Точка останова — отметка на строке кода, при достижении которой выполнение приостанавливается и управление передаётся отладчику. Ставится она кликом по левому полю редактора модуля или клавишей F9. Точек можно расставить сколько угодно, их список доступен через меню «Отладка — Точки останова», там же их можно массово отключать, не удаляя.

После остановки доступны команды пошагового выполнения. «Шагнуть через» (F10) выполняет текущую строку целиком, не заходя внутрь вызываемых процедур. «Шагнуть в» (F11) заходит внутрь вызова — так можно спуститься вглубь типовых механизмов. «Шагнуть из» (Shift+F11) довыполняет текущую процедуру и останавливается в вызвавшем её коде. «Идти до курсора» выполняет код до строки, где стоит курсор, — удобно, чтобы пропустить цикл, не проходя каждую итерацию.

Условные точки останова

Если ошибка проявляется только на тысячной итерации цикла или для конкретного контрагента, обычная точка заставит сотни раз нажимать F5. Выход — условная точка останова: в свойствах точки задаётся выражение, и останов происходит, только когда оно истинно. Например, условие СтрокаТаблицы.Номенклатура = ИскомаяНоменклатура остановит цикл именно на нужной строке. Условие пишется на встроенном языке и вычисляется в контексте текущей процедуры.

Остановка по ошибке

Полезный режим — остановка при возникновении исключения. Включается через меню «Отладка — Остановка по ошибке». Отладчик прервёт выполнение ровно в той строке, где возникла ошибка, ещё до того, как сработает обработчик исключения. Это незаменимо, когда ошибка «проглатывается» конструкцией Попытка–Исключение и внешне программа ведёт себя просто странно, без явного сообщения.

Просмотр значений: табло, выражения и стек вызовов

Когда выполнение остановлено, главный вопрос — чему равны переменные. Самый быстрый способ — навести курсор мыши на имя переменной в коде: отладчик покажет текущее значение во всплывающей подсказке. Для постоянного наблюдения за несколькими значениями служит табло (Ctrl+Shift+W или через меню «Отладка»): туда добавляют переменные и произвольные выражения, и их значения обновляются на каждом шаге.

Для разового анализа используется окно «Вычислить выражение» (Shift+F9). В нём можно не только посмотреть значение, но и вызвать метод: например, выполнить запрос, получить свойство объекта, проверить гипотезу прямо в момент остановки. Коллекции — массивы, таблицы значений, выборки — раскрываются в виде дерева, где видны элементы и их поля.

Значения ссылочных типов в табло показываются как представление и тип. Чтобы увидеть реквизиты объекта, разверните его в дереве или вычислите конкретное свойство в окне выражений — например, ДокументОбъект.Номенклатура.Артикул. Для больших таблиц значений разворачивание дерева может занять заметное время.
ПЗ
Практическое замечание

Стек вызовов (окно «Стек вызовов» в меню «Отладка») показывает цепочку процедур и функций, которая привела к текущей строке. Двойной клик по элементу стека переводит в соответствующий модуль и позволяет посмотреть локальные переменные на каждом уровне. Это ключевой инструмент, когда ошибка возникает глубоко внутри типового механизма, а первопричина — в данных, переданных несколькими вызовами выше.

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

Как проверить, что отладка работает

Точка останова в редакторе модуля
Норма

Точка сплошная, при выполнении происходит остановка

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

Точка пустая или с вопросительным знаком — код не исполняется в подключённом предмете отладки

Значения в табло
Норма

Значения обновляются на каждом шаге пошагового выполнения

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

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

Стек вызовов
Норма

Отображается цепочка вызовов текущего сеанса

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

Стек пуст — отладчик подключён не к тому процессу

Отладка серверного кода, фоновых заданий и веб-сервисов

Не весь код исполняется в клиентском приложении. Серверные процедуры в клиент-серверной базе выполняются в рабочем процессе сервера, фоновые задания — в отдельных сеансах, а вызовы веб-сервисов и HTTP-сервисов приходят извне. Для каждого из этих случаев подключение настраивается отдельно, но логика одна: нужный тип предметов отладки должен быть включён в настройках отладчика, а соответствующий процесс — запущен с разрешением отладки.

Для фоновых заданий последовательность такая: в настройках автоматического подключения отметить «Фоновые задания», поставить точку останова в модуле, который исполняет задание, и запустить задание. Как только оно стартует, отладчик подключится к новому сеансу автоматически. Аналогично отлаживаются регламентные задания — с той разницей, что ждать придётся момента их срабатывания по расписанию или запускать принудительно.

Отладка HTTP-сервисов требует, чтобы публикация на веб-сервере была выполнена с включённой отладкой, а отладчик был настроен на подключение к предметам отладки типа «HTTP-сервис». После этого обращение к сервису (например, запрос из браузера или из Postman) приведёт к остановке на точке в модуле сервиса.

Маршрут решения

Как выбрать способ подключения

Код исполняется вручную в клиентском приложенииНажмите F5 в конфигураторе — отладка подключится автоматически
Код исполняется в фоновом или регламентном заданииВключите тип «Фоновые задания» в настройках автоматического подключения и запустите задание
Ошибка возникает в уже запущенном сеансе пользователяИспользуйте «Отладка — Подключение» и выберите нужный сеанс из списка
Серверные точки останова не срабатывают в клиент-серверной базеПроверьте, что сервер 1С запущен с параметром разрешения отладки

Типичные ошибки при работе с отладчиком

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

Типичные ошибки
01
Точка стоит в модуле, но конфигурация базы данных не обновлена — исполняется старая версия кода, остановки нет
02
Попытка отладить серверный код при запрещённой отладке на сервере — точки отображаются как недоступные
03
Проверка гипотезы изменением переменной в продуктивной базе — в программу уходят искажённые данные
04
Пошаговое прохождение длинного цикла вручную вместо условной точки останова — потеря времени
05
Игнорирование остановки по ошибке — исключение перехватывается типовой Попытка–Исключение, и реальное место сбоя остаётся скрытым
06
Отладка по горячим следам без фиксации исходных данных — после перезапуска воспроизвести ситуацию не удаётся

Ещё одна группа ошибок связана с неверной интерпретацией увиденного. Например, разработчик смотрит значение переменной до выполнения строки, а не после, и делает вывод, что присваивание «не сработало». Или оценивает объект по строковому представлению в подсказке, не разворачивая его реквизиты. Дисциплина проста: проверять значение после шага через строку и разворачивать объекты до нужного уровня детализации.

Наконец, стоит помнить про производительность. Включённая отладка на сервере замедляет работу, а остановленный на точке сеанс удерживает транзакции и блокировки. На рабочей базе длительная пауза в отладчике внутри транзакции может заблокировать других пользователей. Поэтому разбор сложных сценариев лучше переносить на копию базы.

Когда отладчик не поможет и что использовать вместо него

Отладчик показывает логику выполнения кода, но не всё в 1С — код. Проблемы производительности запросов, ошибки на уровне СУБД, проблемы с правами доступа на уровне записей, поведение управляемых форм на стороне клиентской платформы — всё это либо недоступно отладчику, либо видно в нём лишь частично.

Для анализа медленных запросов используют консоль запросов и план запроса на стороне СУБД. Для диагностики блокировок и взаимоблокировок — технологический журнал и средства СУБД. Для поиска места, откуда вызывается процедура, — глобальный поиск по конфигурации и анализ ссылок на объект. Журнал регистрации помогает восстановить последовательность событий в базе, когда воспроизвести ошибку интерактивно невозможно — например, при сбое ночного регламентного задания.

Чем дополнить отладчик

Технологический журнал

Когда нужно отследить ошибки, запросы и блокировки на уровне платформы и СУБД; требует настройки и места под логи

Журнал регистрации

Когда ошибка произошла в прошлом и воспроизвести её интерактивно нельзя; показывает события, но не значения переменных

Консоль запросов

Когда проблема в результате или скорости запроса; позволяет прогнать запрос с реальными параметрами вне отладки

Замер производительности

Когда нужно найти самую медленную строку кода; работает совместно с отладкой через меню «Отладка»

Практический подход — комбинировать инструменты: сначала локализовать проблему журналом регистрации или технологическим журналом, затем воспроизвести ситуацию на копии базы и уже там пройти проблемный участок отладчиком. Такой маршрут быстрее, чем попытки «поймать» ошибку отладчиком вслепую.

Итог

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

Отладчик 1С запускается из конфигуратора клавишей F5, останавливает код на точках останова и позволяет смотреть переменные через табло и выражения. Для сервера, фоновых заданий и веб-сервисов нужны отдельные настройки подключения. Эксперименты с изменением данных проводите только на копии базы.

Частые вопросы об отладчике 1С

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

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

Почему точка останова отображается пустой или с вопросительным знаком?

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

Можно ли изменить значение переменной во время отладки?

Да. В табло или в окне «Вычислить выражение» значение переменной можно присвоить заново, и выполнение продолжится уже с новым значением. Это удобно для проверки гипотез, но на рабочей базе опасно: программа продолжит работу с искусственно изменёнными данными.

Как отладить код, который выполняется только на сервере?

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

Замедляет ли включённая отладка работу пользователей?

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

Что делать, если ошибку невозможно воспроизвести под отладкой?

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