Коллективная разработка через crserver: от установки службы до прав программистов
Содержание
Сервер хранилища конфигураций 1С 8.3 — это служба crserver.exe, которая отдаёт хранилище конфигурации программистам по сети через адрес вида tcp://имя-сервера/хранилище. Порт по умолчанию — 1542. Она нужна, когда над одной конфигурацией работают двое и больше и общая папка на файловом сервере перестаёт справляться.
Типичная ситуация: три разработчика дорабатывают ERP, хранилище лежит в сетевой папке. Пока все в одном офисе — терпимо. Как только один уходит на удалёнку через VPN, захват объекта тянется минутами, а обрыв связи во время помещения грозит повредить файлы. Сервер хранилища снимает обе проблемы: клиент не работает с файлами напрямую, он обменивается командами со службой.
Что даёт сервер хранилища и чем он лучше общей папки
Само хранилище конфигурации — это журнал версий конфигурации плюс механизм блокировок. Программист захватывает объект, правит его у себя, помещает обратно. Остальные видят захват и не могут править тот же модуль одновременно.
Хранилище можно открыть тремя способами:
| Способ | Адрес в Конфигураторе | Когда подходит |
|---|---|---|
| Файловый | \\fs\repo\ERP или D:\repo\ERP | 1-2 разработчика в одной локальной сети |
| Сервер хранилища | tcp://srv-dev/ERP | команда, удалённые сотрудники, VPN |
| Через веб-сервер | http://... | доступ из интернета, когда открыть TCP-порт нельзя |
Что даёт серверный вариант на практике:
- 🔒 Пользователям не нужен доступ к папке. Права на каталог есть только у учётной записи службы. Случайно удалить или скопировать файлы хранилища программист не сможет.
- 🚀 Меньше трафика. Клиент получает только нужные данные, а не читает файл базы хранилища по SMB.
- 🛡️ Устойчивость к обрывам. Запись в файлы ведёт сама служба на сервере, поэтому разрыв VPN у клиента не оставляет недописанный файл.
- 🗂️ Несколько хранилищ на одной службе. Одна служба обслуживает все хранилища внутри своего корневого каталога:
tcp://srv-dev/ERP,tcp://srv-dev/BP,tcp://srv-dev/ZUP_ext. - 🧩 Расширения. В хранилище можно помещать не только основную конфигурацию, но и расширения: у каждого расширения своё хранилище.
Требования и установка crserver
Отдельного дистрибутива нет. Сервер хранилища ставится из обычного установщика платформы 1С:Предприятие 8.3 как компонент «Сервер хранилища конфигураций 1С:Предприятия 8». Клиент и сервер приложений 1С на этой машине не обязательны.
Перед установкой решите три вещи:
- Версия платформы. Версия сервера хранилища должна совпадать с версией платформы, в которой работают программисты. При расхождении Конфигуратор не подключится. Если команды сидят на разных версиях, ставят несколько служб разных версий на разные порты.
- Каталог данных. Корневая папка, внутри которой служба создаёт хранилища. Берите отдельный диск или раздел с запасом: хранилище типовой ERP с историей за пару лет легко вырастает до десятков гигабайт.
- Учётная запись службы. Обычно это локальный пользователь
USR1CV8или доменная служебная учётка. Ей нужны права на чтение и запись в каталог данных, больше ничего.
Установка службы из командной строки
Если при установке платформы вы не отметили запуск сервера хранилища как службы Windows, зарегистрируйте её вручную. Откройте командную строку от администратора в каталоге bin нужной версии платформы, например C:\Program Files\1cv8\8.3.24.1548\bin:
crserver.exe -instsrvc -port 1542 -d "D:\1CRepo" -usr .\USR1CV8 -pwd "Пароль_учётки"
crserver.exe -start
Что значат ключи:
-instsrvc— зарегистрировать службу;-port— TCP-порт, на котором служба принимает подключения;-d— корневой каталог хранилищ;-usrи-pwd— учётная запись, от имени которой работает служба.
Удалить службу можно ключом -rmsrvc, остановить — -stop. Перед удалением старой службы при обновлении платформы убедитесь, что никто не помещает изменения.
Открыть порт в брандмауэре
Без этого шага служба работает, но с других компьютеров недоступна:
netsh advfirewall firewall add rule name="1C crserver 1542" dir=in action=allow protocol=TCP localport=1542
Если служб несколько (например, 1542 и 1642 для двух версий платформы), откройте каждый порт отдельным правилом. В адресе хранилища нестандартный порт указывают явно: tcp://srv-dev:1642/ERP.
На Linux тот же исполняемый файл crserver входит в серверный пакет платформы. Запускают его в режиме демона с ключом -daemon и теми же -d и -port, а автозапуск оформляют штатным для дистрибутива способом.
Создание хранилища и первое подключение
Хранилище создаёт один человек — будущий администратор. Остальные потом только подключаются.
- Откройте в Конфигураторе базу, конфигурация которой станет основой хранилища. Лучше всего — свежую копию рабочей базы.
- Выберите
Конфигурация → Хранилище конфигурации → Создать хранилище.... - В поле адреса укажите
tcp://srv-dev/ERP. КаталогERPслужба создаст сама внутри своего корняD:\1CRepo. - Задайте имя и пароль первого пользователя. Он автоматически получает все права, включая административные.
- Дождитесь окончания: платформа помещает в хранилище всю конфигурацию целиком. Для крупных решений это может занять от нескольких минут до часа.
После создания база администратора уже подключена к хранилищу: в дереве метаданных у объектов появляются значки замков.
Не подключайте к хранилищу базу с реальной работой пользователей. Разработку ведут в отдельной копии, а в рабочую базу изменения переносят через файл .cf или поставку. Иначе любое «Обновить конфигурацию БД» у разработчика затронет боевые данные.
Подключение остальных разработчиков
Каждый программист разворачивает у себя свою копию базы
и выбирает Конфигурация → Хранилище конфигурации → Подключиться к хранилищу.... Указывает тот же адрес, свой логин и пароль. Платформа сравнит конфигурацию базы с хранилищем и предложит получить версию из хранилища — соглашайтесь, чтобы начать с одинаковой точки.
Правила работы команды с хранилищем
Технически всё держится на четырёх командах из меню Конфигурация → Хранилище конфигурации и контекстного меню дерева метаданных:
| Команда | Что делает |
|---|---|
| Захватить в хранилище | Блокирует объект за вами. Другие видят захват и не могут его поместить |
| Поместить в хранилище | Отправляет ваши изменения, создаёт новую версию с комментарием |
| Получить из хранилища | Загружает чужие изменения в вашу конфигурацию |
| Отменить захват | Снимает блокировку, ваши правки по объекту откатываются к версии хранилища |
Командный регламент, который реально работает:
- 📝 Комментарий к каждому помещению. Номер задачи и одна строка смысла: «#412 Новый реквизит Проект в РТиУ». Через полгода история хранилища — единственный способ понять, откуда взялась правка.
- ⏱️ Не держать захват неделями. Захватили общий модуль — поместите в тот же день или отпустите. Иначе коллеги стоят.
- 🔁 Получать перед помещением. Сначала заберите чужие изменения, проверьте синтаксис, потом помещайте свои.
- 🌳 Захват рекурсивно — с осторожностью. Захват всего документа вместе с формами и макетами блокирует работу других над тем же документом.
- 🏷️ Метки на версиях. Перед каждой выдачей в рабочую базу ставьте на версию метку, например «Релиз 2.3 в прод». К этой точке потом легко вернуться и сравнить.
Как выдавать изменения в рабочую базу
Рабочую базу к хранилищу не подключают. Выпуск делают из базы сборщика: получают из хранилища нужную версию (или версию с меткой), сохраняют конфигурацию в файл .cf и обновляют им рабочую базу в окно регламента. Если рабочая конфигурация на поддержке и в ней есть доработки, удобнее собирать файл поставки .cf, чтобы при следующем обновлении типовой корректно сработало сравнение и объединение.
Так у каждого выпуска остаётся точка в истории хранилища, и откат сводится к получению предыдущей версии.
Раздача прав
Права настраивает администратор в окне Конфигурация → Хранилище конфигурации → Администрирование. Для каждого пользователя задаются флажки:
- Захват объектов — можно захватывать и править;
- Изменение версий — можно менять комментарии и метки версий;
- Административные функции — пользователи, права, обслуживание хранилища.
Пользователь без флажков может только подключиться и получать конфигурацию. Такой вариант удобен для тестировщика или для базы, которая лишь собирает поставку.
Обслуживание и резервное копирование
Хранилище — это история всей разработки. Потерять его больнее, чем базу разработчика.
Что копировать
Каждое хранилище — подкаталог в корне службы. Основной файл данных внутри называется 1cv8ddb.1CD, рядом лежат служебные файлы и подкаталоги. Копировать нужно папку хранилища целиком.
Надёжная схема:
- Ночью, когда никто не помещает изменения, остановить службу (
crserver.exe -stopили черезservices.msc). - Скопировать каталог хранилища архиватором в другое место.
- Запустить службу обратно.
Остановка службы обрывает подключения всех программистов. Незавершённое помещение у человека сорвётся, поэтому окно копирования согласуйте с командой. Копирование «на живую» без остановки иногда работает, но гарантии целостности не даёт.
Второй уровень защиты — периодически сохранять текущую версию хранилища в файл .cf: Конфигурация → Хранилище конфигурации → Сохранить конфигурацию хранилища в файл. История в нём не сохранится, но последнее состояние — да.
Обновление платформы
Это самая частая точка поломки. Порядок:
- Договориться о моменте, когда все поместили изменения.
- Остановить и удалить службу старой версии ключом
-rmsrvcиз её каталогаbin. - Установить платформу новой версии с компонентом сервера хранилища.
- Зарегистрировать службу новой версии с тем же каталогом
-dи тем же портом. - Обновить платформу у всех разработчиков.
При первом подключении новой версией платформа может предложить сконвертировать хранилище в новый формат. Перед этим сделайте копию: обратной конвертации нет.
Повреждение файла хранилища
Если при подключении или получении появляются ошибки чтения данных, остановите службу и проверьте 1cv8ddb.1CD утилитой chdbfl.exe из каталога bin платформы. Сначала запускайте проверку без исправления и на копии файла. Если утилита не помогла — восстанавливайтесь из резервной копии.
Ошибки подключения к серверу хранилища и что с ними делать
Если файл хранилища раньше лежал в сетевой папке, а теперь вы переходите на сервер, папку не нужно пересоздавать. Перенесите её внутрь корня службы, и программисты переподключатся по новому адресу tcp://. Старая история сохранится.
Если подключиться так и не удалось
Проверьте по порядку самое простое: пингуется ли сервер по имени, отвечает ли порт с клиента, совпадают ли номера версий платформы до последней цифры. Когда TCP-порт открыть нельзя вообще (например, разработчик подрядчика снаружи периметра), переходите на публикацию хранилища через веб-сервер. Она настраивается в Конфигураторе из меню Администрирование и использует обычный HTTP или HTTPS.