Как поднять crserver и наладить командную разработку в 1С
Содержание
Сервер хранилища конфигураций 1С — это служба crserver, которая отдаёт хранилище конфигурации разработчикам по сети через протокол tcp://, по умолчанию на порту 1542. Он нужен, когда над одной конфигурацией работают двое и больше: каждый захватывает свои объекты, а история версий, метки и права живут в одном месте.
Без сервера хранилище тоже работает — как папка на общем сетевом ресурсе. Но файловый доступ по SMB медленный, чувствителен к обрывам сети и плохо переносит одновременную работу пяти-десяти человек. Сервер снимает эти проблемы и даёт доступ к хранилищу из любой точки, где открыт один порт.
Как устроен сервер хранилища и чем он отличается от файлового варианта
Хранилище — это каталог с базой данных версий (основной файл 1cv8ddb.1CD) и служебными файлами. Конфигуратор умеет работать с ним двумя способами.
| Способ доступа | Строка подключения | Когда подходит |
|---|---|---|
| 📁 Файловый | \\srv-dev\repo\MainRepo | 1–2 разработчика в одной локальной сети |
| 🖧 Через сервер хранилища | tcp://srv-dev/MainRepo | Команда, удалённые разработчики, VPN |
| 🌐 Через веб-сервер | http://srv-dev/repo/repo.1ccr | Когда наружу можно открыть только HTTP/HTTPS |
При работе через сервер клиентский Конфигуратор не трогает файлы хранилища напрямую. Он отправляет запрос службе crserver, а та сама читает и пишет каталог. Отсюда три следствия:
- ✅ права на каталог нужны только учётной записи службы, а не каждому разработчику;
- ✅ по сети гоняются только нужные данные, а не страницы файла базы;
- ✅ обрыв связи у одного разработчика не портит файл хранилища.
Путь в строке tcp:// задаётся относительно корневого каталога сервера. Если служба запущена с каталогом D:\1C_Repo, то строка tcp://srv-dev/ERP_Dev ведёт в D:\1C_Repo\ERP_Dev. На одном сервере можно держать сколько угодно хранилищ — по папке на каждую конфигурацию или расширение.
Сервер хранилища не связан с кластером серверов 1С. Ему не нужен ragent, рабочие процессы и лицензия на сервер 1С:Предприятия. Это отдельная лёгкая служба, её можно поставить хоть на машину с файловыми базами.
Установка службы crserver и первичная настройка
Сервер хранилища ставится из того же дистрибутива платформы, что и клиент. Главное правило: версия сервера хранилища должна совпадать с версией платформы, из которой разработчики открывают Конфигуратор. Если в команде стоит 8.3.24.1467, то и crserver нужен из каталога этой же сборки.
Шаг 1. Установка компонента
- Запустите установщик платформы (
setup.exeиз дистрибутива для Windows). - На шаге выбора компонентов отметьте Сервер хранилища конфигураций 1С:Предприятия.
- Если нужна публикация через веб-сервер, отметьте также модули расширения веб-сервера.
- Завершите установку. Исполняемый файл окажется в
C:\Program Files\1cv8\<версия>\bin\crserver.exe.
Шаг 2. Каталог и учётная запись
Создайте корневой каталог для хранилищ, например D:\1C_Repo. Держите его на отдельном диске, не на системном: хранилища крупных конфигураций за пару лет вырастают до десятков гигабайт.
Для службы заведите отдельного локального или доменного пользователя (например, svc_1c_repo). Дайте ему полные права на D:\1C_Repo, и больше никому. Запускать службу от LocalSystem можно, но это лишние права на всей машине.
Шаг 3. Регистрация службы Windows
Самый прозрачный способ — создать службу командой sc из командной строки, запущенной от имени администратора:
sc create "1C:Enterprise 8.3 Configuration Repository Server" ^
binPath= "\"C:\Program Files\1cv8\8.3.24.1467\bin\crserver.exe\" -srvc -port 1542 -d \"D:\1C_Repo\"" ^
start= auto ^
obj= ".\svc_1c_repo" password= "ПарольСлужбы" ^
DisplayName= "Сервер хранилища 1С 8.3.24.1467 (порт 1542)"
sc start "1C:Enterprise 8.3 Configuration Repository Server"
Что значат параметры:
-srvc— запуск в режиме службы;-port 1542— порт, на котором служба принимает подключения;-d— корневой каталог хранилищ.
Пробел после binPath=, start=, obj= обязателен — это особенность синтаксиса sc. Без него команда завершится ошибкой разбора параметров.
Шаг 4. Брандмауэр и проверка
Откройте входящий TCP-порт 1542 на сервере. Проверить, что служба слушает порт, можно с машины разработчика:
Test-NetConnection srv-dev -Port 1542
Если TcpTestSucceeded : True — сеть в порядке, дальше дело за Конфигуратором.
Несколько версий платформы на одном сервере
Команды редко живут на одной сборке. Решение простое: по службе на каждую версию, у каждой свой порт и, по желанию, свой каталог.
| Служба | Версия | Порт | Строка подключения |
|---|---|---|---|
| Хранилище 8.3.22 | 8.3.22.xxxx | 1542 | tcp://srv-dev:1542/OldProject |
| Хранилище 8.3.24 | 8.3.24.xxxx | 1642 | tcp://srv-dev:1642/ERP_Dev |
Порт по умолчанию в строке подключения можно не писать, нестандартный — обязательно.
Сервер хранилища на Linux
В дистрибутиве платформы для Linux сервер хранилища идёт отдельным пакетом. После установки его запускают демоном с теми же ключами порта и каталога, обычно через юнит systemd от отдельного пользователя. Логика та же: одна версия — один процесс — один порт.
Создание хранилища и работа команды разработчиков
Хранилище создаёт один человек — ведущий разработчик или администратор.
- Откройте эталонную базу в Конфигураторе.
- Выберите
Конфигурация → Хранилище конфигурации → Создать хранилище.... - Укажите адрес
tcp://srv-dev/ERP_Dev. Папку на сервере создавать заранее не нужно. - Задайте администратора хранилища и пароль.
- Дождитесь окончания: первая выгрузка типовой конфигурации идёт от нескольких минут до получаса.
Затем каждый разработчик подключает свою копию базы
: Конфигурация → Хранилище конфигурации → Подключиться к хранилищу.... Учётные записи и права раздают в Конфигурация → Хранилище конфигурации → Администрирование....
Цикл работы с объектами
- 🔒 Захват — разработчик блокирует справочник, документ или модуль. Остальные видят замок и не могут менять объект.
- ✏️ Правка — работа идёт в своей базе, хранилище не меняется.
- 📤 Помещение — изменения уходят в хранилище новой версией с комментарием, объект освобождается.
- 🔄 Обновление — коллеги получают версию через
Обновить конфигурацию из хранилища.
Правила, без которых команда спотыкается
- Захватывайте объекты точечно. Захват корня конфигурации блокирует добавление новых объектов всем остальным.
- Помещайте изменения часто, хотя бы раз в день. Объект, захваченный на неделю, тормозит соседей.
- Пишите комментарий к версии с номером задачи из трекера:
#4512 Доработка печатной формы счёта. Потом по нему ищут, кто и зачем менял модуль. - Ставьте метку на версию перед выпуском релиза — так проще собрать поставку и откатиться.
- Расширения конфигурации подключайте к отдельным хранилищам: у каждого расширения своё хранилище и своя история.
Права в хранилище
| Роль в команде | Что разрешить |
|---|---|
| Разработчик | захват объектов, помещение изменений |
| Тимлид | то же + изменение состава версий (метки, комментарии) |
| Администратор | административные функции: пользователи, отмена чужих захватов |
| Сборочный сервер (CI) | только чтение, без захвата |
Отменить захват ушедшего в отпуск коллеги может администратор хранилища — через окно администрирования, отозвав захват у пользователя. Изменения, которые тот не поместил, при этом останутся только в его базе.
Хранилище 1С и Git: сравнение подходов
Хранилище — встроенная система версионирования 1С, но устроено оно иначе, чем Git.
| Критерий | Хранилище конфигурации | Git |
|---|---|---|
| Модель | централизованная, пессимистичные блокировки | распределённая, ветки и слияние |
| Параллельная правка одного модуля | нельзя, объект захвачен | можно, конфликт решается при слиянии |
| Ветки | нет; эмулируют отдельными хранилищами | основа работы |
| Инструмент | Конфигуратор | 1С:EDT, любые Git-клиенты |
| Код-ревью | нет встроенного | merge request в GitLab, Gitea и аналогах |
| Порог входа | низкий, всё внутри Конфигуратора | выше: Git, EDT, выгрузка в файлы |
Хранилище хорошо работает в командах до 10–15 человек на поддержке типовой конфигурации. Блокировки там даже полезны: двое не правят один общий модуль одновременно.
Git выигрывает, когда параллельно идёт несколько веток (релиз, исправления, большая доработка) и нужен нормальный код-ревью.
Гибрид: хранилище + Git
Частый вариант — разработчики остаются в Конфигураторе и хранилище, а история дублируется в Git:
- Скрипт по расписанию забирает новые версии из хранилища.
- Для каждой версии конфигурация выгружается в файлы (
/DumpConfigToFiles). - Выгрузка коммитится в Git с автором и комментарием из версии хранилища.
Готовый инструмент для этого — gitsync на OneScript. Он переносит каждую версию хранилища в отдельный коммит, сохраняя автора. В Git появляется поиск по истории, сравнение веток и статический анализ кода, а привычный процесс команды не меняется.
Полный переход на Git обычно делают вместе с переходом на 1С:EDT: там проект хранится в файлах и работает с Git без промежуточных выгрузок.
Пакетный режим и CI: автоматизация работы с хранилищем
Всё, что Конфигуратор делает с хранилищем через меню, доступно из командной строки. Это основа сборочных конвейеров.
Обновить тестовую базу из хранилища и применить изменения структуры:
"C:\Program Files\1cv8\8.3.24.1467\bin\1cv8.exe" DESIGNER ^
/S "srv-app\erp_test" /N "ci_user" /P "Пароль" ^
/ConfigurationRepositoryF "tcp://srv-dev/ERP_Dev" ^
/ConfigurationRepositoryN "ci_bot" /ConfigurationRepositoryP "ПарольХранилища" ^
/ConfigurationRepositoryUpdateCfg -force ^
/UpdateDBCfg ^
/Out "D:\ci\logs\update.log" /DisableStartupDialogs
/ConfigurationRepositoryF,N,P— адрес хранилища, пользователь и пароль хранилища;/ConfigurationRepositoryUpdateCfg -force— получить последнюю версию, даже если в базе есть захваченные объекты;/UpdateDBCfg— обновить конфигурацию базы данных;/Out— лог, по которому CI понимает, что пошло не так.
/UpdateDBCfg может потребовать монопольного доступа к базе, если меняется структура данных. Запускайте его на тестовой базе ночью или после того, как пользователи вышли, — активные сеансы помешают обновлению.
Отчёт по истории хранилища для релизных заметок выгружается ключом /ConfigurationRepositoryReport с указанием файла отчёта.
Типовой конвейер
- 01:00Получение новых версий из хранилища
- 01:15Обновление тестовой базы и структуры БД
- 01:40Синтаксический контроль модулей
- 02:00Автотесты (Vanessa-Automation или аналог)
- 03:00Выгрузка в файлы и коммит в Git
- по запросуСборка поставки .cf по метке релиза
Запускать такой конвейер можно из Jenkins, GitLab CI или обычного планировщика Windows. Для вызовов 1С удобны обёртки на OneScript (vanessa-runner), но и голых .bat хватает для старта.
Заведите для CI отдельного пользователя хранилища с правом только на чтение. Тогда ошибка в скрипте не сможет ни захватить объекты, ни поместить в хранилище мусор.
Резервное копирование хранилища
Хранилище — единственная полная история разработки, терять его больнее, чем рабочую базу.
- Ночью остановите службу
crserver. Все сеансы разработчиков с хранилищем оборвутся — делайте это в окне, когда никто не работает. - Скопируйте корневой каталог хранилищ архиватором на другой диск или в другое хранилище.
- Запустите службу.
Если останавливать службу нельзя, выгрузка в Git через gitsync даёт вторую, независимую копию истории.
Ошибки сервера хранилища и как их диагностировать
Test-NetConnection srv-dev -Port 1542. Если порт нестандартный, он должен быть в строке подключения: tcp://srv-dev:1642/ERP_Dev.Порядок диагностики
- Сеть. Пингуется ли сервер, отвечает ли порт.
- Служба. Статус в
services.msc, учётная запись, строка запуска с ключами-portи-d. - Версия. Сравните номер сборки в пути к
crserver.exeс версией в окне «О программе» у разработчика. - Права. Может ли учётная запись службы создать файл в корневом каталоге.
- Клиент. Если у одного разработчика ошибка, а у остальных нет — дело в его базе или кэше. Запуск Конфигуратора с ключом
/ClearCacheсбрасывает клиентский кэш.
Не перезапускайте службу в разгар рабочего дня ради «вдруг поможет»: у всех разработчиков оборвётся операция с хранилищем, а прерванное помещение придётся повторять.