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

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

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

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

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

Отладчик встроен в конфигуратор и работает совместно с клиентским приложением (тонким, толстым или веб-клиентом) либо с сервером 1С:Предприятия. Механизм позволяет выполнять код по шагам, заходить внутрь процедур и функций, просматривать табло переменных, вычислять произвольные выражения и изменять значения «на лету», чтобы проверить гипотезу без перезапуска сеанса.

Навык отладки нужен не только программисту. Внедренец, дорабатывающий типовую конфигурацию, и администратор, разбирающийся с ошибкой во внешней обработке, регулярно сталкиваются с ситуациями, когда сообщение об ошибке указывает на следствие, а не на причину. Отладка показывает реальную цепочку вызовов и фактические данные в момент сбоя.

Как включить режим отладки в конфигураторе

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

Для клиент-серверного варианта требуется, чтобы сервер 1С:Предприятия был запущен с разрешением отладки. В Windows это параметр -debug в командной строке службы агента сервера; в Linux — соответствующий ключ при запуске. Без этого флага серверный код отлаживаться не будет: точки останова в серверных процедурах просто проигнорируются, хотя клиентская часть при этом может отлаживаться нормально.

Дополнительно проверьте настройку в самом конфигураторе: «Сервис» → «Параметры» → закладка отладки. Там задаётся протокол отладки (по HTTP или TCP), а также поведение при подключении. Для веб-клиента и отладки через HTTP может потребоваться публикация базы с включённой отладкой на веб-сервере.

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

Точка останова — метка на строке модуля, при достижении которой выполнение приостанавливается и управление переходит конфигуратору. Ставится щелчком по левому полю редактора модуля напротив нужной строки или клавишей F9. Красный кружок означает активную точку; при повторном нажатии она снимается.

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

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

Порядок действий при поиске ошибки
  1. 1
    Воспроизведите ошибку в клиентском приложении и запомните текст сообщения
  2. 2
    Включите остановку по ошибке: «Отладка» → «Остановка по ошибке»
  3. 3
    Повторите действие — выполнение прервётся в точке сбоя
  4. 4
    Откройте стек вызовов и поднимитесь к своему коду, а не к системному
  5. 5
    Посмотрите значения переменных в табло и найдите неожиданное значение
  6. 6
    Проследите по шагам (F10/F11), откуда пришло неверное значение

Пошаговое выполнение и навигация по коду

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

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

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

Просмотр и изменение значений переменных

Табло («Отладка» → «Табло» или Ctrl+Alt+W) — окно, куда добавляют переменные и произвольные выражения. В отличие от простого списка локальных переменных, табло вычисляет любые корректные выражения встроенного языка: Документ.Товары.Количество(), Запрос.Выполнить().Выгрузить().Количество(), обращения к свойствам объектов. Выражения пересчитываются на каждом шаге, что позволяет наблюдать изменение данных в динамике.

Окно «Вычислить выражение» (Shift+F9) делает то же самое разово и удобно для развёрнутого просмотра: таблицы значений, структуры и массивы отображаются в виде дерева, содержимое можно раскрыть до отдельных полей. Для запросов полезно вычислить текст запроса с подставленными параметрами и проверить его отдельно в консоли запросов.

Значения простых типов (число, строка, дата, булево) можно изменить прямо во время остановки — через «Вычислить выражение» или табло. Это позволяет проверить гипотезу: подставить корректное значение вместо ошибочного и продолжить выполнение. Если после подмены код отработал правильно, причина локализована — осталось найти, где формируется неверное значение.

Особенности отладки клиентского и серверного кода

В управляемом приложении код делится на клиентский и серверный, и отладчик показывает обе стороны, но с особенностями. При переходе из клиентской процедуры в серверный вызов (F11 на строке вызова серверной процедуры) отладчик переключает контекст — в заголовке предмета отладки видно, какой сеанс сейчас остановлен. Точки останова работают в обоих контекстах, если сервер запущен с разрешением отладки.

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

Веб-клиент отлаживается через HTTP-протокол отладки; настройки задаются в параметрах конфигуратора и при публикации базы. Учтите, что код, выполняемый в браузере (директива &НаКлиенте при работе через веб-клиент), имеет ограничения по сравнению с тонким клиентом, и часть сценариев воспроизводится только в конкретном типе клиента — отлаживать нужно именно там, где проявляется ошибка.

Сравнение способов поиска ошибки

Точки останова и пошаговая отладка

Подходит для сложной логики и неочевидных причин; требует воспроизводимого сценария

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

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

Сообщить() и журнал регистрации

Работает там, где отладчик недоступен (регламентные задания на рабочем сервере); засоряет лог и требует последующей чистки кода

Типичные ошибки при отладке и их последствия

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

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

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

Типичные ошибки
01
Отладка не той базы — точки останова молчат, разработчик ищет несуществующую проблему в коде
02
Сервер без ключа -debug — серверные процедуры пролетают мимо точек останова
03
Останов внутри транзакции на рабочей базе — блокировки и зависания у пользователей
04
Исправление значения переменной вместо поиска причины — ошибка вернётся при следующем запуске
05
Оставленные вызовы Сообщить() в рабочем коде — лишние окна у пользователей и потеря производительности

Как проверить, что ошибка исправлена

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

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

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

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

Выполнение проблемного участка
Норма

Код проходит точку останова с ожидаемыми значениями переменных

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

Значения снова некорректны или участок не выполняется

Результат работы функционала
Норма

Документ проводится, отчёт показывает верные цифры

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

Ошибка ушла, но данные неверные

Поведение под ограниченными правами
Норма

Сценарий работает у рядового пользователя

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

Работает только под полными правами

Чистота кода
Норма

В модуле нет отладочных Сообщить() и закомментированных блоков

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

Остались временные вставки

Частые вопросы об отладке в 1С

Почему точка останова не срабатывает, хотя код точно выполняется?

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

Можно ли отлаживать код на рабочей базе, где работают пользователи?

Технически можно, но рискованно: остановленный сеанс может удерживать блокировки, а изменение значений переменных влияет на реальные данные при записи. Безопасный вариант — развернуть копию базы и отлаживать там. Если без рабочей базы не обойтись, используйте остановку по ошибке и минимизируйте время останова.

Как посмотреть содержимое таблицы значений или результата запроса?

Выделите переменную, нажмите Shift+F9 («Вычислить выражение») — содержимое откроется в виде дерева с возможностью раскрыть строки и колонки. Для запроса удобно вычислить выражение вида Запрос.Выполнить().Выгрузить() и просмотреть полученную таблицу целиком.

Чем отличаются клавиши F10 и F11 при пошаговой отладке?

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

Как отладить регламентное или фоновое задание?

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

Попадут ли точки останова в конфигурацию при обновлении базы?

Нет. Точки останова — это настройка сеанса разработчика, они хранятся локально и не сохраняются в конфигурации. В код попадают только реальные изменения модулей, поэтому перед обновлением проверяйте именно текст модулей, а не расставленные метки.

Итог

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

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