При обновлении типовых конфигураций (например, 1С:Бухгалтерия 3.0, ЗУП 3.1 или ERP) пользователи часто сталкиваются с ситуацией, когда после успешного обновления метаданных в конфигураторе программа отказывается запускаться в пользовательском режиме. Появляется сообщение: «Не выполнены дополнительные процедуры обработки данных. Доп. процедуры обработки данных на предыдущую версию не завершены. Рекомендуется выполнить восстановление из резервной копии и дождаться их выполнения». Рассмотрим подробно, почему возникает эта ситуация и как её исправить без потери данных.
Современные конфигурации 1С используют механизмы Библиотеки стандартных подсистем (БСП). Один из таких механизмов — отложенное обновление информационной базы. Суть его заключается в том, что основные изменения структуры (таблиц SQL) происходят быстро, а длительная обработка данных (пересчет итогов, заполнение новых реквизитов в миллионах документов) выносится в фоновый режим. Это позволяет пользователям начать работу почти сразу после обновления конфигурации.
Проблема возникает, когда администратор пытается накатить следующий релиз, не дождавшись окончания обработки данных предыдущего релиза. Система блокирует обновление, так как данные для новой версии могут некорректно сформироваться, если не завершены расчеты предыдущей. Проанализируем основные способы решения этой проблемы, а также то, как сверить результаты проведения документов после завершения всех процедур.
Прежде чем приступать к программным методам, нам необходимо проверить текущее состояние процедур. Если база позволяет зайти в режим «Предприятие» под пользователем с полными правами (иногда блокировка срабатывает не сразу), выполним следующие шаги:
Разберем настройки приоритета в этом окне. Мы можем выбрать один из двух вариантов:
Часто в клиент-серверных версиях (SQL) выполнение процедур стоит на месте, так как блокировка регламентных заданий включена в консоли администрирования сервера 1С. Выясним, как запустить процесс «пинком»:
Отложенное обновление ИБ (для удобства поиска можно использовать альтернативную консоль заданий).Если интерфейсные методы не помогают или база полностью заблокирована для входа, мы можем использовать встроенные механизмы БСП через консоль кода или внешнюю обработку (для этого отлично подойдёт консоль администратора для управления заданиями и выполнения кода). Рассмотрим самый эффективный метод вызова служебной процедуры.
Нам необходимо выполнить следующий код от имени администратора:
// Принудительный запуск отложенных обработчиков обновления
ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас();
Этот метод инициирует последовательное выполнение всех незавершенных процедур в текущем сеансе. Обратите внимание: выполнение может занять длительное время (от нескольких минут до нескольких часов), в зависимости от объема данных и количества пропущенных релизов.
Бывают ситуации, когда процедура обновления падает в ошибку (например, из-за «битых» ссылок в базе) и при повторном запуске снова останавливается — для решения этой проблемы есть обработка удаления битых ссылок в 1С без монопольного режима. Рассмотрим, как проанализировать такие случаи через форму Результаты обновления:
Проанализируем ситуацию через «внутренности» системы. За состояние обновления отвечают несколько технических регистров (для их автоматического исправления и очистки есть обработка диагностики регистров и удаления битых ссылок). Вы можете найти их через меню «Функции для технического специалиста»:
РегистрСведений.ПараметрыРаботыПрограммы — здесь хранятся общие настройки завершения обновления.РегистрСведений.ПотокиОбновленияИнформационнойБазы — здесь можно увидеть, какие именно порции данных сейчас обрабатываются.Константа.СведенияОбОбновленииИнформационнойБазы — хранит XML-структуру со статусами всех обработчиков.Важно: Ручное редактирование этих данных крайне не рекомендуется, так как это может привести к нарушению логической целостности базы. Используйте этот метод только для диагностики (посмотреть, на каком ID объекта «споткнулась» программа).
Иногда при выполнении отложенных процедур возникает специфическая ошибка: Итератор для значения не определен. Это часто указывает на программную ошибку в коде конкретного релиза БСП, когда обработчик ожидает массив данных, а получает Неопределено. В этом случае попробуйте следующие шаги:
ПередНачаломРаботыСистемы2 модуля ОбновлениеИнформационнойБазыКлиент), чтобы просто зайти в базу и выгрузить нужные данные, но помните, что это временная мера, и полноценная работа в такой базе невозможна до завершения процедур.Чтобы не сталкиваться с подобными сообщениями в будущем, возьмем за правило:
Следуя этим инструкциям, мы сможем корректно завершить обновление базы, сохранив целостность данных и избежав необходимости восстанавливаться из копии и терять наработанные документы.