Разработчики 1С часто сталкиваются с ситуацией, когда отладчик ведет себя нестабильно: в одних документах точки останова срабатывают мгновенно, а в других — игнорируются, хотя код гарантированно исполняется. Особенно часто это проявляется в процедуре ОбработкаПроведения. Разберем подробно причины этого поведения и пошагово пройдем по методам исправления ситуации.
Прежде чем переходить к глубоким настройкам сервера, проанализируем состояние конфигурации и текущего сеанса. Часто причина кроется в банальном несоответствии версий или контекста выполнения.
ОбработкаПроведения команду Сообщить("Тест проведения");. Если при проведении документа сообщение появляется в окне сообщений, но точка останова игнорируется — значит, проблема именно в механизме отладки, а не в логике программы.&Вместо. Если код вынесен в расширение, точку останова нужно ставить именно в модуле расширения, а не в основной конфигурации. Помните, что для отладки в расширениях в свойствах расширения должна быть снята галочка Безопасный режим.Проанализируем подключение сеансов к отладчику. Если сервер 1С не передает информацию о серверных вызовах клиенту, отладка работать не будет.
Рассмотрим порядок ручного подключения:
-debug.Разберем, как правильно запустить сервер в режиме отладки. Для этого в строке запуска службы 1C:Enterprise 8.3 Server Agent должен присутствовать параметр:
"C:\Program Files\1cv8\8.3.25.1394\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Важный нюанс: В последних версиях платформы (8.3.20+) 1С может использовать протокол HTTP для отладки вместо TCP. Если отладка работает «избирательно», попробуем принудительно переключить протокол в настройках конфигуратора (Параметры — Запуск 1С:Предприятия — Отладка).
Если сервер настроен корректно, но проблема сохраняется для конкретного объекта, выясним, не виноват ли локальный кэш. Выполним следующие действия:
Конфигурация — Мобильное приложение — Очистить кэш отладки (в некоторых версиях это помогает сбросить внутренние таблицы дескрипторов).Это специфическая и сложная ситуация, с которой столкнулся автор темы. Если ваша база работает в режиме Толстого клиента (обычное приложение), но документ открывается в управляемой форме, возникает конфликт контекстов.
Проанализируем ситуацию: при нажатии стандартной кнопки «Провести» на управляемой форме в режиме совместимости (например, 8.3.14), вызов проведения идет через внутренние механизмы платформы. В этот момент связь между серверным процессом и отладчиком конфигуратора может теряться из-за некорректной передачи дескриптора отладки между «обычным» и «управляемым» слоями платформы.
Решение-костыль для отладки:
Чтобы заставить отладчик «поймать» процедуру, нам нужно инициировать проведение непосредственно из кода, минуя стандартные команды формы. Создадим внешнюю обработку и пропишем в ней следующий код:
&НаКлиенте
Процедура ПровестиДокумент(Команда)
ПровестиНаСервере(ВыбранныйДокумент);
КонецПроцедуры
&НаСервере
Процедура ПровестиНаСервере(СсылкаНаДокумент)
ОбъектДок = СсылкаНаДокумент.ПолучитьОбъект();
// Вызов записи с режимом проведения напрямую из кода
ОбъектДок.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
При таком вызове точка останова в модуле объекта (в процедуре ОбработкаПроведения) сработает в 100% случаев, так как контекст выполнения остается непрерывным и понятным для отладчика.
Выясним, не включено ли в вашей конфигурации фоновое проведение. В современных типовых решениях (ERP, БП 3.0) проведение может выполняться не в текущем сеансе, а через фоновое задание на сервере.
В этом случае точка останова не сработает, пока вы не настроите Автоматическое подключение фоновых заданий:
ОбработкаПроведения небольшую паузу:
// Временная пауза для перехвата фонового задания отладчиком
ТекущаяДатаСекунды = ТекущаяДата();
Пока ТекущаяДата() < ТекущаяДатаСекунды + 10 Цикл
// Ждем 10 секунд
КонецЦикла;
Подводя итог, отметим: если отладка в 1С работает избирательно, первым делом проверьте ключ -debug на сервере и автоматическое подключение фоновых заданий. Если же вы работаете в режиме совместимости с обычными формами, используйте программный вызов проведения через внешнюю обработку — это самый надежный способ «захватить» проблемный документ и найти ошибку в коде.