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

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

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

Что такое отладка в 1С 8.3, как включить режим отладки, поставить точку останова, посмотреть значения переменных и найти ошибку в коде.

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

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

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

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

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

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

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

Точки останова и пошаговое выполнение

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

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

Полезный приём — условные точки останова. В свойствах точки можно задать условие, например СтрокаТаблицы.Сумма < 0, и остановка произойдёт только когда условие истинно. Это незаменимо при отладке циклов по сотням строк, где ошибка проявляется на одной конкретной итерации.

Порядок действий при поиске ошибки
  1. 1
    Воспроизведите ошибку и запомните текст сообщения или неверный результат
  2. 2
    Найдите в конфигураторе процедуру, которая отвечает за операцию (по кнопке, событию или тексту сообщения)
  3. 3
    Поставьте точку останова в начале процедуры и запустите отладку через F5
  4. 4
    Выполняйте код пошагово (F10/F11), наблюдая значения переменных в табло
  5. 5
    Найдите строку, где значение становится неверным или возникает исключение
  6. 6
    Исправьте код, обновите конфигурацию и повторите проверку

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

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

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

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

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

В клиент-серверном режиме код делится на клиентский и серверный, и отладчик должен быть подключён к обоим предметам отладки. В настройках («Отладка» → «Настройка») проверьте, что включён поиск предметов отладки нужных типов: «Клиент», «Сервер», «Фоновое задание». Именно забытая галочка «Сервер» — самая частая причина, почему точка останова «не срабатывает».

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

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

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

Как выбрать действие

Точка останова не срабатывает, хотя код явно выполняетсяПроверьте, что в настройках отладки включён нужный тип предмета отладки (клиент/сервер/фоновое задание)
Ошибка возникает только у конкретного пользователяПодключитесь к его сеансу через «Отладка» → «Подключение» и попросите воспроизвести операцию
Ошибка в цикле проявляется на одной строке из многихИспользуйте точку останова с условием по проблемному значению
Код выполняется на сервере, а сервер не останавливаетсяПроверьте, что служба агента сервера запущена с ключом -debug, и перезапустите её при необходимости

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

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

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

Третья ошибка — забытые точки останова в рабочем коде. После завершения поиска снимите все точки (Ctrl+Shift+F9), иначе при следующем сеансе отладки выполнение остановится в неожиданных местах.

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

Альтернативы и дополнения к отладчику

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

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

Сравнение вариантов диагностики

Отладчик

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

Сообщить()

Быстрый вывод значений без остановки. Засоряет код и окно сообщений, требует последующей чистки.

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

Анализ уже случившихся ошибок у пользователей. Не показывает значения переменных, только события и тексты ошибок.

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

Поиск медленных участков кода. Не предназначен для поиска логических ошибок.

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

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

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

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

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

Повторное выполнение операции
Норма

Операция завершается без ошибок, результат совпадает с ожидаемым

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

Ошибка исчезла, но данные неверны или появилась новая ошибка

Граничные условия (пустые данные, нули, отмена)
Норма

Код корректно обрабатывает все варианты

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

Исправление работает только на основном сценарии

Код после отладки
Норма

Точки останова сняты, отладочные Сообщить() удалены

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

В коде остались отладочные конструкции

Часто задаваемые вопросы

Почему точка останова не срабатывает, хотя код точно выполняется?

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

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

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

Чем отличается «Шагнуть через» от «Шагнуть в»?

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

Как отладить обмен данными или регламентное задание?

Регламентные задания исполняются в фоновых сеансах. Включите в настройках отладки автоматическое подключение фоновых заданий или подключитесь вручную к сеансу задания через «Отладка» → «Подключение» сразу после его запуска. Поставьте точку останова в начале метода задания.

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

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

Итог

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

Отладка в 1С 8.3 — пошаговое выполнение кода с просмотром переменных. Запуск — F5, точка останова — F9, шаги — F10/F11, значения — табло и Shift+F9. Для серверного кода нужен ключ -debug, для чужих сеансов — подключение. После поиска ошибки снимите точки останова и проверьте исправление на граничных случаях.