Хранилище конфигурации 1С 8.3: создание и работа

Дата: 05.10.2026 03:13:45
Хранилище конфигурации
Конфигуратор
Групповая разработка
Администрирование 1С
Программирование 1С
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

Хранилище конфигурации 1С — общее место для конфигурации, которую правят несколько программистов. Объект меняет только тот, кто его захватил, а каждое помещение становится версией с автором, датой и комментарием. Ниже — создание в сетевой папке и на сервере хранилища, правила захвата, откат версий и ночное обновление тестовой базы скриптом.

Когда нужно хранилище

  • Двое и больше разработчиков, в том числе подрядчик и штатный программист: никто не затрёт чужой модуль.
  • История и откат. Даже одному программисту полезно видеть, когда и зачем менялся объект.
  • Сборка тестовой базы. Ночной скрипт забирает последнюю версию и обновляет базу без людей.
  • Расширения. У каждого расширения своё хранилище с теми же правилами.

У каждого разработчика своя копия базы, подключённая к хранилищу. Объекты в ней закрыты для правки, пока их не захватишь.

Как создать хранилище конфигурации 1С

Файловое хранилище в сетевой папке

  1. Создайте пустой каталог, например \\fs01\1c-repo\trade, и дайте учётным записям Windows всех разработчиков чтение и запись.
  2. Типовую конфигурацию на поддержке без возможности изменения откройте для правок: «Конфигурация → Поддержка → Настройка поддержки → Включить возможность изменения».
  3. В базе с эталонной конфигурацией: «Конфигурация → Хранилище конфигурации → Создать хранилище». Укажите «Расположение хранилища», при необходимости политику паролей, затем имя и пароль администратора хранилища.
  4. Конфигуратор запишет объекты и предложит подключиться — соглашайтесь, эта база станет первой рабочей копией.

Основной файл хранилища — 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 конфигуратор не ждёт человека у диалога, а ошибка входа в хранилище завершает запуск с ошибкой.

Через сервер хранилища (crserver)

Для удалённых разработчиков вместо общей папки ставят сервер хранилища — компонент «Сервер хранилища конфигураций» из дистрибутива платформы. Он работает службой (по умолчанию порт 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 при помещении оставляет захват. Чужие захваты так не снять — такие объекты пропускаются.

Версии, метки, сравнение и откат

«Конфигурация → Хранилище конфигурации → История хранилища» показывает версии с датой, автором и комментарием, справа — изменённые объекты. Версию можно открыть, сравнить с текущей конфигурацией, сохранить в файл. Метку (например, выпуск в рабочую базу) ставят командой «Изменить» в контекстном меню версии. «Действия → Отчет по истории хранилища» группирует изменения по версиям, объектам или комментариям; история одного объекта — «История объекта».

Откатить изменения можно двумя способами:

  1. С сохранением истории. Сохраните нужную версию в файл, захватите объекты, выберите «Конфигурация → Сравнить, объединить с конфигурацией из файла», отметьте только эти объекты, объедините и поместите с комментарием «Откат версии 431».
  2. Удалением версий. «Действия → Откатить до версии» удаляет все версии после выбранной, и платформа предупреждает, что информация о них «будет удалена без возможности восстановления». Перед этим скопируйте каталог хранилища, а базы, получившие удалённые версии, заново сверьте с хранилищем.

«Сократить до версии» удаляет старые версии, «Объединить версии» склеивает соседние. Те же действия скриптом:

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"

Типичные ошибки

  • «Объект захвачен другим пользователем в хранилище конфигурации». Кто держит объект, видно в окне «Хранилище конфигурации» в колонках «Пользователь» и «Компьютер». Если коллега недоступен, администратор снимет захват на вкладке «Отмена захвата».
  • «Родительский объект не захвачен в хранилище конфигурации». Для нового объекта захватите родителя — корень конфигурации или владельца формы, макета.
  • «Несоответствие версий клиентского приложения и сервера хранилища конфигурации». Обновите crserver до версии платформы разработчиков. Сообщение «Хранилище конфигурации требует преобразования для использования новой версией программы» — сигнал переводить на новую платформу всю команду сразу.
  • «Обнаружены объекты, имеющие ссылки на удаленные объекты». Удалённый объект ещё используется в реквизитах или формах. Конфигуратор предложит очистить ссылки (в пакетном режиме — -force у /ConfigurationRepositoryCommit), но надёжнее поправить их вручную.
  • «Хранилище конфигурации повреждено». Остановите работу с хранилищем, скопируйте каталог как есть и восстановите последнюю исправную копию. Каталог файлового хранилища не кладите в облачную синхронизацию и добавьте в исключения антивируса.

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

Хранилище конфигураций 1С 8.3 — что это для программиста-одиночки?

Журнал версий: каждое помещение — точка с датой и комментарием, к которой можно вернуться. Захваты одному не мешают, а ночная сборка тестовой базы работает так же.

Как снять захват с объектов недоступного коллеги?

Администратор открывает «Администрирование хранилища», вкладку «Отмена захвата», и выбирает пользователя. Его непомещённые правки останутся только в его базе.

Изменения получены, но в режиме предприятия их нет. Почему?

Получение меняет основную конфигурацию, а база работает по конфигурации базы данных. Выполните «Конфигурация → Обновить конфигурацию базы данных» или добавьте /UpdateDBCfg в команду.

Подключать ли к хранилищу рабочую базу?

Лучше нет: появляется соблазн править прямо в ней. Выпускайте в рабочую базу проверенную версию с меткой — cf-файлом из хранилища или ночным получением в неподключённую базу.

Когда проще заказать

Развернуть хранилище для команды, поднять сервер хранилища, настроить ночную сборку или спасти повреждённое хранилище — разместите задачу на площадке: оценка бесплатная, ответ в течение рабочего дня. Ориентиры по стоимости — на странице «Сколько стоит доработка 1С».

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.