Как устроена командная разработка в 1С через хранилище и захват объектов
Содержание
Хранилище конфигурации 1С — это встроенная в платформу система версий для метаданных и кода. Оно хранит все версии конфигурации и следит, кто из разработчиков какой объект сейчас редактирует. Работает по принципу «захватил — изменил — поместил»: пока объект захвачен одним человеком, остальные видят его только на чтение.
Каждый разработчик держит свою базу, подключённую к общему хранилищу. Изменения он забирает командой «Получить», а свои отдаёт командой «Поместить» с комментарием. Пользовательские данные — документы, справочники, остатки — в хранилище не попадают, только конфигурация.
Что такое хранилище конфигурации и какие задачи оно решает
Без хранилища двум программистам приходится править одну базу по очереди или сливать изменения вручную через сравнение .cf-файлов. С ним каждый работает в своей копии, а общая конфигурация собирается из помещённых версий.
Задачи, которые хранилище закрывает:
- 👥 Параллельная работа. Пять человек дорабатывают одну конфигурацию, не мешая друг другу.
- 🔒 Защита от затирания. Нельзя изменить объект, который захватил коллега.
- 🕓 История. Видно, кто, когда и с каким комментарием поменял модуль или форму.
- ↩️ Откат. Любую прошлую версию можно получить, сравнить с текущей или выгрузить в файл.
- 🏷️ Метки. Версию, ушедшую в рабочую базу, помечают меткой, например «Релиз 2.4».
Хранилище нужно и одиночке. Если вы дорабатываете типовую БП 3.0 под клиента, история версий сэкономит часы, когда через полгода спросят, зачем поменяли проведение реализации.
Расширения конфигурации тоже можно подключать к хранилищу. У каждого расширения своё хранилище, отдельное от основной конфигурации.
Как устроено хранилище конфигураций: архитектура и принцип работы
Из чего оно состоит
Физически хранилище — это каталог на диске. Главный файл — 1cv8ddb.1CD: база в формате файловой СУБД 1С, где лежат версии, пользователи и захваты. Рядом платформа держит служебные каталоги. Открывать и править эти файлы вручную нельзя — только через Конфигуратор.
Общая схема выглядит так:
| Звено | Где находится | Что хранит |
|---|---|---|
| Хранилище | Каталог на сервере или в сетевой папке | Все версии, пользователей, захваты, метки |
| Конфигурация базы разработчика | Его информационная база | Рабочую копию + отметки, какие объекты захвачены им |
| Конфигурация базы данных | Та же база | То, с чем реально работают пользователи этой базы |
Последние две строки путают чаще всего. Помещение в хранилище не обновляет конфигурацию базы данных. После «Получить» разработчику всё равно нужно Конфигурация → Обновить конфигурацию базы данных (F7), чтобы проверить изменения в режиме 1С:Предприятие.
Три способа доступа
| Способ | Адрес при подключении | Для кого |
|---|---|---|
| Файловый | \\srv\repo\buh или D:\Repo\buh | 1–2 разработчика в одной сети |
| Сервер хранилища | tcp://srv:1542/buh | Команда, удалённая работа через VPN |
| Через веб-сервер | http://srv/repo/repo.1ccr | Доступ через интернет по HTTP/HTTPS |
Сервер хранилища — это служба crserver, которую ставит дистрибутив платформы, если отметить компонент «Сервер хранилища конфигураций 1С:Предприятия». Порт по умолчанию — 1542. Файл хранилища тогда читает только служба, а клиенты обмениваются с ней короткими сообщениями, а не гоняют по сети куски файла.
Версия crserver должна совпадать с версией платформы у разработчиков. Обновили платформу на рабочих местах — обновляйте и службу сервера хранилища.
Жизненный цикл изменения
- Разработчик выделяет объект в дереве и выполняет «Захватить в хранилище». Рядом с объектом появляется отметка захвата.
- Правит модуль, форму или реквизиты в своей базе.
- Выполняет «Поместить в хранилище», пишет комментарий. Платформа создаёт новую версию с номером на единицу больше.
- Коллеги выполняют «Получить из хранилища» или «Обновить конфигурацию из хранилища » и видят изменения у себя.
При захвате платформа предлагает получить объект из хранилища. Не отказывайтесь: иначе вы начнёте правку со старой копии и при помещении затрёте чужие изменения.
История версий и метки
Историю открывают через Конфигурация → Хранилище конфигурации → История хранилища…. В списке видно номер версии, дату, автора и комментарий. Отбором можно оставить версии одного разработчика или только версии, где менялся нужный объект.
Что можно сделать с любой версией из истории:
- 🔍 открыть состав изменений — какие объекты вошли в версию;
- ⚖️ сравнить её с текущей конфигурацией или с другой версией;
- 💾 сохранить конфигурацию
этой версии в
.cf-файл; - 🏷️ поставить метку с понятным текстом.
Метка удобна для связки с выпусками. Например, версия 312 получила метку «Выпуск 2.4 — в работе с 14.03». Когда рабочая база начнёт вести себя странно, вы точно знаете, с какой версией сравнивать.
Чем хранилище 1С отличается от Git и других систем контроля версий
Главное отличие — модель блокировок. Git оптимистичен: правят все, конфликты сливают потом. Хранилище пессимистично: правит только тот, кто захватил.
| Критерий | Хранилище 1С | Git |
|---|---|---|
| Модель | Захват объекта, остальные ждут | Правят все, слияние при push/merge |
| Единица учёта | Объект метаданных (справочник, общий модуль, форма) | Файл, строка |
| Ветки | Нет, одна линия версий | Ветки и слияния — основа работы |
| Работа без сети | Нельзя захватить и поместить | Коммиты локально, отправка потом |
| Где живёт | Внутри Конфигуратора | Любой редактор, CI, код-ревью |
| Порог входа | Минимальный, всё в меню | Выше, нужен навык работы с ветками |
Ветки в хранилище обычно имитируют отдельным хранилищем на каждую крупную доработку. Потом изменения переносят в основное через Конфигурация → Сравнить, объединить с конфигурацией из файла. Это работает, но вручную и медленно.
Из-за отсутствия веток и код-ревью многие команды ведут хранилище и Git параллельно. Хранилище остаётся источником правды для Конфигуратора, а Git — зеркалом для анализа кода и проверки качества.
Как начать работу с хранилищем конфигурации: настройка по шагам
Шаг 1. Создать хранилище
- Откройте эталонную базу в Конфигураторе. Ту, конфигурация которой станет первой версией.
Конфигурация → Хранилище конфигурации → Создать хранилище…- Укажите адрес: пустой каталог,
tcp://srv:1542/имяили HTTP-адрес публикации. - Задайте первого пользователя и пароль. Он получит административные права в хранилище.
После создания эта база сразу подключена к хранилищу, а все объекты помещены в версию 1.
Шаг 2. Завести пользователей
Конфигурация → Хранилище конфигурации → Администрирование → закладка пользователей. На каждого разработчика — отдельная учётная запись. Общий логин на троих убивает историю: не понять, кто что менял.
У пользователя хранилища три группы прав: захват объектов, изменение состава версий (например, установка меток) и административные функции. Администраторов держите одного-двух.
Шаг 3. Подключить базы разработчиков
- Каждый разработчик разворачивает себе копию базы
(из
.dtили пустую). Конфигурация → Хранилище конфигурации → Подключиться к хранилищу…- Вводит адрес, свой логин и пароль.
- Платформа предупредит, что конфигурация базы будет заменена версией из хранилища. Соглашаемся.
- Обновляет конфигурацию базы данных.
При подключении локальные несохранённые доработки в базе разработчика пропадут: конфигурацию заменит версия из хранилища. Если они нужны, выгрузите их перед подключением в .cf и перенесите после через сравнение-объединение.
Шаг 4. Договориться о правилах
Типичные сбои при работе с хранилищем конфигурации
Большинство проблем связаны с захватами, версиями платформы и сетью. Выберите симптом:
Ещё одна частая беда — гигантский рост хранилища. Каждая версия хранит изменённые объекты целиком, а обновление типовой конфигурации поставщика затрагивает тысячи объектов. После десятка обновлений БП или ЗУП хранилище легко вырастает до десятков гигабайт. Держите под него диск с запасом и не ставьте его на тот же диск, что базы SQL.
Резервные копии и восстановление хранилища
Хранилище — единственное место, где лежит история доработок. Потерять его — значит потерять историю, а иногда и сами доработки. Встроенного планировщика копий у хранилища нет, копии настраивают снаружи.
Как сделать копию
- Предупредите разработчиков: на время копирования не помещать изменения.
- Для сервера хранилища — остановите службу
crserver. Для файлового — убедитесь, что никто не выполняет операций. - Скопируйте каталог хранилища целиком, со всеми подкаталогами.
- Запустите службу обратно.
Копирование «на ходу» без остановки может поймать файл в момент записи. Такая копия откроется с ошибкой.
Дополнительная страховка через пакетный режим
Помимо копии каталога, полезно регулярно выгружать последнюю версию в .cf. Это не заменяет копию с историей, но спасает конфигурацию при повреждении файла:
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /F "D:\Bases\Dev" ^
/ConfigurationRepositoryF "tcp://srv:1542/buh" ^
/ConfigurationRepositoryN "backup" /ConfigurationRepositoryP "pass" ^
/ConfigurationRepositoryDumpCfg "E:\Backup\buh_last.cf" ^
/Out "E:\Backup\dump.log"
Номер платформы в пути замените на свой. Для служебной выгрузки заведите отдельного пользователя хранилища без права захвата.
Восстановление
- 🗂️ Каталог повреждён. Остановите службу, переложите каталог из копии, запустите службу. Разработчикам, которые помещали после момента копии, придётся поместить изменения заново.
- ↩️ Нужна старая версия. Откройте историю хранилища, выберите версию и сохраните её в
.cfили сравните с текущей. - 🧩 Нужно откатить один объект. В истории выберите версию, где объект был правильным, получите его, захватите и поместите как новую версию.
Перед восстановлением из копии сделайте копию текущего, пусть и битого, каталога. Иногда из него ещё удаётся достать последние версии.
Связь хранилища с Git, CI и внешними инструментами
Хранилище закрыто внутри Конфигуратора, но у платформы есть два моста наружу.
Пакетный режим Конфигуратора. Ключи /ConfigurationRepositoryF, /ConfigurationRepositoryN, /ConfigurationRepositoryP задают подключение, а дальше идут действия:
| Ключ | Что делает |
|---|---|
/ConfigurationRepositoryUpdateCfg | Обновляет конфигурацию базы из хранилища |
/ConfigurationRepositoryDumpCfg | Сохраняет версию хранилища в .cf |
/ConfigurationRepositoryReport | Формирует отчёт по истории версий |
/ConfigurationRepositoryBindCfg | Подключает базу к хранилищу |
/ConfigurationRepositoryUnbindCfg | Отключает базу от хранилища |
На этих ключах строят ночную сборку: тестовая база обновляется из хранилища, затем в ней запускаются автотесты, а результат уходит в чат команды.
Выгрузка в файлы. Конфигурация → Выгрузить конфигурацию в файлы раскладывает метаданные по XML-файлам, а модули — по .bsl. Эти файлы уже можно положить в Git.
На этом построен открытый инструмент gitsync на OneScript. Он проходит по версиям хранилища, выгружает каждую в файлы и делает коммит с автором и комментарием из хранилища. В итоге в Git появляется полная история, по которой работают анализаторы кода и код-ревью.
Если команда готова уйти от Конфигуратора совсем, следующий шаг — 1С:EDT. Там основа — проект в файлах и Git, а хранилище не используется.
Частые вопросы о хранилище конфигурации
Попадают ли в хранилище документы и справочники с данными?
Можно ли подключить к хранилищу рабочую базу?
.cf по метке, после проверки на тестовой базе.Сколько разработчиков выдержит файловое хранилище?
Как отключить базу от хранилища?
Конфигурация → Хранилище конфигурации → Отключиться от хранилища. Конфигурация в базе остаётся, пропадает только связь с хранилищем и захваты.