Часто в процессе разработки программисты 1С сталкиваются с неприятной ситуацией: внешняя обработка отлично работает, но отладчик внезапно перестает останавливаться на точках останова — для этого подойдёт инструмент для пошаговой отладки кода 1С без конфигуратора. При этом, если ту же самую обработку встроить в конфигурацию, отладка начинает функционировать корректно. Давайте подробно разберем, почему возникает такая проблема, проанализируем возможные причины и посмотрим, как шаг за шагом восстановить работу отладчика.
Первое, что мы рекомендуем сделать — убедиться, что пользовательский сеанс и конфигуратор "видят" один и тот же код. Иногда пути к файлам могут незначительно отличаться, или система подтягивает старую версию из памяти. Проанализируем этот момент с помощью простого трюка.
Давайте добавим в код внешней обработки явную ошибку времени выполнения, например, деление на ноль. Это заставит платформу выдать системное окно с ошибкой, из которого можно напрямую перейти в конфигуратор.
Процедура ВыполнитьАлгоритм()
// Искусственная ошибка для вызова отладчика
А = 1 / 0;
// Остальной код обработки...
КонецПроцедуры
Запустим обработку в режиме "Предприятие". Если после возникновения ошибки нажать кнопку "Конфигуратор" (или "Подробно" -> "Конфигуратор"), система должна открыть именно тот модуль, который выполняется. Если открылся другой файл или система сообщает, что исходный модуль недоступен, значит, проблема в путях или кэше.
Рассмотрим подробнее ситуацию с файлами. Отладчик связывает выполняемый код с открытым модулем исключительно по физическому пути к файлу .epf или .erf.
C:\Dev\МояОбработка.epf, а в режиме Предприятия вы через "Файл - Открыть" запускаете C:\Downloads\МояОбработка.epf, отладка не сработает. Пути должны совпадать на 100%.Если пути совпадают, но точки останова все равно игнорируются, выясним, не виноват ли кэш. Платформа 1С может кэшировать двоичные данные внешних обработок. Попробуем выполнить следующие действия:
AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8).Проанализируем ситуацию, если обработка запускается программно или через подсистему БСП (Библиотека стандартных подсистем). Когда вы добавляете обработку в справочник "Дополнительные отчеты и обработки", 1С сохраняет ее в базу данных.
При запуске система извлекает двоичные данные во временное хранилище и создает экземпляр объекта оттуда. Файл на вашем жестком диске (открытый в конфигураторе) и экземпляр, выполняющийся в базе — это разные объекты для платформы. Чтобы упростить создание таких инструментов, можно использовать готовый шаблон дополнительной обработки для БСП с механизмами для облегчения отладки.
Чтобы отладить такую обработку, мы можем временно открывать ее через "Файл - Открыть" напрямую с диска, либо переписать код вызова в вашей тестовой базе так, чтобы обработка создавалась из файла:
// Пример временного кода для отладки вместо вызова из справочника
ВнешняяОбработка = ВнешниеОбработки.Создать("C:\Dev\МояОбработка.epf");
ВнешняяОбработка.ВыполнитьКод();
Разберем серверный контекст. Если логика вашей внешней обработки выполняется в процедурах с директивой &НаСервере или &НаСервереБезКонтекста, для остановки кода сервер 1С:Предприятия обязательно должен быть запущен с включенной отладкой.
Убедитесь, что в реестре Windows (или в параметрах службы Linux) для службы агента сервера 1С (ragent.exe) прописан ключ -debug. Без этого ключа отладчик будет исправно работать в клиентских процедурах (&НаКлиенте), но полностью игнорировать серверные вызовы. В ситуациях, когда запустить сервер с этим ключом невозможно, выручит специальное расширение для отладки запросов и СКД под пользователем при отключенной серверной отладке.
Если часть кода вашей обработки инициирует длительную операцию и запускается через фоновое задание (например, с использованием метода ДлительныеОперации.ВыполнитьВФоне()), отладчик по умолчанию не будет подключаться к этому фоновому потоку. Для этой задачи есть расширение для отладки кода и управления фоновыми заданиями.
Настроим конфигуратор для перехвата фоновых заданий:
После этого попробуем запустить алгоритм снова — платформа должна автоматически перехватить сеанс фонового задания и остановиться на точке.
Посмотрим на среду, в которой вы работаете. Очень частая ошибка разработчика — наличие нескольких открытых пользовательских сеансов (окон 1С) для одной информационной базы. Вы можете поставить точку останова и запустить обработку в сеансе, который в данный момент физически не подключен к отладчику.
Закройте все лишние окна Предприятия. Зайдите в меню Отладка - Подключение и убедитесь, что в списке активных сеансов присутствует именно тот сеанс, в котором вы сейчас открыли внешнюю обработку.
Также стоит помнить про антивирусы и брандмауэры (Firewall). Отладка в 1С работает по протоколу TCP/IP (обычно используются порты диапазонов 1560-1591 и т.д.). Если защитное ПО блокирует эти порты, конфигуратор просто не сможет связаться с пользовательским сеансом, даже если он запущен на том же самом компьютере.
Последовательно применяя описанные выше методы, мы сможем локализовать причину и вернуть возможность полноценно использовать отладку во внешних обработках.