Хранилище конфигурации 1С — общее место для конфигурации, которую правят несколько программистов. Объект меняет только тот, кто его захватил, а каждое помещение становится версией с автором, датой и комментарием. Ниже — создание в сетевой папке и на сервере хранилища, правила захвата, откат версий и ночное обновление тестовой базы скриптом.
У каждого разработчика своя копия базы, подключённая к хранилищу. Объекты в ней закрыты для правки, пока их не захватишь.
\\fs01\1c-repo\trade, и дайте учётным записям Windows всех разработчиков чтение и запись.Основной файл хранилища — 1cv8ddb.1CD; копируйте весь каталог, когда никто не помещает изменения. Создание скриптом:
@echo off
chcp 65001 >nul
rem create-repo.cmd: файловое хранилище из базы разработчика и пользователи.
rem Файл в UTF-8 без BOM. Пароли - в переменных REPO_ADMIN_PWD, DEV_PWD, BUILD_PWD.
set "V8=C:\Program Files\1cv8\8.3.27.1786\bin\1cv8.exe"
set "IB=D:\1C\Trade_Dev"
set "REPO=\\fs01\1c-repo\trade"
set "LOG=D:\1C\logs\create-repo.log"
set REPOAUTH=/ConfigurationRepositoryF "%REPO%" /ConfigurationRepositoryN admin /ConfigurationRepositoryP "%REPO_ADMIN_PWD%"
rem Каталог журнала должен существовать заранее
if not exist "D:\1C\logs" mkdir "D:\1C\logs"
rem 1. Создание. Пользователь admin станет администратором хранилища,
rem типовой конфигурации на поддержке разрешаем правки с сохранением поддержки.
rem Если в базе есть пользователи, добавьте после /F ключи /N и /P.
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" %REPOAUTH% ^
/ConfigurationRepositoryCreate -AllowConfigurationChanges ^
-ChangesAllowedRule ObjectIsEditableSupportEnabled ^
-ChangesNotRecommendedRule ObjectIsEditableSupportEnabled
if errorlevel 1 goto fail
rem 2. Разработчики: захват и помещение (пароль временный, сменят сами)
for %%U in (dev1 dev2 dev3) do (
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" -NoTruncate %REPOAUTH% ^
/ConfigurationRepositoryAddUser -User %%U -Pwd "%DEV_PWD%" -Rights LockObjects
if errorlevel 1 goto fail
)
rem 3. Пользователь ночной сборки: только просмотр
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" -NoTruncate %REPOAUTH% ^
/ConfigurationRepositoryAddUser -User build -Pwd "%BUILD_PWD%" -Rights ReadOnly
if errorlevel 1 goto fail
echo OK: %REPO%
exit /b 0
:fail
echo ERROR, log: %LOG%
type "%LOG%"
exit /b 1
Правила поддержки нужны только типовой конфигурации: ObjectIsEditableSupportEnabled — «объект поставщика редактируется с сохранением поддержки». Права в -Rights: ReadOnly — просмотр, LockObjects — захват объектов, ManageConfigurationVersions — изменение состава версий, Administration — административные функции. С /DisableStartupDialogs конфигуратор не ждёт человека у диалога, а ошибка входа в хранилище завершает запуск с ошибкой.
Для удалённых разработчиков вместо общей папки ставят сервер хранилища — компонент «Сервер хранилища конфигураций» из дистрибутива платформы. Он работает службой (по умолчанию порт 1542), доступ к папке разработчикам не нужен. Хранилище создают тем же диалогом, указав tcp-адрес.
rem Сервер хранилища: служба от локального пользователя USR1CV8,
rem порт 1542, каталог данных D:\1c-repo (команды - от администратора Windows)
set "CR=C:\Program Files\1cv8\8.3.27.1786\bin\crserver.exe"
"%CR%" -instsrvc -usr .\USR1CV8 -pwd "%SVC_PWD%" -port 1542 -d "D:\1c-repo"
"%CR%" -start
rem Адрес для разработчиков: tcp://repo-srv/trade
rem Порт не по умолчанию пишут явно: tcp://repo-srv:1642/trade
Держите crserver той же версии, что конфигураторы разработчиков, иначе подключение упадёт с ошибкой «Несоответствие версий клиентского приложения и сервера хранилища конфигурации». Через интернет хранилище отдают и по HTTP: на веб-сервере публикуется файл .1ccr с tcp-адресом в атрибуте connectString (о публикации — в статье «Публикация 1С на веб-сервере»).
Для командной работы по сети хранилище держат на сервере хранилища (crserver) или публикуют по HTTP через Apache или IIS — пошагово в статье «Сервер хранилища конфигураций 1С».
Каждому разработчику — своя база и свой пользователь хранилища. В базе выберите «Конфигурация → Хранилище конфигурации → Подключиться к хранилищу», укажите каталог или tcp-адрес, имя и пароль. Непустую конфигурацию платформа полностью заменит конфигурацией хранилища — для свежей копии это нормально. Затем обновите конфигурацию базы данных (F7).
Платформа рассчитывает на пару «пользователь — база». Вторая база того же пользователя вызовет вопрос «Для данного пользователя уже имеется конфигурация, связанная с данным хранилищем конфигурации», а скопированная в другой каталог база — предупреждение «Расположение или тип подключения ИБ отличаются от зарегистрированных в хранилище конфигурации».
Как работать с хранилищем, чтобы не блокировать друг друга:
//, отчёт по истории умеет скрывать — туда технические заметки.Работа с хранилищем конфигурации 1С 8.3 идёт из контекстного меню объекта и из окна «Конфигурация → Хранилище конфигурации → Хранилище», где видно, кто, когда и с какого компьютера захватил объект.
| Действие | Команда | Важно |
|---|---|---|
| Захват | «Захватить в хранилище» | «Захватить рекурсивно», «Получать захваченные», комментарий для помещения |
| Помещение | «Поместить в хранилище» | «Поместить рекурсивно», «Оставить захваченными» |
| Получение | «Получить из хранилища», для всей конфигурации — «Обновить конфигурацию из хранилища» | «Получать захваченные» заменит ваши правки версией хранилища |
| Отмена захвата | «Отменить захват в хранилище» | объекты вернутся к версии хранилища |
| Сравнение | «Сравнить с объектом хранилища», «Сравнить/объединить конфигурацию с хранилищем» | проверка перед помещением |
После получения обновите конфигурацию базы данных, иначе в режиме предприятия останется старая версия. Только свои захваченные объекты в дереве покажет «Действия → Захваченные объекты». Для скриптов те же операции есть в пакетном режиме, а список объектов передают XML-файлом:
<?xml version="1.0" encoding="UTF-8"?>
<!-- objects.xml: список объектов для ключа -objects -->
<Objects xmlns="http://v8.1c.ru/8.3/config/objects" version="1.0">
<Configuration includeChildObjects="false"/>
<Object fullName="Справочник.Номенклатура" includeChildObjects="false"/>
<Object fullName="Документ.РеализацияТоваровУслуг" includeChildObjects="true"/>
<Object fullName="ОбщийМодуль.ПродажиСервер" includeChildObjects="false"/>
</Objects>
rem База разработчика dev1, подключённая к хранилищу; V8 и LOG - как в create-repo.cmd
set "IB=D:\1C\Trade_Dev1"
set REPOAUTH=/ConfigurationRepositoryF "\\fs01\1c-repo\trade" /ConfigurationRepositoryN dev1 /ConfigurationRepositoryP "%DEV1_PWD%"
rem Захват по списку с получением актуальных версий объектов
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" %REPOAUTH% ^
/ConfigurationRepositoryLock -objects "D:\1C\objects.xml" -revised
rem Помещение тех же объектов: каждая строка комментария - отдельный -comment
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" %REPOAUTH% ^
/ConfigurationRepositoryCommit -objects "D:\1C\objects.xml" ^
-comment "Задача 1250: контроль цены в реализации" -comment "// проверено на копии рабочей базы"
rem Или отказаться от правок: отмена захвата, -force разрешает потерять локальные изменения
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" %REPOAUTH% ^
/ConfigurationRepositoryUnlock -objects "D:\1C\objects.xml" -force
По схеме платформы элемент Configuration обязателен и идёт первым, includeChildObjects добавляет подчинённые объекты. Без -objects команда действует на всю конфигурацию. -revised при захвате получает актуальные версии, -keepLocked при помещении оставляет захват. Чужие захваты так не снять — такие объекты пропускаются.
«Конфигурация → Хранилище конфигурации → История хранилища» показывает версии с датой, автором и комментарием, справа — изменённые объекты. Версию можно открыть, сравнить с текущей конфигурацией, сохранить в файл. Метку (например, выпуск в рабочую базу) ставят командой «Изменить» в контекстном меню версии. «Действия → Отчет по истории хранилища» группирует изменения по версиям, объектам или комментариям; история одного объекта — «История объекта».
Откатить изменения можно двумя способами:
«Сократить до версии» удаляет старые версии, «Объединить версии» склеивает соседние. Те же действия скриптом:
rem Версии из командной строки (переменные - как в create-repo.cmd)
for %%D in (D:\1C\cf D:\1C\reports) do if not exist "%%D" mkdir "%%D"
rem Метка на последнюю версию; для другой версии добавьте -v <номер>
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" %REPOAUTH% ^
/ConfigurationRepositorySetLabel -name "Релиз 2.4.0" -comment "Выпуск в рабочую базу"
rem Конфигурация версии 412 в cf-файл: для отката, сравнения, выпуска
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" %REPOAUTH% ^
/ConfigurationRepositoryDumpCfg "D:\1C\cf\trade_v412.cf" -v 412
rem Что изменилось после версии 412: краткий отчёт сравнения с основной конфигурацией
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" %REPOAUTH% ^
/CompareCfg -FirstConfigurationType ConfigurationRepository -FirstVersion 412 ^
-SecondConfigurationType MainConfiguration -ReportType Brief -ReportFormat txt ^
-ReportFile "D:\1C\reports\since412.txt"
rem История версий 412-430 текстом, вместе со строками комментариев на //
start "" /wait "%V8%" DESIGNER /F "%IB%" /DisableStartupDialogs /Out "%LOG%" %REPOAUTH% ^
/ConfigurationRepositoryReport "D:\1C\reports\history.txt" -NBegin 412 -NEnd 430 ^
-IncludeCommentLinesWithDoubleSlash -ReportFormat txt
«Конфигурация → Хранилище конфигурации → Отключиться от хранилища» снимает связь, если нет захваченных изменённых объектов. Копии баз — тестовую, для отчётов — отключайте сразу: /ConfigurationRepositoryUnbindCfg -force без имени и пароля пользователя хранилища отключает базу только локально и само хранилище не трогает.
«Конфигурация → Хранилище конфигурации → Администрирование хранилища»:
Последнего администратора удалить нельзя. Роботу ночной сборки хватит права на просмотр.
Расширение подключают только к собственному хранилищу: к хранилищу основной конфигурации нельзя. Команды те же, их выполняют для открытого расширения — диалоги называются «Создание хранилища расширения…», «Подключение к хранилищу расширения…». В пакетном режиме к командам добавляют -Extension с именем. Пока расширение подключено, /LoadCfg для него не работает. Об аннотациях и применении — в статье «Расширение конфигурации 1С».
Тестовую базу к хранилищу лучше не подключать. /ConfigurationRepositoryUpdateCfg с адресом, именем и паролем заменяет её конфигурацию актуальной версией, а с -v — указанной (у подключённой базы номер игнорируется). /UpdateDBCfg можно поставить сразу за ним в той же строке.
# nightly-update.ps1: ночное обновление тестовой базы из хранилища (Windows PowerShell 5.1).
# Тестовая база к хранилищу НЕ подключена и каждую ночь получает актуальную версию целиком.
# Пароли - в переменных окружения учётной записи задания: IB_PWD и REPO_BUILD_PWD.
# Файл сохраните в UTF-8 с BOM, иначе PowerShell 5.1 исказит кириллицу.
$v8 = 'C:\Program Files\1cv8\8.3.27.1786\bin\1cv8.exe'
$ib = '/S "srv01\trade_test"' # файловая база: '/F "D:\1C\Trade_Test"'
$repo = '\\fs01\1c-repo\trade' # сервер хранилища: 'tcp://repo-srv/trade'
$logs = 'D:\1C\logs'
$stamp = Get-Date -Format 'yyyyMMdd_HHmm'
New-Item -ItemType Directory -Force -Path $logs, (Join-Path $logs 'cf') | Out-Null
$repoAuth = "/ConfigurationRepositoryF ""$repo"" /ConfigurationRepositoryN build " +
"/ConfigurationRepositoryP ""$env:REPO_BUILD_PWD"""
function Invoke-Designer([string]$Step, [string]$BatchArgs) {
$out = Join-Path $logs "$stamp-$Step.log"
$result = Join-Path $logs "$stamp-$Step.result"
$cmd = "DESIGNER $ib /N ""Робот"" /P ""$env:IB_PWD"" /DisableStartupDialogs " +
"/Out ""$out"" /DumpResult ""$result"" $BatchArgs"
$p = Start-Process -FilePath $v8 -ArgumentList $cmd -Wait -PassThru
$code = if (Test-Path $result) { (Get-Content $result -Raw).Trim() } else { 'нет' }
$text = if (Test-Path $out) { Get-Content $out -Raw -Encoding UTF8 } else { '' }
if ($p.ExitCode -ne 0 -or $code -ne '0') {
throw "Шаг '$Step': код $($p.ExitCode), результат $code. $text"
}
Write-Output "[$Step] готово. $text"
}
try {
# 1. Копия конфигурации БД; вернуть её: /LoadCfg <файл> /UpdateDBCfg
$cf = Join-Path $logs "cf\trade_test_$stamp.cf"
Invoke-Designer 'backup' "/DumpDBCfg ""$cf"""
# 2. Актуальная версия из хранилища и обновление конфигурации БД
# (-Server - для серверной базы, у файловой уберите)
$update = "$repoAuth /ConfigurationRepositoryUpdateCfg -force " +
"/UpdateDBCfg -Dynamic- -Server -SessionTerminate force"
Invoke-Designer 'update' $update
# 3. Что вошло в сборку: история хранилища за сутки
$since = (Get-Date).AddDays(-1).ToString('yyyyMMddHHmmss')
$history = Join-Path $logs "$stamp-history.txt"
Invoke-Designer 'history' "$repoAuth /ConfigurationRepositoryReport ""$history"" -DateBegin $since -ReportFormat txt"
# 4. Синтаксический контроль модулей в режимах сервера и тонкого клиента
Invoke-Designer 'check' '/CheckModules -ThinClient -Server'
}
catch {
Write-Output $_.Exception.Message
exit 1
}
$repoAuth — без адреса, имени и пароля конфигуратор с /DisableStartupDialogs запустится без связи с хранилищем.-force подтверждает добавление и удаление объектов, без него такие изменения не применятся.-Dynamic- запрещает динамическое обновление, -Server ведёт реструктуризацию на сервере, -SessionTerminate force завершает сеансы ради монопольной блокировки (ключ есть в 8.3.27, в 8.3.21 его нет)./DumpResult пишет 0 при успехе — проверяем вместе с кодом возврата; журнал /Out всегда в UTF-8.Start-Process -Wait: 1cv8.exe — оконное приложение, без ожидания скрипт уйдёт вперёд.Где ключа -SessionTerminate нет, сеансы завершают заранее. В программах на БСП это делает запуск предприятия с /C "ЗавершитьРаботуПользователей"; код разрешения по умолчанию — КодРазрешения, конфигуратору его передают ключом /UC. Если номер версии конфигурации изменился, первый вход запустит в программе на БСП обновление информационной базы — войдите под администратором сразу после сборки. Расписание:
rem Каждую ночь в 02:30 от служебной учётной записи с доступом к папке хранилища.
rem IB_PWD и REPO_BUILD_PWD задайте в её профиле (setx под этой записью).
schtasks /Create /TN "1C\trade_test nightly" /SC DAILY /ST 02:30 /RU "CORP\svc-1c-build" /RP * ^
/TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File D:\1C\scripts\nightly-update.ps1"
-force у /ConfigurationRepositoryCommit), но надёжнее поправить их вручную.Журнал версий: каждое помещение — точка с датой и комментарием, к которой можно вернуться. Захваты одному не мешают, а ночная сборка тестовой базы работает так же.
Администратор открывает «Администрирование хранилища», вкладку «Отмена захвата», и выбирает пользователя. Его непомещённые правки останутся только в его базе.
Получение меняет основную конфигурацию, а база работает по конфигурации базы данных. Выполните «Конфигурация → Обновить конфигурацию базы данных» или добавьте /UpdateDBCfg в команду.
Лучше нет: появляется соблазн править прямо в ней. Выпускайте в рабочую базу проверенную версию с меткой — cf-файлом из хранилища или ночным получением в неподключённую базу.
Развернуть хранилище для команды, поднять сервер хранилища, настроить ночную сборку или спасти повреждённое хранилище — разместите задачу на площадке: оценка бесплатная, ответ в течение рабочего дня. Ориентиры по стоимости — на странице «Сколько стоит доработка 1С».
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.