Динамическое обновление конфигурации 1С без выгона пользователей

· 9 мин

Содержание

Динамическое обновление в 1С запускают из Конфигуратора: после изменения основной конфигурации выберите Конфигурация → Обновить конфигурацию базы данных (клавиша F7). Если в базе работают пользователи и монопольный режим установить нельзя, платформа сама предложит применить изменения динамически — согласитесь, и новая конфигурация базы данных запишется без завершения чужих сеансов.

Из командной строки то же самое делает ключ /UpdateDBCfg -Dynamic+. Работающие пользователи остаются на старой версии до перезапуска программы, а все новые сеансы сразу открываются уже с изменениями. Это удобно для срочной правки модуля или формы днём, но для изменений структуры данных обычно не подходит.

Как устроено динамическое обновление и при чём тут клиенты

В информационной базе 1С хранятся две конфигурации:

  • 🛠️ Основная конфигурация — та, которую вы правите в Конфигураторе или обновляете из файла поставки.
  • 🗄️ Конфигурация базы данных — та, с которой реально работают пользователи.

Обновление — это перенос основной конфигурации в конфигурацию базы данных. В обычном режиме платформа требует монопольный доступ: в базе не должно быть других сеансов. Динамический режим снимает это требование. Конфигурация базы данных обновляется, а уже открытые сеансы продолжают работать с той версией, с которой стартовали.

Отсюда главное правило: запустить обновление может только Конфигуратор (или пакетный запуск Конфигуратора). Пользовательские клиенты лишь получают результат.

КлиентЧто умеет в части обновления
Тонкий клиентТолько работает с конфигурацией базы данных. После динамического обновления видит изменения после перезапуска
Веб-клиентТо же, что тонкий: новая версия после повторного входа
Толстый клиент в режиме «1С:Предприятие»Тоже только пользуется конфигурацией, запускать обновление не может
КонфигураторПравит основную конфигурацию и обновляет конфигурацию базы данных, в том числе динамически

Режим работы базы на сам механизм не влияет: динамически обновляют и файловые, и клиент-серверные базы.

Что можно и что нельзя обновлять динамически

Платформа сама проверяет, допустимо ли применить изменения без монопольного режима. Решает характер правок.

Обычно проходят динамически:

  • ✅ изменения в модулях объектов, менеджеров, общих модулях;
  • ✅ правки управляемых форм и макетов печатных форм;
  • ✅ новые отчёты и обработки внутри конфигурации;
  • ✅ изменения ролей и командного интерфейса.

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

  • ❌ новые или удалённые реквизиты справочников, документов, регистров;
  • ❌ изменение типа реквизита или длины строки;
  • ❌ новые объекты метаданных, под которые нужны таблицы;
  • ❌ изменение индексирования и измерений регистров.

Такие изменения требуют реструктуризации таблиц. Платформа может отказать в динамическом обновлении и попросить монопольный режим. В клиент-серверной базе для этого случая есть фоновое обновление: тяжёлая часть реструктуризации идёт, пока люди работают, а монопольный доступ нужен только на короткое завершение.

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

Пошагово: динамическое обновление в Конфигураторе

1. Подготовьте основную конфигурацию

Откройте базу в режиме Конфигуратора и выберите Конфигурация → Открыть конфигурацию. Дальше вариант зависит от того, откуда берутся изменения:

  1. Свои правки. Внесите изменения в модули или формы и сохраните конфигурацию (Ctrl+S).
  2. Хранилище. Выберите Конфигурация → Хранилище конфигурации → Обновить конфигурацию из хранилища.
  3. Файл .cf. Загрузите его через Конфигурация → Загрузить конфигурацию из файла. Учтите, что загрузка полностью заменяет основную конфигурацию.
  4. Обновление типовой. Используйте Конфигурация → Поддержка → Обновить конфигурацию и выберите файл .cfu или .cf.

В любом случае основная конфигурация должна быть сохранена. Звёздочка в заголовке дерева конфигурации означает несохранённые правки: при нажатии F7 Конфигуратор сначала предложит их записать.

2. Запустите обновление конфигурации базы данных

Нажмите F7 или выберите Конфигурация → Обновить конфигурацию базы данных. Если в базе никого нет, обновление пройдёт в обычном режиме, и динамика не понадобится.

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

3. Примите изменения

Появится окно со списком изменений структуры. Для правок только кода и форм оно короткое или не появится вовсе. Нажмите Принять.

Если в окне видны объекты с реорганизацией данных, остановитесь и оцените риск. Отказ здесь ничего не ломает: основная конфигурация останется сохранённой, а базу данных можно обновить позже.

4. Сообщите пользователям о перезапуске

Динамическое обновление незаметно для работающих людей. Они продолжат вести учёт на старой версии, пока не закроют программу. Чтобы правка заработала у всех, попросите перезайти. В типовых конфигурациях на современной БСП программа сама периодически показывает уведомление, что версия обновлена и нужен перезапуск.

В своей конфигурации проверку делают через метод глобального контекста:

&НаКлиенте
Процедура ПроверитьОбновлениеКонфигурации() Экспорт
	Если КонфигурацияБазыДанныхИзмененаДинамически() Тогда
		ПоказатьПредупреждение(, "Программа обновлена. Сохраните данные и перезапустите 1С.");
	КонецЕсли;
КонецПроцедуры

Процедуру вызывают обработчиком ожидания, например раз в 20 минут: ПодключитьОбработчикОжидания("ПроверитьОбновлениеКонфигурации", 1200).

Запуск из командной строки: ключ -Dynamic+

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

Минимальная команда для клиент-серверной базы:

"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" /UpdateDBCfg -Dynamic+ /Out "C:\logs\update.log" /DisableStartupDialogs

Номер версии в пути подставьте свой. Для файловой базы вместо /S используют /F "D:\Bases\Buh".

Ключи, которые чаще всего нужны:

КлючЧто делает
/UpdateDBCfgОбновляет конфигурацию базы данных
-Dynamic+Разрешает динамическое обновление
-Dynamic-Запрещает его: обновление пройдёт только при монопольном доступе
/LoadCfg "файл.cf"Загружает основную конфигурацию из файла перед обновлением
/UpdateCfg "файл.cfu"Применяет файл обновления поставки к основной конфигурации
/Out "файл.log"Пишет результат в текстовый файл
/DisableStartupDialogsПодавляет стартовые диалоги, чтобы скрипт не завис
/UC "код"Код разрешения входа, если в базе установлена блокировка сеансов

Цепочка «загрузить и сразу обновить» укладывается в одну строку: /LoadCfg "D:\new.cf" /UpdateDBCfg -Dynamic+.

Для фонового обновления в клиент-серверной базе у /UpdateDBCfg есть отдельные параметры (-BackgroundStart, -BackgroundFinish и другие). Их состав зависит от версии платформы — сверьтесь со справкой Конфигуратора по параметрам командной строки.

Пароль в bat-файле в открытом виде — плохая идея. Храните скрипт в папке с доступом только для администратора или заведите для обновлений отдельного пользователя 1С с правом администрирования.

После запуска обязательно читайте файл из /Out. Код завершения процесса не всегда отражает, применилось ли обновление динамически или было отклонено.

Ошибки при динамическом обновлении и что с ними делать

Ниже — ситуации, на которые администратор натыкается чаще всего. Выберите свой симптом.

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

Обновлять динамически во время закрытия месяца, проведения зарплаты или массового перепроведения нельзя. Смешение старого и нового кода в длинной операции даёт ошибки, которые потом трудно найти.

Журнал регистрации: проверяем, что и когда обновилось

Журнал регистрации отвечает на два вопроса: прошло ли обновление и кто сидел в базе в этот момент. В Конфигураторе он открывается через Администрирование → Журнал регистрации.

Как искать:

  1. Откройте отбор и задайте интервал, когда запускали обновление.
  2. В списке событий отметьте события группы «Информационная база», связанные с изменением конфигурации.
  3. Посмотрите время, пользователя и компьютер, с которых шло обновление.
  4. Для разбора жалоб добавьте в отбор события начала и завершения сеансов. Так видно, кто стартовал до обновления и работал на старой версии.

Сопоставление двух времён решает большинство споров «у меня не работает»: если сеанс пользователя открыт раньше записи об изменении конфигурации, ему достаточно перезапуска.

Журнал пишется, только если не отключён его уровень. Проверьте настройку в Администрирование → Настройка журнала регистрации: чтобы видеть изменения конфигурации и начало сеансов, нужен уровень «Информация» или подробнее.

Ошибки бизнес-логики после обновления ищите в том же журнале с отбором по уровню «Ошибка» и интервалу после обновления. Строки с одинаковым текстом от разных пользователей почти всегда указывают на изменённый модуль.

Как обновлять динамически без сюрпризов

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

  • 🧪 Сначала копия. Прогоните изменения на тестовой базе с похожими данными. Динамика в тесте выглядит так же, как в рабочей базе.
  • 💾 Резервная копия перед обновлением структуры. Для правок только кода хватит выгрузки основной конфигурации в .cf. Если затронуты таблицы — нужна полная копия базы.
  • ⏱️ Выбирайте время. Лучше обновлять в обед или в начале дня, когда нет длинных операций, чем в разгар закрытия периода.
  • 📢 Предупреждайте людей. Короткое сообщение «в 13:00 обновление, после перезайдите» экономит время на разбор жалоб.
  • 🔁 Не копите динамические обновления. В клиент-серверной базе рабочие процессы держат в памяти несколько версий конфигурации, пока на старых сидят сеансы. После серии правок за день попросите всех перезайти, а вечером, когда сеансов нет, можно перезапустить рабочие процессы.
  • 🧩 Структуру — в регламент. Новые реквизиты и объекты обновляйте вне рабочего времени или фоновым обновлением.

Типовой сценарий для бухгалтерии на 30 пользователей: утром главный бухгалтер нашла ошибку в печатной форме счёта. Администратор правит макет, нажимает F7, соглашается на динамическое обновление и пишет в общий чат: «Счёт исправлен, перезайдите в 1С». Через пять минут исправление у всех, никто не терял несохранённые документы.

Перезапуск рабочих процессов или службы сервера 1С обрывает все сеансы. Делайте это только когда в базе никого нет либо после предупреждения и установки блокировки сеансов.

Перед динамическим обновлением
Выполнено: 0 / 6

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

Можно ли запустить динамическое обновление из режима «1С:Предприятие»?
Нет. Обновить конфигурацию базы данных может только Конфигуратор, в том числе запущенный в пакетном режиме. Пользовательский режим умеет подключать расширения, но это отдельный механизм.
Нужно ли перезапускать сервер 1С после динамического обновления?
Нет. Новые сеансы сразу получают новую версию. Перезапуск рабочих процессов имеет смысл только для освобождения памяти после серии обновлений и только когда в базе никого нет.
Работает ли динамическое обновление в файловой базе?
Да. Механизм не зависит от варианта работы базы. Фоновое обновление со структурными изменениями доступно только в клиент-серверном варианте.
Как отменить динамическое обновление?
Отдельной кнопки отката нет. Верните прежнюю конфигурацию в основную (из выгруженного .cf или из хранилища) и снова обновите конфигурацию базы данных, тоже динамически, если структура не менялась.
Почему после обновления у одного пользователя всё работает, а у другого нет?
Первый перезашёл в программу, второй работает в сеансе, открытом до обновления. Сравните время начала сеанса в журнале регистрации со временем изменения конфигурации.