Отладка кода в Конфигураторе 1С 8.3: от F5 до серверных вызовов
Содержание
Чтобы запустить отладчик в 1С 8.3, откройте базу в Конфигураторе, поставьте точку останова клавишей F9 на нужной строке модуля и нажмите F5 (Отладка → Начать отладку). Откроется 1С:Предприятие, а Конфигуратор остановит выполнение, когда код дойдёт до отмеченной строки.
Частое заблуждение: «отладчик не видит серверный код, значит, он сломан». На деле в файловой базе серверные процедуры отлаживаются сразу, а в клиент-серверной сервер 1С сначала нужно запустить в режиме отладки. Это одна настройка, и её разбор ниже вместе с точками останова, пошаговым выполнением и просмотром переменных.
Подготовка базы и Конфигуратора к отладке
Отладчик встроен в Конфигуратор, отдельно его ставить не нужно. Но несколько условий проверьте заранее, иначе запуск закончится сообщением или точки останова не сработают.
Что нужно до первого запуска:
- 🔑 Права на вход в Конфигуратор. У пользователя должна быть роль с административными правами или право запуска Конфигуратора.
- 🧩 Конфигурация базы данных совпадает с основной. Если вы правили код и не применили изменения, при
F5Конфигуратор предложит обновить конфигурацию базы данных. Без этого вы будете отлаживать старый код. - 🗂 Режим запуска клиента. Каким клиентом откроется база при отладке, задаётся в
Сервис → Параметры → Запуск 1С:Предприятия: тонкий, толстый (управляемое приложение) или веб-клиент. - 🌐 Протокол отладки. Начиная с платформы 8.3.7 есть отладка по HTTP через сервер отладки
dbgs.exe. Выбор протокола находится в параметрах Конфигуратора на вкладке «Отладка». Для новых баз берите HTTP: он проще проходит через сеть и нужен для отладки мобильных и удалённых клиентов.
Отлаживайте на копии базы. Код при отладке выполняется по-настоящему: документ, который вы проведёте под отладчиком, запишет движения в регистры. Не тестируйте исправления на рабочей базе в часы работы бухгалтерии.
Файловая база и клиент-серверная: в чём разница
| Вариант базы | Что работает сразу | Что настраивать |
|---|---|---|
| Файловая | Клиентский и серверный код, фоновые задания внутри сеанса | Ничего, достаточно F5 |
| Клиент-серверная | Клиентский код | Запуск сервера 1С с ключом -debug, подключение предмета «Сервер» |
В файловом варианте «сервер» работает внутри того же процесса, что и клиент. Поэтому процедура с директивой &НаСервере останавливается на точке так же, как клиентская.
Как запустить режим отладки: четыре способа
Способ зависит от того, что вы отлаживаете: свою форму в копии базы, уже открытый сеанс пользователя или код на сервере.
Способ 1. Клавиша F5 из Конфигуратора
Самый частый вариант.
- Откройте нужный модуль: модуль формы, объекта, общий модуль.
- Поставьте точку останова (
F9). - Нажмите
F5или выберитеОтладка → Начать отладку. - В открывшемся 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С:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, раздел со службой 1С:Предприятия. - В параметре
ImagePathпосле пути кragent.exeдобавьте ключ-debug. Для отладки по HTTP —-debug -http. - Перезапустите службу агента сервера.
- В Конфигураторе:
Отладка → Подключение → Автоматическое подключение, отметьте предмет «Сервер».
Пример строки 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. Внешняя обработка или отчёт из файла
Код внешней обработки не хранится в конфигурации, поэтому точки в общих модулях его не поймают.
- В Конфигураторе откройте файл обработки через
Файл → Открыть. - Поставьте точки останова в её модулях.
- Запустите отладку
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% времени, — первый кандидат на оптимизацию.
Отладка фоновых заданий и внешних соединений
Регламентные и фоновые задания выполняются на сервере в отдельном сеансе. Обычная точка в модуле с F5 их не ловит, если не подключить соответствующий предмет.
- Откройте
Отладка → Подключение → Автоматическое подключение. - Отметьте типы предметов: сервер, фоновые задания, внешнее соединение — в зависимости от задачи.
- Поставьте точку в процедуре, которую вызывает задание.
- Запустите задание из 1С:Предприятия вручную или дождитесь расписания.
Для внешнего соединения (COM-подключение из другой программы) порядок тот же: включите автоматическое подключение нужного типа, и при вызове кода через внешнее соединение Конфигуратор остановится на точке.
Регламентное задание с расписанием раз в сутки отлаживать неудобно. Вызовите его процедуру из обработки или из окна «Вычислить выражение»: код тот же, а ждать не нужно.
Почему отладчик не останавливается: частые сбои
Ещё один тонкий момент — расширения конфигурации. Точки останова в модулях расширения работают, но только если расширение применено к базе и активно. Если вы правили расширение и не обновили его в базе, отладчик будет выполнять старую версию кода.
С безопасным режимом похожая история. Расширение или внешняя обработка, запущенные в безопасном режиме, отлаживаются, но часть операций в них запрещена. Ошибка «нет прав» под отладчиком в таком случае — следствие ограничений режима, а не сбой самого отладчика.