Как правильно обновить измененную конфигурацию 1С при подключенном хранилище?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка в среде 1С с использованием механизма хранилища конфигурации накладывает ряд жестких технологических ограничений. Одно из наиболее частых затруднений, с которым сталкиваются специалисты при сопровождении доработанных баз, — это блокировка стандартных инструментов обновления. В частности, при подключенном хранилище платформа делает неактивной команду «Загрузить конфигурацию из файла».

В этой статье мы подробно разберем причины такого поведения платформы, рассмотрим классическую двухпроходную схему обновления, изучим альтернативные экспресс-методы и выясним, как избежать фатальных ошибок, связанных с «пересортом» уникальных идентификаторов (UUID) метаданных.

Почему заблокирована кнопка «Загрузить конфигурацию из файла»?

Прежде чем переходить к алгоритмам обновления, проанализируем архитектурную логику платформы 1С:Предприятие. Хранилище конфигурации работает по принципу версионирования отдельных объектов (гранулярно). Каждый справочник, документ, реквизит или форма имеют свою историю версий, автора изменений и статус захвата.

Прямая загрузка файла конфигурации (.cf) представляет собой операцию полной и деструктивной замены всей структуры метаданных «одним махом». Если бы платформа разрешила выполнить эту команду при активном хранилище, связь между физическими объектами в базе данных разработки и их историей версий в хранилище была бы безвозвратно утеряна. Это привело бы к глубокому рассинхрону схемы данных и гарантированному краху репозитория при попытке любого разработчика обновить свою локальную копию.

Именно поэтому единственным штатным способом изменения структуры метаданных при подключенном хранилище является процедура сравнения и объединения конфигураций при предварительно захваченных объектах.

---

Метод 1. Классическая «двухпроходная» схема обновления без отключения хранилища

Рассмотрим наиболее надежный и безопасный сценарий, когда у вас уже есть готовый, протестированный файл обновления (.cf), собранный на локальной копии базы данных. Чтобы правильно перенести эти изменения в рабочую конфигурацию, подключенную к хранилищу, выполним следующие шаги по порядку.

Шаг 1. Подготовка и захват объектов

  1. Откройте конфигуратор базы данных, подключенной к вашему рабочему хранилищу.
  2. Убедитесь, что никто из разработчиков в данный момент не держит захваченными критически важные объекты.
  3. В дереве метаданных выделите корень конфигурации, нажмите правой кнопкой мыши и выберите команду «Хранилище — Захватить в хранилище...».
  4. В открывшемся окне обязательно установите флаг «Захватывать рекурсивно». Это необходимо для того, чтобы заблокировать от изменений все дочерние объекты конфигурации на время проведения обновления.

Шаг 2. Первый проход — Обновление конфигурации поставщика

При обновлении доработанных типовых решений критически важно обновить не только код, но и саму конфигурацию поставщика, которая находится на поддержке. Если просто сделать сравнение-объединение с обычным файлом .cf, конфигурация поставщика останется старой, что сделает невозможными все последующие автоматические обновления.

  1. Перейдите в меню Конфигурация — Поддержка — Обновить конфигурацию.
  2. Укажите путь к файлу обновления (это может быть типовой файл обновления .cfu или полный дистрибутивный .cf нового релиза от вендора).
  3. После того как платформа выполнит анализ и откроет окно сравнения и объединения, снимите абсолютно все флажки со всех объектов метаданных.
  4. Нажмите кнопку «Выполнить». Платформа выдаст предупреждение, но обновит внутреннюю конфигурацию поставщика до актуального релиза. При этом весь ваш доработанный код и структура рабочей базы останутся нетронутыми.

Шаг 3. Второй проход — Накатывание проектных доработок

Теперь, когда поддержка обновлена, мы можем безопасно перенести код и структуру из нашего подготовленного файла.

  1. Перейдите в меню Конфигурация — Сравнить, объединить с конфигурацией из файла....
  2. Выберите ваш рабочий, предварительно протестированный файл конфигурации .cf, содержащий все новые доработки.
  3. В окне сравнения и объединения проанализируйте изменения. Поскольку вы накатываете заведомо верную конфигурацию, установите флаги для объединения всех необходимых объектов.
  4. Нажмите кнопку «Выполнить».
  5. Обновите конфигурацию базы данных, нажав клавишу F7 (или выбрав Конфигурация — Обновить конфигурацию базы данных).
  6. Перейдите в меню Конфигурация — Хранилище конфигурации — Поместить в хранилище..., чтобы зафиксировать новые версии объектов в репозитории и сделать их доступными для остальных участников команды разработки.

---

Метод 2. Сравнение хранилища с конфигурацией из файла (Быстрый способ)

Существует менее известный, но чрезвычайно удобный альтернативный трюк. Он позволяет залить подготовленный файл .cf напрямую в хранилище, минуя рутинное сравнение с основной конфигурацией базы данных. Проанализируем этот алгоритм:

  1. Откройте конфигуратор и захватите корень конфигурации рекурсивно, как это было описано в первом методе.
  2. Перейдите в меню Конфигурация — Хранилище конфигурации — Сравнить хранилище с конфигурацией из файла....
  3. Укажите ваш файл .cf с готовым обновлением.
  4. В открывшемся окне сравнения платформа покажет разницу между текущим состоянием хранилища и вашим файлом. Выполните объединение с приоритетом загружаемого файла.
  5. Поместите измененные объекты в хранилище. Этот способ работает значительно быстрее на крупных конфигурациях, так как платформа оптимизирует запись изменений непосредственно в файлы репозитория.

---

Метод 3. Радикальный способ с пересозданием хранилища

При переходе на принципиально новые архитектурные редакции тяжелых конфигураций (например, переход с «ERP Управление предприятием» версии 2.4 на 2.5) объем изменений настолько огромен, что стандартное сравнение-объединение в базе с хранилищем может выполняться десятки часов, зависать или аварийно завершаться по причине нехватки оперативной памяти. В таких экстраординарных случаях целесообразно использовать схему с пересозданием хранилища:

  1. Полностью отключите рабочую базу данных (или ее точную копию) от текущего хранилища через меню Конфигурация — Хранилище конфигурации — Отключить от хранилища.
  2. Поскольку связь с хранилищем разорвана, платформа разблокирует стандартную функцию полной замены конфигурации. Перейдите в Конфигурация — Загрузить конфигурацию из файла... и выберите ваш подготовленный тяжелый файл .cf.
  3. Выполните реструктуризацию и обновление базы данных, нажав кнопку F7.
  4. Создайте совершенно новое хранилище на основе обновленной конфигурации (Конфигурация — Хранилище конфигурации — Создать хранилище...).
  5. Все разработчики должны подключить свои локальные рабочие базы к этому новому хранилищу.

Важный нюанс: главным минусом данного подхода является потеря детальной истории коммитов в старом хранилище. Тем не менее старый файл хранилища можно сохранить в архивном каталоге в режиме «только для чтения» для возможности ретроспективного анализа старого кода.

---

Опасность «пересорта» по внутренним идентификаторам (UUID)

Разберем детально техническую тонкость, упомянутую опытными разработчиками в обсуждении на форуме. Это явление называется «пересортом» метаданных по внутренним UUID.

Платформа 1С идентифицирует любой объект конфигурации (например, справочник ДоговорыКонтрагентов или реквизит СуммаДокумента) не по его имени, а по уникальному 128-битному идентификатору (UUID). Если один и тот же новый справочник был создан вручную параллельно в рабочей базе и в базе разработки, они будут иметь абсолютно одинаковые имена, но разные внутренние UUID.

Если при обновлении вы запустите сравнение-объединение с включенным флагом «Устанавливать соответствие по именам объектов», платформа визуально объединит их. Однако при попытке последующих обновлений начнется хаос: система попытается удалить объект с одним UUID и создать заново с другим, что приведет к полной потере накопленных данных в пользовательской базе данных!

Выясним, как гарантировать отсутствие «пересорта» перед обновлением:

  1. После проведения объединения обязательно запустите встроенный инструмент контроля: Конфигурация — Сравнить конфигурации.
  2. В качестве сравниваемых конфигураций выберите основную конфигурацию и конфигурацию поставщика.
  3. В окне настроек сравнения в обязательном порядке снимите флаг «Устанавливать соответствие по именам объектов».
  4. Внимательно изучите полученный отчет. Если вы увидите в списке пары объектов, где один помечен как «Удален», а второй — как «Добавлен», при этом их имена полностью совпадают, это явный признак рассинхронизации UUID.
  5. В таком случае обновлять рабочую базу нельзя. Необходимо вернуться в базу разработки, вручную сопоставить UUID объектов (или перенести их правильным копированием через буфер конфигуратора) и подготовить файл обновления заново.

---

Автоматизация процесса через командную строку

Для крупных проектов и системных администраторов, практикующих подход непрерывной интеграции (CI/CD), ручные манипуляции в конфигураторе малоэффективны. Платформа 1С поддерживает пакетный режим работы с хранилищем. Рассмотрим пример типового пакетного скрипта для автоматического получения обновлений из хранилища:


"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" DESIGNER /F "C:\1C_Bases\WorkDB" /N "Admin" /P "Password" /ConfigurationRepositoryF "\\server\repository" /ConfigurationRepositoryN "DeployUser" /ConfigurationRepositoryP "DeployPassword" /ConfigurationRepositoryUpdateCfg /UpdateDBCfg

В данном примере используются следующие ключевые параметры запуска:

Использование таких скриптов в связке с планировщиками задач или специализированным софтом (например, «Обновлятор-1С») позволяет полностью автоматизировать рутинный процесс обновления клиентских баз в ночное время, сводя к минимуму влияние человеческого фактора.

← На главную