Сборка .cfu для своей конфигурации: от хранилища до установки у клиента

· 9 мин

Содержание

Файл обновления 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 через сравнение и объединение. Храните архив поставок отдельно от рабочего каталога и копируйте в резерв.

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

Хранилище конфигурации: откуда берётся версия для релиза

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

Создание хранилища

  1. Откройте в Конфигураторе базу с исходной конфигурацией.
  2. Выберите Конфигурация → Хранилище конфигурации → Создать хранилище.
  3. Укажите каталог хранилища. Для работы по сети используют сервер хранилища crserver из состава платформы, адрес вида tcp://srv-build/myconf.
  4. Задайте администратора хранилища и заведите пользователей, в том числе отдельного пользователя для сборки, например build.

Подключение сборочной базы и метка релиза

  1. В сборочной базе выберите Конфигурация → Хранилище конфигурации → Подключиться к хранилищу.
  2. Войдите под пользователем build. Конфигурация базы заменится содержимым хранилища.
  3. Перед выпуском откройте историю хранилища и поставьте на нужную версию метку, например Релиз 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

Клиент считает сумму у себя той же командой. Расхождение означает, что файл повредился при передаче, например архиватор или почта обрезали вложение.

Тестовое обновление

Для каждой версии из списка поднимите тестовую базу:

  1. Создайте пустую файловую базу .
  2. Загрузите в неё .cf старой версии через Конфигурация → Загрузить конфигурацию из файла и обновите конфигурацию базы данных.
  3. Лучше взять копию реальной клиентской базы этой версии: обработчики обновления на живых данных ломаются чаще, чем на пустых.
  4. Примените новый .cfu и запустите базу в режиме 1С:Предприятие.
  5. Проверьте, что отработали обработчики обновления и открываются ключевые документы и отчёты.

Отдельно проверьте базу с доработками клиента. Включите в тестовой базе возможность изменения на поддержке, измените пару объектов и обновитесь. Так вы увидите окно сравнения и объединения глазами клиента.

Перед отправкой CFU клиентам
Выполнено: 0 / 8

Как клиенту установить обновление из CFU

Клиенту нужно передать файл .cfu, список изменений и контрольную сумму. Если клиентов много, удобнее собрать комплект поставки: команда Конфигурация → Поставка конфигурации → Создать комплект поставки готовит установщик, который раскладывает файлы в каталог шаблонов. Тогда Конфигуратор клиента сам найдёт обновление в этом каталоге.

Порядок установки у клиента

  1. Сделать резервную копию базы : выгрузить .dt или копию средствами СУБД.
  2. Открыть базу в Конфигураторе.
  3. Выбрать Конфигурация → Поддержка → Обновить конфигурацию.
  4. Указать «Выбор файла обновления» и путь к .cfu, либо найти обновление в каталоге шаблонов.
  5. Если конфигурация клиента изменена на поддержке, разобрать окно сравнения и объединения.
  6. Выполнить Конфигурация → Обновить конфигурацию базы данных.
  7. Запустить 1С:Предприятие, чтобы отработали обработчики обновления.

Если обновление меняет структуру данных, для шага 6 нужен монопольный режим. Предупредите пользователей заранее и ставьте обновление в нерабочее время: их сеансы придётся завершить.

Если CFU не применяется

Диагностика: выберите симптом

Частые вопросы

Можно ли создать CFU без файла .cf предыдущей версии?
Нет. Файл обновления строится как разница с прошлой поставкой. Если старого .cf нет, восстановите эту версию из хранилища по метке или дате, выгрузите её в .cf и только потом собирайте CFU.
Чем CFU отличается от .cf?
Файл .cf содержит всю конфигурацию и годится для новой установки или сравнения с любой базой. Файл .cfu содержит только изменения от конкретных версий и применяется к базам на поддержке вашей конфигурации.
Почему CFU весит почти как полный .cf?
Так бывает, если в список включено много версий или в релизе крупные изменения: новые макеты, картинки, переписанные модули. Сократите список до двух-трёх последних версий, а отставших клиентов обновляйте по цепочке.
Можно ли собрать CFU для расширения конфигурации?
Нет, механизм поставки работает для основной конфигурации. Расширение распространяют файлом .cfe, и у клиента его загружают заново в окне управления расширениями.
Обязательно ли хранилище, чтобы выпускать обновления?
Нет. Одиночный разработчик может собирать CFU прямо из своей базы. Хранилище нужно, когда разработчиков несколько и нужна история версий с метками релизов.