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