Как обновить рабочую базу 1С без выгрузки тяжелого CF-файла при точечных доработках?

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

Разработчики 1С часто сталкиваются с ситуацией, когда в типовую конфигурацию (например, «1С:ERP», «1С:Комплексная автоматизация» или «1С:Управление торговлей») нужно внести минимальные изменения. Допустим, мы добавили одну подписку на событие и написали пару процедур в новом общем модуле. Сами изменения занимают от силы несколько килобайт кода. Однако при попытке обновить рабочую базу по старинке нам приходится выгружать полный файл конфигурации (*.cf), размер которого в современных конфигурациях может превышать 1–1.5 ГБ.

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

Способ 1. Использование расширений конфигурации (современный стандарт)

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

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

Разберем по шагам, как перенести доработки в расширение:

  1. Создадим новое расширение в конфигураторе (Конфигурация — Расширения конфигурации — Добавить). Зададим ему назначение Адаптация или Дополнение.
  2. Добавим в расширение собственный общий модуль. Для этого в дереве метаданных расширения перейдем в ветку Общие модули и нажмем Добавить. Назовем его, например, _Демо_ОбщийМодульРасширения.
  3. В созданном модуле напишем процедуру-обработчик события. Код может выглядеть следующим образом:

Процедура _Демо_ПриЗаписиДокумента(Источник, Отказ, Замещение) Экспорт
    // Наша кастомная логика при записи документа
    ЗаписьЖурналаРегистрации("СобытияРасширения", УровеньЖурналаРегистрации.Информация, , Источник.Ссылка, "Документ успешно обработан расширением!");
КонецПроцедуры
  1. Добавим объект-источник из основной конфигурации в расширение. Например, если нам нужно обрабатывать событие документа РеализацияТоваровУслуг, найдем его в основной конфигурации, нажмем правой кнопкой мыши и выберем Добавить в расширение.
  2. В дереве расширения перейдем в ветку Подписки на события и добавим новую подписку. В свойствах подписки укажем:
    • Источник: Выберем заимствованный документ ДокументСсылка.РеализацияТоваровУслуг.
    • Событие: Выберем нужное событие (например, ПриЗаписи).
    • Обработчик: Укажем наш экспортный метод из расширения _Демо_ОбщийМодульРасширения._Демо_ПриЗаписиДокумента.

Выгруженный файл расширения (*.cfe) будет весить всего несколько десятков килобайт. Его применение на рабочей базе происходит мгновенно и, что самое главное, в большинстве случаев без монопольного доступа и перезапуска пользователей!

Способ 2. Лайфхак с созданием «облегченного» CF-файла

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

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

Выполним следующие шаги:

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

Полученный файл *.cf будет иметь микроскопический вес (около 100-200 КБ вместо 1 ГБ), поскольку он не содержит метаданных типовой конфигурации. На рабочей базе мы просто запускаем стандартное сравнение-объединение с этим файлом, отмечаем новые объекты и безопасно накатываем обновление.

Способ 3. Использование механизма поставок и создание файлов обновлений (CFU)

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

Для того чтобы иметь возможность собирать файлы обновлений, разработчику необходимо настроить механизм поддержки:

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

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

Способ 4. Хранилище конфигурации 1С

Если у вас есть прямой сетевой доступ к рабочей базе (или возможность организовать его через TCP/HTTP), лучшим инструментом для доставки изменений будет использование штатного Хранилища конфигурации 1С.

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

Способ 5. Современный DevOps-подход (1С:EDT и Git)

В современной индустрии разработки на платформе «1С:Предприятие» все чаще отказываются от ручной выгрузки файлов конфигурации и переходят на использование **1С:EDT (Enterprise Development Tools)**.

В отличие от классического конфигуратора, проект в EDT хранится в виде набора текстовых XML-файлов. Каждый объект метаданных (справочник, документ, общий модуль) — это отдельный файл или папка в репозитории Git.

При использовании EDT и настроенных сценариев CI/CD (например, с использованием инструментов автоматизации OneScript) процесс обновления базы выглядит следующим образом:

Резюме и рекомендации

Выбор оптимального метода зависит от условий вашей задачи:

← На главную