Переход на новые версии технологической платформы 1С часто сопровождается не только расширением функционала, но и возникновением специфических ошибок в работе существующих механизмов. Одной из наиболее острых проблем, с которыми столкнулись пользователи при переходе на платформу 8.3.12 (в частности, релиз 1685), стало зависание процесса закрытия месяца. Программа блокирует перепроведение документов, ссылаясь на выполнение служебной операции Сервис «Мониторинг банков», которая может висеть часами без видимого прогресса. В данной статье мы подробно разберем причины этой ситуации и методы ее решения.
Для начала проанализируем, почему процесс перепроведения документов останавливается. В последних редакциях 1С:Бухгалтерия 3.0 (БП 3.0) процедура закрытия месяца — это сложный алгоритм, который инициирует множество фоновых процессов. Ошибка «Перепроведение документов выполнится после завершения служебной операции...» возникает из-за того, что система устанавливает блокировку на выполнение групповых операций до тех пор, пока не завершатся критически важные фоновые задания, связанные с обновлением классификаторов и проверкой актуальности данных.
Выясним причину, почему сервис Мониторинг банков блокирует работу. Этот сервис предназначен для автоматического обновления информации о банках (БИК, адреса, лицензии) через интернет-поддержку. В платформе 8.3.12 был обнаружен ряд багов, связанных с обработкой сетевых запросов в фоновых заданиях для файловых баз данных. Если сервер 1С (или компьютер, на котором открыта база) имеет ограничения доступа в интернет или специфические настройки прокси-сервера, фоновое задание уходит в бесконечное ожидание ответа по протоколу HTTPS, не возвращая управление основному потоку.
Рассмотрим ситуацию, когда база данных является файловой, но располагается на сетевом ресурсе (Windows Server). В этом случае на стабильность работы фоновых заданий влияют механизмы кэширования операционной системы и протокол SMB. Мы можем столкнуться с так называемыми «фантомными» фоновыми заданиями. Проанализируем типичный сценарий:
МониторингБанков.1Cv8.cdn или внутри таблиц базы остается.Как показывает практика, перенос этой же базы на локальный диск обычного рабочего компьютера часто решает проблему за считанные минуты. Это подтверждает гипотезу о конфликте сетевых блокировок и механизмов фоновых заданий в конкретных релизах платформы.
Если ваша учетная деятельность позволяет на время отказаться от автоматического обновления классификаторов банков, самым быстрым решением будет полное отключение этого функционала. Проанализируем, как это сделать правильно, так как простого комментирования кода в конфигурации может быть недостаточно.
Воспользуемся следующим алгоритмом в интерфейсе программы:
Если программный интерфейс зависает, мы можем попробовать отключить использование этого сервиса через консоль запросов или небольшую обработку, изменив значение соответствующей константы. Посмотрим на пример кода:
Константы.ИспользоватьСервисМониторингБанков.Установить(Ложь);
После этого обязательно нужно завершить все активные сеансы и перезапустить базу, чтобы очистить очередь фоновых заданий.
Разберем, как принудительно остановить зависшие процессы, которые мешают закрытию месяца. Нам понадобится стандартная обработка Консоль регламентных заданий (или встроенный интерфейс в разделе «Обслуживание»).
Проанализируем список заданий:
Обновление классификаторов банков или аналогичные задания, связанные с ИнтернетПоддержка.srvinfo (для серверного варианта) или очистить кэш пользователя (для файлового варианта).Важно помнить, что в платформе 8.3.12 иногда наблюдается «свистопляска» фоновых заданий — они запускаются одно за другим бесконечно. В этом случае поможет запуск базы с параметром /AllowExecuteScheduledJobs -Off. Это позволит выполнить закрытие месяца в монопольном режиме без вмешательства автоматических служб.
Интересной особенностью, выявленной техническими специалистами, является то, что 64-разрядные версии клиента 1С на платформе 8.3.12 ведут себя менее стабильно в файловом режиме при работе с сетевыми компонентами. Если вы используете 64-битную платформу и столкнулись с «замиранием» потока на 0%, попробуйте установить 32-битную версию платформы того же релиза. Это часто исправляет ошибки взаимодействия с системными библиотеками comcntr.dll и wininet.dll, которые отвечают за интернет-соединения.
Однако наиболее правильным стратегическим решением будет переход на более стабильную платформу, например, ветки 8.3.13 или 8.3.14, где ошибки планировщика фоновых заданий и синхронизации потоков в файловом режиме были исправлены.
Если вы опытный разработчик и база сильно кастомизирована (как в случае автора вопроса), рекомендуется воспользоваться отладчиком. Разберем шаги для глубокого анализа:
Часто оказывается, что программа застряла на методе ВыполнитьСоединение() или при ожидании ответа от HTTPЗапрос. Если вы видите, что ноги растут из модуля ОбщегоНазначения или специализированных модулей интернет-поддержки, вы можете временно установить заглушку (Возврат;) в начало соответствующей процедуры, чтобы завершить закрытие месяца, а затем вернуть код в исходное состояние.
Рассмотрим пример того, как можно временно «обмануть» систему, если она требует завершения мониторинга:
// В модуле, отвечающем за проверку готовности к перепроведению
Процедура ПроверитьЗавершениеСлужебныхОпераций()
// Временно комментируем реальную проверку для обхода бага платформы 8.3.12
Возврат;
// Оригинальный код проверки...
КонецПроцедуры
Подведем итог: Проблема зависания закрытия месяца на этапе мониторинга банков — это комплексная ошибка, вызванная несовершенством механизмов фоновых заданий в платформе 8.3.12. Для решения задачи мы рекомендуем последовательно проверить доступ в интернет на сервере, отключить сервис «Мониторинг банков» в настройках, очистить кэш и, при необходимости, сменить разрядность или версию платформы на более актуальную.