Разработчики 1С часто сталкиваются с ситуацией, когда в типовую конфигурацию (например, «1С:ERP», «1С:Комплексная автоматизация» или «1С:Управление торговлей») нужно внести минимальные изменения. Допустим, мы добавили одну подписку на событие и написали пару процедур в новом общем модуле. Сами изменения занимают от силы несколько килобайт кода. Однако при попытке обновить рабочую базу по старинке нам приходится выгружать полный файл конфигурации (*.cf), размер которого в современных конфигурациях может превышать 1–1.5 ГБ.
Передавать такие объемы данных на удаленные серверы клиентов через медленные каналы связи — настоящее мучение. Выясним причину этой проблемы и рассмотрим подробнее несколько эффективных способов решения, которые позволят передавать на рабочую базу только измененные объекты, экономя время и трафик.
Самым логичным и современным решением является полный отказ от изменения основной конфигурации в пользу расширений. Многие разработчики до сих пор считают, что расширения имеют серьезные ограничения, например, в них нельзя создавать подписки на события. Давайте развеем этот миф.
Начиная с версии платформы 1С:Предприятие 8.3.17, в расширениях реализован полноценный механизм создания собственных подписок на события, а также заимствования существующих объектов для использования в качестве источников события.
Разберем по шагам, как перенести доработки в расширение:
Адаптация или Дополнение.Общие модули и нажмем Добавить. Назовем его, например, _Демо_ОбщийМодульРасширения.
Процедура _Демо_ПриЗаписиДокумента(Источник, Отказ, Замещение) Экспорт
// Наша кастомная логика при записи документа
ЗаписьЖурналаРегистрации("СобытияРасширения", УровеньЖурналаРегистрации.Информация, , Источник.Ссылка, "Документ успешно обработан расширением!");
КонецПроцедуры
РеализацияТоваровУслуг, найдем его в основной конфигурации, нажмем правой кнопкой мыши и выберем Добавить в расширение.Подписки на события и добавим новую подписку. В свойствах подписки укажем:
ДокументСсылка.РеализацияТоваровУслуг.ПриЗаписи)._Демо_ОбщийМодульРасширения._Демо_ПриЗаписиДокумента.Выгруженный файл расширения (*.cfe) будет весить всего несколько десятков килобайт. Его применение на рабочей базе происходит мгновенно и, что самое главное, в большинстве случаев без монопольного доступа и перезапуска пользователей!
Если по какой-то причине использовать расширения нельзя (например, строгая политика безопасности компании или особенности архитектуры), можно прибегнуть к хитрости и собрать микро-CF, который будет содержать исключительно наши доработки. Проанализируем эту ситуацию подробнее.
Обычный файл конфигурации содержит в себе тяжелые макеты двоичных данных, драйверы торгового оборудования, классификаторы и веб-компоненты. Мы можем отсечь всё лишнее, создав пустую «базу-буфер».
Выполним следующие шаги:
cf-файл со всеми доработками.Выполнить. В нашу пустую базу перенесутся только описания этих двух объектов.Полученный файл *.cf будет иметь микроскопический вес (около 100-200 КБ вместо 1 ГБ), поскольку он не содержит метаданных типовой конфигурации. На рабочей базе мы просто запускаем стандартное сравнение-объединение с этим файлом, отмечаем новые объекты и безопасно накатываем обновление.
Идея создания файлов обновлений (*.cfu) — отличная альтернатива, когда необходимо регулярно обновлять множество распределенных баз. Посмотрим на пример реализации этого механизма через конфигурацию поставщика.
Для того чтобы иметь возможность собирать файлы обновлений, разработчику необходимо настроить механизм поддержки:
*.cfu), указав предыдущую версию конфигурации, для которой создается этот файл.Этот способ требует определенной административной дисциплины (ведение учета версий, аккуратное ведение конфигурации поставщика), однако на выходе мы получаем официальный файл обновления 1С минимального объема, который содержит только дельту изменений между двумя конкретными версиями.
Если у вас есть прямой сетевой доступ к рабочей базе (или возможность организовать его через TCP/HTTP), лучшим инструментом для доставки изменений будет использование штатного Хранилища конфигурации 1С.
При подключении рабочей базы к хранилищу конфигурации обновление происходит инкрементально. Платформа самостоятельно анализирует, какие объекты изменились в хранилище по сравнению с локальной конфигурацией базы, и скачивает только их. Передачи гигабайтного файла конфигурации при этом не происходит. Процедура обновления выглядит очень просто: в конфигураторе рабочей базы достаточно выбрать пункт меню Конфигурация — Хранилище конфигурации — Обновить конфигурацию из хранилища.
В современной индустрии разработки на платформе «1С:Предприятие» все чаще отказываются от ручной выгрузки файлов конфигурации и переходят на использование **1С:EDT (Enterprise Development Tools)**.
В отличие от классического конфигуратора, проект в EDT хранится в виде набора текстовых XML-файлов. Каждый объект метаданных (справочник, документ, общий модуль) — это отдельный файл или папка в репозитории Git.
При использовании EDT и настроенных сценариев CI/CD (например, с использованием инструментов автоматизации OneScript) процесс обновления базы выглядит следующим образом:
Выбор оптимального метода зависит от условий вашей задачи: