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

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

Отладка в 1С: что это и как найти ошибку в коде

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

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

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

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

Что такое отладка и какие задачи она решает

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

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

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

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

Для клиент-серверных баз важно, чтобы на сервере 1С был включён режим отладки — служба агента сервера должна запускаться с ключом -debug. Без этого ключа отладчик не сможет подключиться к серверным процедурам, и код, выполняющийся на сервере, останется «невидимым». Включение режима делает администратор сервера, при этом на продуктивных системах его обычно включают временно, так как отладка снижает производительность.

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

Точки останова и пошаговое выполнение

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

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

Порядок действий при поиске ошибки
  1. 1
    Воспроизведите проблему и зафиксируйте, какой результат неверен
  2. 2
    Найдите в коде процедуру, отвечающую за это действие (по кнопке, команде, обработчику)
  3. 3
    Поставьте точку останова в начале процедуры и запустите отладку (F5)
  4. 4
    Пошагово пройдите код, сверяя значения переменных с ожидаемыми
  5. 5
    Найдя строку, где значение становится неверным, исправьте код и повторите проверку

Просмотр значений: табло, выражения и стек вызовов

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

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

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

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

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

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

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

Альтернативы и дополнения к отладчику

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

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

Сравнение инструментов диагностики

Отладчик

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

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

Фиксация ошибок на продуктиве без остановки работы; не показывает значения переменных

Замер производительности

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

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

Низкоуровневая диагностика СУБД и кластера; сложен в настройке и чтении

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

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

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

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

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

Повторное выполнение сценария
Норма

Результат совпадает с ожидаемым без остановок и исключений

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

Ошибка ушла в одном случае, но появляется на других данных

Проверка под исходным пользователем
Норма

Сценарий работает с реальными правами доступа

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

Под администратором работает, у пользователя — нет

Чистота кода после отладки
Норма

Нет лишних точек останова и вызовов Сообщить()

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

В коде остались отладочные артефакты

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

Почему точка останова не срабатывает?

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

Можно ли отлаживать код на продуктивной базе?

Технически да, но безопасно только для чтения и анализа. Любое продолжение выполнения может записать данные. Для доработок используйте копию базы, а на продуктиве ограничьтесь просмотром значений и журналом регистрации.

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

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

Что делать, если ошибка возникает только в фоновом задании?

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

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

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

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

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

Итог

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

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