При переходе на новые релизы 1С:Бухгалтерия 3.0 (например, с версии 3.0.51.12 на 3.0.51.27) многие технические специалисты сталкиваются с неприятной ситуацией: конфигурация обновилась без ошибок, но при первом запуске в режиме «Предприятие» выполнение обработчиков обновления базы данных замирает на отметке 39%. При анализе журнала регистрации выясняется, что система бесконечно долго обрабатывает регистр Все обновления новостей. Разберем подробно, почему это происходит и как решить проблему, не растягивая процесс на всю ночь.
Выясним причину такого поведения системы. Регистр сведений Все обновления новостей является частью подсистемы «Интернет-поддержка и сервисы». Программа хранит в нем не только тексты новостей, но и служебную информацию: идентификаторы, категории, признаки прочтения и привязки к конкретным пользователям. Со временем в базе накапливаются тысячи записей, которые могут быть неактуальны уже много лет.
Когда выполняется обновление, 1С часто меняет структуру хранения этих данных или алгоритмы их индексации. В этот момент запускается массовый пересчет записей. Проанализируем ситуацию: в файловом варианте базы данных (формат *.1CD) любая массовая перезапись в регистрах с большим количеством индексов происходит крайне медленно из-за особенностей блокировок и записи временных файлов. Именно поэтому пользователь видит статичную картинку на 39%, хотя в фоновом режиме система выполняет колоссальный объем дисковых операций.
Как показывает практика и опыт участников форума, самый простой, хоть и не самый быстрый способ — это подождать. Рассмотрим, что происходит в этот момент: система последовательно перебирает каждую запись регистра, обновляет её и перестраивает индексы. Если база ведется давно и новости никогда не чистились, этот процесс может занять от 2 до 10 часов в зависимости от скорости дисковой подсистемы (HDD или SSD).
Важный момент: если вы видите в диспетчере задач, что процесс 1cv8.exe потребляет ресурсы процессора и активно работает с диском, значит, программа не «умерла», а выполняет полезную работу. В этом случае прерывать процесс крайне не рекомендуется, так как это может привести к повреждению структуры базы данных.
Чтобы не ждать «чуда» всю ночь, мы можем подготовить базу к обновлению заранее. Проанализируем наиболее эффективный метод — удаление старой информации, которая не несет никакой ценности для учета. Перед запуском обновления конфигурации или сразу после зависания (если вы решили прервать процесс и откатиться к бэкапу), выполним очистку данных новостей.
Рассмотрим перечень регистров, которые можно безопасно очистить:
РегистрСведений.НовостиСостояниеОбновленияРегистрСведений.ДатыОбновленияСтандартныхСписковНовостейРегистрСведений.КэшНовостейРегистрСведений.ВсеОбновленияНовостейОчистка этих таблиц абсолютно безопасна, так как при первом же успешном запуске и наличии интернета программа самостоятельно скачает актуальные новости с серверов 1С. Для очистки можно воспользоваться стандартной обработкой «Групповое изменение реквизитов» или написать небольшой фрагмент кода в консоли запросов.
Пример кода для программной очистки регистров (выполнять осторожно, только в копии базы!):
НаборЗаписей = РегистрыСведений.КэшНовостей.СоздатьНаборЗаписей();
НаборЗаписей.Записать(); // Записываем пустой набор, фактически удаляя все записи
НаборЗаписейНовости = РегистрыСведений.ВсеОбновленияНовостей.СоздатьНаборЗаписей();
НаборЗаписейНовости.Записать();
Разберем еще одну причину зависания. Иногда система пытается сопоставить локальные новости с данными на сервере обновлений. Если в этот момент наблюдаются проблемы с интернет-соединением или брандмауэр блокирует запросы, система может долго ожидать ответа по тайм-ауту.
Посмотрим, как минимизировать риски:
Проанализируем техническую сторону вопроса. Большинство проблем с «зависаниями» на 39% случаются именно в файловых базах. Это связано с тем, что механизм транзакций в .1CD менее эффективен, чем в SQL-версиях.
Если вам предстоит обновлять очень большую базу (более 10-20 Гб) в файловом варианте, мы рекомендуем выполнить следующие действия:
chdbfl.exe. Она проверит физическую целостность таблиц и индексов. Иногда «зависание» — это следствие ошибки в индексах, которую программа пытается безуспешно исправить при обновлении.Не будем забывать и про стандартные процедуры. Часто «глюки» интерфейса обновления связаны с некорректным кешем. Попробуем выполнить стандартную процедуру очистки:
Удалим базу из списка в стартере 1С и добавим её заново. Это принудительно создаст новую папку кеша в каталоге %AppData%\1C\1cv8\. В некоторых случаях это помогает системе корректно интерпретировать метаданные регистра новостей и пройти этап обновления быстрее.
Мы разобрали ситуацию, когда обновление 1С:Бухгалтерия замирает на регистре Все обновления новостей. Основная причина — накопленный за годы «мусор» в служебных таблицах интернет-поддержки. Самый надежный способ — это превентивная очистка регистров новостей перед запуском обновления. Если же процесс уже запущен и вы не хотите его прерывать — оставьте компьютер включенным на длительное время. Система обязательно завершит обработку, как только закончит пересчет индексов.
Помните: регулярная очистка новостей и обслуживание базы данных (реиндексация) — залог быстрых и беспроблемных обновлений в будущем. Не позволяйте программе хранить новости двадцатилетней давности, которые только замедляют вашу работу.