Отладчик 1С:Предприятия 8.3: от первой точки останова до серверного кода
Содержание
Чтобы включить отладку в 1С, откройте базу в Конфигураторе и нажмите F5 (меню Отладка → Начать отладку). Платформа запустит клиент 1С:Предприятия уже подключённым к отладчику. Ставите курсор на строку модуля, жмёте F9 — и выполнение остановится на ней.
Так работает файловая база и клиентский код любой базы. Для серверного кода в клиент-серверном варианте нужен ещё один шаг: запустить агент сервера с ключом -debug. Без него точки в серверных процедурах просто не сработают.
Как запустить клиент в режиме отладки
Отладчик живёт в Конфигураторе, а отлаживаемый код выполняется в клиенте или на сервере. Их нужно связать. Есть три способа.
Способ 1. Запуск прямо из Конфигуратора
Самый быстрый вариант для разработчика:
- Откройте базу в режиме Конфигуратор.
- Откройте конфигурацию:
Конфигурация → Открыть конфигурацию. - Нажмите
F5илиОтладка → Начать отладку. Если конфигурация изменена, но не сохранена в базе, Конфигуратор предложит обновить конфигурацию базы данных. - Платформа запустит тот вид клиента, который выбран в настройках Конфигуратора.
Вид клиента и протокол задаются в Сервис → Параметры, вкладка Запуск 1С:Предприятия. Там выбирают тонкий, толстый или веб-клиент и протокол отладки: HTTP или TCP/IP.
Для управляемых форм ставьте тонкий клиент. Толстый клиент выполняет часть кода иначе, и ошибка в тонком клиенте может в толстом не повториться.
Способ 2. Ключ /DEBUG в строке запуска
Если пользователь работает в своём клиенте, а вы хотите подключиться к его сеансу:
- В окне выбора баз выделите базу и нажмите
Изменить. - Дойдите до последней страницы мастера, поле
Дополнительные параметры запуска. - Впишите
/DEBUG.
То же самое из командной строки:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8c.exe" ENTERPRISE /F"D:\Bases\Buh" /DEBUG
Путь и номер платформы подставьте свои. 1cv8c.exe — тонкий клиент, 1cv8.exe — толстый. Чтобы клиент сразу нашёл отладчик на другом компьютере, добавьте /DEBUGGERURL с адресом сервера отладки, например /DEBUGGERURL "http://192.168.1.10:1550".
Способ 3. Подключение к уже запущенному сеансу
Клиент запущен с /DEBUG, Конфигуратор открыт отдельно. Тогда:
- В Конфигураторе откройте
Отладка → Подключение. - В окне «Предметы отладки» появятся доступные клиенты и сеансы.
- Выделите нужный и нажмите
Подключить.
В том же окне есть кнопка Автоматическое подключение. Отметьте в ней типы предметов: тонкий клиент, сервер, фоновое задание, HTTP-сервис, веб-сервис. Тогда новые сеансы этих типов будут подключаться сами, без ручного выбора.
| Способ | Когда подходит | Ограничения |
|---|---|---|
F5 из Конфигуратора | Своя разработка, тестовая база | Клиент запускается от вашего имени |
/DEBUG в параметрах запуска | Нужно повторить ошибку под конкретным пользователем | Подключение делается вручную |
Отладка → Подключение | Фоновые задания, HTTP-сервисы, чужие сеансы | Серверный код требует -debug на агенте |
Точки останова и пошаговое выполнение кода
Точка останова — строка, на которой выполнение замрёт и управление перейдёт в Конфигуратор.
Обычные и условные точки останова
- 🔴 Поставить или снять — курсор на строку и
F9, либо двойной щелчок по левому полю модуля. - 📋 Список всех точек —
Отладка → Список точек останова(Alt+F9). Здесь их можно временно выключать, не удаляя. - 🎯 Условная точка — в списке выделите точку и задайте условие. Например,
Контрагент.ИНН = "7701234567"илиНомерСтроки = 150. Остановка будет только при истинном условии.
Условные точки спасают при цикле на тысячи строк. Без условия вы нажмёте F5 сотни раз, прежде чем дойдёте до проблемной записи.
Остановка по ошибке
Иногда неизвестно, где именно падает код. Включите Отладка → Остановить по ошибке. Отладчик встанет на строке, где возникло исключение, даже если оно перехватывается в Попытка … Исключение.
В том же окне можно задать фрагмент текста ошибки. Тогда останов будет только на нужном исключении, а не на каждом перехваченном.
Клавиши пошагового выполнения
| Клавиша | Действие | Зачем |
|---|---|---|
F11 | Шагнуть в | Зайти внутрь вызываемой процедуры |
F10 | Шагнуть через | Выполнить вызов целиком, не заходя в него |
Shift+F11 | Шагнуть из | Доработать текущую процедуру и выйти на уровень выше |
Shift+F10 | Идти до курсора | Выполнить до строки, где стоит курсор |
F5 | Продолжить | Работать до следующей точки останова |
Пока выполнение стоит на точке останова, клиент «завис» с точки зрения пользователя. Если отлаживаете чужой сеанс, предупредите человека. На сервере остановленный вызов может держать блокировки транзакции, и другие пользователи будут ждать.
Как смотреть переменные и контекст выполнения
Отладчик полезен не столько остановкой, сколько тем, что видно в этот момент.
Подсказка и «Вычислить выражение»
Наведите курсор на переменную в модуле — значение появится во всплывающей подсказке. Для сложных значений выделите выражение и нажмите Shift+F9. Откроется окно «Вычислить выражение».
В нём можно:
- раскрыть структуру, таблицу значений, ссылку на объект;
- вычислить выражение на лету:
Запрос.Выполнить().Выгрузить().Количество(); - посмотреть результат запроса в виде таблицы.
Табло и стек вызовов
- 📌 Табло (
Отладка → Табло) — постоянный список выражений. Значения обновляются на каждом шаге. Удобно следить за счётчиком цикла и итоговой суммой одновременно. - 🧭 Стек вызовов (
Отладка → Стек вызовов) — цепочка процедур, которая привела в текущую строку. Двойной щелчок по строке стека переносит в нужный модуль. Так видно, кто вызвал общую процедуру с неправильными параметрами. - 🔍 Локальные переменные — отдельное окно со всеми переменными текущей процедуры. Пригодится, когда не помните имена.
В «Вычислить выражение» можно не только читать, но и вызвать функцию. Но вызов, который пишет в базу, выполнится по-настоящему. В рабочей базе не вызывайте из отладчика процедуры записи и проведения.
Где выполняется код
Над процедурами стоят директивы &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Это определяет, какой предмет отладки остановится. Точка в серверной процедуре сработает только при подключённом сервере. В клиентской процедуре серверные объекты недоступны, и «Вычислить выражение» вернёт ошибку при попытке прочитать, например, Объект.Ссылка.Владелец.Наименование через клиент.
Отладка внешних обработок, отчётов и печатных форм
Внешняя обработка (.epf) и внешний отчёт (.erf) отлаживаются как обычный модуль, но с одним условием: Конфигуратор и клиент должны работать с одним и тем же файлом.
Порядок такой:
- Запустите клиент в режиме отладки (
F5или/DEBUG). - В Конфигураторе откройте файл обработки:
Файл → Открыть. - Поставьте точки останова в модуле объекта или формы.
- В клиенте откройте тот же файл по тому же пути:
Файл → Открытьв главном меню. - Нажмите кнопку обработки — выполнение остановится.
Внесли правку — сохраните файл в Конфигураторе (Ctrl+S) и переоткройте его в клиенте. Иначе в клиенте работает старая версия, а точки стоят на новых строках.
Печатные формы и обработки из справочника
В типовых конфигурациях на БСП внешние печатные формы и обработки регистрируются в справочнике «Дополнительные отчеты и обработки». В БП 3.0 он открывается из Администрирование → Печатные формы, отчеты и обработки.
Тут подвох. Зарегистрированная обработка хранится в базе. При вызове платформа выгружает её во временный файл, и точки останова, поставленные в вашем файле, не срабатывают. Рабочие приёмы:
- 🧪 Отладьте логику отдельно. Откройте файл через
Файл → Открытьи вызовите функцию печати из формы обработки или через «Вычислить выражение». - 🔁 Обновляйте карточку после правок. В карточке дополнительной обработки загрузите исправленный файл заново. Иначе пользователи получат старую версию.
- 🛡️ Учитывайте безопасный режим. Дополнительные обработки на БСП по умолчанию выполняются в безопасном режиме. Код, который работает при открытии файла напрямую, может упасть при запуске из карточки из-за запрета на файловые операции или COM.
Серверная отладка в клиент-серверной базе
В файловом варианте серверный код выполняется в процессе клиента, поэтому хватает /DEBUG. В клиент-серверном варианте он идёт в рабочих процессах rphost на сервере 1С. Им тоже нужно разрешить отладку.
Ключ -debug в службе агента сервера
- На сервере 1С откройте редактор реестра:
Win+R → regedit. - Перейдите в
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. - Найдите службу агента сервера 1С. Её имя зависит от разрядности и версии, например
1C:Enterprise 8.3 Server Agent (x86-64). - Откройте параметр
ImagePath. В конце строки запускаragent.exeдопишите ключ-debug. - Перезапустите службу агента.
Пример строки после правки:
"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Ключ -debug включает отладку по TCP/IP. Для отладки по HTTP добавьте -debug -http. Протокол на сервере должен совпадать с тем, что выбран в Конфигураторе.
Перезапуск службы агента обрывает сеансы всех пользователей всех баз на этом сервере. Делайте это вне рабочего времени или на тестовом сервере.
Не включайте отладку на рабочем сервере без необходимости. Остановка на точке держит рабочий процесс, а любой разработчик с доступом к Конфигуратору сможет подключиться к сеансам пользователей.
Сервер отладки и порты
При отладке по HTTP посредником работает сервер отладки dbgs.exe. Конфигуратор поднимает его сам, по умолчанию на порту 1550. Если клиент и Конфигуратор на разных компьютерах, этот порт должен быть открыт в брандмауэре.
При TCP/IP-отладке связь идёт через порты рабочих процессов из диапазона, заданного в свойствах рабочего сервера (в примере выше 1560:1591).
Журналы, когда отладчик не поможет
Отладчик неудобен для ошибок, которые всплывают раз в сутки или только у конкретного пользователя. Тут выручают журналы:
- 📒 Журнал регистрации. В Конфигураторе:
Администрирование → Журнал регистрации. В БП 3.0:Администрирование → Обслуживание → Журнал регистрации. Отберите по уровню «Ошибка» и по пользователю — увидите текст исключения и время. - 🖊️ Свои записи. В коде вызов
ЗаписьЖурналаРегистрации("Обмен.Загрузка", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки())оставит след с контекстом. - 🧰 Технологический журнал. Настраивается файлом
logcfg.xmlв каталогеconfплатформы. Пишет события сервера: исключения, длительные вызовы, блокировки. Для разовых проблем включайте его на время и с фильтром, иначе логи быстро займут диск. - ⏱️ Замер производительности —
Отладка → Замер производительности. Показывает, сколько времени заняла каждая строка. Помогает, когда код не падает, а тормозит.
Почему отладчик не останавливается и как это исправить
Ещё один частый случай — расширение конфигурации
. Точки, поставленные в модуле основной конфигурации, сработают, но если расширение перехватывает метод через &Вместо, выполнение пойдёт в код расширения. Ставьте точку в модуле расширения: откройте его через Конфигурация → Расширения конфигурации.