Разработчики и администраторы крупных систем 1С часто сталкиваются с дилеммой: с одной стороны, групповая разработка требует обязательного использования Хранилища конфигурации, с другой — автоматизированные сервисы обновления (например, популярный сервис от «1С-ИжТиСи») или сторонние подрядчики предоставляют готовый файл обновления в формате .cf, предполагающий использование операции «Загрузить конфигурацию из файла».
Проблема заключается в том, что функция полной загрузки конфигурации физически заблокирована платформой «1С:Предприятие», если база подключена к хранилищу. Попытка отключить базу от хранилища, залить файл конфигурации, а затем подключить обратно ни к чему хорошему не приведет: при повторном подключении платформа выдаст предупреждение о том, что локальная конфигурация будет полностью заменена версией из хранилища, и все ваши свежие обновления просто затрутся.
В этой статье мы подробно разберем, как решить эту проблему, сохраняя историю разработки в хранилище и не нарушая методологию обновлений поставщика.
Прежде чем перейти к практике, давайте выясним техническую причину такого требования. Почему нельзя просто выполнить обычное сравнение и объединение с присланным файлом .cf?
Дело в механизме сопоставления объектов метаданных платформой 1С:
GUID. Если в новом релизе разработчик поставщика переименовал какой-то реквизит или справочник, платформа безошибочно поймет это переименование. Данные при обновлении базы данных (F7) сохранятся, а физическая таблица в СУБД просто сменит имя колонки или таблицы.GUID. Если объект был переименован, механизм сравнения может посчитать, что старый объект удален, а новый — добавлен. Если вы согласитесь с таким объединением, то при обновлении базы данных физическая таблица или колонка со всеми накопленными данными пользователей будет удалена, а вместо нее создастся новая, пустая. Это приводит к катастрофической потере данных в рабочей базе.Именно поэтому автоматические сервисы обновлений страхуют пользователей и предоставляют готовый, собранный файл .cf, который гарантированно нужно именно загружать целиком.
---
Это самый надежный, проверенный временем метод, который используют ведущие специалисты по внедрению систем класса ERP и Комплексная автоматизация. Суть метода заключается в разделении контуров применения обновлений.
Нам понадобятся две отдельные информационные базы:
Рассмотрим пошагово алгоритм переноса обновлений из файла .cf в рабочее хранилище:
В нашей базе разработки (которая отключена от хранилища) мы без всяких препятствий выполняем операцию «Конфигурация» — «Загрузить конфигурацию из файла» и выбираем полученный от сервиса обновления или поставщика файл .cf. После успешного завершения загрузки выполняем обновление конфигурации базы данных (клавиша F7). Из этой базы мы выгружаем результирующий файл конфигурации (назовем его result.cf), который содержит и обновленную конфигурацию поставщика, и все наши доработки.
Переходим в рабочую базу, подключенную к хранилищу. Перед тем как вносить изменения в объекты метаданных, нам крайне важно обновить конфигурацию поставщика, чтобы в будущем не иметь проблем с поддержкой.
Для этого выполняем следующие действия:
.cf или .cfu от 1С соответствующего релиза).Теперь необходимо перенести сами изменения кода и структуры метаданных из подготовленного нами на Шаге 1 файла result.cf.
result.cf.Этот способ позволяет получить чистую историю изменений в хранилище, обновленную конфигурацию поставщика и гарантирует отсутствие потери пользовательских данных.
---
Если у вас нет возможности или времени разворачивать вторую базу, можно обойти блокировку команды полной загрузки конфигурации прямо в рабочей базе, подключенной к хранилищу. Для этого мы заставим механизм сравнения-объединения отработать в режиме полного замещения.
Разберем этот альтернативный вариант по шагам:
.cf..cf.Внимание: этот способ требует высокой концентрации внимания. Если вы случайно пропустите объект или не настроите правило замещения «Взять из файла» для какого-то сложного доработанного механизма, вы рискуете получить рассогласование метаданных.
---
В некоторых ИТ-отделах практикуется радикальный, но действенный метод ускорения работы с хранилищем на сильно кастомизированных конфигурациях. Если типовой функционал переписан более чем на 50%, регулярное обновление конфигурации поставщика превращается в пустую трату времени.
В таком случае принимается решение полностью снять рабочую базу с поддержки поставщика:
После этой процедуры база становится полностью «самописной» для платформы 1С. Конфигурация поставщика больше не хранится в базе данных, что существенно уменьшает размер файла .1cd (или таблиц в MS SQL / PostgreSQL) и ускоряет работу самого хранилища.
При этом весь процесс обновления переносится в «препрод» (копию) базы разработки. Именно там хранится конфигурация поставщика, там накатываются обновления через полную загрузку, а в рабочую базу (прод) изменения переносятся исключительно через сравнение-объединение (как описано в Решении 1). Рабочая база всегда остается чистой от балласта конфигурации поддержки.
---
Если ваша команда регулярно сталкивается с ограничениями штатного Хранилища 1С (блокировки, медленная работа по сети, невозможность нормально загружать файлы конфигураций без монопольного захвата всего дерева метаданных), имеет смысл рассмотреть современный стек разработки.
Использование среды разработки 1C:Enterprise Development Tools (EDT) в связке с системой контроля версий Git полностью снимает описанную проблему:
.cf, полученный от сервиса автоматического обновления, можно просто загрузить в локальную учебную базу, импортировать в проект EDT, и Git автоматически зафиксирует все изменения в виде обычного коммита кода.Переход на EDT требует переобучения команды, но в долгосрочной перспективе это избавляет от рутинных ручных манипуляций в конфигураторе.
---
Для безопасного и быстрого совмещения работы хранилища и полной загрузки файлов конфигурации мы рекомендуем придерживаться следующих правил: