Отладка кода в Конфигураторе 1С 8.3: от F5 до серверных вызовов

· 10 мин

Содержание

Чтобы запустить отладчик в 1С 8.3, откройте базу в Конфигураторе, поставьте точку останова клавишей F9 на нужной строке модуля и нажмите F5 (Отладка → Начать отладку). Откроется 1С:Предприятие, а Конфигуратор остановит выполнение, когда код дойдёт до отмеченной строки.

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

Подготовка базы и Конфигуратора к отладке

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

Что нужно до первого запуска:

  • 🔑 Права на вход в Конфигуратор. У пользователя должна быть роль с административными правами или право запуска Конфигуратора.
  • 🧩 Конфигурация базы данных совпадает с основной. Если вы правили код и не применили изменения, при F5 Конфигуратор предложит обновить конфигурацию базы данных. Без этого вы будете отлаживать старый код.
  • 🗂 Режим запуска клиента. Каким клиентом откроется база при отладке, задаётся в Сервис → Параметры → Запуск 1С:Предприятия: тонкий, толстый (управляемое приложение) или веб-клиент.
  • 🌐 Протокол отладки. Начиная с платформы 8.3.7 есть отладка по HTTP через сервер отладки dbgs.exe. Выбор протокола находится в параметрах Конфигуратора на вкладке «Отладка». Для новых баз берите HTTP: он проще проходит через сеть и нужен для отладки мобильных и удалённых клиентов.

Отлаживайте на копии базы. Код при отладке выполняется по-настоящему: документ, который вы проведёте под отладчиком, запишет движения в регистры. Не тестируйте исправления на рабочей базе в часы работы бухгалтерии.

Файловая база и клиент-серверная: в чём разница

Вариант базыЧто работает сразуЧто настраивать
ФайловаяКлиентский и серверный код, фоновые задания внутри сеансаНичего, достаточно F5
Клиент-сервернаяКлиентский кодЗапуск сервера 1С с ключом -debug, подключение предмета «Сервер»

В файловом варианте «сервер» работает внутри того же процесса, что и клиент. Поэтому процедура с директивой &НаСервере останавливается на точке так же, как клиентская.

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

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

Способ 1. Клавиша F5 из Конфигуратора

Самый частый вариант.

  1. Откройте нужный модуль: модуль формы, объекта, общий модуль.
  2. Поставьте точку останова (F9).
  3. Нажмите F5 или выберите Отладка → Начать отладку.
  4. В открывшемся 1С:Предприятии выполните действие, которое вызывает код: откройте форму, нажмите кнопку, проведите документ.

Конфигуратор сам подключается к запущенному сеансу. Повторное нажатие F5 в режиме остановки продолжает выполнение до следующей точки.

Способ 2. Подключение к уже запущенному сеансу

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

Ярлык или строка запуска клиента с отладкой по HTTP:

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8c.exe" ENTERPRISE /F"D:\Bases\Copy_BP" /DEBUG /DEBUGGERURL "http://localhost:1550"

Здесь 1cv8c.exe — тонкий клиент, /DEBUG включает режим отладки, а /DEBUGGERURL указывает адрес сервера отладки. Номер версии в пути подставьте свой. Порт 1550 используется сервером отладки по умолчанию.

Затем в Конфигураторе откройте Отладка → Подключение. В окне появится список предметов отладки: клиентские сеансы, серверные процессы. Выделите нужный и подключите его.

Способ 3. Отладка серверного кода в клиент-серверной базе

Сервер 1С по умолчанию не принимает отладчик. Его нужно перезапустить с ключом отладки.

  1. Откройте редактор реестра и найдите службу агента сервера 1С: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, раздел со службой 1С:Предприятия.
  2. В параметре ImagePath после пути к ragent.exe добавьте ключ -debug. Для отладки по HTTP — -debug -http.
  3. Перезапустите службу агента сервера.
  4. В Конфигураторе: Отладка → Подключение → Автоматическое подключение, отметьте предмет «Сервер».

Пример строки ImagePath после правки:

"C:\Program Files\1cv8\8.3.24.1691\bin\ragent.exe" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

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

На Linux ключ -debug добавляют в параметры запуска ragent в unit-файле службы, затем перечитывают конфигурацию systemd и перезапускают службу.

Способ 4. Внешняя обработка или отчёт из файла

Код внешней обработки не хранится в конфигурации, поэтому точки в общих модулях его не поймают.

  1. В Конфигураторе откройте файл обработки через Файл → Открыть.
  2. Поставьте точки останова в её модулях.
  3. Запустите отладку F5 и в 1С:Предприятии откройте тот же самый файл по тому же пути.

Если открыть копию из другой папки, отладчик её не свяжет с открытым в Конфигураторе файлом, и остановки не будет.

Точки останова: обычные, с условием и остановка по ошибке

Точка останова — красный кружок слева от строки. Код останавливается перед выполнением отмеченной строки.

Основные действия:

ДействиеКак вызвать
Поставить или снять точкуF9 или двойной щелчок по полю слева от строки
Точка с условиемОтладка → Точка останова с условием
Список всех точекОтладка → Список точек останова (Alt+F9)
Убрать все точкиОтладка → Убрать все точки останова
Остановка при ошибкеОтладка → Остановка по ошибке

Точка с условием

Обычная точка внутри цикла по 5 000 строкам остановит вас 5 000 раз. Условие решает это: укажите выражение на встроенном языке, и остановка сработает только при его истинности.

Пример условий:

Выборка.Номенклатура.Код = "00-00001234"
СтрокаТЧ.Сумма < 0

Условие вычисляется в контексте строки, поэтому в нём доступны те же переменные, что и в коде.

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

Если программа падает с исключением, а где именно — непонятно, включите остановку по ошибке. Отладчик остановится на строке, где возникло исключение. В настройке можно включить остановку и для исключений, перехваченных конструкцией Попытка … Исключение.

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

Список точек останова

В окне Alt+F9 видно все точки по всем модулям. Здесь же точку можно временно отключить, не удаляя её. Отключённая точка остаётся в модуле, но выполнение не останавливает.

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

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

Когда выполнение остановилось, строка подсвечивается стрелкой. Дальше вы управляете кодом с клавиатуры.

КлавишаКомандаЧто делает
F11Шагнуть вВыполняет строку; если в ней вызов процедуры — заходит внутрь
F10Шагнуть черезВыполняет строку целиком, не заходя в вызываемые процедуры
Shift+F11Шагнуть изДорабатывает текущую процедуру и останавливается в месте вызова
Shift+F10Идти до курсораВыполняет код до строки, где стоит курсор
F5ПродолжитьРаботает до следующей точки останова

Как пользоваться на практике:

  • 🔎 Ищете, где портится значение — идите F10 по процедуре и смотрите переменные после каждой строки.
  • 🧭 Подозреваете вызываемую функцию — на её вызове нажмите F11.
  • ⏩ Случайно зашли в длинную типовую процедуру — Shift+F11 вернёт вас наверх.
  • 🎯 Нужно пропустить цикл — поставьте курсор на строку после него и нажмите Shift+F10.

Стек вызовов

Окно стека (Отладка → Стек вызовов) показывает цепочку процедур, которая привела к текущей строке. Верхняя строка — где вы сейчас, ниже — кто её вызвал.

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

Переходы между клиентом и сервером

При F11 на вызове серверной процедуры отладчик переходит в серверный контекст. В клиент-серверной базе это сработает, только если сервер запущен с -debug и подключён как предмет отладки. Иначе вызов выполнится целиком, а отладчик останется на клиенте.

Просмотр переменных и вычисление выражений

Остановить код — половина дела. Главное — увидеть, какие значения в нём лежат.

Подсказка под курсором

Наведите мышь на имя переменной в режиме остановки — появится всплывающее значение. Для простых типов этого достаточно.

Окно «Вычислить выражение»

Shift+F9 открывает окно, где можно ввести любое выражение на встроенном языке:

  • 📦 имя переменной или реквизит объекта: Объект.Контрагент.ИНН;
  • 🧮 вычисление: Количество * Цена - СуммаСкидки;
  • 📊 вызов функции, возвращающей значение: ТЗ.Количество().

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

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

Табло

Табло (Отладка → Табло) — постоянный список наблюдаемых выражений. Добавьте туда 3–5 переменных, и их значения будут обновляться после каждого шага. Это быстрее, чем каждый раз открывать Shift+F9.

Локальные переменные

Окно «Локальные» в меню «Отладка» показывает все переменные текущей процедуры сразу, включая параметры. Удобно, когда процедура чужая и неясно, какие переменные в ней есть.

Вместо трассировки — замер производительности

Если вопрос не «где ошибка», а «почему медленно», включите Отладка → Замер производительности, выполните операцию и остановите замер. Конфигуратор покажет, сколько раз выполнялась каждая строка и какую долю времени заняла. Строка, на которую приходится 80% времени, — первый кандидат на оптимизацию.

Перед запуском отладки клиент-серверной базы
Выполнено: 0 / 5

Отладка фоновых заданий и внешних соединений

Регламентные и фоновые задания выполняются на сервере в отдельном сеансе. Обычная точка в модуле с F5 их не ловит, если не подключить соответствующий предмет.

  1. Откройте Отладка → Подключение → Автоматическое подключение.
  2. Отметьте типы предметов: сервер, фоновые задания, внешнее соединение — в зависимости от задачи.
  3. Поставьте точку в процедуре, которую вызывает задание.
  4. Запустите задание из 1С:Предприятия вручную или дождитесь расписания.

Для внешнего соединения (COM-подключение из другой программы) порядок тот же: включите автоматическое подключение нужного типа, и при вызове кода через внешнее соединение Конфигуратор остановится на точке.

Регламентное задание с расписанием раз в сутки отлаживать неудобно. Вызовите его процедуру из обработки или из окна «Вычислить выражение»: код тот же, а ждать не нужно.

Почему отладчик не останавливается: частые сбои

Диагностика: выберите симптом

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

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

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

Можно ли отлаживать базу, в которой сейчас работают пользователи?
Технически да: подключитесь к нужному сеансу через Отладка → Подключение. Но остановка на точке в серверном коде задержит выполнение у пользователя, чей вызов попал в точку. Безопаснее воспроизвести проблему на копии.
Чем отладка по HTTP лучше TCP?
HTTP работает через сервер отладки и один порт, проще настраивается через брандмауэр и нужен для отладки веб-клиента и удалённых клиентов. TCP остался для совместимости с платформами ниже 8.3.7.
Как отладить веб-клиент?
Режим запуска веб-клиента выбирают в Сервис → Параметры → Запуск 1С:Предприятия. База должна быть опубликована на веб-сервере, а протокол отладки — HTTP.
Нужна ли отдельная лицензия для отладки?
Отладка — функция Конфигуратора. Сеанс 1С:Предприятия, запущенный под отладкой, занимает клиентскую лицензию так же, как обычный сеанс.
Как отлаживать в 1С:EDT?
В EDT отладку запускают через конфигурацию запуска на базе приложения. Точки останова, шаги и просмотр переменных работают по тем же принципам, что и в Конфигураторе, но горячие клавиши и окна свои, как в Eclipse.