Обновление конфигурации 1С только при выходе пользователей: настройка и контроль
Содержание
Чтобы запретить динамическое обновление 1С, обновляйте конфигурацию базы данных только в монопольном режиме: перед Конфигурация → Обновить конфигурацию базы данных выгоните пользователей и включите блокировку начала сеансов, а в скриптах пакетного обновления указывайте ключ /UpdateDBCfg -Dynamic-. Третья линия защиты — права: запустить Конфигуратор и применить изменения может только пользователь с правом «Администрирование».
Отдельного флажка «запретить динамическое обновление» в свойствах информационной базы нет. Запрет складывается из регламента, параметров запуска и прав. Всё ниже относится к платформе 1С:Предприятие 8.3 и не зависит от конфигурации: БП, ЗУП, УТ обновляются одинаково.
Динамическое обновление конфигурации: в чём риск
Динамическое обновление — это применение изменённой конфигурации к базе, пока в ней работают люди. Платформа записывает новую конфигурацию, но открытые сеансы продолжают жить на старой. Новая версия достаётся только тем, кто зайдёт в программу после обновления.
В итоге в одной базе одновременно работают две версии кода. Для мелкой правки печатной формы это терпимо. Для обновления типовой конфигурации на новый релиз — нет.
Чем это грозит на практике:
- 🔀 Рассинхрон версий. Старый сеанс проводит документ по старым правилам, новый — по новым. Движения расходятся, и найти причину потом трудно.
- 🧩 Обработчики обновления не отработали. Типовые конфигурации после смены релиза запускают обработчики, которые переносят и дозаполняют данные. Пока часть пользователей сидит в старой версии, этот этап идёт вперемешку с их работой.
- ⚠️ Ошибки у пользователей. Старый клиент обращается к серверному коду, который уже изменился. Отсюда сообщения о несовпадении версий, вылеты и предложения перезапустить программу.
- 🕳️ Неполное применение. Если изменения затрагивают структуру таблиц, динамически их применить нельзя. Платформа всё равно потребует монопольный доступ или фоновое обновление.
Чаще всего динамику запускают не злонамеренно. Программист правит модуль в рабочей базе, жмёт F7, видит вопрос о динамическом обновлении и соглашается, потому что «люди работают, выгонять не хочется».
Динамическое обновление уместно для разработческих и тестовых баз, где сидит один-два человека. В рабочей базе с десятками пользователей его лучше исключить регламентом.
Ручное обновление в Конфигураторе: как не допустить динамики
Если обновляете базу руками через Конфигуратор, запрет обеспечивает порядок действий. Платформа предлагает динамическое обновление только тогда, когда в базе есть другие сеансы. Нет сеансов — нет и вопроса.
Шаг 1. Заблокируйте вход пользователей
Есть два способа, выбирайте по типу базы.
Через программу (файловая и клиент-серверная база
). В типовых конфигурациях на БСП откройте раздел Администрирование и найдите в группе обслуживания команду «Блокировка работы пользователей». Укажите сообщение для пользователей, время начала и код разрешения. Программа сама предупредит людей и завершит их сеансы.
Через консоль кластера (только клиент-серверная база). В консоли администрирования серверов 1С откройте свойства информационной базы:
- Поставьте флажок «Блокировка начала сеансов включена».
- Заполните «Сообщение о блокировке» — его увидят пользователи при попытке входа.
- Задайте «Код разрешения», например
upd77или любой другой. - Сохраните свойства. Затем в ветке «Сеансы» завершите оставшиеся сеансы.
Завершение сеансов обрывает работу пользователей без сохранения. Делайте это вне рабочего времени или после рассылки предупреждения минимум за 10–15 минут.
Шаг 2. Войдите в Конфигуратор с кодом разрешения
При включённой блокировке войти может только тот, кто знает код. Добавьте его в строку запуска параметром /UC:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S "srv01\buh" /N "Администратор" /UCupd77
Путь к 1cv8.exe и номер версии подставьте свои. Код пишется сразу после /UC, без пробела.
Шаг 3. Примените изменения
Выполните Конфигурация → Обновить конфигурацию базы данных или нажмите F7. Если вопрос о динамическом обновлении всё же появился, значит, в базе остался кто-то ещё — фоновое задание, сеанс обмена или забытый клиент.
Отвечайте «Нет» и ищите оставшийся сеанс, а не соглашайтесь на динамику. Список сеансов виден в консоли кластера или в типовой обработке «Активные пользователи».
Шаг 4. Снимите блокировку
После обновления и отработки обработчиков в пользовательском режиме снимите флажок блокировки в консоли или отключите блокировку в программе. Только после этого пускайте людей.
Ключ -Dynamic- в пакетном режиме и параметрах ярлыка
Большинство регулярных обновлений сейчас идёт скриптами: по расписанию, ночью, без участия человека. Здесь запрет динамического обновления задаётся явно, ключом командной строки.
У параметра пакетного режима /UpdateDBCfg есть уточнение -Dynamic с режимом:
| Ключ | Что делает | Когда использовать |
|---|---|---|
-Dynamic+ | Разрешает динамическое обновление | Тестовые и разработческие базы |
-Dynamic- | Запрещает динамическое обновление | Рабочие базы, ночные скрипты |
| без ключа | Поведение по умолчанию платформы | Не рекомендуется для рабочих баз — результат неочевиден |
Пример bat-файла для клиент-серверной базы:
@echo off
set V8="C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"
set BASE="srv01\buh"
set LOG="D:\1c_logs\update_buh.txt"
%V8% DESIGNER /S %BASE% /N "Администратор" /P "пароль" /UCupd77 ^
/UpdateDBCfg -Dynamic- /Out %LOG% /DisableStartupDialogs
Для файловой базы замените /S %BASE% на /F "D:\Bases\buh".
Что здесь важно:
/UpdateDBCfg -Dynamic-— применить конфигурацию к базе без динамики. Если в базе есть сеансы и нужен монопольный доступ, обновление завершится ошибкой, а не пройдёт «наполовину»./Out— журнал, в котором будет причина отказа. Без него ночной сбой останется загадкой./UC— код разрешения, чтобы скрипт прошёл через блокировку начала сеансов./DisableStartupDialogs— убирает стартовые диалоги, которые в пакетном режиме повесили бы процесс.
Пароль в bat-файле — уязвимость. Храните скрипт в папке, доступной только учётке, под которой работает планировщик, или передавайте пароль из защищённого хранилища.
А если нужна работа без остановки
Для больших клиент-серверных баз платформа поддерживает фоновое обновление конфигурации
: реструктуризация идёт в фоне, а монопольный доступ нужен только на короткий финальный этап. Это управляется ключами -BackgroundStart, -BackgroundFinish, -BackgroundCancel у того же /UpdateDBCfg. Подробности по режимам смотрите в справке к пакетному режиму вашей версии платформы (1cv8.exe /? выводит не всё, удобнее справка Конфигуратора).
Фоновое обновление — не то же самое, что динамическое. Оно не оставляет пользователей на старой версии: финальный этап всё равно требует, чтобы сеансы были закрыты.
1CEStart.cfg и ibases.v8i: файлы, которые управляют запуском
Часто под «динамическим обновлением» понимают другое: клиентский компьютер сам ставит новую версию платформы и начинает запускать базу на ней. Это не обновление конфигурации, но проблема похожая — версия меняется без спроса. Управляется она файлами стартера.
Отдельного файла settings.v8i у платформы нет. Настройки запуска лежат в двух файлах:
| Файл | Где лежит | Что задаёт |
|---|---|---|
1CEStart.cfg | C:\ProgramData\1C\1CEStart\ — для всех пользователей компьютера | Общие параметры стартера: версии, каталоги дистрибутивов, автоустановку |
1CEStart.cfg | %APPDATA%\1C\1CEStart\ — для конкретного пользователя | То же, но только для этого пользователя |
ibases.v8i | %APPDATA%\1C\1CEStart\ | Список баз и параметры каждой, включая версию платформы |
Запретить автоустановку новой версии платформы
В 1CEStart.cfg (общий, в ProgramData) добавьте строку:
AppAutoInstallLastVersion=0
Значение 0 отключает автоматическую установку последней версии. Редактируйте файл блокнотом и сохраняйте в той же кодировке, в которой он был открыт: после смены кодировки стартер может его не прочитать.
Закрепить версию платформы для базы
В ibases.v8i у каждой базы есть блок в квадратных скобках. Строка Version= фиксирует версию:
[Бухгалтерия]
Connect=Srvr="srv01";Ref="buh";
Version=8.3.24
Можно указать номер полностью (8.3.24.1548) или маской (8.3.24) — тогда стартер возьмёт последнюю установленную сборку этой версии. То же поле правится в окне запуска: кнопка Изменить → последняя страница мастера, поле «Версия 1С:Предприятия».
Параметр ярлыка вместо стартера
Ярлык на 1cestart.exe подбирает версию сам. Ярлык прямо на C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe запускает ровно эту сборку. Для рабочих мест, где версию менять нельзя, это самый простой вариант.
Ещё есть ключ /AppAutoCheckVersion-: он отключает автоматический подбор версии платформы под базу. Используйте его осознанно: при несовпадении с версией сервера клиент просто не подключится.
Реестр Windows: чего в нём нет
Поведение обновления конфигурации в реестре Windows не хранится. Ни ключа «запретить динамическое обновление», ни аналога AppAutoInstallLastVersion там нет. Советы «создайте параметр DWORD в HKEY_CURRENT_USER\Software\1C» — выдумка, они ничего не меняют.
Реестр и групповые политики полезны с другой стороны — как способ ограничить сам компьютер:
- 🔒 Не выдавайте пользователям права локального администратора. Без них установщик платформы в
Program Filesне отработает, и автоустановка новой версии не пройдёт. - 🗂️ Раздайте общий
1CEStart.cfgгрупповой политикой (настройки «Файлы» в GPO) и закройте пользователям запись вC:\ProgramData\1C\1CEStart\. - 📋 Список баз централизуйте через параметр
CommonInfoBasesв1CEStart.cfg: он указывает на общий файл списка баз на сетевом ресурсе. Пользователь не сможет «случайно» переключить базу на другую версию.
Если хотите проверить, что настройка дошла до рабочего места, откройте на нём C:\ProgramData\1C\1CEStart\1CEStart.cfg и посмотрите строки. Это быстрее, чем гадать по поведению стартера.
Кто вообще может обновить конфигурацию: права пользователей
Динамическое обновление запускается из Конфигуратора. Значит, главный запрет — не пускать туда лишних людей.
Правила такие:
- Конфигуратор открывает только пользователь с правом «Администрирование». В типовых конфигурациях это роль «Полные права» или профиль «Администратор». Бухгалтеру, кладовщику, менеджеру она не нужна.
- Сократите число администраторов. Откройте
Администрирование → Настройки пользователей и прав → Пользователии проверьте, у кого стоит профиль «Администратор». Часто там находятся уволенные программисты и «временные» учётки внедренцев. - Разделите учётки. Программист работает в копии базы или в хранилище конфигурации, а в рабочую базу изменения попадают только через регламентное обновление.
- Задайте пароль администратору кластера (для клиент-серверной базы). Без него любой, у кого есть консоль, может снять блокировку сеансов и завершить чужие сеансы.
Хранилище конфигурации как дисциплина
Если в компании дорабатывают конфигурацию, подключите рабочую базу к хранилищу только на чтение или не подключайте вовсе. Разработка идёт в отдельной базе, изменения собираются в файл .cf или .cfe, а в рабочую базу загружаются по графику, ночью, скриптом с -Dynamic-.
Тогда соблазна «быстро поправить и нажать F7 при работающих людях» просто не возникает.
Диагностика: как понять, что обновление всё-таки прошло динамически
Признаки, что в базе прошло динамическое обновление:
- 🔔 Типовая конфигурация показывает пользователям сообщение, что программа обновлена, и предлагает перезапуск. Механизм основан на функции платформы
КонфигурацияБазыДанныхИзмененаДинамически(): она возвращаетИстина, если конфигурация базы изменилась после старта сеанса. - 🖥️ В Конфигураторе при
F7возникает вопрос о динамическом обновлении — значит, в базе есть другие сеансы. - 📜 В журнале регистрации есть событие изменения конфигурации базы данных в рабочее время, при этом другие пользователи продолжали работу.
Что сделать после случайного динамического обновления
- Не паникуйте и не откатывайте конфигурацию на ходу — это второе динамическое обновление поверх первого.
- Разошлите пользователям просьбу закрыть программу и войти заново.
- Если обновлялся релиз типовой конфигурации, зайдите первым под администратором и дождитесь завершения обработчиков обновления.
- Проверьте документы, которые проводились в окне между обновлением и перезапуском. При расхождениях перепроведите их.