Динамическое обновление конфигурации 1С без выгона пользователей
Содержание
Динамическое обновление в 1С запускают из Конфигуратора: после изменения основной конфигурации выберите Конфигурация → Обновить конфигурацию базы данных (клавиша F7). Если в базе работают пользователи и монопольный режим установить нельзя, платформа сама предложит применить изменения динамически — согласитесь, и новая конфигурация базы данных запишется без завершения чужих сеансов.
Из командной строки то же самое делает ключ /UpdateDBCfg -Dynamic+. Работающие пользователи остаются на старой версии до перезапуска программы, а все новые сеансы сразу открываются уже с изменениями. Это удобно для срочной правки модуля или формы днём, но для изменений структуры данных обычно не подходит.
Как устроено динамическое обновление и при чём тут клиенты
В информационной базе 1С хранятся две конфигурации:
- 🛠️ Основная конфигурация — та, которую вы правите в Конфигураторе или обновляете из файла поставки.
- 🗄️ Конфигурация базы данных — та, с которой реально работают пользователи.
Обновление — это перенос основной конфигурации в конфигурацию базы данных. В обычном режиме платформа требует монопольный доступ: в базе не должно быть других сеансов. Динамический режим снимает это требование. Конфигурация базы данных обновляется, а уже открытые сеансы продолжают работать с той версией, с которой стартовали.
Отсюда главное правило: запустить обновление может только Конфигуратор (или пакетный запуск Конфигуратора). Пользовательские клиенты лишь получают результат.
| Клиент | Что умеет в части обновления |
|---|---|
| Тонкий клиент | Только работает с конфигурацией базы данных. После динамического обновления видит изменения после перезапуска |
| Веб-клиент | То же, что тонкий: новая версия после повторного входа |
| Толстый клиент в режиме «1С:Предприятие» | Тоже только пользуется конфигурацией, запускать обновление не может |
| Конфигуратор | Правит основную конфигурацию и обновляет конфигурацию базы данных, в том числе динамически |
Режим работы базы на сам механизм не влияет: динамически обновляют и файловые, и клиент-серверные базы.
Что можно и что нельзя обновлять динамически
Платформа сама проверяет, допустимо ли применить изменения без монопольного режима. Решает характер правок.
Обычно проходят динамически:
- ✅ изменения в модулях объектов, менеджеров, общих модулях;
- ✅ правки управляемых форм и макетов печатных форм;
- ✅ новые отчёты и обработки внутри конфигурации;
- ✅ изменения ролей и командного интерфейса.
Проблемы начинаются, когда правка затрагивает хранение данных:
- ❌ новые или удалённые реквизиты справочников, документов, регистров;
- ❌ изменение типа реквизита или длины строки;
- ❌ новые объекты метаданных, под которые нужны таблицы;
- ❌ изменение индексирования и измерений регистров.
Такие изменения требуют реструктуризации таблиц. Платформа может отказать в динамическом обновлении и попросить монопольный режим. В клиент-серверной базе для этого случая есть фоновое обновление: тяжёлая часть реструктуризации идёт, пока люди работают, а монопольный доступ нужен только на короткое завершение.
Если правку нужно выкатить днём, а она меняет структуру, подумайте о расширении конфигурации. Расширение подключается без обновления основной конфигурации, и новые сеансы получают изменения сразу после его записи.
Пошагово: динамическое обновление в Конфигураторе
1. Подготовьте основную конфигурацию
Откройте базу в режиме Конфигуратора и выберите Конфигурация → Открыть конфигурацию. Дальше вариант зависит от того, откуда берутся изменения:
- Свои правки. Внесите изменения в модули или формы и сохраните конфигурацию (
Ctrl+S). - Хранилище. Выберите
Конфигурация → Хранилище конфигурации → Обновить конфигурацию из хранилища. - Файл .cf. Загрузите его через
Конфигурация → Загрузить конфигурацию из файла. Учтите, что загрузка полностью заменяет основную конфигурацию. - Обновление типовой. Используйте
Конфигурация → Поддержка → Обновить конфигурациюи выберите файл.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. Код завершения процесса не всегда отражает, применилось ли обновление динамически или было отклонено.
Ошибки при динамическом обновлении и что с ними делать
Ниже — ситуации, на которые администратор натыкается чаще всего. Выберите свой симптом.
Обновлять динамически во время закрытия месяца, проведения зарплаты или массового перепроведения нельзя. Смешение старого и нового кода в длинной операции даёт ошибки, которые потом трудно найти.
Журнал регистрации: проверяем, что и когда обновилось
Журнал регистрации отвечает на два вопроса: прошло ли обновление и кто сидел в базе в этот момент. В Конфигураторе он открывается через Администрирование → Журнал регистрации.
Как искать:
- Откройте отбор и задайте интервал, когда запускали обновление.
- В списке событий отметьте события группы «Информационная база», связанные с изменением конфигурации.
- Посмотрите время, пользователя и компьютер, с которых шло обновление.
- Для разбора жалоб добавьте в отбор события начала и завершения сеансов. Так видно, кто стартовал до обновления и работал на старой версии.
Сопоставление двух времён решает большинство споров «у меня не работает»: если сеанс пользователя открыт раньше записи об изменении конфигурации, ему достаточно перезапуска.
Журнал пишется, только если не отключён его уровень. Проверьте настройку в Администрирование → Настройка журнала регистрации: чтобы видеть изменения конфигурации и начало сеансов, нужен уровень «Информация» или подробнее.
Ошибки бизнес-логики после обновления ищите в том же журнале с отбором по уровню «Ошибка» и интервалу после обновления. Строки с одинаковым текстом от разных пользователей почти всегда указывают на изменённый модуль.
Как обновлять динамически без сюрпризов
Динамическое обновление — инструмент для точечных правок, а не замена регламентного обновления. Набор привычек, который снимает большую часть проблем:
- 🧪 Сначала копия. Прогоните изменения на тестовой базе с похожими данными. Динамика в тесте выглядит так же, как в рабочей базе.
- 💾 Резервная копия перед обновлением структуры. Для правок только кода хватит выгрузки основной конфигурации в
.cf. Если затронуты таблицы — нужна полная копия базы. - ⏱️ Выбирайте время. Лучше обновлять в обед или в начале дня, когда нет длинных операций, чем в разгар закрытия периода.
- 📢 Предупреждайте людей. Короткое сообщение «в 13:00 обновление, после перезайдите» экономит время на разбор жалоб.
- 🔁 Не копите динамические обновления. В клиент-серверной базе рабочие процессы держат в памяти несколько версий конфигурации, пока на старых сидят сеансы. После серии правок за день попросите всех перезайти, а вечером, когда сеансов нет, можно перезапустить рабочие процессы.
- 🧩 Структуру — в регламент. Новые реквизиты и объекты обновляйте вне рабочего времени или фоновым обновлением.
Типовой сценарий для бухгалтерии на 30 пользователей: утром главный бухгалтер нашла ошибку в печатной форме счёта. Администратор правит макет, нажимает F7, соглашается на динамическое обновление и пишет в общий чат: «Счёт исправлен, перезайдите в 1С». Через пять минут исправление у всех, никто не терял несохранённые документы.
Перезапуск рабочих процессов или службы сервера 1С обрывает все сеансы. Делайте это только когда в базе никого нет либо после предупреждения и установки блокировки сеансов.