Почему не работает отладчик во внешней обработке 1С и как это исправить?

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

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

1. Проверка связи файла и конфигуратора (искусственная ошибка)

Первое, что мы рекомендуем сделать — убедиться, что пользовательский сеанс и конфигуратор "видят" один и тот же код. Иногда пути к файлам могут незначительно отличаться, или система подтягивает старую версию из памяти. Проанализируем этот момент с помощью простого трюка.

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


Процедура ВыполнитьАлгоритм()
    // Искусственная ошибка для вызова отладчика
    А = 1 / 0; 
    
    // Остальной код обработки...
КонецПроцедуры

Запустим обработку в режиме "Предприятие". Если после возникновения ошибки нажать кнопку "Конфигуратор" (или "Подробно" -> "Конфигуратор"), система должна открыть именно тот модуль, который выполняется. Если открылся другой файл или система сообщает, что исходный модуль недоступен, значит, проблема в путях или кэше.

2. Несовпадение путей и открытие старой копии

Рассмотрим подробнее ситуацию с файлами. Отладчик связывает выполняемый код с открытым модулем исключительно по физическому пути к файлу .epf или .erf.

  1. Убедитесь, что вы не сохранили обработку через "Сохранить как..." в другую папку.
  2. Если в Конфигураторе открыт файл из папки C:\Dev\МояОбработка.epf, а в режиме Предприятия вы через "Файл - Открыть" запускаете C:\Downloads\МояОбработка.epf, отладка не сработает. Пути должны совпадать на 100%.
  3. Закройте файл в режиме Предприятия, закройте его в Конфигураторе, сохраните изменения и откройте заново из одного и того же места.

3. Влияние кэша платформы

Если пути совпадают, но точки останова все равно игнорируются, выясним, не виноват ли кэш. Платформа 1С может кэшировать двоичные данные внешних обработок. Попробуем выполнить следующие действия:

  1. Перезапустим клиентское приложение 1С.
  2. Почистим пользовательский кэш (папки в AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8).
  3. Изменим внутреннее имя обработки и её синоним в палитре свойств. Иногда это заставляет платформу перестроить кэшированные данные и заново привязать отладку.

4. Особенности запуска из справочника дополнительных отчетов и обработок (БСП)

Проанализируем ситуацию, если обработка запускается программно или через подсистему БСП (Библиотека стандартных подсистем). Когда вы добавляете обработку в справочник "Дополнительные отчеты и обработки", 1С сохраняет ее в базу данных.

При запуске система извлекает двоичные данные во временное хранилище и создает экземпляр объекта оттуда. Файл на вашем жестком диске (открытый в конфигураторе) и экземпляр, выполняющийся в базе — это разные объекты для платформы. Чтобы упростить создание таких инструментов, можно использовать готовый шаблон дополнительной обработки для БСП с механизмами для облегчения отладки.

Чтобы отладить такую обработку, мы можем временно открывать ее через "Файл - Открыть" напрямую с диска, либо переписать код вызова в вашей тестовой базе так, чтобы обработка создавалась из файла:


// Пример временного кода для отладки вместо вызова из справочника
ВнешняяОбработка = ВнешниеОбработки.Создать("C:\Dev\МояОбработка.epf");
ВнешняяОбработка.ВыполнитьКод();

5. Отсутствие ключа отладки на сервере (-debug)

Разберем серверный контекст. Если логика вашей внешней обработки выполняется в процедурах с директивой &НаСервере или &НаСервереБезКонтекста, для остановки кода сервер 1С:Предприятия обязательно должен быть запущен с включенной отладкой.

Убедитесь, что в реестре Windows (или в параметрах службы Linux) для службы агента сервера 1С (ragent.exe) прописан ключ -debug. Без этого ключа отладчик будет исправно работать в клиентских процедурах (&НаКлиенте), но полностью игнорировать серверные вызовы. В ситуациях, когда запустить сервер с этим ключом невозможно, выручит специальное расширение для отладки запросов и СКД под пользователем при отключенной серверной отладке.

6. Фоновые задания и настройки подключения

Если часть кода вашей обработки инициирует длительную операцию и запускается через фоновое задание (например, с использованием метода ДлительныеОперации.ВыполнитьВФоне()), отладчик по умолчанию не будет подключаться к этому фоновому потоку. Для этой задачи есть расширение для отладки кода и управления фоновыми заданиями.

Настроим конфигуратор для перехвата фоновых заданий:

  1. В конфигураторе перейдем в меню Отладка.
  2. Выберем Подключение...
  3. Нажмем кнопку Автоматическое подключение.
  4. Обязательно установим флажок напротив пункта Фоновые задания.

После этого попробуем запустить алгоритм снова — платформа должна автоматически перехватить сеанс фонового задания и остановиться на точке.

7. Множественные сеансы и блокировка портов

Посмотрим на среду, в которой вы работаете. Очень частая ошибка разработчика — наличие нескольких открытых пользовательских сеансов (окон 1С) для одной информационной базы. Вы можете поставить точку останова и запустить обработку в сеансе, который в данный момент физически не подключен к отладчику.

Закройте все лишние окна Предприятия. Зайдите в меню Отладка - Подключение и убедитесь, что в списке активных сеансов присутствует именно тот сеанс, в котором вы сейчас открыли внешнюю обработку.

Также стоит помнить про антивирусы и брандмауэры (Firewall). Отладка в 1С работает по протоколу TCP/IP (обычно используются порты диапазонов 1560-1591 и т.д.). Если защитное ПО блокирует эти порты, конфигуратор просто не сможет связаться с пользовательским сеансом, даже если он запущен на том же самом компьютере.

Последовательно применяя описанные выше методы, мы сможем локализовать причину и вернуть возможность полноценно использовать отладку во внешних обработках.

← На главную