При обслуживании и доработке нетиповых или частично измененных конфигураций 1С стандартное обновление через мастер поддержки непосредственно на рабочей базе часто несет риски длительного простоя пользователей. Классический сценарий решения этой задачи заключается в подготовке обновления на отдельной тестовой копии, тщательной проверке работоспособности и последующем переносе результата в рабочую среду. Однако при попытке применить подготовленный файл конфигурации (.cf) к рабочей базе разработчики часто сталкиваются с вопросами управления правилами поддержки и рисками потери данных при переименовании реквизитов. Разберем подробно механику оффлайн-обновления, поведение платформы 1С:Предприятие и безопасную последовательность действий.
Рассмотрим распространенную ошибку: разработчик обновляет тестовую базу, затем выгружает конфигурацию через меню Конфигурация – Сохранить конфигурацию в файл и пытается применить полученный файл в рабочей базе через Конфигурация – Поддержка – Обновить конфигурацию. В результате платформа выдает предупреждение: «Файл не содержит доступных обновлений».
Проанализируем причину такого поведения. Штатный механизм обновления ожидает на вход файл поставщика (.cfu или полный .cf поставщика), в дескрипторе которого прописано, для каких именно версий конфигурации применимо данное обновление. Пользовательский файл .cf, выгруженный из основной конфигурации, представляет собой снимок всей структуры метаданных конкретной базы, а не отдельный пакет обновления поставщика. Поэтому штатный мастер поддержки отклоняет такой файл.
Для переноса конфигурации доступны два основных инструмента, каждый из которых работает по своим внутренним алгоритмам:
.cf. Сопоставление объектов базы данных выполняется строго по их внутренним идентификаторам (UUID).Выясним, как платформа обрабатывает изменения в реквизитах при полной загрузке файла. Представим типовой сценарий перехода между релизами: типовой реквизит Тест строкового типа разработчики конфигурации объявили устаревшим и переименовали в УдалитьТест, а на его место добавили новый реквизит Тест со ссылочным типом данных. При первом запуске базы специальная процедура обновления переносит данные из старого реквизита в новый.
Если бы сопоставление происходило по именам, платформа попыталась бы изменить тип существующей колонки таблицы СУБД со строки на ссылку (что привело бы к очистке поля) и добавила бы пустую колонку УдалитьТест. Однако при использовании команды «Загрузить конфигурацию из файла» платформа сверяет метаданные по их внутренним идентификаторам UUID:
UUID теперь называется УдалитьТест, и выполняет в СУБД безопасное переименование физической колонки без потери накопленной информации.UUID создается новая колонка.УдалитьТест и переносит их в новое поле.Важнейшее условие: данный механизм работает безопасно только тогда, когда тестовая база была создана как прямая копия (SQL-бэкап или выгрузка .dt) текущей рабочей базы. Если тестовая база собиралась с нуля из пустого файла, UUID объектов разойдутся, и реструктуризация базы данных приведет к удалению и повторному созданию таблиц с полной потерей данных.
Разберем по шагам правильный алгоритм переноса обновления:
.cfu или .cf поставщика), адаптируем доработки, выполняем запуск в режиме «Предприятие», применяем обработчики обновления и тестируем функционал.update.cf.update.cf. Если конфигурация находится на поддержке, платформа выдаст предупреждение о полной замене конфигурации — подтверждаем действие.Для минимизации технологического окна простоя рабочей базы операцию загрузки файла и обновления конфигурации базы данных можно запускать с помощью командной строки. Рассмотрим пример командного файла:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S "app-server\work_base" /N "Admin" /P "Password123" /DisableStartupMessages /LoadCfg "C:\Updates\update.cf" /UpdateDBCfg
Параметр /LoadCfg выполняет загрузку структуры метаданных и конфигурации поставщика, а параметр /UpdateDBCfg применяет изменения к таблицам базы данных. Использование пакетного скрипта исключает человеческий фактор и существенно ускоряет процедуру релиза в рабочей среде.