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