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