При обслуживании нетиповых (измененных) конфигураций 1С специалисты часто сталкиваются с необходимостью установки целой цепочки обновлений. Стандартный метод обновления через последовательное сравнение и объединение конфигураций для каждого релиза занимает огромное количество времени. Процесс сравнения объектов может длиться часами, особенно если база сильно доработана. В таких ситуациях возникает соблазн ускорить работу: один раз выполнить все промежуточные обновления и настройки на тестовой базе, выгрузить готовые файлы конфигурации cf для ключевых релизов, а затем последовательно загрузить их в рабочую базу.
В этой статье мы подробно разберем, насколько корректен такой способ, почему при загрузке файла cf автоматически обновляется конфигурация поставщика, с какими критическими опасностями можно столкнуться при «накатывании» готового файла конфигурации и как автоматизировать этот процесс без риска безвозвратной потери данных.
Многих разработчиков удивляет тот факт, что при использовании команды «Конфигурация — Загрузить конфигурацию из файла» происходит автоматическое обновление конфигурации поставщика (базы, находящейся на поддержке). Давайте разберем этот механизм изнутри.
Файл конфигурации cf — это не просто слепок метаданных основной конфигурации. Если исходная база (из которой выгружался файл cf) стояла на поддержке одного или нескольких поставщиков, то выгруженный файл cf содержит внутри себя полную информацию о конфигурации поставщика (или поставщиков). Когда мы выполняем полную загрузку конфигурации, целевая база полностью заменяется содержимым загружаемого файла. При этом замещается как основная конфигурация базы данных, так и конфигурация поставщика. Именно поэтому система без проблем распознает новые версии поддержки и корректно предлагает следующие файлы обновлений.
Несмотря на кажущуюся простоту и корректность работы механизма, метод полной загрузки файла cf («в лоб») таит в себе колоссальную опасность, которая может привести к полной потере данных в добавленных реквизитах или объектах метаданных. Рассмотрим эту проблему детально.
Каждый объект метаданных в экосистеме 1С (будь то справочник, документ, регистр или обычный добавленный реквизит) идентифицируется платформой не по имени, а по уникальному внутреннему идентификатору — UUID (уникальному идентификатору объекта). Имя объекта — это лишь строковое представление для разработчика и интерфейса, а для базы данных важен именно его UUID.
Представим типичную жизненную ситуацию в цикле разработки и сопровождения:
ИНН для справочника Контрагенты. Платформа присваивает этому реквизиту уникальный идентификатор, например: UUID_TEST_111.ИНН в том же справочнике с аналогичным типом данных. Платформа генерирует для него другой уникальный идентификатор: UUID_PROD_222. Начинается активная работа, пользователи заполняют этот реквизит данными в рабочей базе.cf из тестовой базы.cf. Реквизит с UUID_PROD_222 (рабочая база) уничтожается, а на его место записывается реквизит с UUID_TEST_111 (из тестовой базы).UUID_PROD_222 был удален пользователем, а абсолютно новый объект с идентификатором UUID_TEST_111 был создан.Важнейшее правило: Использовать полную загрузку конфигурации из файла cf можно исключительно в том случае, если вы на 100% уверены, что в рабочую базу не вносилось абсолютно никаких изменений структуры данных вручную (в обход тестовой базы или хранилища).
Современные конфигурации 1С построены на базе Библиотеки стандартных подсистем (БСП). Вся бизнес-логика изменения структуры данных, переноса информации из старых реквизитов в новые, заполнения констант и регистров при обновлении версий выполняется на уровне предприятия специальными обработчиками обновления БСП.
Можно ли просто загрузить финальный cf и запустить систему один раз, рассчитывая, что БСП выполнит все отложенные обработчики за один проход? Ответ: в большинстве случаев это крайне рискованно и может привести к разрушению логической целостности данных.
Рассмотрим причины, по которым необходимо запускать режим «1С:Предприятие» после наката каждого ключевого релиза:
Выяснив все технические риски, рассмотрим несколько практических методик, которые позволяют существенно ускорить процесс обновления нетиповой конфигурации без риска сломать базу данных.
Этот способ подходит, если рабочая база находится под вашим полным контролем и любые изменения метаданных в ней гарантированно исключены.
Проанализируем шаги выполнения этой методики:
release_1.cf.release_2.cf, release_3.cf и так далее. На каждом этапе обязательно запускайте режим «1С:Предприятие» и контролируйте успешное завершение обработчиков обновления.release_N.cf.Если у вас есть малейшие сомнения в том, что структура рабочей базы идентична тестовой, либо в рабочую базу могли вноситься ручные изменения объектов, используйте метод сравнения-объединения с последующим обновлением конфигурации поставщика «вхолостую».
Разберем данный алгоритм по шагам:
final.cf на тестовой базе (выполнив все обновления и сопоставления кода).final.cf.cfu или оригинальный cf нового релиза от фирмы «1С»).Для крупных проектов с постоянными доработками и частыми релизами оптимальным решением является использование встроенного инструмента платформы — Хранилища конфигурации. Хранилище гарантирует уникальность UUID всех объектов и исключает риски потери данных.
Посмотрим, как выглядит схема работы с хранилищем при обновлении:
При последовательном обновлении цепочки релизов значительная часть времени тратится на запуск сеансов предприятия и ожидание выполнения фоновых задач отложенного обновления БСП. Мы можем автоматизировать и ускорить этот процесс следующими способами:
/C ВыполнитьОтложенноеОбновлениеСейчас. Это позволит системе сразу запустить фоновые задания обновления в активном сеансе, не дожидаясь расписания регламентных заданий.
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /F "C:\Bases\Trade" /N "Admin" /P "Password" /C ВыполнитьОтложенноеОбновлениеСейчас /Visible
cf, запустит базу в режиме предприятия, дождется окончания работы обработчиков БСП, проконтролирует отсутствие ошибок в журнале регистрации и перейдет к следующему шагу без участия человека.Метод последовательного обновления измененной базы 1С через загрузку предварительно настроенных файлов cf является рабочим и крайне эффективным инструментом, экономящим часы рабочего времени разработчика. Однако его использование требует жесткой технологической дисциплины:
UUID.cf для корректной отработки механизмов БСП.