В процессе обслуживания информационных баз 1С часто возникает ситуация, когда конфигурация отстает от актуальной версии на несколько десятков релизов. При ручном последовательном обновлении через конфигуратор на каждый промежуточный шаг уходит много времени: требуется применить обновление метаданных, принять изменения структуры, а затем запустить режим «1С:Предприятие» для выполнения служебных обработчиков. Разберем, можно ли накатывать несколько файлов обновлений подряд без промежуточного входа в пользовательский режим, чем опасен пропуск промежуточных релизов и как автоматизировать данный процесс.
Для понимания архитектуры процесса обновления в системе 1С необходимо четко разделять два этапа:
В современных конфигурациях, созданных на базе «Библиотеки стандартных подсистем» (БСП), версионирование контролируется подсистемой ОбновлениеИнформационнойБазы. При старте сеанса платформа считывает данные из регистра сведений ВерсииПодсистем, сопоставляет текущую версию метаданных с версией данных и собирает через процедуру ДобавитьОбработчикиОбновления очередь процедур, необходимых для корректного перехода.
Рассмотрим типовой сценарий, который наглядно демонстрирует риск безвозвратной потери данных:
СуммаВВалюте.СуммаВзаиморасчетов, а старый помечается на удаление как УдалитьСуммаВВалюте. Программный обработчик в режиме предприятия должен перенести значения из старого поля в новое.УдалитьСуммаВВалюте полностью удаляется из метаданных.Если применить конфигурацию релиза N+2 без промежуточного запуска базы на релизе N+1, СУБД физически удалит колонку исходного реквизита. Когда вы запустите предприятие на финальном релизе, обработчик обновления попытается обратиться к объекту УдалитьСуммаВВалюте, но его уже не существует в метаданных. В лучшем случае процесс завершится критической ошибкой, а в худшем — новые реквизиты останутся пустыми, и база продолжит работу с поврежденными данными.
Проанализируем другие критические факторы:
Для минимизации времени и обеспечения сохранности данных рекомендуется придерживаться следующих правил:
РезультатыОбновленияПрограммы или вызовом метода ОбновлениеИнформационнойБазы.ВыполнитьОтложенноеОбновлениеСейчас() перед переходом к следующему релизу.Чтобы не выполнять монотонные действия вручную через интерфейс, автоматизируем процесс с помощью пакетного режима запуска платформы 1С. Создадим командный сценарий, который последовательно выполняет обновление структуры в конфигураторе и запускает отработку миграции данных в режиме предприятия.
Разберем пример пакетных команд для одного шага обновления:
rem Шаг 1. Применение файла обновления метаданных в конфигураторе
"C:\Program Files\1cv8\common\1cv8.exe" DESIGNER /F "C:\Bases\MyBase" /N "Администратор" /P "Пароль123" /UpdateCfg "C:\Updates\1cv8.cfu" /UpdateDBCfg
rem Шаг 2. Запуск срочных процедур обновления данных в режиме предприятия
"C:\Program Files\1cv8\common\1cv8.exe" ENTERPRISE /F "C:\Bases\MyBase" /N "Администратор" /P "Пароль123" /C "ЗапуститьОбновлениеИнформационнойБазы" /DisableStartupMessages
Посмотрим подробнее на используемые параметры запуска платформы:
/UpdateCfg <Путь> — указывает путь к файлу поставки обновления (.cfu или .cf) для применения в конфигурации./UpdateDBCfg — применяет изменения структуры метаданных к текущей базе данных (аналог нажатия F7 в конфигураторе)./C "ЗапуститьОбновлениеИнформационнойБазы" — специальный строковый параметр конфигураций на БСП, инициирующий автоматическое выполнение срочных обработчиков обновления с последующим завершением сеанса./DisableStartupMessages — отключает показ стартовых диалоговых окон, предупреждений и сообщений об ошибках, блокирующих автоматическое закрытие сеанса.В случае написания командных файлов (скриптов .bat или .ps1) обязательно анализируем системную переменную ERRORLEVEL после каждого шага. Код возврата 0 свидетельствует об успешном завершении операции. При ненулевом коде возврат сценария следует немедленно прервать, чтобы выяснить причину сбоя в журнале регистрации по событиям с уровнем Ошибка.