Отладчик 1С:Предприятия 8.3: от первой точки останова до серверного кода

· 9 мин

Содержание

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

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

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

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

Способ 1. Запуск прямо из Конфигуратора

Самый быстрый вариант для разработчика:

  1. Откройте базу в режиме Конфигуратор.
  2. Откройте конфигурацию: Конфигурация → Открыть конфигурацию.
  3. Нажмите F5 или Отладка → Начать отладку. Если конфигурация изменена, но не сохранена в базе, Конфигуратор предложит обновить конфигурацию базы данных.
  4. Платформа запустит тот вид клиента, который выбран в настройках Конфигуратора.

Вид клиента и протокол задаются в Сервис → Параметры, вкладка Запуск 1С:Предприятия. Там выбирают тонкий, толстый или веб-клиент и протокол отладки: HTTP или TCP/IP.

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

Способ 2. Ключ /DEBUG в строке запуска

Если пользователь работает в своём клиенте, а вы хотите подключиться к его сеансу:

  1. В окне выбора баз выделите базу и нажмите Изменить.
  2. Дойдите до последней страницы мастера, поле Дополнительные параметры запуска.
  3. Впишите /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, Конфигуратор открыт отдельно. Тогда:

  1. В Конфигураторе откройте Отладка → Подключение.
  2. В окне «Предметы отладки» появятся доступные клиенты и сеансы.
  3. Выделите нужный и нажмите Подключить.

В том же окне есть кнопка Автоматическое подключение. Отметьте в ней типы предметов: тонкий клиент, сервер, фоновое задание, HTTP-сервис, веб-сервис. Тогда новые сеансы этих типов будут подключаться сами, без ручного выбора.

СпособКогда подходитОграничения
F5 из КонфигуратораСвоя разработка, тестовая базаКлиент запускается от вашего имени
/DEBUG в параметрах запускаНужно повторить ошибку под конкретным пользователемПодключение делается вручную
Отладка → ПодключениеФоновые задания, HTTP-сервисы, чужие сеансыСерверный код требует -debug на агенте

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

Точка останова — строка, на которой выполнение замрёт и управление перейдёт в Конфигуратор.

Обычные и условные точки останова

  • 🔴 Поставить или снять — курсор на строку и F9, либо двойной щелчок по левому полю модуля.
  • 📋 Список всех точек — Отладка → Список точек останова (Alt+F9). Здесь их можно временно выключать, не удаляя.
  • 🎯 Условная точка — в списке выделите точку и задайте условие. Например, Контрагент.ИНН = "7701234567" или НомерСтроки = 150. Остановка будет только при истинном условии.

Условные точки спасают при цикле на тысячи строк. Без условия вы нажмёте F5 сотни раз, прежде чем дойдёте до проблемной записи.

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

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

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

Клавиши пошагового выполнения

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

Пока выполнение стоит на точке останова, клиент «завис» с точки зрения пользователя. Если отлаживаете чужой сеанс, предупредите человека. На сервере остановленный вызов может держать блокировки транзакции, и другие пользователи будут ждать.

Как смотреть переменные и контекст выполнения

Отладчик полезен не столько остановкой, сколько тем, что видно в этот момент.

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

Наведите курсор на переменную в модуле — значение появится во всплывающей подсказке. Для сложных значений выделите выражение и нажмите Shift+F9. Откроется окно «Вычислить выражение».

В нём можно:

  • раскрыть структуру, таблицу значений, ссылку на объект;
  • вычислить выражение на лету: Запрос.Выполнить().Выгрузить().Количество();
  • посмотреть результат запроса в виде таблицы.

Табло и стек вызовов

  • 📌 Табло (Отладка → Табло) — постоянный список выражений. Значения обновляются на каждом шаге. Удобно следить за счётчиком цикла и итоговой суммой одновременно.
  • 🧭 Стек вызовов (Отладка → Стек вызовов) — цепочка процедур, которая привела в текущую строку. Двойной щелчок по строке стека переносит в нужный модуль. Так видно, кто вызвал общую процедуру с неправильными параметрами.
  • 🔍 Локальные переменные — отдельное окно со всеми переменными текущей процедуры. Пригодится, когда не помните имена.

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

Где выполняется код

Над процедурами стоят директивы &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Это определяет, какой предмет отладки остановится. Точка в серверной процедуре сработает только при подключённом сервере. В клиентской процедуре серверные объекты недоступны, и «Вычислить выражение» вернёт ошибку при попытке прочитать, например, Объект.Ссылка.Владелец.Наименование через клиент.

Отладка внешних обработок, отчётов и печатных форм

Внешняя обработка (.epf) и внешний отчёт (.erf) отлаживаются как обычный модуль, но с одним условием: Конфигуратор и клиент должны работать с одним и тем же файлом.

Порядок такой:

  1. Запустите клиент в режиме отладки (F5 или /DEBUG).
  2. В Конфигураторе откройте файл обработки: Файл → Открыть.
  3. Поставьте точки останова в модуле объекта или формы.
  4. В клиенте откройте тот же файл по тому же пути: Файл → Открыть в главном меню.
  5. Нажмите кнопку обработки — выполнение остановится.

Внесли правку — сохраните файл в Конфигураторе (Ctrl+S) и переоткройте его в клиенте. Иначе в клиенте работает старая версия, а точки стоят на новых строках.

Печатные формы и обработки из справочника

В типовых конфигурациях на БСП внешние печатные формы и обработки регистрируются в справочнике «Дополнительные отчеты и обработки». В БП 3.0 он открывается из Администрирование → Печатные формы, отчеты и обработки.

Тут подвох. Зарегистрированная обработка хранится в базе. При вызове платформа выгружает её во временный файл, и точки останова, поставленные в вашем файле, не срабатывают. Рабочие приёмы:

  • 🧪 Отладьте логику отдельно. Откройте файл через Файл → Открыть и вызовите функцию печати из формы обработки или через «Вычислить выражение».
  • 🔁 Обновляйте карточку после правок. В карточке дополнительной обработки загрузите исправленный файл заново. Иначе пользователи получат старую версию.
  • 🛡️ Учитывайте безопасный режим. Дополнительные обработки на БСП по умолчанию выполняются в безопасном режиме. Код, который работает при открытии файла напрямую, может упасть при запуске из карточки из-за запрета на файловые операции или COM.

Серверная отладка в клиент-серверной базе

В файловом варианте серверный код выполняется в процессе клиента, поэтому хватает /DEBUG. В клиент-серверном варианте он идёт в рабочих процессах rphost на сервере 1С. Им тоже нужно разрешить отладку.

Ключ -debug в службе агента сервера

  1. На сервере 1С откройте редактор реестра: Win+R → regedit.
  2. Перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.
  3. Найдите службу агента сервера 1С. Её имя зависит от разрядности и версии, например 1C:Enterprise 8.3 Server Agent (x86-64).
  4. Откройте параметр ImagePath. В конце строки запуска ragent.exe допишите ключ -debug.
  5. Перезапустите службу агента.

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

"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 платформы. Пишет события сервера: исключения, длительные вызовы, блокировки. Для разовых проблем включайте его на время и с фильтром, иначе логи быстро займут диск.
  • ⏱️ Замер производительности — Отладка → Замер производительности. Показывает, сколько времени заняла каждая строка. Помогает, когда код не падает, а тормозит.

Почему отладчик не останавливается и как это исправить

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

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

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

Можно ли отлаживать базу, у которой нет доступа к Конфигуратору?
Нет. Отладчик встроен в Конфигуратор, и для подключения нужен вход в базу в этом режиме под пользователем с административными правами.
Влияет ли включённый ключ -debug на скорость сервера?
Пока никто не подключён, заметной нагрузки нет. Тормозит не ключ, а остановленные на точках вызовы и пошаговое выполнение.
Можно ли отлаживать веб-клиент?
Да. В настройках Конфигуратора выберите веб-клиент как вид клиента для запуска. Протокол отладки в этом случае HTTP.
Как отладить код, который выполняется при запуске программы?
Поставьте точку в модуле приложения или в обработчике «ПриНачалеРаботыСистемы» и запускайте клиент через F5 из Конфигуратора. Подключение вручную к уже открытому сеансу опоздает.
Видят ли пользователи, что их сеанс отлаживают?
Явного уведомления нет. Пользователь заметит только зависание интерфейса, пока выполнение стоит на точке останова.