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

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

Отладчик 1С: как пользоваться на практике

Как пользоваться отладчиком 1С: запуск, точки останова, пошаговое выполнение, просмотр значений, отладка запросов и серверного кода.

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

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

Что такое отладка и когда она нужна

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

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

Важно понимать ограничение: отладчик показывает только код на встроенном языке. Текст запроса он не «пошаговит» — запрос выполняется целиком на сервере СУБД. Для анализа запросов используют консоль запросов и просмотр результата в табло, об этом ниже.

Как запустить отладку в 1С

Отладка всегда стартует из конфигуратора. Откройте конфигуратор нужной базы и выберите в меню «Отладка → Начать отладку» или нажмите F5. Конфигуратор запустит клиентское приложение (обычно тонкий или толстый клиент, в зависимости от настроек) в режиме отладки и подключится к нему автоматически.

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

Порядок запуска отладки
  1. 1
    Откройте конфигуратор нужной информационной базы
  2. 2
    Убедитесь, что конфигурация базы данных обновлена (F7), иначе отлаживать будете старый код
  3. 3
    Поставьте точку останова в нужной строке кода
  4. 4
    Нажмите F5 или Отладка → Начать отладку
  5. 5
    В запустившемся клиенте выполните действие, которое вызывает отлаживаемый код
  6. 6
    Дождитесь остановки на точке и проходите код по шагам

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

Точки останова: как ставить и управлять

Точка останова — это метка на строке кода, при достижении которой выполнение приостанавливается. Поставить ее можно двойным щелчком на серой полосе слева от строки или клавишей F9, когда курсор стоит на нужной строке. Повторное нажатие F9 точку снимает.

Точку можно ставить не на каждую строку: комментарии, пустые строки и строки объявления переменных в некоторых контекстах не выполняются, поэтому ставьте точку на строку с реальным оператором — присваиванием, вызовом метода, условием. Если точка «не встала», значит, строка неисполняемая.

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

Пошаговое выполнение: клавиши и логика прохода

После остановки управление выполнением идет с клавиатуры. Основные команды: F8 — «Шагнуть через» (выполнить строку, не заходя внутрь вызываемых процедур), F11 — «Шагнуть в» (зайти внутрь вызываемой процедуры или функции), Shift+F11 — «Шагнуть из» (довыполнить текущую процедуру и остановиться в вызывающем коде), F5 — продолжить выполнение до следующей точки останова.

Практический прием: идите клавишей F8, пока не приблизитесь к подозрительному вызову, затем нажмите F11, чтобы провалиться внутрь. Если зашли слишком глубоко — Shift+F11 вернет на уровень выше без потери контекста. Это быстрее, чем расставлять точки останова в каждой процедуре.

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

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

F8 — шаг через

Когда вызов в строке заведомо рабочий и внутрь заходить не нужно

F11 — шаг в

Когда подозреваете ошибку внутри вызываемой процедуры

Shift+F11 — шаг из

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

F5 — продолжить

Когда текущий участок проверен и нужно дойти до следующей точки останова

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

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

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

Команда «Вычислить выражение» (Ctrl+Shift+F9 или через контекстное меню) позволяет выполнить произвольный код в текущем контексте: вызвать функцию, посчитать выражение, проверить условие. Например, можно вычислить «Документ.Проведен» или «Запрос.Выполнить().Выгрузить().Количество()» и сразу увидеть результат, не меняя код.

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

Как проверить, что нашли причину ошибки

Значение переменной перед ошибочной строкой
Норма

Содержит ожидаемые данные нужного типа

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

Неопределено, пустая ссылка или неожиданный тип

Условие, которое не сработало
Норма

Вычисление выражения дает тот результат, что ожидался

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

Условие истинно/ложно из-за типа данных или пустого значения

Результат запроса в табло
Норма

Выборка содержит строки, поля заполнены

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

Пустой результат — проверяйте параметры и отборы запроса

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

В клиент-серверном режиме серверный код выполняется на сервере 1С, и для его отладки сервер должен быть запущен с включенной отладкой (параметр запуска службы агента сервера — отладка по протоколу HTTP или TCP в зависимости от версии платформы). Если серверная отладка не включена, точки останова в серверных процедурах просто не сработают, а конфигуратор покажет предупреждение.

Фоновые задания и регламентные операции отлаживаются через подключение: в окне «Отладка → Подключение» отметьте показ фоновых заданий, дождитесь появления нужного сеанса в списке и подключитесь к нему до того, как задание отработает. Для длинных заданий это несложно; для коротких проще временно вызвать тот же код синхронно из обработки.

Код, выполняемый через внешние соединения (COM, веб-сервисы, HTTP-сервисы), тоже попадает в список подключений. Общее правило: если сеанс виден в окне подключения — его можно отладить. Если сеанса нет, проверьте, разрешена ли отладка для этого типа соединения в настройках кластера или публикации веб-сервиса.

Отладка запросов и динамических списков

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

Для сложных запросов удобнее скопировать текст в консоль запросов и прогонять его там с реальными параметрами, постепенно убирая части пакета, чтобы локализовать, какое временное таблицу или соединение «теряет» данные. После нахождения причины исправление переносится обратно в код.

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

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

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

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

Полезные приемы для ускорения работы

Используйте закладки и условные точки останова в длинных циклах: условие вида «Счетчик = 150» избавит от 149 ручных продолжений. Комбинация «Идти до курсора» заменяет временную точку останова, когда остановка нужна один раз.

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

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

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

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

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

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

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

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

Поставьте точку останова в обработчике «ОбработкаПроведения» модуля объекта, запустите отладку и проведите документ в клиентском приложении. Если документ проводится регламентным заданием, подключитесь к сеансу фонового задания через окно подключения.

Отладчик не показывает значения переменных внутри запроса — это нормально?

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

Мешает ли запущенная отладка другим пользователям базы?

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

Что делать, если кнопка «Начать отладку» недоступна?

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

Итог

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

Отладка запускается из конфигуратора клавишей F5, точки останова ставятся по F9, код проходится клавишами F8/F11, значения смотрятся через табло (Shift+F9) и вычисление выражений. Запросы анализируются по тексту, параметрам и результату, а серверный код и фоновые задания требуют включенной серверной отладки и подключения к нужному сеансу. Перед отладкой всегда обновляйте конфигурацию базы данных.