При пошаговой отладке кода в серверных базах разработчики часто сталкиваются с неприятным поведением платформы: при нажатии клавиши F10 или F11 курсор выполнения внезапно покидает отлаживаемый модуль и перемещается в совершенно другой контекст. Чаще всего отладчик перескакивает в процедуру УстановкаПараметровСеанса модуля сеанса или в системные процедуры библиотеки стандартных подсистем (например, ОбновлениеИБСлужебный.ВерсияИБ). В результате текущая строка в исходном алгоритме теряется, а повторить вызов бывает трудоемко.
Проанализируем природу этой проблемы и разберем проверенные способы ее решения.
Выясним причину такого поведения ядра платформы 1С:Предприятие. Основной фактор — параллельное выполнение потоков в клиент-серверной архитектуре:
Попытка ... Исключение) моментально переместит окно редактора на чужой сбойный участок кода.Если конфигурация разработана на базе Библиотеки стандартных подсистем (1С:ERP, 1С:КА, 1С:УТ, 1С:ЗУП, 1С:УНФ и др.), запуск длительных операций обычно управляется подсистемой фонового выполнения БСП. В ней предусмотрен специальный отладочный механизм, который принудительно выполняет алгоритм синхронно в основном потоке сеанса без выделения отдельного фонового задания.
Разберем по шагам, как активировать этот режим:
/C РежимОтладки
В некоторых типовых решениях аналогичное поведение регулируется значением константы РежимОтладки, которую можно временно установить в значение Истина через функции для технического специалиста.
Если необходимо отладить фоновое задание в его естественном серверном окружении, наиболее надежный способ предотвратить помехи — отключить все параллельные потоки на уровне сервера 1С.
Пошагово выполним блокировку:
После включения блокировки фоновые процессы по расписанию перестанут запускаться, и единственным активным фоновым заданием в системе останется только то, которое вы инициируете вручную для отладки.
Когда нет доступа к консоли администрирования кластера, можно отсечь посторонние потоки средствами самого конфигуратора.
Рассмотрим последовательность действий:
После этого можно спокойно продолжать отладку по F10, так как среда разработки больше не будет реагировать на параллельные потоки.
Пошаговый переход клавишами F10 и F11 провоцирует переключение контекста при малейшей задержке в выполнении. Чтобы минимизировать риск потери управления, применим следующие приемы:
F10 установим курсор на нужную строку кода ниже по тексту и нажмем комбинацию Shift+F10 («Выполнить до текущей строки»). В этом случае отладчик отпустит поток на максимальной скорости и прервется только в заданной строке, минуя паразитные переключения.
НомерСеанса = 125
или по ключевому реквизиту:
Ссылка.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701001001")
Попытка ... Исключение чужих сеансов.Если фоновое задание вызывается напрямую через метод платформы ФоновыеЗадания.Выполнить(...), для целей отладки можно временно обойти фоновый запуск. Создадим внешнюю обработку и вызовем экспортную серверную процедуру напрямую, передав в нее параметры массивом. В этом случае весь алгоритм выполнится в рамках основного клиент-серверного сеанса без создания побочных серверных потоков, что гарантирует стабильную отладку без сбоев.