Обновление конфигурации 1С только при выходе пользователей: настройка и контроль

· 10 мин

Содержание

Чтобы запретить динамическое обновление 1С, обновляйте конфигурацию базы данных только в монопольном режиме: перед Конфигурация → Обновить конфигурацию базы данных выгоните пользователей и включите блокировку начала сеансов, а в скриптах пакетного обновления указывайте ключ /UpdateDBCfg -Dynamic-. Третья линия защиты — права: запустить Конфигуратор и применить изменения может только пользователь с правом «Администрирование».

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

Динамическое обновление конфигурации: в чём риск

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

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

Чем это грозит на практике:

  • 🔀 Рассинхрон версий. Старый сеанс проводит документ по старым правилам, новый — по новым. Движения расходятся, и найти причину потом трудно.
  • 🧩 Обработчики обновления не отработали. Типовые конфигурации после смены релиза запускают обработчики, которые переносят и дозаполняют данные. Пока часть пользователей сидит в старой версии, этот этап идёт вперемешку с их работой.
  • ⚠️ Ошибки у пользователей. Старый клиент обращается к серверному коду, который уже изменился. Отсюда сообщения о несовпадении версий, вылеты и предложения перезапустить программу.
  • 🕳️ Неполное применение. Если изменения затрагивают структуру таблиц, динамически их применить нельзя. Платформа всё равно потребует монопольный доступ или фоновое обновление.

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

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

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

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

Шаг 1. Заблокируйте вход пользователей

Есть два способа, выбирайте по типу базы.

Через программу (файловая и клиент-серверная база ). В типовых конфигурациях на БСП откройте раздел Администрирование и найдите в группе обслуживания команду «Блокировка работы пользователей». Укажите сообщение для пользователей, время начала и код разрешения. Программа сама предупредит людей и завершит их сеансы.

Через консоль кластера (только клиент-серверная база). В консоли администрирования серверов 1С откройте свойства информационной базы:

  1. Поставьте флажок «Блокировка начала сеансов включена».
  2. Заполните «Сообщение о блокировке» — его увидят пользователи при попытке входа.
  3. Задайте «Код разрешения», например upd77 или любой другой.
  4. Сохраните свойства. Затем в ветке «Сеансы» завершите оставшиеся сеансы.

Завершение сеансов обрывает работу пользователей без сохранения. Делайте это вне рабочего времени или после рассылки предупреждения минимум за 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".

Что здесь важно:

  1. /UpdateDBCfg -Dynamic- — применить конфигурацию к базе без динамики. Если в базе есть сеансы и нужен монопольный доступ, обновление завершится ошибкой, а не пройдёт «наполовину».
  2. /Out — журнал, в котором будет причина отказа. Без него ночной сбой останется загадкой.
  3. /UC — код разрешения, чтобы скрипт прошёл через блокировку начала сеансов.
  4. /DisableStartupDialogs — убирает стартовые диалоги, которые в пакетном режиме повесили бы процесс.

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

А если нужна работа без остановки

Для больших клиент-серверных баз платформа поддерживает фоновое обновление конфигурации : реструктуризация идёт в фоне, а монопольный доступ нужен только на короткий финальный этап. Это управляется ключами -BackgroundStart, -BackgroundFinish, -BackgroundCancel у того же /UpdateDBCfg. Подробности по режимам смотрите в справке к пакетному режиму вашей версии платформы (1cv8.exe /? выводит не всё, удобнее справка Конфигуратора).

Фоновое обновление — не то же самое, что динамическое. Оно не оставляет пользователей на старой версии: финальный этап всё равно требует, чтобы сеансы были закрыты.

1CEStart.cfg и ibases.v8i: файлы, которые управляют запуском

Часто под «динамическим обновлением» понимают другое: клиентский компьютер сам ставит новую версию платформы и начинает запускать базу на ней. Это не обновление конфигурации, но проблема похожая — версия меняется без спроса. Управляется она файлами стартера.

Отдельного файла settings.v8i у платформы нет. Настройки запуска лежат в двух файлах:

ФайлГде лежитЧто задаёт
1CEStart.cfgC:\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 и посмотрите строки. Это быстрее, чем гадать по поведению стартера.

Кто вообще может обновить конфигурацию: права пользователей

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

Правила такие:

  1. Конфигуратор открывает только пользователь с правом «Администрирование». В типовых конфигурациях это роль «Полные права» или профиль «Администратор». Бухгалтеру, кладовщику, менеджеру она не нужна.
  2. Сократите число администраторов. Откройте Администрирование → Настройки пользователей и прав → Пользователи и проверьте, у кого стоит профиль «Администратор». Часто там находятся уволенные программисты и «временные» учётки внедренцев.
  3. Разделите учётки. Программист работает в копии базы или в хранилище конфигурации, а в рабочую базу изменения попадают только через регламентное обновление.
  4. Задайте пароль администратору кластера (для клиент-серверной базы). Без него любой, у кого есть консоль, может снять блокировку сеансов и завершить чужие сеансы.

Хранилище конфигурации как дисциплина

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

Тогда соблазна «быстро поправить и нажать F7 при работающих людях» просто не возникает.

Диагностика: как понять, что обновление всё-таки прошло динамически

Признаки, что в базе прошло динамическое обновление:

  • 🔔 Типовая конфигурация показывает пользователям сообщение, что программа обновлена, и предлагает перезапуск. Механизм основан на функции платформы КонфигурацияБазыДанныхИзмененаДинамически(): она возвращает Истина, если конфигурация базы изменилась после старта сеанса.
  • 🖥️ В Конфигураторе при F7 возникает вопрос о динамическом обновлении — значит, в базе есть другие сеансы.
  • 📜 В журнале регистрации есть событие изменения конфигурации базы данных в рабочее время, при этом другие пользователи продолжали работу.
Диагностика: выберите симптом

Что сделать после случайного динамического обновления

  1. Не паникуйте и не откатывайте конфигурацию на ходу — это второе динамическое обновление поверх первого.
  2. Разошлите пользователям просьбу закрыть программу и войти заново.
  3. Если обновлялся релиз типовой конфигурации, зайдите первым под администратором и дождитесь завершения обработчиков обновления.
  4. Проверьте документы, которые проводились в окне между обновлением и перезапуском. При расхождениях перепроведите их.

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

Можно ли запретить динамическое обновление одной галочкой в настройках базы?
Нет. В свойствах информационной базы такой настройки нет. Запрет обеспечивают блокировка сеансов, ключ -Dynamic- в пакетных скриптах и ограничение прав на Конфигуратор.
Работает ли динамическое обновление в файловой базе?
Да, если с базой одновременно работают другие пользователи. Поэтому для файловых баз правило то же: обновлять только после выхода всех пользователей.
Расширения конфигурации тоже обновляются динамически?
Расширение можно подключить и обновить при работающих пользователях. Изменения увидят сеансы, которые начнутся после этого, поэтому после загрузки расширения в рабочую базу попросите пользователей перезапустить программу.
Как часто нужно перезапускаться после динамического обновления?
Один раз: при следующем входе сеанс получит новую версию. Держать открытой старую версию весь день не стоит — это источник ошибок проведения.
Мешает ли запрет динамики автоматическому обновлению через интернет-поддержку?
Нет. Встроенный механизм обновления типовых конфигураций сам завершает сеансы и обновляет базу монопольно. Ему нужно лишь, чтобы в назначенное время никто не работал.