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

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

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

Анализ проблемы: почему RDP замедляет 1С

Для начала проанализируем ситуацию. Когда мы запускаем отчет СКД с картинками в тонком клиенте на локальной машине, передача данных между сервером 1С и клиентом оптимизирована. Однако внутри терминальной сессии возникает дополнительный слой — протокол RDP. Он пытается сжать графическую информацию для передачи на монитор пользователя. Если картинок в отчете много, сервер начинает тратить колоссальные ресурсы на кодирование видеопотока, а клиент — на его декодирование.

Выясним основную причину: задержка происходит не на этапе получения данных из базы (запрос выполняется быстро), а на этапе вывода в табличный документ. Платформа 1С в терминальном режиме может неэффективно передавать двоичные данные картинок между серверным и клиентским процессом внутри одной ОС, что усугубляется настройками балансировки ресурсов Windows.

Решение 1: Программная оптимизация вывода (метод Временного хранилища)

Рассмотрим наиболее эффективный программный способ ускорения. Вместо того чтобы позволять платформе автоматически отрисовывать каждую строку с картинкой, мы можем принудительно сформировать отчет на стороне сервера и передать уже готовый объект через Временное хранилище. Это минимизирует количество «переговоров» между клиентской и серверной частью приложения 1С.

Посмотрим на пример реализации этого метода в модуле формы отчета:


&НаСервере
Функция СформироватьНаСервере()
    
    // Создаем объект табличного документа
    ДокументРезультат = Новый ТабличныйДокумент;
    
    // Программный вывод отчета СКД
    // СхемаКомпоновкиДанных, Настройки и ДанныеРасшифровки должны быть определены
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    // Помещаем готовый табличный документ во временное хранилище
    Возврат ПоместитьВоВременноеХранилище(ДокументРезультат, ЭтаФорма.УникальныйИдентификатор);
    
КонецФункции

&НаКлиенте
Процедура КомандаСформировать(Команда)
    
    // Очищаем текущий результат на форме
    Результат.Очистить();
    
    // Получаем адрес из хранилища
    АдресХранилища = СформироватьНаСервере();
    
    // Копируем данные из хранилища в реквизит формы (Табличный документ)
    ОбъектИзХранилища = ПолучитьИзВременногоХранилища(АдресХранилища);
    Результат.Вывести(ОбъектИзХранилища);
    
КонецПроцедуры

Этот подход позволяет избежать последовательной передачи каждой картинки от сервера к клиенту во время отрисовки. Мы передаем весь ТабличныйДокумент целиком как один объект, что в терминальной среде Windows Server 2019 отрабатывает значительно быстрее.

Решение 2: Отключение Dynamic Fair Share Scheduling

Проанализируем системную часть. В Windows Server по умолчанию включена функция Dynamic Fair Share Scheduling (DFSS). Она предназначена для того, чтобы один пользователь не мог монополизировать ресурсы процессора, диска или сети. Однако для «тяжелых» процессов 1С, которые кратковременно потребляют много ресурсов для рендеринга графики, эта функция становится тормозом.

Разберем, как отключить эти ограничения через реестр (выполняется системным администратором):

  1. Откройте редактор реестра regedit.
  2. Перейдите в ветку: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare.
  3. Найдите параметр EnableDynamicFairShare и установите значение 0.
  4. Также обратите внимание на параметры EnableDiskFairShare и EnableNetworkFairShare. Если они установлены в 1, попробуйте изменить их на 0.
  5. После внесения изменений потребуется перезагрузка сервера.

Важно: На некоторых конфигурациях Windows Server 2019 это действие кардинально меняет скорость отрисовки табличных документов, так как система перестает искусственно замедлять поток данных 1С.

Решение 3: Оптимизация протокола RDP и графического сжатия

Windows Server 2019 активно использует кодек H.264/AVC для сжатия содержимого экрана. При выводе таблиц с текстом и мелкими картинками этот алгоритм может работать медленнее, чем классическая отрисовка 2D-графики. Рассмотрим, как изменить настройки графики через групповые политики (GPO):

Перейдите в Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Среда удаленных сеансов.

Решение 4: Работа с временными файлами и антивирусом

Выясним еще одну скрытую причину. При формировании отчета с картинками 1С создает множество временных файлов в папке профиля пользователя %AppData%\Local\Temp. Если диск медленный или антивирус настроен слишком агрессивно, каждая картинка будет проверяться при создании.

Что необходимо сделать:

Решение 5: Настройка клиента RDP

Посмотрим на настройки на стороне пользователя. Качество отрисовки сильно зависит от параметров подключения клиента Удаленного рабочего стола (mstsc.exe).

  1. Откройте параметры подключения RDP.
  2. Перейдите на вкладку «Взаимодействие».
  3. В выпадающем списке выберите качество связи (например, «Локальная сеть 10 Мбит/с или выше»).
  4. Обязательно снимите галочку «Сглаживание шрифтов». Это может звучать странно, но рендеринг текста ClearType вместе с изображениями в одной сессии создает дополнительную нагрузку на отрисовщик 1С в терминальном режиме.
  5. На вкладке «Экран» установите глубину цвета 16 или 24 бита вместо 32, если канал связи нестабилен.

Итоги

Мы проанализировали комплексную проблему и нашли несколько путей решения. Если отчет тормозит только в терминале — это почти всегда проблема передачи графических данных. Начните с программного изменения вывода через временное хранилище (Решение 1), так как это самый надежный способ сделать отчет независимым от капризов RDP. Если это не помогло полностью, переходите к отключению Fair Share и настройке групповых политик графики. Сочетание этих методов позволит сократить время вывода отчета с 20 минут до приемлемых 30–40 секунд.

← На главную