При проведении регламентных процедур в конфигурациях на базе ERP-платформы (таких как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей) пользователи часто сталкиваются со следующей блокирующей ошибкой: «Обнаружено активное задание закрытия месяца: Выполнение операций закрытия месяца остановлено». Эта проблема парализует работу бухгалтерии, так как система не позволяет запустить расчет повторно, ссылаясь на то, что процесс уже выполняется. В этой статье мы подробно разберем природу данной ошибки и изучим все возможные способы её устранения.
Для того чтобы понять, почему система блокирует запуск, проанализируем техническую сторону работы платформы 1С. Информация обо всех запущенных и выполняющихся в текущий момент сессиях расчета закрытия месяца фиксируется в специальном регистре сведений ВыполнениеОперацийЗакрытияМесяца.
Когда расчет запускается в штатном режиме, программа создает запись в этом регистре, указывая организацию, период и уникальный идентификатор фонового задания. После успешного завершения расчета система автоматически очищает эту запись. Однако, если процесс прерывается аварийно, программа просто не успевает стереть данные из регистра. К аварийным ситуациям относятся:
rphost администратором через консоль кластера 1С.При последующей попытке запустить закрытие месяца система считывает «фантомную» запись из регистра ВыполнениеОперацийЗакрытияМесяца, считает, что расчет все еще продолжается, и выдает предупреждение, блокируя повторный старт. Для анализа подобных ситуаций можно использовать инструмент для диагностики зависших операций закрытия месяца.
Проанализируем важную техническую деталь, о которой часто забывают. Многие пользователи файловых баз замечают, что даже перезагрузка компьютера не решает проблему. Почему так происходит?
В клиент-серверном варианте базы данных автоматической очисткой зависших записей занимается специальная фоновая процедура ОбновитьСостояниеАктивныхРасчетов. В файловом же режиме менеджер фоновых заданий платформы 1С имеет архитектурные ограничения: он часто не может получить корректный доступ к фоновым заданиям, запущенным из других сеансов. Кроме того, если у текущего пользователя нет административных прав (Полные права), платформа из соображений безопасности не позволит ему увидеть или завершить фоновые задания других пользователей. В таком случае автоматический сброс блокировки не сработает, и запись останется «висеть» в базе вечно, пока её не удалят вручную.
Рассмотрим пошагово самый простой и безопасный способ, который доступен непосредственно в пользовательском режиме предприятия.
После удаления «фантомной» записи блокировка будет снята, и мы сможем заново запустить процедуру закрытия месяца. Для удобного отслеживания статусов расчетов в разных периодах подойдет расширение с монитором операций закрытия месяца.
Если стандартная форма «Активные сеансы закрытия месяца» по какой-то причине недоступна, пуста или выдает ошибку, мы можем прибегнуть к более глубокому администрированию и очистить регистр напрямую.
ВыполнениеОперацийЗакрытияМесяца и откроем его.Для программистов и системных администраторов, имеющих доступ к запуску произвольного кода (например, через внешнюю обработку «Групповая обработка справочников и документов» или специализированную консоль кода), существует возможность вызвать штатный механизм очистки программно. Разберем этот пример.
Достаточно выполнить всего одну строчку кода под учетной записью с полными правами:
РегистрыСведений.ВыполнениеОперацийЗакрытияМесяца.ОбновитьСостояниеАктивныхРасчетов();
Этот метод инициирует принудительный опрос менеджера фоновых заданий платформы. Система самостоятельно сверит записи в регистре с реально запущенными на сервере процессами. Если реальных процессов в диспетчере задач или консоли кластера уже не существует, 1С автоматически очистит все «призрачные» записи из регистра сведений, вернув систему в рабочее состояние.
Если наша база работает на сервере 1С:Предприятия, то в дополнение к вышеописанным методам мы можем выполнить очистку на уровне СУБД и сервера приложений:
Обратите внимание, что простая перезагрузка службы сервера 1С (ragent) без последующего удаления записи из регистра сведений в базе данных часто не приносит желаемого результата, так как запись в таблице СУБД физически сохраняется.
Мы подробно проанализировали проблему зависания заданий закрытия месяца в 1С. Чтобы минимизировать появление таких ситуаций в будущем, рекомендуем соблюдать простые правила совместной работы: