Как поднять crserver и наладить командную разработку в 1С

· 10 мин

Содержание

Сервер хранилища конфигураций 1С — это служба crserver, которая отдаёт хранилище конфигурации разработчикам по сети через протокол tcp://, по умолчанию на порту 1542. Он нужен, когда над одной конфигурацией работают двое и больше: каждый захватывает свои объекты, а история версий, метки и права живут в одном месте.

Без сервера хранилище тоже работает — как папка на общем сетевом ресурсе. Но файловый доступ по SMB медленный, чувствителен к обрывам сети и плохо переносит одновременную работу пяти-десяти человек. Сервер снимает эти проблемы и даёт доступ к хранилищу из любой точки, где открыт один порт.

Как устроен сервер хранилища и чем он отличается от файлового варианта

Хранилище — это каталог с базой данных версий (основной файл 1cv8ddb.1CD) и служебными файлами. Конфигуратор умеет работать с ним двумя способами.

Способ доступаСтрока подключенияКогда подходит
📁 Файловый\\srv-dev\repo\MainRepo1–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. Установка компонента

  1. Запустите установщик платформы (setup.exe из дистрибутива для Windows).
  2. На шаге выбора компонентов отметьте Сервер хранилища конфигураций 1С:Предприятия.
  3. Если нужна публикация через веб-сервер, отметьте также модули расширения веб-сервера.
  4. Завершите установку. Исполняемый файл окажется в 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.228.3.22.xxxx1542tcp://srv-dev:1542/OldProject
Хранилище 8.3.248.3.24.xxxx1642tcp://srv-dev:1642/ERP_Dev

Порт по умолчанию в строке подключения можно не писать, нестандартный — обязательно.

Сервер хранилища на Linux

В дистрибутиве платформы для Linux сервер хранилища идёт отдельным пакетом. После установки его запускают демоном с теми же ключами порта и каталога, обычно через юнит systemd от отдельного пользователя. Логика та же: одна версия — один процесс — один порт.

Создание хранилища и работа команды разработчиков

Хранилище создаёт один человек — ведущий разработчик или администратор.

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

Затем каждый разработчик подключает свою копию базы : Конфигурация → Хранилище конфигурации → Подключиться к хранилищу.... Учётные записи и права раздают в Конфигурация → Хранилище конфигурации → Администрирование....

Цикл работы с объектами

  • 🔒 Захват — разработчик блокирует справочник, документ или модуль. Остальные видят замок и не могут менять объект.
  • ✏️ Правка — работа идёт в своей базе, хранилище не меняется.
  • 📤 Помещение — изменения уходят в хранилище новой версией с комментарием, объект освобождается.
  • 🔄 Обновление — коллеги получают версию через Обновить конфигурацию из хранилища.

Правила, без которых команда спотыкается

  • Захватывайте объекты точечно. Захват корня конфигурации блокирует добавление новых объектов всем остальным.
  • Помещайте изменения часто, хотя бы раз в день. Объект, захваченный на неделю, тормозит соседей.
  • Пишите комментарий к версии с номером задачи из трекера: #4512 Доработка печатной формы счёта. Потом по нему ищут, кто и зачем менял модуль.
  • Ставьте метку на версию перед выпуском релиза — так проще собрать поставку и откатиться.
  • Расширения конфигурации подключайте к отдельным хранилищам: у каждого расширения своё хранилище и своя история.

Права в хранилище

Роль в командеЧто разрешить
Разработчикзахват объектов, помещение изменений
Тимлидто же + изменение состава версий (метки, комментарии)
Администраторадминистративные функции: пользователи, отмена чужих захватов
Сборочный сервер (CI)только чтение, без захвата

Отменить захват ушедшего в отпуск коллеги может администратор хранилища — через окно администрирования, отозвав захват у пользователя. Изменения, которые тот не поместил, при этом останутся только в его базе.

Хранилище 1С и Git: сравнение подходов

Хранилище — встроенная система версионирования 1С, но устроено оно иначе, чем Git.

КритерийХранилище конфигурацииGit
Модельцентрализованная, пессимистичные блокировкираспределённая, ветки и слияние
Параллельная правка одного модулянельзя, объект захваченможно, конфликт решается при слиянии
Веткинет; эмулируют отдельными хранилищамиоснова работы
ИнструментКонфигуратор1С:EDT, любые Git-клиенты
Код-ревьюнет встроенногоmerge request в GitLab, Gitea и аналогах
Порог входанизкий, всё внутри Конфигураторавыше: Git, EDT, выгрузка в файлы

Хранилище хорошо работает в командах до 10–15 человек на поддержке типовой конфигурации. Блокировки там даже полезны: двое не правят один общий модуль одновременно.

Git выигрывает, когда параллельно идёт несколько веток (релиз, исправления, большая доработка) и нужен нормальный код-ревью.

Гибрид: хранилище + Git

Частый вариант — разработчики остаются в Конфигураторе и хранилище, а история дублируется в Git:

  1. Скрипт по расписанию забирает новые версии из хранилища.
  2. Для каждой версии конфигурация выгружается в файлы (/DumpConfigToFiles).
  3. Выгрузка коммитится в 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 с указанием файла отчёта.

Типовой конвейер

Ночная сборка из хранилища
  1. 01:00Получение новых версий из хранилища
  2. 01:15Обновление тестовой базы и структуры БД
  3. 01:40Синтаксический контроль модулей
  4. 02:00Автотесты (Vanessa-Automation или аналог)
  5. 03:00Выгрузка в файлы и коммит в Git
  6. по запросуСборка поставки .cf по метке релиза

Запускать такой конвейер можно из Jenkins, GitLab CI или обычного планировщика Windows. Для вызовов 1С удобны обёртки на OneScript (vanessa-runner), но и голых .bat хватает для старта.

Заведите для CI отдельного пользователя хранилища с правом только на чтение. Тогда ошибка в скрипте не сможет ни захватить объекты, ни поместить в хранилище мусор.

Резервное копирование хранилища

Хранилище — единственная полная история разработки, терять его больнее, чем рабочую базу.

  1. Ночью остановите службу crserver. Все сеансы разработчиков с хранилищем оборвутся — делайте это в окне, когда никто не работает.
  2. Скопируйте корневой каталог хранилищ архиватором на другой диск или в другое хранилище.
  3. Запустите службу.

Если останавливать службу нельзя, выгрузка в Git через gitsync даёт вторую, независимую копию истории.

Ошибки сервера хранилища и как их диагностировать

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

Порядок диагностики

  1. Сеть. Пингуется ли сервер, отвечает ли порт.
  2. Служба. Статус в services.msc, учётная запись, строка запуска с ключами -port и -d.
  3. Версия. Сравните номер сборки в пути к crserver.exe с версией в окне «О программе» у разработчика.
  4. Права. Может ли учётная запись службы создать файл в корневом каталоге.
  5. Клиент. Если у одного разработчика ошибка, а у остальных нет — дело в его базе или кэше. Запуск Конфигуратора с ключом /ClearCache сбрасывает клиентский кэш.

Не перезапускайте службу в разгар рабочего дня ради «вдруг поможет»: у всех разработчиков оборвётся операция с хранилищем, а прерванное помещение придётся повторять.

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

Нужна ли лицензия на сервер 1С для сервера хранилища?
Нет. Сервер хранилища — отдельная служба, лицензия сервера 1С:Предприятия ей не нужна. Разработчикам нужны обычные клиентские лицензии для запуска Конфигуратора.
Можно ли перевести файловое хранилище на сервер без потери истории?
Да. Скопируйте папку хранилища в корневой каталог сервера, после чего переподключите базы разработчиков по адресу tcp://. История версий, пользователи и метки сохраняются.
Сколько ресурсов нужно серверу хранилища?
Немного: для команды до десяти человек хватает двух ядер и 4 ГБ памяти. Важнее быстрый диск и запас места — хранилище растёт с каждой версией.
Можно ли работать с хранилищем через интернет?
Можно через VPN по tcp:// или через публикацию на веб-сервере по HTTPS. Открывать порт 1542 напрямую в интернет не стоит: это лишняя точка атаки на исходники вашей конфигурации.
Что делать при обновлении платформы в команде?
Поставьте сервер хранилища новой версии на соседний порт, переключите на него разработчиков, затем удалите старую службу. Так не будет дня, когда половина команды не может подключиться.