Разработка и Конфигурация · 13 мин
Как пользоваться отладкой в 1С 8.3
Как пользоваться отладкой в 1С 8.3: запуск конфигуратора, точки останова, табло, стек вызовов, отладка на сервере и типичные ошибки. Практическое руководство.
Отладка — основной инструмент поиска ошибок в коде 1С:Предприятия 8.3. Она позволяет остановить выполнение программы в нужном месте, посмотреть значения переменных, пройти код по шагам и понять, почему алгоритм работает не так, как ожидалось. Без отладки поиск причины ошибки превращается в перебор догадок и расстановку сообщений «Сообщить()» по всему модулю.
Механизм встроен в конфигуратор и работает как с файловыми, так и с клиент-серверными информационными базами. Для файловой базы достаточно запустить отладку из конфигуратора. Для клиент-серверной базы дополнительно потребуется включить отладку на сервере 1С — иначе серверные процедуры будут выполняться «мимо» точек останова.
Ниже разобраны запуск отладки, работа с точками останова, пошаговое выполнение, просмотр значений, особенности отладки на сервере и типичные ошибки, которые мешают новичкам получить результат.
Как запустить отладку в конфигураторе
Откройте конфигуратор нужной информационной базы и убедитесь, что конфигурация базы данных обновлена: отладчик работает с кодом той версии конфигурации, которая реально выполняется. Если модули изменены, но не сохранены в базу (F7 — «Обновление конфигурации базы данных»), точки останова могут не срабатывать или останавливаться не на тех строках.
Запуск выполняется несколькими способами: клавиша F5, пункт меню «Отладка — Начать отладку» или кнопка на панели инструментов. Конфигуратор запустит клиентское приложение (обычно тонкий клиент) в отладочном режиме, и сам перейдёт в режим ожидания. Тип запускаемого клиента настраивается через «Сервис — Параметры — Запуск 1С:Предприятия».
Если программа уже запущена без отладки, её можно подключить: «Отладка — Подключение». В открывшемся окне выберите нужный сеанс. Это удобно, когда ошибка воспроизводится в уже работающем сеансе пользователя на тестовой базе.
Точки останова: установка и условия
Точка останова — отметка на строке кода, при достижении которой выполнение приостанавливается и управление переходит отладчику. Установить её можно клавишей F9, двойным щелчком мыши в левом поле редактора модуля или через меню «Отладка — Точка останова». Повторное нажатие F9 снимает точку.
Ставьте точку не на саму ошибочную строку (о которой вы часто не знаете заранее), а на вход в подозрительный алгоритм: начало процедуры проведения документа, обработчик кнопки, функцию расчёта. Дальше двигайтесь по коду шагами и наблюдайте, где логика расходится с ожиданиями.
Когда точка находится внутри цикла, который выполняется тысячи раз, полезна условная точка останова. Через «Отладка — Точка останова с условием» (или правый клик по точке) задайте выражение, например СтрокаТовара.Номенклатура = НужнаяНоменклатура. Выполнение остановится только тогда, когда условие истинно. Также доступна остановка после заданного числа проходов.
Отдельный инструмент — остановка по ошибке: «Отладка — Остановка по ошибке». Если включить флаг, отладчик прервёт выполнение в момент возникновения любой исключительной ситуации, даже если она перехватывается конструкцией «Попытка...Исключение». Это помогает найти ошибки, скрытые «пустыми» обработчиками исключений.
- 1Обновите конфигурацию базы данных (F7), чтобы код совпадал с выполняемым
- 2Поставьте точку останова (F9) на вход в подозрительный алгоритм
- 3Запустите отладку (F5) и воспроизведите ошибку в клиенте
- 4После остановки идите по коду шагами (F10/F11), наблюдая значения переменных
- 5Найдите строку, где значение перестаёт соответствовать ожиданию
- 6Снимите точки останова (Ctrl+Shift+F9 — снять все) и исправьте код
Пошаговое выполнение кода
После остановки на точке управление шагами выполняется клавишами, которые стоит запомнить сразу:
- F10 (шаг через) — выполнить текущую строку, не заходя внутрь вызываемых процедур и функций. Используйте, когда вызов заведомо исправен.
- F11 (шаг в) — зайти внутрь вызываемой процедуры или функции. Нужен, когда подозрение падает на вызываемый код.
- Shift+F11 (шаг из) — довыполнить текущую процедуру и остановиться в вызвавшем её коде.
- F5 (продолжить) — продолжить выполнение до следующей точки останова или до конца.
- Shift+F5 — завершить отладку.
Практический приём: если вы случайно прошагали нужную строку, не перезапускайте всё сразу. В 1С можно изменить текущую строку выполнения в пределах процедуры — через контекстное меню «Установить текущую строку». Это позволяет «откатиться» на несколько строк назад и пройти участок заново. Ограничение: уже выполненные действия (запись в базу, изменения данных) откатить нельзя.
Стек вызовов (окно доступно через «Отладка — Стек вызовов») показывает цепочку процедур, которая привела к текущей точке. По двойному щелчку можно перейти на любой уровень стека и посмотреть, с какими параметрами была вызвана процедура — это часто быстрее, чем гадать, откуда пришло неверное значение.
Просмотр значений: табло и вычисление выражений
Самый быстрый способ узнать значение переменной — навести на неё курсор мыши в остановленном коде: появится подсказка с текущим значением. Для постоянного наблюдения используются два инструмента.
Табло (Shift+F9) — окно, куда добавляются выражения для постоянного отслеживания. Значения обновляются на каждом шаге. Сюда удобно вынести ключевые переменные алгоритма: счётчики, итоговые суммы, параметры запроса. В табло можно добавлять не только переменные, но и произвольные выражения, например ТаблицаТоваров.Количество() или Запрос.Выполнить().Пустой().
Вычислить выражение (Ctrl+F9) — диалог для разового вычисления любого выражения в текущем контексте. Здесь же можно вызвать функцию «Подробно» для объектов сложных типов: просмотреть содержимое таблицы значений, результата запроса, структуры. Для таблиц значений откроется привычный табличный просмотр с возможностью вывода списка.
Проверьте все ветки условий в функции — нет ли пути без «Возврат»
Обновите конфигурацию БД (F7) и убедитесь, что вызывается именно этот обработчик
Перезапустите сервер с ключом -debug или отладьте код на клиенте
Подключитесь к сеансу пользователя через «Отладка — Подключение»
Отладка на сервере в клиент-серверном варианте
В клиент-серверной базе код с директивами компиляции &НаСервере выполняется на сервере 1С:Предприятия, и по умолчанию отладчик его не видит. Чтобы серверные точки останова срабатывали, серверный агент должен быть запущен с параметром отладки.
На Windows это делается через реестр службы агента сервера: в параметры запуска добавляется ключ -debug (для HTTP-отладки — -debug -http). В консоли кластера в свойствах кластера также есть флаг «Разрешена отладка» с выбором протокола (TCP или HTTP). После изменения настроек службу сервера нужно перезапустить — учтите, что это прервёт работу пользователей, поэтому делайте перезапуск вне рабочего времени или на тестовом сервере.
Протокол отладки в конфигураторе задаётся через «Сервис — Параметры — Отладка»: он должен совпадать с настройкой кластера (TCP или HTTP). Несовпадение протоколов — частая причина ситуации «всё включено, но серверные точки не работают».
Отладка фоновых заданий, веб-сервисов и внешних обработок
Не весь код выполняется в интерактивном сеансе. Фоновые задания, вызовы веб-сервисов и HTTP-сервисов требуют подключения к отдельному сеансу. Откройте «Отладка — Подключение», включите отображение нужных типов предметов отладки (фоновые задания, веб-сервисы) и дождитесь появления сеанса в списке. Чтобы фоновое задание не «проскочило» до подключения, поставьте в его коде временную точку останова на первой строке и включите автоматическое подключение новых сеансов в настройках отладки.
Внешние обработки и отчёты отлаживаются так же, как встроенные: откройте файл обработки в конфигураторе («Файл — Открыть»), поставьте точки останова и запустите отладку. При открытии обработки в клиенте её модуль будет останавливаться на ваших точках. Важное ограничение: если обработка открыта из файла, а в базе используется её копия из справочника дополнительных отчётов — отлаживаться будет та версия, которую вы реально запускаете.
Для кода, который выполняется под другим пользователем или по расписанию, полезен запуск с параметром: в «Сервис — Параметры — Запуск 1С:Предприятия» можно указать пользователя и параметр запуска, чтобы воспроизвести условия, в которых возникает ошибка.
Как выбрать способ отладки
Типичные ошибки при работе с отладчиком
Первая и самая массовая ошибка — отладка устаревшей версии кода. Модуль изменён в конфигураторе, но конфигурация базы данных не обновлена: точки «плывут», остановка происходит не на тех строках. Правило простое: перед отладкой нажмите F7 и убедитесь, что обновление прошло без ошибок.
Вторая ошибка — попытка пошагово пройти весь алгоритм от начала до конца. В больших процедурах это занимает часы. Эффективнее ставить точки на ключевые участки (перед запросом, после расчёта, перед записью) и перемещаться между ними клавишей F5, а шаги использовать только внутри подозрительного фрагмента.
Третья ошибка — забытые точки останова и остановка по ошибке после завершения работы. Если потом база запускается в отладочном режиме другим специалистом, выполнение будет «зависать» в неожиданных местах. Снимайте все точки: «Отладка — Снять все точки останова» (Ctrl+Shift+F9).
Чем заменить отладку, если она недоступна
Иногда отладчик использовать нельзя: нет доступа к серверу, ошибка воспроизводится только на продуктиве, код выполняется в мобильном клиенте. В таких случаях помогают альтернативы.
Журнал регистрации фиксирует ошибки, возникающие в сеансах, включая фоновые задания: откройте его в конфигураторе («Администрирование — Журнал регистрации») с отбором по уровню «Ошибка» и нужному пользователю. Часто текст ошибки с указанием модуля и строки — уже половина решения.
Для диагностики логики добавляйте временные записи через ЗаписьЖурналаРегистрации() или Сообщить() в ключевых точках алгоритма с выводом значений переменных. После исправления такой код нужно удалить или обернуть в условие, чтобы не засорять журнал. Для замеров производительности вместо отладки используйте ЗамерПроизводительности через встроенный механизм («Отладка — Замер производительности») — он покажет, какие строки занимают больше всего времени.
Что важно запомнить
Отладка запускается клавишей F5, точки останова ставятся клавишей F9, шаги выполняются клавишами F10/F11, значения смотрятся через табло (Shift+F9). Перед отладкой обновляйте конфигурацию базы данных, для клиент-серверной базы включайте отладку на сервере, а на продуктивной базе отладку не проводите — используйте копию или журнал регистрации.
Частые вопросы об отладке в 1С 8.3
Почему точка останова не срабатывает, хотя код точно выполняется?
Чаще всего конфигурация базы данных не обновлена после изменения модуля — нажмите F7 и повторите. Вторая причина: код выполняется на сервере, а отладка сервера не включена. Третья — выполняется другой экземпляр обработки (например, копия из справочника дополнительных отчётов, а не открытый вами файл).
Как посмотреть содержимое таблицы значений во время отладки?
Нажмите Ctrl+F9 («Вычислить выражение»), введите имя переменной с таблицей значений и нажмите «Вычислить». Затем используйте кнопку просмотра содержимого — откроется табличное представление, где можно увидеть все строки и колонки, а также вывести список в табличный документ.
Можно ли отладить код, который выполняется по расписанию ночью?
Да. Включите в настройках отладки автоматическое подключение сеансов фоновых заданий и оставьте конфигуратор запущенным с открытым окном подключения. Когда регламентное задание стартует, отладчик подключится к его сеансу и остановится на вашей точке останова. Для клиент-серверной базы предварительно включите отладку на сервере.
Чем отличается «шаг через» (F10) от «шаг в» (F11)?
F10 выполняет строку целиком: если в ней вызов функции, она отработает полностью, и вы останетесь на следующей строке текущей процедуры. F11 заходит внутрь вызываемой функции, позволяя пройти её по шагам. Используйте F10 для проверенных вызовов и F11, когда подозреваете ошибку именно внутри вызываемого кода.
Безопасно ли отлаживать на рабочей базе с пользователями?
Нет. Остановленный на точке останова сеанс блокируется, а при серверной отладке могут страдать и другие сеансы. Кроме того, во время отладки легко случайно записать изменённые данные. Правильный подход — развернуть копию базы и воспроизводить проблему там, а на продуктиве ограничиться журналом регистрации.
Как найти ошибку, которая скрыта конструкцией «Попытка...Исключение»?
Включите «Отладка — Остановка по ошибке» и установите флаг остановки при возникновении ошибки. Тогда отладчик прервёт выполнение в точке возникновения исключения до того, как сработает обработчик «Исключение», и вы увидите реальную причину и стек вызовов.