При переходе на новые релизы платформы «1С:Предприятие 8.3», в частности на версию 8.3.20.1674, разработчики часто сталкиваются с неприятными сюрпризами. Одной из самых острых проблем стала нестабильная работа отладчика при анализе фоновых заданий: курсор прыгает по случайным строкам кода, точки останова срабатывают некорректно, а иногда отладка и вовсе прерывается без видимых причин. Кроме того, в этой ветке платформы была замечена критическая ошибка SDBL, блокирующая работу отчетов. В этой статье мы подробно разберем, как стабилизировать процесс разработки и обойти эти платформенные ограничения.
Проанализируем ситуацию: начиная с релизов 8.3.19 и выше, механизм взаимодействия отладчика с серверными процессами претерпел изменения, которые привели к регрессионным ошибкам. Суть проблемы заключается в том, что отладчик пытается одновременно отслеживать слишком много активных сеансов и предметов отладки, что в условиях TCP-соединения приводит к рассинхронизации. Выясним, какие шаги помогут нам вернуть контроль над кодом.
Первым делом рассмотрим самый простой, но эффективный метод — изоляцию предметов отладки. Часто отладчик «дергается», потому что он подключен одновременно к тонкому клиенту и серверу, пытаясь перехватить события из разных потоков. Выполним следующие действия:
Если ваша конфигурация построена на базе «1С:Библиотека стандартных подсистем» (БСП), мы можем применить программный метод стабилизации. Большинство фоновых процессов запускаются через общие модули БСП. Разберем, как заставить код выполняться синхронно в сеансе пользователя, что делает отладку линейной и предсказуемой.
Найдем в конфигурации вызов функции ДлительныеОперации.ВыполнитьВФоне(). Для целей отладки мы можем временно модифицировать параметры запуска. Рассмотрим пример изменения параметров:
// Временная модификация для отладки
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ЗапуститьВФоне = Ложь;
ПараметрыВыполнения.ЗапуститьНеВФоне = Истина;
Результат = ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, ПараметрыВыполнения);
Установка свойства ЗапуститьВФоне в значение Ложь заставляет систему выполнить код здесь же, в текущем сеансе. Это полностью исключает «прыжки» отладчика, так как контекст исполнения не меняется. После завершения отладки не забудьте вернуть настройки в исходное состояние.
Еще один эффективный метод — запуск клиентского приложения со специальным ключом. Проанализируем, как это работает. При запуске 1С с параметром /РежимОтладки, многие механизмы (особенно в типовых конфигурациях) автоматически переключаются в режим синхронного исполнения длительных операций.
Чтобы настроить это в Конфигураторе, пройдем по пути: Сервис — Параметры — Запуск 1С:Предприятия — Дополнительные. В поле «Параметр запуска» впишем: /РежимОтладки. Теперь при запуске из Конфигуратора система будет сама стремиться выполнять фоновые задачи в основном потоке, где это предусмотрено логикой БСП.
Параллельно с проблемами отладки, на платформе 8.3.20.1674 пользователи часто сталкиваются с ошибкой: Ошибка SDBL: Таблица или поле TED2 не содержится в разделе FROM. Выясним причину этого сбоя. Данная ошибка возникает из-за некорректной трансляции запросов платформой к СУБД, когда в отчетах (например, в «Бухгалтерии предприятия 3.0») используются виртуальные таблицы регистров бухгалтерии с установленным отбором по счету.
Посмотрим, какие есть варианты решения этой проблемы:
Часто нестабильность отладки связана не только с багами кода, но и с сетевыми настройками. Рассмотрим нюансы настройки TCP отладки. В новых версиях платформы 1С активно использует не только стандартный диапазон портов (1560–1591), но и порт 1550. Если этот порт закрыт брандмауэром на сервере, отладчик может подключаться «через раз».
Также обратим внимание на параметры запуска службы сервера 1С. В реестре Windows проверьте строку запуска ragent.exe. Важно использовать правильный синтаксис для включения отладки. Рекомендуется использовать /debug:
"C:\Program Files\1cv8\8.3.20.1674\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" /debug
Важный момент: использование тире -debug вместо косой черты /debug в некоторых сборках 20-й платформы приводило к игнорированию параметра. Проверьте этот момент в настройках вашей службы.
Если вышеописанные методы не помогают, и отладчик продолжает вести себя хаотично, проанализируем состояние серверного кэша. На платформе 8.3.20 могут накапливаться устаревшие сеансовые данные, которые мешают корректной привязке отладчика к новым фоновым процессам.
Разберем процедуру «глубокой» очистки:
C:\Program Files\1cv8\srvinfo).snccntx_. Это папки сеансовых данных.reg_1541 (за исключением файлов конфигурации кластера, если вы не хотите сбросить настройки списка баз).Эта процедура позволяет полностью обнулить состояние предметов отладки и часто решает проблему «фантомных» подключений, когда отладчик пытается зацепиться за уже несуществующее фоновое задание.
Подводя итог, можно сказать, что релиз 8.3.20.1674 требует особого внимания при настройке. Для комфортной работы программисту необходимо либо использовать методы синхронизации кода через /РежимОтладки и параметры БСП, либо рассматривать переход на более свежие исправительные релизы платформы.