При обслуживании и регулярном обновлении информационных баз 1С нередко возникает ситуация, когда конфигурация отстает от актуального состояния на несколько версий. У администраторов и разработчиков появляется соблазн сэкономить время: накатить несколько файлов обновлений подряд через Конфигуратор и лишь в самом конце однократно открыть базу в режиме «1С:Предприятие». Разберем, допустим ли такой подход, что происходит с метаданными и данными информационной базы на низком уровне и к каким фатальным сбоям это может привести.
Сама платформа «1С:Предприятие» технически не запрещает накатывать файлы обновлений последовательно один за другим в режиме Конфигуратора, применяя изменения к структуре базы данных по клавише F7. Однако конфигурация — это не просто структура таблиц, а сложный комплекс прикладных алгоритмов. Основная работа по трансформации, переносу и заполнению данных происходит не на этапе реструктуризации таблиц СУБД, а при старте пользовательского сеанса под управлением Библиотеки стандартных подсистем (БСП).
Рассмотрим типовой жизненный цикл реквизитов и структур хранения при развитии типовых конфигураций (например, «1С:Бухгалтерия», «1С:ERP» или «1С:ЗУП»):
Проанализируем ситуацию, когда мы накатываем релизы N+1 и N+2 последовательно без запуска предприятия между ними. Структура метаданных сразу становится равной релизу N+2 — старое поле удаляется из таблиц базы данных физически. Когда база наконец запускается в режиме «1С:Предприятие», начинает выполняться процедура обновления от релиза N+1. Этот обработчик пытается обратиться к старому реквизиту, которого в структуре таблиц уже физически нет. В лучшем случае мы получаем аварийное падение с ошибкой Поле объекта не обнаружено, а в худшем — обработчик тихо игнорирует отсутствие источника данных, и важные учетные реквизиты, остатки или движения регистров навсегда остаются пустыми.
Выясним основные причины, по которым пропуск промежуточных запусков приводит к деградации базы данных:
ОбновлениеИнформационнойБазы.... Если перепрыгнуть через несколько узловых версий, платформа зафиксирует новую версию метаданных, но код для конвертации устаревших данных в конфигурации уже будет отсутствовать.Разберем по шагам регламент, исключающий потерю данных при обновлении через цепочку релизов:
.dt..cfu), так и через полные файлы конфигурации (.cf), строго соблюдая минимально допустимую версию источника.Чтобы не выполнять промежуточные запуски вручную, процесс можно автоматизировать с помощью скриптов командной строки или утилит OneScript.
Посмотрим на пример командного файла для автоматического наката релиза и инициализации процедур обновления БСП без участия пользователя:
REM Шаг 1: Применение файла обновления к конфигурации
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "Server1C\BaseName" /N "Admin" /P "Password" /UpdateCfg "C:\Updates\1cv8.cfu" /UpdateDBCfg
REM Шаг 2: Запуск предприятия в пакетном режиме для выполнения процедур БСП
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "Server1C\BaseName" /N "Admin" /P "Password" /C "ЗапуститьОбновлениеИнформационнойБазы" /DisableStartupMessages /AppAutoCheckVersion
Если в базе накопился большой объем отложенных данных и регламентное задание выполняется слишком медленно, можно принудительно запустить обработку в реальном времени. Для этого в окне Результаты обновления программы нажимаем гиперссылку с приоритетом выполнения или вызываем программный метод библиотеки:
// Принудительный вызов выполнения всех отложенных процедур обновления БСП
ОбновлениеИнформационнойБазы.ВыполнитьОтложенноеОбновлениеСейчас();
Таким образом, обновлять конфигурацию сразу на несколько релизов без промежуточного старта предприятия категорически не рекомендуется. Экономия нескольких минут на промежуточных запусках неизбежно приводит к скрытому разрушению ссылочной целостности базы, потере исторических движений в регистрах и труднодиагностируемым ошибкам в период сдачи регламентированной отчетности.