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