Как обновить конфигурацию 1С через хранилище, используя готовый файл cf?

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

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

Почему кнопка загрузки недоступна в хранилище?

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

Способ 1. Метод «Автономной работы» с захваченными объектами (Рекомендуемый)

Этот метод считается наиболее «чистым» и правильным с точки зрения методологии 1С. Рассмотрим его по шагам:

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

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

Способ 2. Обновление через сравнение и объединение

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

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

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

Как вернуть объекты на «Замок» (полную поддержку)

Часто после массового объединения объекты переходят в статус «Редактируется с сохранением поддержки». Если объектов тысячи, проставлять правила вручную невозможно. Посмотрим, как автоматизировать этот процесс:

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

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

Особенности работы с правилами поддержки в хранилище

Проанализируем интересную особенность (иногда называемую «багом» хранилища), которую можно использовать в работе. Если выполнить последовательность действий:

  1. Захватить корень конфигурации.
  2. Разрешить редактирование объекта и захватить его.
  3. Внести изменения и поместить объект в хранилище.
  4. Отменить захват корня (без помещения).

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

Резюме для работы

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

← На главную