При разработке и отладке конфигурации 1С:Комплексная автоматизация 2 разработчики часто сталкиваются с ситуацией, когда привычные точки останова в модулях объектов или наборах записей регистров «пролетают» мимо во время выполнения процедуры Закрытие месяца. Давайте разберемся, почему это происходит и как настроить среду разработки для эффективного поиска ошибок.
Главная причина, по которой ваш отладчик не останавливается в коде, кроется в архитектуре платформы 1С:Предприятие 8.3. Современные конфигурации, такие как КА 2 или ERP, активно используют механизм Длительных операций. Это означает, что сложные и ресурсоемкие задачи, к которым относится и Закрытие месяца, запускаются не в том сеансе, в котором работает пользователь, а в отдельных фоновых заданиях.
Когда вы проводите документ вручную в интерактивном режиме, вы находитесь в контексте своего сеанса. Отладчик «видит» выполнение кода, так как оно происходит непосредственно «в ваших руках». Однако при закрытии месяца платформа создает отдельный серверный процесс, который может не наследовать настройки вашего текущего сеанса отладки.
Самый простой и эффективный способ для разработчика — принудительно заставить сервер выполнять все операции в рамках основного сеанса, исключив асинхронность. Для этого воспользуйтесь параметром командной строки.
/РежимОтладки (или -debug).В этом режиме 1С:Предприятие будет стараться выполнять фоновые задания «синхронно» или в том же контексте, где доступна отладка. Это позволяет «поймать» исполнение кода внутри ПриЗаписи() или ПередЗаписью() набора записей регистра, даже если они вызываются из регламентного процесса закрытия месяца.
Если вы не хотите использовать глобальный режим отладки, необходимо убедиться, что ваша среда разработки настроена на перехват серверных процессов:
Бывают ситуации, когда даже при включенном режиме отладки серверные процессы работают слишком быстро или под правами системного пользователя, к которому у вас нет доступа отладки. В таких случаях мы рекомендуем использовать метод «логирования».
Вместо того чтобы пытаться остановить выполнение программы, вы можете записать отладочную информацию в файл или отдельный РегистрСведений. Рассмотрим пример того, как это можно реализовать программно:
// В коде набора записей регистра
Процедура ПриЗаписи(Отказ, Замещение)
СтрокаЛога = СтрШаблон("Запись регистра %1, пользователь %2, время %3",
"ПрочиеАктивыИПассивы", Пользователи.ТекущийПользователь(), ТекущаяДата());
ЗаписьТекста = Новый ЗаписьТекста("C:\Temp\debug_log.txt", КодировкаТекста.UTF8, , Истина);
ЗаписьТекста.ЗаписатьСтроку(СтрокаЛога);
ЗаписьТекста.Закрыть();
КонецПроцедуры
Этот метод гарантированно даст вам понять, в какой момент и с какими данными происходит обращение к записи регистра, что часто оказывается более информативным, чем классическая отладка.
Проблема «исчезновения» отладчика при закрытии месяца — это не ошибка, а следствие высокой оптимизации процессов в 1С:КА 2. Чтобы успешно диагностировать поведение системы:
/РежимОтладки для принудительной синхронизации процессов.ЗаписьТекста или ЖурналРегистрации для отслеживания цепочки вызовов.Помните, что Закрытие месяца — это критически важный процесс, поэтому при внесении любых изменений в код, который затрагивает движения по регистрам, обязательно проводите проверку на копии базы данных.