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

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

Как работать с отладкой в 1С: пошаговое руководство

Как запустить отладку в 1С, поставить точки останова, смотреть переменные, обходить ошибки в серверном коде и фоновых заданиях. Практическая инструкция.

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

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

Ниже разобраны запуск отладки, работа с точками останова, просмотр значений, отладка серверного кода и фоновых заданий, а также типичные ситуации, в которых отладка не срабатывает.

Как запустить отладку в конфигураторе

Отладка запускается из конфигуратора: меню «Отладка» → «Начать отладку» или клавиша F5. Конфигуратор запустит клиентское приложение в режиме отладки — в заголовке окна появится соответствующая пометка. Если конфигурация была изменена, платформа предложит обновить конфигурацию базы данных — без обновления отлаживаться будет старая версия кода.

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

Учтите важное ограничение: для файловой базы подключение возможно, только если клиент запущен с ключом /debug или отладка разрешена в параметрах информационной базы. Для клиент-серверного варианта на сервере 1С должен быть включён режим отладки (параметр -debug у агента сервера), иначе серверный код отлаживаться не будет.

Точки останова: как остановить выполнение в нужном месте

Точка останова ставится кликом по левому полю редактора кода или клавишей F9 на нужной строке. Когда выполнение дойдёт до этой строки, программа остановится, и управление перейдёт в конфигуратор. Снять все точки можно через «Отладка» → «Отключить точки останова».

Ставьте точку не на саму строку с ошибкой, а чуть раньше — так вы увидите, какие значения приходят в проблемное место. Например, если падает запрос, остановитесь перед его выполнением и проверьте параметры и текст запроса.

Условные точки останова

Если строка выполняется сотни раз в цикле, останавливаться каждый раз неудобно. В свойствах точки останова (правый клик по точке → «Свойства») можно задать условие — например, Номенклатура.Код = "000123". Выполнение остановится только тогда, когда условие истинно. Это основной способ отладки циклов и обработок больших объёмов данных.

Остановка по ошибке

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

Порядок действий при поиске ошибки
  1. 1
    Воспроизведите проблему и запомните точный текст ошибки
  2. 2
    Поставьте точку останова перед предполагаемым проблемным местом или включите остановку по ошибке
  3. 3
    Запустите отладку (F5) и повторите действие в клиенте
  4. 4
    Когда выполнение остановится, проверьте значения переменных через табло
  5. 5
    Пройдите код по шагам (F10/F11) и найдите строку, где значение становится неверным

Пошаговое выполнение и стек вызовов

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

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

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

Как смотреть значения переменных

Основной инструмент просмотра — табло (Shift+F9). Введите в него имя переменной или любое выражение на встроенном языке — например, Запрос.Выполнить().Выгрузить().Количество() или Объект.Товары[0].Сумма. Табло вычисляет выражение в текущем контексте и показывает результат. Значения в табло обновляются при каждом шаге, поэтому вы видите динамику изменения данных.

Быстрый способ посмотреть одно значение — выделить выражение в коде и нажать Shift+F9: оно сразу попадёт в табло. Также работает окно «Вычислить выражение» (Ctrl+Shift+F9) и всплывающая подсказка при наведении мыши на переменную в режиме останова.

Объекты сложных типов (таблицы значений, результаты запроса, объекты документов) разворачиваются в табло деревом. Для таблиц значений удобно смотреть количество строк и содержимое конкретных ячеек через индексы. Учтите, что вычисление выражений в табло выполняет реальный код: вызов функции с побочными эффектами (запись, изменение данных) реально выполнится.

Контрольные точки

Как проверить результат

Значение переменной в табло
Норма

Соответствует ожидаемому типу и содержимому

Тревожный признак

Неопределено, пустая ссылка или неожиданный тип

Поведение на шаге F10
Норма

Выполняется следующая строка по порядку

Тревожный признак

Управление «прыгает» в обработчик исключения или завершает процедуру

Стек вызовов
Норма

Цепочка вызовов соответствует логике прикладного решения

Тревожный признак

Процедура вызвана из неожиданного места или рекурсивно

Отладка серверного кода и фоновых заданий

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

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

Альтернативный приём для фоновых заданий — временно заменить вызов ФоновыеЗадания.Выполнить() на прямой вызов той же процедуры. Тогда код выполнится в текущем сеансе и отладится обычным способом. После проверки верните асинхронный вызов обратно.

Отладка внешних соединений и веб-сервисов

Код, выполняемый через COM-соединение, HTTP- и веб-сервисы, тоже отлаживается через механизм подключения: в настройках подключения отметьте нужные типы предметов отладки. Сеанс, инициированный внешним вызовом, появится в списке после обращения к сервису.

Типичные проблемы: почему отладка не срабатывает

Самая частая ситуация — точка останова игнорируется. Причины обычно такие: конфигурация базы данных не обновлена после изменения кода (код в отладчике и в базе различается), сервер запущен без ключа -debug, либо код выполняется в другом сеансе, к которому отладчик не подключён. Проверяйте эти три пункта в первую очередь.

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

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

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

Что делать, если отладчик недоступен

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

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

Для разбора ошибок у пользователей полезно включить в конфигурации подробное логирование: текст ошибки, пользователь, данные, с которыми работал сеанс. По таким записям часто удаётся воспроизвести проблему локально и дальше отладить её обычным способом на копии базы.

Сравнение способов диагностики

Отладчик

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

Журнал регистрации

Работает везде, включая сервер и фоновые задания, но показывает только то, что вы записали заранее

Технологический журнал

Фиксирует ошибки платформы и запросы без изменения кода; требует настройки и разбора больших логов

Сообщить()

Быстро для клиентского кода, но бесполезно на сервере и в фоновых заданиях

Итог

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

Отладка запускается по F5, точка останова ставится по F9, значения смотрятся в табло (Shift+F9). Для серверного кода нужен ключ -debug на сервере, для фоновых заданий — подключение через меню «Отладка → Подключение». Работайте на копии базы и не забывайте снимать точки останова после завершения.

Частые вопросы

Почему точка останова отображается с восклицательным знаком?

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

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

В файловом режиме серверный код отлаживается в том же сеансе автоматически. В клиент-серверном варианте нужно остановить службу агента сервера 1С, добавить ключ -debug в параметры запуска и перезапустить службу. После этого серверные точки останова начнут срабатывать.

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

Напрямую редактировать значения в табло нельзя, но в окне «Вычислить выражение» можно выполнить присваивание — например, Объект.Сумма = 100. Это выполнит реальное присваивание в отлаживаемом контексте. Используйте возможность осторожно: изменённые данные могут быть записаны при дальнейшем выполнении кода.

Как отладить обмен данными или код, вызываемый извне?

Включите в настройках подключения (Отладка → Подключение → настройка) нужные типы предметов отладки: фоновые задания, внешние соединения, HTTP-сервисы. Затем инициируйте обмен — сеанс появится в списке, подключитесь к нему и ставьте точки останова в коде обработчиков обмена.

Отладка тормозит всю систему — это нормально?

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

Чем отличается «Шагнуть через» от «Шагнуть в»?

«Шагнуть через» (F10) выполняет вызываемую процедуру целиком и останавливается на следующей строке текущей процедуры. «Шагнуть в» (F11) заходит внутрь вызова и останавливается на его первой строке. Если вы уверены, что вызываемая процедура работает правильно, используйте F10, чтобы не тратить время на её проход.