Файл обновления .cfu для своей конфигурации: сборка, проверка, выпуск
Содержание
Обновление конфигурации
1С создают в Конфигураторе командой Конфигурация → Поставка конфигурации → Создать файлы поставки и обновления. На выходе получается файл .cfu, который клиент загружает через Конфигурация → Поддержка → Обновить конфигурацию. Для сборки нужны два условия: новая версия в свойствах конфигурации и сохранённые .cf всех прошлых выпусков.
Частое заблуждение — считать, что обновление это просто выгрузка .cf новой версии. Файл .cf у клиента заменит конфигурацию целиком и может снять её с поддержки. А .cfu знает, с каких версий он обновляет, и аккуратно сливает изменения поставщика с доработками клиента.
Что подготовить до создания обновления конфигурации
Обновление собирают в базе разработчика — той, где ведётся конфигурация-поставщик. Перед сборкой проверьте пять вещей.
- 🔢 Номер версии. Откройте свойства корня конфигурации (правый клик по корню дерева →
Свойства) и увеличьте полеВерсия. Формат обычно четырёхчастный:1.0.3.7. Если номер не изменить, клиент получит «обновление» на ту же версию и платформа его не примет. - 🏷️ Поставщик и имя. Поля
ПоставщикиИмяв тех же свойствах должны совпадать с прошлыми выпусками. Сменили имя — для клиентских баз это уже другая конфигурация. - 🗂️ Архив прошлых поставок. Нужны файлы
.cfкаждой версии, с которой клиенты будут обновляться. Без них.cfuсобрать не получится: платформе не с чем сравнивать. - 🔍 Список изменений. Сравните текущую конфигурацию с прошлой поставкой:
Конфигурация → Сравнить конфигурации, слева — файл.cfпрошлой версии, справа — основная конфигурация. Отчёт о сравнении пригодится для документации и тестов. - 💾 Копия базы разработки.
Администрирование → Выгрузить информационную базув файл.dt. Это страховка на случай, если при настройке поставки что-то пойдёт не так.
Заведите отдельную папку под выпуски: Releases\1.0.3.7\1Cv8.cf, Releases\1.0.3.7\1Cv8.cfu, рядом текстовый файл с изменениями. Через год такой архив сэкономит вам поиски нужного .cf.
Ручная сборка или пакетный режим
Обновление можно собрать мышкой в Конфигураторе или командой из скрипта. Результат одинаковый, разница — в повторяемости.
| Способ | Когда подходит | Риски |
|---|---|---|
| Конфигуратор, вручную | Редкие выпуски, один разработчик | Забыть поднять версию или добавить старую поставку |
Пакетный режим 1cv8 DESIGNER | Регулярные выпуски, несколько клиентов | Ошибка в пути к файлу видна только в логе |
| Сборочный сервер (Jenkins, GitLab CI) | Команда, хранилище, автотесты | Нужна настройка и отдельная лицензия под агент сборки |
Начинать стоит с ручной сборки. Когда процедура станет привычной — переносите её в скрипт без изменений.
Как создать обновление конфигурации в Конфигураторе
Ниже — полный цикл для конфигурации собственной разработки на платформе 8.3.
Шаг 1. Настройка поставки
Откройте Конфигурация → Поставка конфигурации → Настройка поставки. Здесь для объектов задают правила поставки:
- ✅ Изменения разрешены — клиент может дорабатывать объект без снятия с поддержки;
- ⚠️ Изменения не рекомендуются — доработать можно, но клиент получит предупреждение;
- ⛔ Изменения запрещены — объект закрыт для правки у клиента.
Настройка делается один раз и потом только дополняется для новых объектов. Слишком жёсткие запреты заставят клиентов снимать конфигурацию с поддержки — после этого ваши .cfu им уже не подойдут.
Шаг 2. Создание файлов поставки и обновления
- Сохраните конфигурацию и запустите
Конфигурация → Проверка конфигурации. Ошибки синтаксиса лучше поймать сейчас, а не у клиента после установки. - Откройте
Конфигурация → Поставка конфигурации → Создать файлы поставки и обновления. - Отметьте флажок создания файла поставки и укажите путь для
.cfновой версии. Этот файл пойдёт в архив и станет базой для следующего обновления. - Отметьте флажок создания файла обновления и укажите путь для
.cfu. - В списке поставок, для которых создаётся обновление, добавьте
.cfвсех прошлых версий, с которых клиент может прийти. Например,1.0.3.5и1.0.3.6. - Нажмите
Выполнитьи дождитесь сообщения о завершении.
Если в списке нет ни одной прошлой поставки, получится только .cf. Это нормальная ситуация для первого выпуска.
После сборки откройте папку и проверьте, что оба файла на месте и у .cfu ненулевой размер. Скопируйте .cf в архив выпусков сразу — именно его вы добавите в список при сборке следующей версии.
Шаг 3. Сколько прошлых версий включать
Каждая добавленная версия увеличивает размер .cfu. Практичный подход:
- включать последние 2–3 версии, с которых реально обновляются клиенты;
- для отстающих клиентов выпускать цепочку: сначала до промежуточной версии, потом до текущей;
- в описании выпуска прямо писать, с каких версий обновление ставится.
Шаг 4. Обработчики обновления данных
Сам .cfu меняет только структуру и код. Если в новой версии нужно заполнить новый реквизит, перенести данные или пересчитать регистр — нужен обработчик обновления.
В конфигурациях на Библиотеке стандартных подсистем (БСП) обработчики регистрируют в общем модуле обновления информационной базы, в процедуре ПриДобавленииОбработчиковОбновления:
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "1.0.3.7";
Обработчик.Процедура = "Справочники.Договоры.ЗаполнитьВидДоговора";
Обработчик.РежимВыполнения = "Монопольно";
КонецПроцедуры
Процедура выполнится один раз — при первом запуске базы после обновления до версии 1.0.3.7. Номер в Обработчик.Версия должен совпадать с номером в свойствах конфигурации, иначе обработчик не сработает или сработает не в той версии.
Монопольные обработчики задерживают вход пользователей после обновления. Долгие пересчёты по большим таблицам переводите в режим "Отложенно" — они выполнятся в фоне.
Без БСП механизма обработчиков нет. Тогда обновление данных пишут сами: сравнивают сохранённый в константе номер версии с Метаданные.Версия при запуске и выполняют нужные процедуры.
Проверка обновления на копии рабочей базы
Обновление тестируют не на базе разработки, а на копии реальной клиентской базы. Только там видны доработки клиента и реальный объём данных.
Порядок проверки:
- Выгрузите клиентскую базу в
.dtи загрузите её в новую пустую информационную базу. - Убедитесь, что версия в копии — одна из тех, что указаны в
.cfu. - Выполните
Конфигурация → Поддержка → Обновить конфигурацию, выберите файл.cfu. - Посмотрите окно сравнения и объединения. Объекты с двойными изменениями (ваш код и доработки клиента) требуют ручного решения.
- Примените изменения, затем
Конфигурация → Обновить конфигурацию базы данных. - Запустите базу в режиме «1С:Предприятие» и дождитесь выполнения обработчиков.
Замерьте время обновления структуры на копии. Если копия обновлялась 40 минут, в рабочей базе закладывайте не меньше часа на окно работ.
Фиксация версии и документирование изменений
Выпущенное обновление нельзя потом «тихо» поправить: у части клиентов оно уже стоит. Поэтому версию фиксируют сразу после сборки.
В хранилище конфигурации
Если разработка ведётся через хранилище, после сборки поставьте метку на версию хранилища с номером выпуска. Окно истории хранилища открывается из Конфигурация → Хранилище конфигурации → История хранилища. По метке потом легко поднять исходники любого выпуска.
Если хранилища нет, минимум — сохранить .cf поставки в архив выпусков. Это и есть ваша точка отката.
Описание выпуска
Короткий документ к каждому .cfu экономит часы поддержки. В нём должно быть:
- 📌 номер версии и дата выпуска;
- 📌 с каких версий ставится обновление;
- 📌 минимальный номер платформы, если вы меняли режим совместимости;
- 📌 список изменений по разделам: новое, исправлено, изменено поведение;
- 📌 какие объекты менялись — чтобы клиент с доработками знал, где ждать конфликтов;
- 📌 что делают обработчики обновления и сколько они могут идти.
Установка обновления в рабочую базу
Когда тест на копии пройден, переходите к рабочей базе. Делайте это в согласованное окно, когда пользователи не работают.
- Предупредите пользователей. Обновление структуры базы требует монопольного доступа — все сеансы будут завершены.
- Сделайте резервную копию рабочей базы — выгрузку в
.dtили бэкап средствами СУБД для клиент-серверного варианта. - Установите блокировку начала сеансов. В клиент-серверной базе — в свойствах информационной базы в консоли кластера; в конфигурациях на БСП — через раздел
Администрированиев режиме «1С:Предприятие». - Откройте Конфигуратор, выполните
Конфигурация → Поддержка → Обновить конфигурациюи выберите.cfu. - Разберите объединение так же, как на копии. Решения уже известны по тесту.
- Выполните
Обновить конфигурацию базы данныхи примите изменения структуры. - Запустите базу в режиме «1С:Предприятие» под администратором, дождитесь обработчиков.
- Снимите блокировку сеансов и проверьте пару типовых операций с пользователем.
Если клиент снял конфигурацию с поддержки, .cfu к ней не применить. Остаётся сравнение и объединение с файлом .cf новой версии через Конфигурация → Сравнить, объединить с конфигурацией из файла. Это дольше и требует внимательного разбора каждого объекта.
Автоматизация сборки обновлений
Сборку .cfu можно запускать без открытия Конфигуратора — ключом пакетного режима /CreateDistributionFiles. Пример .bat-файла для файловой базы разработки:
@echo off
set V8="C:\Program Files\1cv8\8.3.25.1374\bin\1cv8.exe"
set BASE=D:\Dev\MyConf
set OUT=D:\Releases\1.0.3.7
mkdir %OUT%
%V8% DESIGNER /F"%BASE%" /N"Admin" /P"" /DisableStartupDialogs ^
/CreateDistributionFiles -cffile "%OUT%\1Cv8.cf" ^
-cfufile "%OUT%\1Cv8.cfu" ^
-f "D:\Releases\1.0.3.5\1Cv8.cf" ^
-f "D:\Releases\1.0.3.6\1Cv8.cf" ^
/Out "%OUT%\build.log"
Что здесь происходит:
-cffile— путь для нового файла поставки;-cfufile— путь для файла обновления;- каждый
-fдобавляет прошлую поставку, с которой будет работать обновление; /Outпишет лог — проверяйте его после каждой сборки.
Путь к 1cv8.exe замените на свою версию платформы. Для клиент-серверной базы разработки вместо /F используют /S"сервер\база".
Следующие шаги автоматизации:
- 🤖 загрузка свежей версии из хранилища перед сборкой (
/ConfigurationRepositoryUpdateCfgс параметрами хранилища); - 🤖 тестовое обновление копии базы в пакетном режиме ключами
/UpdateCfgи/UpdateDBCfg; - 🤖 запуск автотестов (например, Vanessa Automation) на обновлённой копии;
- 🤖 выкладка
.cfuи описания в общую папку или на сервер обновлений.
В свойствах корня конфигурации есть поле адреса каталога обновлений. Если заполнить его, клиент сможет искать ваши обновления из окна обновления конфигурации, а не подкладывать файл вручную.
Ошибки при создании и установке обновления
Ещё две ошибки встречаются у разработчиков постоянно:
- ❌ Потерянный
.cfпрошлой версии. Восстановить его можно только выгрузкой конфигурации из клиентской базы той же версии, где она стоит без доработок. Дешевле хранить архив. - ❌ Смена режима совместимости без предупреждения. Клиенты на старой платформе не смогут обновиться. Минимальный номер платформы пишите в описании выпуска.