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

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

Что значит отладка в 1С и как ей пользоваться

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

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

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

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

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

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

Типичные ситуации, когда без отладки не обойтись:

  • документ проводится не так, как ожидалось — движения по регистрам отличаются от расчётных;
  • программа выдаёт ошибку «Значение не является значением объектного типа» или деление на ноль, и непонятно, откуда пришло пустое значение;
  • запрос возвращает не те данные, и нужно проверить параметры и текст запроса в момент выполнения;
  • внешняя обработка или доработка ведёт себя иначе, чем задумано;
  • нужно разобраться в чужом или типовом коде — пройтись по нему шагами и понять логику.

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

Отладка всегда начинается из конфигуратора. Основной сценарий выглядит так:

Порядок запуска отладки
  1. 1
    Откройте конфигуратор и убедитесь, что конфигурация базы данных обновлена (F7)
  2. 2
    Поставьте точку останова (F9) на строке, с которой хотите начать наблюдение
  3. 3
    Нажмите F5 или выберите «Отладка — Начать отладку» — запустится клиент 1С:Предприятие в режиме отладки
  4. 4
    Выполните в клиенте действие, которое вызывает нужный код (проведите документ, нажмите кнопку)
  5. 5
    Когда выполнение дойдёт до точки останова, конфигуратор активируется, и строка подсветится

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

В клиент-серверном варианте на сервере 1С должен быть разрешён режим отладки. Если сервер запущен без соответствующего ключа, серверный код отлаживаться не будет — точки останова в серверных процедурах просто не сработают. Это одна из самых частых причин вопроса «почему отладка не останавливается».

Основные инструменты отладчика

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

Шаги выполнения

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

Просмотр значений

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

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

Стек вызовов и точки останова с условием

Стек вызовов (окно «Стек вызовов» или Ctrl+Alt+C) показывает цепочку: какая процедура вызвала текущую, откуда вызвана та и так далее до начальной точки. Это незаменимо, когда одна и та же функция вызывается из десятка мест, а ошибка возникает только при одном сценарии — по стеку видно, каким именно путём пришло выполнение.

Обычная точка останова останавливает выполнение всегда. Если строка находится внутри цикла на тысячу итераций, это неудобно. Для таких случаев есть точки останова с условием: в свойствах точки задаётся выражение, и остановка произойдёт только когда оно истинно. Например, остановиться в цикле по строкам табличной части только когда Строка.Сумма = 0.

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

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

Отладка в разных режимах: тонкий клиент, веб-клиент, фоновые задания

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

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

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

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

Почему точка останова не срабатывает

Точка стоит в серверной процедуре, а база клиент-сервернаяПроверьте, что сервер 1С запущен с разрешённой отладкой
Код выполняется в фоновом заданииПодключитесь к предмету отладки типа «Фоновое задание» до его запуска
Точка стоит, но код визуально не выполняетсяУбедитесь, что сценарий действительно приводит к этой ветке — поставьте точку выше по логике
Конфигуратор и база рассинхронизированыОбновите конфигурацию базы данных (F7) и перезапустите отладку

Типичные приёмы поиска ошибок

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

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

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

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

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

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

Дополнительные инструменты, которые часто используются вместе с отладкой или вместо неё:

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

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

Отладка в 1С — это пошаговое выполнение кода с просмотром переменных. Запуск: F5 из конфигуратора, точки останова — F9, шаги — F10/F11, выражения — Shift+F9. На рабочей базе остановка выполнения блокирует транзакции, поэтому для анализа используйте копию.

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

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

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

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

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

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

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

Чем отличается остановка по ошибке от обычной точки останова?

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

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

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

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

Сама по себе — нет, отладчик только наблюдает. Риск в другом: остановленная транзакция держит блокировки, а изменённые вручную значения могут быть записаны в базу при продолжении выполнения. Поэтому эксперименты с изменением данных безопаснее проводить на копии базы.