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