Как запустить отладку в 1С 8.3, если точки останова и остановка по ошибке не срабатывают?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

Разберем ситуацию, которая часто встречается при работе с современными типовыми конфигурациями (УТ 11, ERP, КА) и платформой 1С:Предприятие 8.3.25: вы пытаетесь отладить код, ставите точки останова, включаете режим Останавливаться по ошибке, но система игнорирует ваши действия, выдает ошибку в пользовательском интерфейсе и не дает проанализировать стек вызовов. Рассмотрим пошагово, как настроить среду разработки, чтобы найти «неуловимую» ошибку.

Проанализируем настройки сервера 1С:Предприятия

Прежде всего, выясним причину, по которой Конфигуратор может не видеть сеанс пользователя. Основное условие для работы отладчика — запуск службы сервера с ключом -debug. Проверим это совместно с системным администратором или самостоятельно через реестр Windows. Путь к исполняемому файлу должен выглядеть примерно так:


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

Важно помнить: в последних версиях платформы (8.3.20+) классический протокол TCP/IP может работать нестабильно. Рекомендуем переключиться на HTTP-отладку. Для этого в параметрах конфигуратора (Меню Сервис — Параметры — Отладка) выберем протокол HTTP и укажем адрес сервера отладки.

Проверим подключение предметов отладки

Часто проблема заключается в том, что конфигуратор автоматически подключается только к тонкому клиенту, игнорируя серверные вызовы. Проанализируем состояние окна подключения (Отладка — Подключение):

  1. Убедимся, что в списке Доступные предметы отладки присутствуют как минимум две строки: одна с типом Клиент, другая с типом Сервер.
  2. Нажмем кнопку Автоматическое подключение и проверим, стоят ли флажки напротив пунктов Клиентские соединения и Внешние соединения на сервере.
  3. Если серверный предмет отладки не появляется, значит, режим отладки на сервере либо не включен, либо блокируется брандмауэром (порты 1560–1591 для TCP).

Разберем проблему пустой точки останова и пустого стека вызовов

В нашем случае пользователь сталкивается с ошибкой Значение не является значением объектного типа (МассивПараметров) в модуле ВзаиморасчетыСервер, но при остановке по ошибке стек вызовов пуст. Рассмотрим подробнее, почему так происходит. В УТ 11 многие механизмы (особенно взаиморасчеты) вынесены в Фоновые задания.

Когда код исполняется в фоне, ваш текущий сеанс Конфигуратора его «не видит», так как это отдельный серверный процесс. Чтобы отловить такую ошибку, мы должны заставить систему выполнять код синхронно. Для конфигураций на базе БСП (Библиотеки стандартных подсистем) используем специальный параметр запуска. Зайдем в Сервис — Параметры — Запуск 1С:Предприятия — Дополнительно и в поле Параметры запуска впишем:


/C РежимОтладки

Этот ключ сообщает системе, что фоновые задания (например, расчет взаиморасчетов при записи документа) нужно выполнять в текущем сеансе. Это позволит отладчику остановиться на нужной строке кода.

Выясним причину ошибки через замер производительности

Если мы не знаем, в какую процедуру заходит программа перед вылетом, и точки останова в ОбработкаЗаполнения или ПриСозданииНаСервере не помогают, используем Замер производительности. Рассмотрим этот алгоритм:

  1. Откроем форму списка документов.
  2. В Конфигураторе выберем Отладка — Замер производительности (включим его).
  3. В режиме предприятия нажмем кнопку Создать.
  4. Дождемся появления окна с ошибкой.
  5. Вернемся в Конфигуратор и выключим замер.

Перед нами откроется полная трассировка всех выполненных процедур. Проанализируем колонку Количество вызовов и Текст строки кода. Найдем последние исполненные строки перед возникновением исключения. Именно туда следует поставить точку останова.

Посмотрим на пример работы с «битым» кодом

Если мы работаем с «симбиозом» старых доработок и новой типовой конфигурации, велика вероятность, что ошибка происходит в Подписках на события. Посмотрим на структуру вызовов при создании документа ЗаказПоставщику:


// В типовой конфигурации последовательность может быть такой:
// 1. Модуль менеджера (ОбработкаЗаполнения)
// 2. Подписки на события (перед созданием, при создании)
// 3. Модуль объекта (ОбработкаЗаполнения)
// 4. Модуль формы (ПриСозданииНаСервере)

Поставим точки останова не только в форме, но и в модуле объекта. Чтобы гарантированно прервать выполнение, можно использовать метод ВызватьИсключение в самом начале процедуры ОбработкаЗаполнения:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    // Временная вставка для принудительной остановки
    ВызватьИсключение "Проверка точки входа"; 
КонецПроцедуры

Если система не остановилась даже здесь, значит, ошибка происходит еще раньше — на этапе инициализации параметров формы или в правах доступа (Rls).

Итоги и рекомендации

Проанализировав ситуацию, мы пришли к выводу, что для успешной отладки сложных документов в УТ 11 необходимо:

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

← На главную