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