Обновление нетиповой конфигурации «1С:Предприятие» — это всегда ответственный процесс, требующий от специалиста понимания внутренней архитектуры платформы. Часто возникает вопрос: можно ли сэкономить время и накатить сразу несколько релизов (патчей) в Конфигураторе, не запуская базу в режиме «Предприятие» после каждого промежуточного этапа? Разберем эту ситуацию подробно, проанализируем технические риски и выясним, почему спешка в этом вопросе может привести к фатальной потере данных.
Для начала рассмотрим, как концептуально устроено любое обновление конфигурации. Процесс всегда делится на две принципиально разные части:
Если мы проигнорируем запуск в режиме «Предприятие» и сразу начнем накатывать следующий релиз метаданных, мы рискуем нарушить целостность этой цепочки. Проанализируем, к чему это приводит на практике.
Рассмотрим классическую ситуацию трансформации данных. Представим, что в релизе 1.1 разработчик решил заменить текстовое поле СтарыйАртикул на ссылку на справочник Номенклатура. Процесс в типовых конфигурациях выглядит так:
НовыйАртикул (ссылка).НовыйАртикул на основании данных из СтарыйАртикул.СтарыйАртикул помечается на удаление или удаляется физически.Если мы обновим конфигурацию с версии 1.0 сразу до 1.2 в Конфигураторе, платформа физически удалит колонку СтарыйАртикул. Когда мы, наконец, запустим «Предприятие», обработчик из релиза 1.1 попытается прочитать данные из уже несуществующего поля СтарыйАртикул и либо выдаст ошибку, либо (что хуже) оставит новое поле пустым. Данные будут безвозвратно потеряны.
Большинство современных конфигураций (БП 3.0, УТ 11, ERP) используют механизмы БСП для управления обновлением. Выясним, как работает этот механизм изнутри. В БСП существует два типа обработчиков:
Важный момент: Если вы накатываете следующий патч, когда предыдущие отложенные обработчики еще не завершили свою работу, это гарантированно приведет к неконсистентности данных. Новая версия метаданных может ожидать, что данные уже преобразованы, а фоновое задание старого релиза еще «в пути».
Поэтому правильный алгоритм выглядит так:
Для нетиповых баз ситуация осложняется тем, что при объединении могли быть затронуты модули, отвечающие за само обновление. Разберем ситуацию: если при сравнении/объединении вы некорректно перенесли изменения в процедуру ПриДобавленииОбработчиковОбновления или в общие модули типа ОбновлениеИнформационнойБазыБП, стандартные механизмы могут просто «проскочить» нужные этапы.
Проанализируем ситуацию с «дважды измененными свойствами», упомянутую автором. При ручном объединении велик риск человеческой ошибки. Запуск приложения после каждого шага позволяет локализовать проблему. Если на текущем релизе обработчики упали с ошибкой, вы сразу это увидите в Журнале регистрации.
Если вам нужно обновить базу на 10–20 релизов вверх, заходить в каждый вручную утомительно. Мы можем автоматизировать этот процесс, используя параметры запуска 1С. Рассмотрим пример скрипта (бат-файла), который инициирует обновление данных без лишних вопросов:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\Base1C" /N "Admin" /P "Pass" /C ЗапуститьОбновлениеИнформационнойБазы /Visible /DisableStartupMessages
Параметр /C ЗапуститьОбновлениеИнформационнойБазы — это специальный ключ БСП, который говорит системе: «Запустись, выполни все необходимые процедуры обновления и закройся (или покажи результат)». Это позволяет выстроить «конвейер» обновлений, где каждый запуск гарантирует выполнение программной части кода текущего релиза.
Существует исключение: использование полных файлов конфигурации (.cf) вместо файлов обновлений (.cfu). Если вы перескакиваете через 2–3 мелких релиза внутри одной минорной версии (например, с 3.0.100.10 на 3.0.100.25), разработчики часто включают в последний релиз все обработчики за промежуточные версии. В этом случае код обработчика проверяет текущую версию в базе (например, 3.0.100.10) и последовательно выполняет все функции для версии .15, .20 и .25 за один сеанс работы.
Однако, как правильно заметили участники форума, если возникает вопрос «надо ли заходить», значит, глубокого понимания состава этих обработчиков у специалиста нет. В такой ситуации безопаснее всего следовать правилу: один шаг обновления в Конфигураторе — один полный цикл запуска в Предприятии.
Подведем итоги нашего анализа. Чтобы успешно обновить нетиповую конфигурацию и не потерять данные, придерживайтесь следующих правил:
ОБНОВЛЕНИЕИБ.Помните, что время, сэкономленное на пропуске запусков «Предприятия», несопоставимо с временем, которое потребуется на восстановление порушенных данных в таблицах РегистрыСведений или Справочники, если какая-то процедура переноса данных не отработает вовремя.