Командная разработка в 1С 8.3 через хранилище: от создания до разбора блокировок
Содержание
Хранилище конфигурации 1С — это отдельная база версий, в которой несколько разработчиков меняют одну конфигурацию по очереди: объект сначала захватывают, правят у себя и помещают обратно с комментарием. Настраивается оно в Конфигураторе через меню Конфигурация → Хранилище конфигурации: создать хранилище, подключить к нему рабочие базы, завести пользователей.
Типичная ситуация: двое программистов дорабатывают одну Бухгалтерию в своих копиях базы, а потом полдня сводят изменения «Сравнением и объединением» и теряют чужие правки модуля. Хранилище такую ситуацию исключает: один и тот же объект в каждый момент правит только один человек, а любая версия конфигурации доступна в истории.
Как устроено хранилище конфигурации
Хранилище хранит только конфигурацию: метаданные, модули, формы, макеты. Данных информационной базы — документов, справочников, остатков — в нём нет. Поэтому разработчики работают каждый в своей базе, а общей у них остаётся только версия кода.
Физически хранилище — это каталог с файлом 1cv8ddb.1CD и служебными папками. Доступ к нему бывает трёх видов:
| Способ | Адрес в окне подключения | Когда подходит |
|---|---|---|
| 📁 Файловый | \\server\repo\buh или D:\Repo\Buh | Небольшая команда в одной локальной сети |
| 🔌 Сервер хранилища (TCP) | tcp://server:1542/buh | Команда от 3–4 человек, нужна скорость и надёжность |
| 🌐 Через веб-сервер (HTTP) | http://server/repo/repository.1ccr | Разработчики работают удалённо, без VPN к файловому ресурсу |
Файловый вариант проще всего, но при обрыве сети в момент помещения изменений файл хранилища можно повредить. Сервер хранилища (crserver) работает как служба, сам обслуживает обращения и переносит сбои сети заметно лучше.
Захват, помещение, получение
Вся работа строится на трёх операциях:
- 🔒 Захват — объект помечается как ваш. Остальные видят его заблокированным и править не могут.
- 📤 Помещение — ваши изменения уходят в хранилище, создаётся новая версия с номером и комментарием.
- 📥 Получение — вы забираете в свою конфигурацию то, что поместили коллеги.
Пока объект не захвачен, в подключённой базе он доступен только для просмотра. Это главное отличие от обычной работы в Конфигураторе, к которому новички привыкают дольше всего.
Номер версии в хранилище растёт с каждым помещением. По нему удобно ссылаться в задачах: «исправлено в версии 214».
Создание хранилища и подключение рабочих баз
Хранилище создают из базы, конфигурация которой станет первой версией. Обычно это эталонная копия рабочей базы с актуальным релизом.
Шаг 1. Создать хранилище
- Откройте эталонную базу в режиме Конфигуратора.
- Выберите
Конфигурация → Хранилище конфигурации → Создать хранилище…. - Укажите каталог (для файлового варианта — пустую папку на общем ресурсе) или адрес сервера хранилища.
- Задайте пользователя-администратора хранилища и пароль.
- Подтвердите создание. Конфигурация базы станет версией 1, а сама база — подключённой к хранилищу.
Пользователи хранилища не связаны с пользователями информационной базы. Это отдельный список, его ведёт администратор хранилища через Конфигурация → Хранилище конфигурации → Администрирование.
Шаг 2. Завести пользователей и права
Для каждого разработчика создайте своего пользователя. Общий логин на всех лишает смысла историю: по ней уже не понять, кто что поместил.
Права выдаются по минимуму:
- ✏️ захват объектов — всем, кто пишет код;
- 🗂 изменение состава версий (метки, комментарии) — ведущему разработчику;
- 🛡 административные функции — одному-двум людям, они же снимают чужие захваты.
Шаг 3. Подключить базу разработчика
- В своей базе откройте Конфигуратор.
- Выберите
Конфигурация → Хранилище конфигурации → Подключиться к хранилищу…. - Введите адрес хранилища, свой логин и пароль.
- Программа предложит заменить конфигурацию базы версией из хранилища — согласитесь.
При подключении конфигурация вашей базы будет заменена конфигурацией из хранилища. Несохранённые доработки в этой базе пропадут. Если они нужны, сначала выгрузите конфигурацию в файл .cf через Конфигурация → Сохранить конфигурацию в файл.
После подключения откроется окно хранилища со списком объектов. Захваченные объекты в нём отмечены значком, у вас и у коллег он разный.
Сервер хранилища как служба
Для TCP-доступа на сервере устанавливают компонент «Сервер хранилища конфигураций» из дистрибутива сервера 1С:Предприятия и регистрируют службу. Типовой порт — 1542. Пример регистрации:
cd "C:\Program Files\1cv8\8.3.24.1548\bin"
crserver.exe -instsrvc -usr .\USR1CV8 -pwd Пароль -port 1542 -d "D:\Repo"
crserver.exe -start
Каталог из параметра -d — корневой: в нём лежат папки отдельных хранилищ, а в адресе подключения после порта указывается имя такой папки.
Версия сервера хранилища должна совпадать с версией платформы разработчиков. После обновления платформы на рабочих местах обновите и crserver, иначе подключение не установится.
Хранилище или сравнение-объединение: что выбрать
Обе технологии решают задачу «свести изменения нескольких людей», но по-разному.
| Признак | Хранилище конфигурации | Сравнение и объединение (синхронизация) |
|---|---|---|
| Как избегает конфликтов | Блокирует объект захватом | Сводит различия постфактум |
| Параллельная правка одного модуля | Невозможна | Возможна, но потом ручной разбор |
| История изменений | Полная, по версиям и авторам | Нет, только текущие файлы .cf |
| Порог входа | Нужен общий ресурс или сервер | Только файлы конфигурации |
| Когда удобнее | Постоянная команда, общий проект | Разовый перенос доработок, обновление типовой |
На практике их сочетают. Хранилище ведёт текущую разработку, а «Сравнение и объединение» нужно для обновления типовой конфигурации на новый релиз и для переноса доработок между независимыми базами.
Есть и третий путь — 1С:Enterprise Development Tools с Git. Он даёт ветки и параллельную работу над одним модулем, но требует перестроить процесс команды. Для небольших доработок типовых конфигураций хранилище в Конфигураторе остаётся самым быстрым стартом.
Ежедневная работа: от захвата до обновления рабочей базы
Захват объектов
В окне хранилища выделите объект и выберите команду «Захватить в хранилище» (через контекстное меню). В диалоге захвата есть флажок рекурсивного захвата — он захватывает объект вместе с подчинёнными: формами, макетами, командами.
Захватывайте только то, что действительно правите. Захват целого подсистемного дерева «на всякий случай» на неделю блокирует коллег.
Помещение изменений
- В окне хранилища выделите изменённые объекты.
- Выберите «Поместить в хранилище».
- Напишите комментарий: что сделано и номер задачи.
- Решите, снимать ли захват. Флажок «Оставить объекты захваченными» нужен, если работа не закончена.
Перед помещением обязательно проверьте синтаксис модулей (Конфигурация → Проверка конфигурации или хотя бы проверка модуля по F7 в редакторе). Поместив ошибку, вы сломаете сборку всем, кто получит версию после вас.
Получение изменений коллег
Команда Конфигурация → Хранилище конфигурации → Обновить конфигурацию из хранилища забирает последнюю версию целиком. После неё выполните Обновить конфигурацию базы данных (F7), чтобы изменения применились к структуре.
Как изменения попадают в рабочую базу
Рабочую базу пользователей к хранилищу обычно не подключают. Схема другая:
- В эталонной базе, подключённой к хранилищу, получают нужную версию.
- Выгружают конфигурацию в
.cf. - В рабочей базе загружают её или переносят через сравнение-объединение в нерабочее время.
Обновление структуры рабочей базы требует монопольного доступа: сеансы пользователей придётся завершить. Планируйте выкладку вечером или на выходных и сделайте резервную копию перед ней.
История версий, метки и откат
История открывается командой Конфигурация → Хранилище конфигурации → История хранилища. В списке видно номер версии, дату, автора и комментарий.
Что можно сделать с версией:
- 🔍 Открыть и посмотреть состав изменённых объектов;
- ⚖️ Сравнить с текущей конфигурацией или с другой версией, чтобы увидеть разницу в модулях;
- 💾 Сохранить в файл — получить
.cfименно этой версии; - 🏷 Установить метку — например, «Выложено в рабочую 15.10». По меткам легко найти версии, которые реально ушли пользователям.
История для отдельного объекта доступна из контекстного меню объекта в окне хранилища. Так быстрее найти, кто и когда поменял, например, модуль проведения документа.
Как откатить неудачное изменение
Прямого «удаления версии» в обычной работе нет, и это правильно: история не должна переписываться. Откат делают новой версией:
- Сохраните нужную старую версию в файл или сравните с ней текущую конфигурацию.
- Захватите испорченные объекты.
- Перенесите в них содержимое из старой версии (через сравнение и объединение с файлом).
- Поместите в хранилище с комментарием «Откат изменений версии N».
Так в истории остаётся и ошибка, и её исправление — через месяц это пригодится при разборе.
Блокировки и другие ошибки хранилища
Большая часть обращений связана не с поломкой, а с захватами и расхождением версий.
Снятие чужого захвата
Администратор хранилища может отменить захват любого пользователя. Делать это стоит только после разговора с владельцем захвата: его изменения в локальной базе не исчезнут, но поместить их напрямую он уже не сможет. Ему придётся снова захватить объект и перенести свою версию вручную.
Повреждение файла хранилища
Если при работе с файловым хранилищем появляются ошибки чтения файла 1cv8ddb.1CD, остановите работу всех разработчиков. Восстановление начинайте с копии каталога, а не с рабочего экземпляра. Для файловой базы хранилища применяют утилиту проверки физической целостности chdbfl.exe из каталога bin платформы — запускать её только на копии.
Резервное копирование каталога хранилища настраивают с первого дня. Копию снимают, когда никто не помещает изменения, например ночью. Без копии повреждённый файл означает потерю всей истории.
Правила, которые сберегают время команды
Хранилище работает хорошо, когда у команды есть договорённости. Вот набор, который стоит закрепить письменно:
- 📝 Комментарий к каждому помещению. Номер задачи и одна фраза, что изменено. Пустой комментарий через месяц бесполезен.
- ⏱ Короткие захваты. Поместили — сняли. Объект, захваченный дольше пары дней, должен иметь причину.
- 🧩 Маленькие порции. Одна задача — одно помещение. Так проще найти и откатить ошибку.
- ✅ Проверка перед помещением. Синтаксис и запуск в режиме Предприятия на своей базе.
- 🧱 Общие модули захватывать аккуратно. Модуль, который нужен всем, лучше не держать: внесите правку и сразу поместите.
- 🏷 Метки на выкладках. Каждая выкладка в рабочую базу — метка с датой.
- 🔐 Свой логин у каждого. Иначе история не отвечает на вопрос «кто».
Расширения и хранилище
Расширения конфигурации тоже можно подключить к хранилищу — у каждого расширения оно своё. Подключение делается из окна расширений в Конфигураторе. Для доработок типовых конфигураций это удобная связка: основная конфигурация остаётся на поддержке без изменений, а вся разработка команды идёт в расширении под контролем версий.
Обновление типовой конфигурации
Обновлять релиз удобнее одному человеку. Он захватывает корень конфигурации (это блокирует всю конфигурацию), выполняет обновление, проверяет результат и помещает его одной версией с комментарием «Обновление до релиза …». Остальным на это время стоит поместить свои изменения и не захватывать объекты.
Частые вопросы
Можно ли работать с хранилищем без сервера 1С?
Сколько человек может работать с одним хранилищем?
Хранит ли хранилище данные базы?
Можно ли отключить базу от хранилища?
Отключиться от хранилища. Конфигурация базы сохранится в текущем виде, а объекты станут доступны для правки без захвата.