Почему зависает RDP-сессия при сохранении отчетов из 1С в формате XLS на локальный диск?

Системный администратор 1С v8.3 (Обычные формы) 1С:Управление торговлей
← На главную

Ситуация, когда работа пользователей в терминальной сессии внезапно прерывается, а новые подключения заканчиваются «черным экраном», является критической для любого бизнеса. Особенно часто с этим сталкиваются администраторы систем на базе Windows Server 2016 при использовании 1С. Проблема проявляется специфически: при попытке сохранить печатную форму или отчет в формате XLS на «проброшенный» через RDP локальный диск пользователя, приложение 1С зависает, а следом за ним начинает деградировать вся служба удаленных рабочих столов.

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

Краткое описание симптомов проблемы

Рассмотрим стандартный сценарий развития сбоя, который мы будем анализировать:

  1. Пользователь подключается к серверу Windows Server 2016 через RDP с включенной опцией «Локальные ресурсы -> Диски».
  2. В сеансе запускается 1С (часто это версии 8.3.10 или 8.3.12, обычное приложение).
  3. При сохранении любого табличного документа (счета, отчета) через меню «Сохранить копию» выбирается формат Excel 97-2003 (xls) и путь на локальном диске (например, \\tsclient\C\Отчеты).
  4. Процесс 1cv8.exe перестает отвечать. При попытке завершить его через диспетчер задач ничего не происходит.
  5. Через 10–15 минут новые пользователи не могут зайти на сервер: после ввода пароля они видят «черный экран» или бесконечную надпись «Выход из системы».

Выясним причину такого поведения. Проанализируем системные логи сервера. Обычно в журнале событий Windows в моменты зависания фиксируются ошибки UmRdpService (User Mode Port Redirector) с кодом таймаута 30000 мс. Это сигнализирует о том, что служба перенаправления ресурсов вошла в состояние дедлока (мертвой блокировки).

Анализ механизма записи: почему именно XLS?

Интересной особенностью является то, что при сохранении в формате XLSX проблема зачастую не воспроизводится. Проанализируем разницу между этими форматами с точки зрения взаимодействия с файловой системой через RDP-канал.

Формат XLS (старый бинарный стандарт Microsoft Excel) при записи требует множества мелких операций позиционирования в файле и частых обращений к дисковой подсистеме для обновления структуры бинарного дерева файла. В условиях работы через виртуальный канал RDP, любая задержка сети или микроразрыв приводят к тому, что поток записи «застревает».

В свою очередь, формат XLSX представляет собой упакованный XML-архив. 1С сначала формирует весь объем данных во временной папке сервера (%TEMP%), а затем одним последовательным потоком копирует готовый файл на целевой диск. Это создает гораздо меньшую нагрузку на службу UmRdpService, так как минимизируется количество транзакций записи.

Решение №1: Отключение функции Disk Fair Share

Одной из наиболее вероятных причин зависания всей службы RDP при проблемах в одной сессии является механизм Fair Share (справедливое распределение ресурсов), внедренный в Windows Server. Функция Disk Fair Share призвана ограничивать нагрузку на диск со стороны одного пользователя, чтобы он не мешал другим. Однако при работе с сетевыми задержками и проброшенными дисками этот механизм часто ошибочно блокирует операции ввода-вывода, что приводит к зависанию всей цепочки служб.

Рассмотрим, как отключить этот механизм через реестр сервера:

  1. Запустите редактор реестра (regedit.exe).
  2. Перейдите в раздел: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare\Disk
  3. Найдите параметр EnableFairShare.
  4. Установите значение 0.
  5. Если раздела Disk нет, его необходимо создать, но обычно в Windows Server 2016 он присутствует по умолчанию.
  6. После изменения потребуется перезагрузка сервера.

Решение №2: Настройка таймаутов системных служб

Как мы увидели в описании проблемы, система фиксирует превышение времени ожидания в 30 секунд для службы UmRdpService. Чтобы дать системе шанс «прокачать» данные через медленный канал без падения службы, мы можем увеличить глобальный таймаут ожидания ответов от служб.

Выполним следующие шаги:

  1. В реестре перейдите к ветке: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
  2. Найдите (или создайте DWORD 32 bit) параметр с именем ServicesPipeTimeout.
  3. Установите значение 60000 или 120000 (в десятичной системе), что соответствует 60 или 120 секундам.
  4. Это позволит избежать преждевременной остановки транзакций при временных заторах в RDP-канале.

Решение №3: Изменение формата сохранения в 1С

Если проблему не удается решить на уровне ОС, проанализируем возможность изменения бизнес-процесса. Поскольку XLSX работает стабильнее, рекомендуется административно или программно перевести пользователей на этот формат.

Разберем, почему это помогает. Как уже упоминалось, механизм сохранения XLSX в 1С более современен. В коде конфигураций (особенно в обычных формах УТ 10.3, КА 1.1) часто используется метод Записать(). Рассмотрим пример:


// Вместо старого формата:
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);

// Используем современный формат:
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);

Если вы используете типовое решение, проинструктируйте пользователей выбирать в диалоговом окне сохранения именно Excel 2007+ (.xlsx). Это простое действие в 90% случаев полностью снимает вопрос зависаний.

Решение №4: Отказ от проброса дисков в пользу сетевых папок

Проброс дисков через RDP (RDPDR) — это сложный и не самый стабильный протокол. Если безопасность позволяет, лучше использовать классические сетевые папки (SMB). Однако пользователи часто боятся вирусов-шифровальщиков, которые могут уничтожить данные на сетевых дисках. Чтобы решить эту дилемму, рассмотрим правильную организацию файлового обмена:

  1. Создайте на сервере или отдельном файловом хранилище общую папку (Share).
  2. Подключите её пользователям как сетевой диск через Group Policy (GPO).
  3. Важный момент: настройте на этом сервере Shadow Copies (теневые копии) минимум 2-3 раза в день.
  4. Для защиты от шифровальщиков используйте инкрементальное резервное копирование (например, встроенную Windows Server Backup или Cobian Backup) на носитель, к которому у обычных пользователей нет прав на запись.

Работа через SMB гораздо стабильнее, чем через виртуальный канал RDP, так как протокол SMB специально оптимизирован для передачи файлов и имеет развитые механизмы кэширования.

Решение №5: Тонкая настройка RDP-клиента на стороне пользователя

Проанализируем ситуацию на стороне клиента. Если пользователь подключается с Windows 10 Home или нестабильного интернет-канала, стоит попробовать переключить протокол RDP с UDP на TCP. Несмотря на то, что UDP ускоряет отрисовку графики, он может вызывать потерю пакетов данных при передаче файлов.

На клиентской машине выполните:

  1. Нажмите Win+R, введите gpedit.msc (если версия Home, используйте редактор реестра).
  2. В реестре перейдите в: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Client
  3. Создайте параметр fClientDisableUDP (DWORD) и установите значение 1.
  4. Это заставит RDP-клиент работать только по TCP, что обеспечит гарантированную доставку пакетов при сохранении тяжелых отчетов.

Дополнительные рекомендации по 1С

Иногда зависание при сохранении в Excel вызвано спецификой формирования самого отчета. Разберем несколько технических моментов:

Подводя итог, можно сказать, что проблема «зависания при XLS» — это комплексная ошибка взаимодействия старого бинарного формата, протокола проброса дисков RDP и механизмов управления ресурсами Windows Server 2016. Применяя вышеописанные настройки реестра и переходя на формат XLSX, вы обеспечите стабильную работу сервера и избавите пользователей от необходимости постоянных перезагрузок.

← На главную