Монопольный доступ к базе 1С 8.3: блокировка сеансов, код /UC и пакетный запуск

· 9 мин

Содержание

Чтобы запустить 1С 8.3 в монопольном режиме, нужно сделать так, чтобы в базе не осталось других сеансов, и войти в неё одним пользователем. В файловой базе для этого выводят всех пользователей и проверяют список Администрирование → Активные пользователи в Конфигураторе. В клиент-серверной включают блокировку начала сеансов в консоли кластера и входят с кодом разрешения через параметр /UC.

Отдельной кнопки «Запустить монопольно» в окне запуска 1С:Предприятия нет. Монопольный режим платформа ставит сама, когда операция его требует и других сеансов нет: обновление структуры базы, загрузка выгрузки .dt, тестирование и исправление. Ещё его можно установить из кода методом УстановитьМонопольныйРежим(). Вся работа администратора сводится к одному: освободить базу и не пустить в неё никого, пока идут работы.

Когда нужен монопольный режим и что подготовить заранее

Монопольный доступ нужен не для каждой правки. Без него не выполнить:

  • 🔧 обновление конфигурации базы данных, если меняется структура (новые реквизиты, регистры, индексы);
  • 📦 загрузку информационной базы из файла .dt — она полностью заменяет данные;
  • 🩺 тестирование и исправление информационной базы;
  • 🧩 часть обработок, которые сами вызывают УстановитьМонопольныйРежим(Истина), например, групповую перенумерацию или свёртку.

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

Перед началом проверьте четыре вещи:

  1. Права. У пользователя, под которым вы входите, должны быть права администратора и право «Монопольный режим» в роли. В типовых конфигурациях оно есть у роли «Полные права».
  2. Время. Предупредите коллег и выберите окно, когда базу можно остановить. Обновление крупной базы может идти час и дольше.
  3. Резервная копия. Перед обновлением структуры, загрузкой .dt и тестированием с исправлением сделайте копию базы . Для файловой — копия каталога с 1Cv8.1CD при выключенных клиентах, для серверной — выгрузка .dt или бэкап средствами СУБД.
  4. Скрытые подключения. Сеанс держат не только люди. Это фоновые и регламентные задания, веб-клиент и HTTP-сервисы через опубликованную базу, внешние соединения (COM) от других программ, обмены по расписанию.

Как запустить 1С 8.3 в монопольном режиме в файловой базе

В файловом варианте нет консоли кластера. Базой владеет файл 1Cv8.1CD, и монопольный режим получится, только когда все процессы 1С, открывшие этот файл, завершатся.

Шаг 1. Выведите пользователей

Если в конфигурации есть подсистема блокировки (она есть в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других типовых на БСП), откройте Администрирование → Обслуживание и найдите ссылку «Блокировка работы пользователей». В форме задают:

  • текст сообщения, которое увидят пользователи;
  • время начала и окончания блокировки;
  • код для разблокировки — набор цифр или букв, его вы потом передадите в параметре /UC.

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

Если подсистемы нет, просто попросите всех выйти и закрыть программу.

Шаг 2. Проверьте, что база пуста

  1. В окне запуска выберите базу и нажмите «Конфигуратор».
  2. Откройте Администрирование → Активные пользователи.
  3. В списке должен остаться только ваш сеанс Конфигуратора.

Если в списке висит сеанс человека, который давно ушёл, процесс 1С у него, скорее всего, не закрылся. На терминальном сервере его видно в диспетчере задач как 1cv8.exe или 1cv8c.exe.

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

Шаг 3. Выполните операцию

Запускайте нужное действие из Конфигуратора: Конфигурация → Обновить конфигурацию базы данных, Администрирование → Загрузить информационную базу или Администрирование → Тестирование и исправление. Платформа сама переведёт базу в монопольный режим. Если в базе остался кто-то ещё, операция не начнётся и выдаст сообщение о невозможности установить монопольный режим.

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

На сервере 1С сеансы видит и обрывает кластер. Поэтому порядок другой: запретить новые подключения, завершить текущие, войти с кодом.

Через консоль администрирования серверов 1С

  1. Откройте консоль, разверните Кластеры → <ваш кластер> → Информационные базы.
  2. Откройте свойства нужной базы. Консоль спросит логин и пароль администратора информационной базы.
  3. Включите флажок «Блокировка начала сеансов включена».
  4. Заполните «Начало» и «Конец» периода, «Сообщение» для пользователей и «Код разрешения».
  5. Если обновляете структуру, включите и «Блокировка регламентных заданий включена» — иначе регламентные задания продолжат открывать сеансы.
  6. Нажмите «ОК».
  7. Перейдите в ветку Сеансы этой базы, выделите оставшиеся сеансы и удалите их через контекстное меню.

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

Затем запускайте Конфигуратор с кодом разрешения. В окне запуска 1С выберите базу, нажмите «Изменить» и в дополнительных параметрах запуска впишите /UC12345, где 12345 — ваш код. Или запускайте из командной строки (пример ниже).

После работ снимите оба флажка блокировки, иначе утром никто не войдёт.

Через утилиту rac

Если консоли нет под рукой или нужна автоматизация, то же самое делает утилита rac. Она работает через сервер администрирования ras (по умолчанию порт 1545), поэтому служба ras должна быть запущена.

rac localhost:1545 cluster list
rac localhost:1545 infobase summary list --cluster=<uuid кластера>

rac localhost:1545 infobase update --cluster=<uuid кластера> --infobase=<uuid базы> ^
  --infobase-user=Администратор --infobase-pwd=*** ^
  --sessions-deny=on --scheduled-jobs-deny=on ^
  --denied-message="Обновление базы" --permission-code=12345

rac localhost:1545 session list --cluster=<uuid кластера> --infobase=<uuid базы>
rac localhost:1545 session terminate --cluster=<uuid кластера> --session=<uuid сеанса>

Если на кластере задан администратор, к каждой команде добавьте --cluster-user и --cluster-pwd. Блокировку снимают той же командой infobase update со значениями --sessions-deny=off --scheduled-jobs-deny=off. Точный набор параметров для вашей версии платформы покажет rac help infobase и rac help session.

Запуск 1С из командной строки: параметры для монопольной работы

Командная строка нужна, когда работы идут без человека: ночью, по расписанию, на нескольких базах подряд. Запускают 1cv8.exe из каталога установленной версии, например C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe.

ПараметрЧто делает
DESIGNERзапуск в режиме Конфигуратора
ENTERPRISEзапуск в режиме 1С:Предприятия
/F"путь"файловая база: каталог с 1Cv8.1CD
/S"сервер\база"серверная база
/N"имя" и /P"пароль"пользователь и пароль базы
/UC<код>код разрешения для входа при включённой блокировке
/UpdateDBCfgобновить конфигурацию базы данных (пакетный режим)
/DumpIB"файл.dt"выгрузить базу в файл
/Out"файл"писать сообщения в журнал
/DisableStartupDialogsне показывать диалоги при запуске

Пример обновления серверной базы из пакетного файла:

@echo off
set V8="C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe"
set LOG=C:\1c_scripts\logs\update.log

%V8% DESIGNER /S"srv1c\buh" /N"Администратор" /P"пароль" /UC12345 /DisableStartupDialogs /UpdateDBCfg /Out"%LOG%"

if %ERRORLEVEL% neq 0 (
  echo Обновление не выполнено, смотрите %LOG%
  exit /b 1
)

Для файловой базы замените /S"srv1c\buh" на /F"D:\Bases\Buh". Код возврата 0 означает успех, всё остальное — повод открыть журнал из /Out.

В типовых конфигурациях на БСП есть параметры запуска /C ЗавершитьРаботуПользователей и /C РазрешитьРаботуПользователей. Первый включает блокировку и завершает сеансы, второй снимает блокировку. Их удобно вызывать из того же пакетного файла режимом ENTERPRISE, особенно в файловых базах, где нет rac.

Установка монопольного режима из кода

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

Если Не МонопольныйРежим() Тогда
    Попытка
        УстановитьМонопольныйРежим(Истина);
    Исключение
        ВызватьИсключение "Не удалось установить монопольный режим: в базе работают другие пользователи. "
            + ОписаниеОшибки();
    КонецПопытки;
КонецЕсли;

Попытка
    ВыполнитьОбработкуДанных(); // ваша процедура
Исключение
    УстановитьМонопольныйРежим(Ложь);
    ВызватьИсключение;
КонецПопытки;

УстановитьМонопольныйРежим(Ложь);

Метод не выгоняет пользователей. Если в базе есть другие сеансы, он вызывает исключение, поэтому оборачивайте его в Попытка. Снимайте режим и в ветке ошибки — иначе база останется занятой до конца вашего сеанса.

Почему 1С не переходит в монопольный режим

Сообщение о невозможности установить монопольный режим почти всегда означает одно: в базе есть ещё сеанс. Найти его помогает список ниже.

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

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

Монопольный запуск по расписанию: ночное обслуживание без участия

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

  1. rac ... infobase update ... --sessions-deny=on --scheduled-jobs-deny=on --permission-code=12345 — закрыть вход.
  2. rac ... session list и session terminate по каждому сеансу — выгнать оставшихся.
  3. 1cv8.exe DESIGNER /S... /UC12345 /DumpIB"..." — копия перед изменениями.
  4. 1cv8.exe DESIGNER /S... /UC12345 /UpdateDBCfg /Out"..." — обновление.
  5. rac ... infobase update ... --sessions-deny=off --scheduled-jobs-deny=off — открыть вход.

Для файловой базы шаги 1–2 заменяет запуск ENTERPRISE с /C ЗавершитьРаботуПользователей, шаг 5 — запуск с /C РазрешитьРаботуПользователей.

Пакетный файл ставят в планировщик заданий Windows:

schtasks /Create /TN "1C_night_update" /TR "C:\1c_scripts\update.bat" /SC WEEKLY /D SUN /ST 02:00 /RU svc1c /RP *

Окно лучше брать с запасом. Если обычное обновление занимает 40 минут, планируйте два часа: реструктуризация после крупного релиза идёт заметно дольше, а копия .dt растёт вместе с базой. Время окончания блокировки в шаге 1 ставьте по концу окна, а не по ожидаемому концу работ.

Запускайте задание от отдельной служебной учётной записи Windows, у которой есть доступ к каталогу базы и к журналам. Пароли пользователей 1С в пакетном файле храните только на сервере, в каталоге с ограниченным доступом.

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

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

Можно ли работать в 1С:Предприятии, пока база в монопольном режиме?
Да, если монопольный режим установил ваш же сеанс, например, обработка. Остальные пользователи войти не смогут, пока режим не снят.
Снимается ли монопольный режим сам?
Да. Он действует, пока жив сеанс, который его установил. Закрыли Конфигуратор или программу — режим снят. Блокировка начала сеансов, наоборот, сама не снимается до конца указанного периода.
Чем блокировка начала сеансов отличается от монопольного режима?
Блокировка запрещает новые входы, но не выгоняет тех, кто уже работает. Монопольный режим — состояние, когда в базе ровно один сеанс. Блокировка — способ к нему прийти.
Нужна ли отдельная лицензия для монопольного запуска?
Нет. Сеанс в монопольном режиме — обычный сеанс и занимает одну клиентскую лицензию, как любой вход в базу.
Почему динамическое обновление не заменяет монопольный режим?
Динамическое обновление применяет изменения без выгона пользователей, но не во всех случаях. При реструктуризации больших таблиц и для загрузки .dt монопольный доступ всё равно нужен, а уже работающие сеансы продолжают жить со старой конфигурацией до перезапуска.