Сборка .cfu для своей конфигурации: от хранилища до установки у клиента
Содержание
Файл обновления CFU в 1С 8.3 создают в Конфигураторе: Конфигурация → Поставка конфигурации → Создать файлы поставки и обновления. В окне отмечают флажок создания файла обновления, указывают путь к новому .cfu и добавляют в список файлы .cf прошлых версий, от которых клиент сможет обновиться. Без этих старых .cf создать CFU не получится: файл обновления хранит разницу между версиями, а не всю конфигурацию.
Есть два способа выпустить новую версию. Полный файл поставки .cf подходит для новой установки и для баз, снятых с поддержки. Файл обновления .cfu легче, и клиент ставит его штатной командой обновления, сохраняя свои доработки на поддержке. Обычно выпускают оба файла сразу, одной командой.
Инструкция для платформы 8.3 и для разработчиков собственных или отраслевых конфигураций. Если вы обновляете типовую конфигурацию фирмы 1С, создавать CFU не нужно: его уже выпустил поставщик.
Что подготовить до сборки: сборочная база и архив поставок
Файл обновления собирают не в рабочей базе клиента, а на отдельной машине разработчика или на сборочном сервере. Нужны три вещи.
- 🖥️ Платформа. Конфигуратор той же версии, на которой ведётся разработка. Номер платформы у сборщика должен быть не ниже, чем у разработчиков, иначе конфигурация может не открыться.
- 🗄️ Сборочная база. Чистая файловая база, в которой лежит ровно та конфигурация, что уйдёт клиентам. Данные в ней не нужны.
- 📦 Архив поставок. Папка с файлами
.cfвсех выпущенных версий. Именно по ним Конфигуратор вычисляет разницу.
Удобная структура архива — по папке на версию:
D:\release\
1.0.1\1Cv8.cf
1.0.2\1Cv8.cf
1.0.3\1Cv8.cf
1.0.4\1Cv8.cf <- новая версия
1.0.4\1Cv8.cfu
Потерянный .cf прошлой версии восстановить нельзя. Клиенты на этой версии не получат CFU: им придётся ставить полный .cf через сравнение и объединение. Храните архив поставок отдельно от рабочего каталога и копируйте в резерв.
Отдельная сборочная машина нужна не всегда. Одному разработчику хватит отдельной файловой базы на своём компьютере. Команде из нескольких человек удобнее выделить машину или виртуалку: на ней одна платформа, одни пути, и сборка не зависит от того, что сейчас открыто у разработчиков.
Хранилище конфигурации: откуда берётся версия для релиза
Если над конфигурацией работают двое и больше, источником релиза служит хранилище. Сборочная база подключается к нему как обычный участник, но ничего не захватывает и не помещает. Перед сборкой она лишь получает актуальную версию.
Создание хранилища
- Откройте в Конфигураторе базу с исходной конфигурацией.
- Выберите
Конфигурация → Хранилище конфигурации → Создать хранилище. - Укажите каталог хранилища. Для работы по сети используют сервер хранилища
crserverиз состава платформы, адрес видаtcp://srv-build/myconf. - Задайте администратора хранилища и заведите пользователей, в том числе отдельного пользователя для сборки, например
build.
Подключение сборочной базы и метка релиза
- В сборочной базе выберите
Конфигурация → Хранилище конфигурации → Подключиться к хранилищу. - Войдите под пользователем
build. Конфигурация базы заменится содержимым хранилища. - Перед выпуском откройте историю хранилища и поставьте на нужную версию метку, например
Релиз 1.0.4.
Метка решает практическую задачу. Через полгода клиент пришлёт ошибку из версии 1.0.4, и вы за минуту восстановите эту версию из хранилища, а не будете искать её по датам.
Номер версии конфигурации меняйте отдельным помещением в хранилище с комментарием «Версия 1.0.4». Так в истории сразу видно, где проходит граница релиза.
Подготовка версии: номер, поставщик и настройка поставки
Конфигуратор сопоставляет файлы по имени конфигурации, поставщику и номеру версии. Ошибка в этих свойствах — частая причина того, что CFU у клиента «не видит» его базу.
Свойства корня конфигурации
Откройте свойства корня конфигурации в дереве объектов и проверьте:
| Свойство | Что указать | Зачем |
|---|---|---|
| Имя | Не меняется между версиями | По нему CFU узнаёт свою конфигурацию |
| Поставщик | Название вашей компании, одинаково во всех версиях | Смена поставщика ломает цепочку обновлений |
| Версия | Новый номер, например 1.0.4 | Номер должен быть больше, чем у прошлых версий |
Номер версии пишут в формате из четырёх чисел через точку, например 1.0.4.12. Типичная схема: первые два числа — редакция, третье — релиз, четвёртое — сборка. Главное, чтобы номер только рос и был понятен поддержке.
Настройка поставки
Команда Конфигурация → Поставка конфигурации → Настройка поставки задаёт, как объекты попадут к клиенту. Здесь, например, решают, поставлять ли модули с исходным текстом. Модули без исходного текста клиент не сможет дорабатывать. Учтите это, если по договору доработки на его стороне разрешены.
Настройку поставки достаточно сделать один раз: она хранится в конфигурации и переходит в следующие версии.
Проверка перед сборкой
Перед выпуском прогоните синтаксический контроль: Конфигурация → Проверка конфигурации. Отметьте проверку логической целостности, поиск некорректных ссылок и проверку модулей в режимах сервера и тонкого клиента
. Ошибки здесь лучше найти вам, чем клиенту после обновления.
Создание файла обновления CFU в Конфигураторе
Сборочная база получила версию из хранилища, номер версии поднят, проверка пройдена. Дальше собираем файлы.
Шаг 1. Откройте окно создания поставки
В сборочной базе выберите Конфигурация → Поставка конфигурации → Создать файлы поставки и обновления.
Шаг 2. Файл поставки
Отметьте создание файла поставки и укажите путь, например D:\release\1.0.4\1Cv8.cf. Этот .cf пригодится дважды: для новых клиентов и как основа для следующих CFU.
Шаг 3. Файл обновления
Отметьте создание файла обновления и укажите путь D:\release\1.0.4\1Cv8.cfu.
Шаг 4. Список версий, от которых обновляемся
В нижней части окна есть список дистрибутивов, для которых строится обновление. Кнопкой добавления выберите .cf прошлых версий: 1.0.2\1Cv8.cf, 1.0.3\1Cv8.cf. Номер версии Конфигуратор прочитает из файла сам.
Сколько версий включать — решение компромиссное:
| Вариант | Плюс | Минус |
|---|---|---|
| Только предыдущая версия | Маленький файл, быстрая сборка | Отставшие клиенты обновляются по цепочке |
| Две-три последние версии | Покрывает большинство клиентов | Файл растёт с каждой версией в списке |
| Все версии с начала | Обновление «одним прыжком» | Большой файл, долгая сборка |
Шаг 5. Запуск сборки
Нажмите «Выполнить». Сборка занимает от нескольких секунд до десятков минут: время растёт с размером конфигурации и числом версий в списке. По окончании проверьте, что в папке появились оба файла.
Как собрать cf и cfu из командной строки
Когда релизы выходят часто, ручная сборка надоедает и порождает ошибки: забыли добавить версию, указали не тот путь. Конфигуратор умеет собирать поставку в пакетном режиме ключом /CreateDistributionFiles.
Пример bat-файла для сборки версии 1.0.4:
@echo off
rem Путь к 1cv8.exe: подставьте свою версию платформы
set V8="C:\Program Files\1cv8\8.3.X.XXXX\bin\1cv8.exe"
set BASE=D:\build\base
set REL=D:\release
rem 1. Получить актуальную версию из хранилища
%V8% DESIGNER /F "%BASE%" /DisableStartupDialogs ^
/ConfigurationRepositoryF "tcp://srv-build/myconf" ^
/ConfigurationRepositoryN "build" /ConfigurationRepositoryP "secret" ^
/ConfigurationRepositoryUpdateCfg /Out "%REL%\log-update.txt"
rem 2. Собрать cf и cfu
%V8% DESIGNER /F "%BASE%" /DisableStartupDialogs ^
/CreateDistributionFiles -cffile "%REL%\1.0.4\1Cv8.cf" ^
-cfufile "%REL%\1.0.4\1Cv8.cfu" ^
-f "%REL%\1.0.2\1Cv8.cf" -f "%REL%\1.0.3\1Cv8.cf" ^
/Out "%REL%\log-build.txt"
Ключ -f повторяют столько раз, сколько прошлых версий включаете в обновление. Лог из /Out проверяйте после каждого запуска: при ошибке Конфигуратор пишет причину туда, а не на экран.
Не храните пароль хранилища в bat-файле, который лежит в общей папке. Передавайте его через переменную окружения сборочного сервера или храните скрипт там, куда есть доступ только у сборщика.
Такой скрипт легко повесить на планировщик Windows или на CI-систему. Тогда сборка по метке в хранилище превращается в одну кнопку.
Проверка файла обновления перед отправкой
Собранный CFU нельзя считать готовым, пока он не обновил хотя бы одну базу. Проверка состоит из двух частей: файл цел и файл работает.
Целостность файла
Посчитайте контрольную сумму и отправьте её клиенту вместе с файлом. На Windows:
certutil -hashfile D:\release\1.0.4\1Cv8.cfu SHA256
Клиент считает сумму у себя той же командой. Расхождение означает, что файл повредился при передаче, например архиватор или почта обрезали вложение.
Тестовое обновление
Для каждой версии из списка поднимите тестовую базу:
- Создайте пустую файловую базу .
- Загрузите в неё
.cfстарой версии черезКонфигурация → Загрузить конфигурацию из файлаи обновите конфигурацию базы данных. - Лучше взять копию реальной клиентской базы этой версии: обработчики обновления на живых данных ломаются чаще, чем на пустых.
- Примените новый
.cfuи запустите базу в режиме 1С:Предприятие. - Проверьте, что отработали обработчики обновления и открываются ключевые документы и отчёты.
Отдельно проверьте базу с доработками клиента. Включите в тестовой базе возможность изменения на поддержке, измените пару объектов и обновитесь. Так вы увидите окно сравнения и объединения глазами клиента.
Как клиенту установить обновление из CFU
Клиенту нужно передать файл .cfu, список изменений и контрольную сумму. Если клиентов много, удобнее собрать комплект поставки: команда Конфигурация → Поставка конфигурации → Создать комплект поставки готовит установщик, который раскладывает файлы в каталог шаблонов. Тогда Конфигуратор клиента сам найдёт обновление в этом каталоге.
Порядок установки у клиента
- Сделать резервную копию базы
: выгрузить
.dtили копию средствами СУБД. - Открыть базу в Конфигураторе.
- Выбрать
Конфигурация → Поддержка → Обновить конфигурацию. - Указать «Выбор файла обновления» и путь к
.cfu, либо найти обновление в каталоге шаблонов. - Если конфигурация клиента изменена на поддержке, разобрать окно сравнения и объединения.
- Выполнить
Конфигурация → Обновить конфигурацию базы данных. - Запустить 1С:Предприятие, чтобы отработали обработчики обновления.
Если обновление меняет структуру данных, для шага 6 нужен монопольный режим. Предупредите пользователей заранее и ставьте обновление в нерабочее время: их сеансы придётся завершить.
Если CFU не применяется
Конфигурация → Сравнить, объединить с конфигурацией из файла, затем при желании снова включите поддержку.