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