Почему зависает Конфигуратор 1С при обновлении базы на сервере через RDP и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

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

Выясняем причины проблемы

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

  1. Лимит адресного пространства 32-битного Конфигуратора. Во многих версиях платформы 1С:Предприятие 8.3 Конфигуратор работает как 32-битное приложение, ограниченное адресным пространством 2–3 ГБ. При сравнении метаданных, загрузке тяжелых файлов и последующей реструктуризации процесс упирается в лимит памяти и уходит в бесконечное ожидание или аварийно падает.
  2. Активные фоновые и регламентные задания. Если в базе активны регламентные процессы (например, РегламентныеЗадания по загрузке курсов валют, закрытию месяца или обновлению полнотекстового поиска), они непрерывно удерживают сессионные блокировки таблиц конфигурации. При попытке Конфигуратора захватить монопольную блокировку структуры возникает взаимная блокировка (deadlock).
  3. Влияние протокола Shared Memory. Когда Конфигуратор запускается на том же физическом сервере, где развернута СУБД, обращение к базе по умолчанию может происходить через разделяемую память (Shared Memory). В ряде конфигураций СУБД это провоцирует зависание потоков транзакций, в то время как подключение по TCP/IP с внешнего ПК разработчика работает без подобных сбоев.
  4. Блокировка временных файлов и повреждение локального кэша. В процессе обновления Конфигуратор генерирует десятки тысяч временных файлов в профиле пользователя RDP (%TEMP% и каталогах AppData\Local\1C). Проверка этих файлов серверным антивирусом или службами индексации на лету способна намертво заблокировать процесс.

Шаг 1. Подготовка базы: блокировка сеансов и остановка регламентных заданий

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

  1. Через консоль администрирования кластера серверов 1С или через диалог Блокировка работы пользователей в режиме «1С:Предприятие» включите признак Блокировка начала сеансов включена и Блокировка регламентных заданий включена.
  2. Завершите все активные пользовательские сеансы и обязательно проверьте отсутствие активных фоновых заданий в консоли кластера.
  3. Если база обновляется скриптом или пакетным файлом, используйте ключ командной строки /SetSessionLock для временного закрытия доступа.

Шаг 2. Очистка кэша Конфигуратора и профиля пользователя

Перед загрузкой изменений обязательно выполним очистку временных файлов 1С в терминальном профиле. Разберем по шагам:

  1. Завершите все процессы 1cv8.exe и 1cv8c.exe в диспетчере задач.
  2. Перейдите в служебные каталоги пользователя Windows и удалите содержимое папок с кэшем конфигураций:

    %LOCALAPPDATA%\1C\1cv8\

    %APPDATA%\1C\1cv8\

  3. Очистите системный каталог временных файлов %TEMP%.

Шаг 3. Разделение фаз загрузки и применения изменений в БД

Если обновление падает при совмещении нескольких операций в одном сеансе, применим проверенный алгоритм поэтапного наката:

  1. Запустите Конфигуратор и выполните только команду Конфигурация — Загрузить конфигурацию из файла (загружаем подготовленный .cf файл).
  2. Не нажимайте кнопку обновления конфигурации базы данных (F7). Сохраните файл конфигурации и закройте Конфигуратор штатно.
  3. Снова запустите Конфигуратор и только теперь примените изменения к базе данных (F7 или Конфигурация — Обновить конфигурацию базы данных).

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

Шаг 4. Перенос реструктуризации на сервер 1С

Чтобы исключить падение 32-битного клиента из-за нехватки оперативной памяти при реструктуризации, перенесем выполнение этой задачи на 64-битный серверный процесс rphost. Для этого используем запуск пакетного обновления с параметром -Server.

Посмотрим на пример командного файла (.bat), выполняющего фоновое обновление базы на сервере:


@echo off
set V8PATH="C:\Program Files\1cv8\8.3.8.1652\bin\1cv8.exe"
set SRV_NAME=SERVER1C
set IB_NAME=BuhBase
set ADMIN_USER=Administrator
set ADMIN_PASS=StrongPassword
set CF_FILE="C:\Deploy\update.cf"

echo Загрузка конфигурации...
%V8PATH% DESIGNER /S "%SRV_NAME%\%IB_NAME%" /N "%ADMIN_USER%" /P "%ADMIN_PASS%" /LoadCfg %CF_FILE% /Out "C:\Deploy\log_load.txt"

echo Применение изменений на сервере 1С...
%V8PATH% DESIGNER /S "%SRV_NAME%\%IB_NAME%" /N "%ADMIN_USER%" /P "%ADMIN_PASS%" /UpdateDBCfg -Server -Dynamic- /Out "C:\Deploy\log_update.txt"

Разберем используемые параметры:

  1. /LoadCfg — выполняет полную загрузку метаданных из файла поставки.
  2. /UpdateDBCfg -Server — указывает платформе производить реструктуризацию средствами рабочего процесса кластера (rphost), минуя ограничения клиентского приложения.
  3. -Dynamic- — строго запрещает динамическое обновление, гарантируя корректное монопольное изменение таблиц СУБД.

Шаг 5. Настройка исключений антивируса и протокола СУБД

Проанализируем сопутствующие инфраструктурные настройки сервера, предотвращающие дедлоки:

  1. Добавьте каталоги %TEMP%, C:\ProgramData\1C и каталоги установки платформы в список исключений постоянного мониторинга антивирусного ПО на сервере.
  2. Отключите службу индексирования Windows Search для служебных каталогов пользователей 1С.
  3. В параметрах подключения к SQL-серверу рекомендуется явно использовать протокол TCP/IP (например, указать адрес сервера как tcp:ИмяСервера), чтобы исключить конфликты протокола Shared Memory при локальных вызовах.

Шаг 6. Организация правильного цикла доставки обновлений

Чтобы избежать ошибок при ручной передаче конфигураций через RDP, выстроим правильный процесс поставки:

  1. Не следует обновлять рабочую базу напрямую из хранилища разработки.
  2. Разработчик формирует файл поставки конфигурации (.cf или файл обновления .cfu) на тестовой среде после проверки всех доработок.
  3. На боевую базу обновление накатывается либо скриптом в технологическое окно, либо разработчиком, отвечающим за релиз, с обязательной проверкой завершения фоновых заданий перед стартом процесса.
← На главную