Обновление информационных баз, которые длительное время не обслуживались, — это всегда вызов для администратора и программиста 1С. Когда мы имеем дело с переходом через множество релизов (например, с платформы 8.3.18 сразу на 8.3.22 или 8.3.23), стандартная процедура обновления может преподнести сюрпризы. Чтобы облегчить этот процесс, особенно если вы планируете работы на вечернее время, можно использовать Помощник оператора обновления КБД, который упрощает рутинные действия. В этом материале мы подробно разберем процесс "большого скачка" обновления для конфигурации "Бухгалтерия предприятия 3.0", работающей в клиент-серверном варианте (MS SQL).
Мы проанализируем выбор версии технологической платформы, разберем типичные ошибки, связанные с подключенными расширениями, и научимся принудительно завершать процессы отложенного обновления данных, которые блокируют работу пользователей.
Первый вопрос, с которым мы сталкиваемся: какую версию платформы выбрать? Если текущий релиз — 8.3.18, то современные конфигурации БП 3.0 на нем просто не запустятся из-за требований к режиму совместимости.
Рассмотрим варианты, доступные на текущий момент:
Для стабильной работы SQL-базы на 25 пользователей мы рекомендуем остановиться на ветке 8.3.22 (например, релиз 8.3.22.2283 или новее) или 8.3.23, учитывая все тонкости миграции высоконагруженных SQL-баз. Критически важно использовать 64-битную версию сервера приложений (Server 1C x64). При реструктуризации таблиц во время обновления адресного пространства 32-битного процесса rphost может не хватить, что приведет к аварийному завершению обновления.
Одной из самых частых проблем при обновлении типовых конфигураций с подключенными расширениями является ошибка "Метод не найден". Рассмотрим реальный пример ошибки, возникающей при старте обновленной базы:
Ошибка при вызове метода контекста (СоздатьНаборЗаписей)
{РегистрСведений.ПараметрыРаботыПрограммы.МодульМенеджера(1313)}:
НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();
При подписке АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхНаборЗаписей на событие ПередЗаписью произошла ошибка.
Метод обработчика события АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхНаборЗаписей не найден.
Давайте разберем, почему это происходит. При обновлении типовой конфигурации обновляется и "Библиотека Стандартных Подсистем" (БСП). Разработчики 1С могут переименовывать общие модули, менять количество параметров в процедурах или удалять устаревшие методы. Чтобы быстро сориентироваться в изменениях, полезно использовать Справочник по методам БСП, который содержит примеры актуального использования функций.
Ваше расширение, написанное год назад, пытается "подписаться" на событие (например, ПередЗаписью) и вызвать процедуру, которой в новой версии конфигурации больше не существует или она называется иначе. В данном примере проблема кроется в подсистеме автономной работы.
Как решить эту проблему:
После успешного входа в программу мы можем столкнуться с сообщением о блокировке работы с определенными документами или разделами, например, ЭДО.
Система выдает предупреждение:
Действия с объектом временно запрещены, так как не завершен переход на новую версию программы.
Это плановый процесс, который скоро завершится.
Следующие процедуры обработки данных не завершены:
РегистрыСведений.НастройкиОтправкиЭлектронныхДокументовПоВидам.ОбработатьДанныеДляПереходаНаНовуюВерсию
Это означает, что структурное обновление базы завершено, но данные в регистрах еще не приведены в соответствие с новой логикой. Этот процесс выполняется фоновыми заданиями. Однако иногда процесс "зависает". Для решения этой проблемы можно использовать специальное средство для принудительного выполнения отложенного обновления информационной базы, которое особенно эффективно для БП 3.0.
Причины зависания:
Решение проблемы:
Существуют разные методы, позволяющие ускорить и отладить отложенные обработчики, в том числе и принудительное их завершение. Для этого выполним следующие действия:
/C ЗапуститьОбновлениеИнформационнойБазы.Пример строки запуска (можно прописать в ярлыке или выполнить через командную строку):
"C:\Program Files\1cv8\8.3.22.xxxx\bin\1cv8.exe" ENTERPRISE /S "ServerName\BaseName" /N "Admin" /P "Password" /C ЗапуститьОбновлениеИнформационнойБазы
Параметр /C передает строку в процедуру ПриНачалеРаботыСистемы, что позволяет конфигурации распознать команду и форсировать выполнение отложенных обработчиков.
Поскольку мы рассматриваем обновление базы на SQL Server, которая давно не обновлялась, необходимо выполнить ряд действий на стороне СУБД. Это часть обязательного регламентного обслуживания после "больших" обновлений конфигураций для обеспечения производительности.
1. Обновление статистики и индексов
В процессе обновления 1С производит массовую реструктуризацию таблиц (изменение типов полей, добавление колонок). Если в процессе возникают сбои СУБД, вам может потребоваться информация о структуре хранения базы данных, чтобы понять, какая именно таблица вызывает проблему. Сразу после завершения обновления обязательно выполните на SQL Server команду EXEC sp_updatestats;.
2. Контроль журнала транзакций
При переходе через много релизов размер файла журнала транзакций (.ldf) может вырасти многократно. Чтобы оценить масштабы изменений, можно предварительно выполнить расчет размера таблиц базы данных, что поможет в выборе стратегии обслуживания. Убедитесь, что на диске с логами достаточно места.
3. Очистка серверного кэша
При смене платформы настоятельно рекомендуется остановить службу агента сервера 1С и очистить папку с временными файлами кластера. Старый кэш метаданных может конфликтовать с новой версией платформы, вызывая странные ошибки "Вылет процесса rphost".
Обновление "застоявшейся" базы БП 3.0 — процедура выполнимая, если подходить к ней системно. Подведем итог алгоритма действий:
/C или специализированную обработку для обновления.