Что делать при задержках и торможениях на отрезке между «ПриСозданииНаСервере» и «ПриОткрытии» в 1С?

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

В процессе работы с тяжелыми конфигурациями, такими как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, разработчики и администраторы часто сталкиваются с нетипичной проблемой производительности. При замере времени открытия формы выясняется, что процедура ПриСозданииНаСервере завершается быстро, однако перед началом выполнения клиентской процедуры ПриОткрытии проходит пауза в 5–9 секунд (а иногда и до 30 секунд). При этом стандартный штатный замер производительности в конфигураторе эту задержку не фиксирует, так как пауза происходит во внутренних процессах платформы 1С.

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

Техническая суть задержки между сервером и клиентом

Выясним, что именно делает платформа 1С на отрезке времени между завершением выполнения обработчика ПриСозданииНаСервере и началом исполнения ПриОткрытии. После завершения серверного события платформа выполняет следующие скрытые операции:

  1. Сериализация контекста формы: Все данные формы (реквизиты, структуры, коллекции, данные динамических списков) упаковываются в бинарный поток для отправки по сети на тонкий клиент.
  2. Сетевая передача данных: Бинарный поток передается от процесса сервера rphost.exe к процессу тонкого клиента 1cv8.exe. На терминальном сервере передача идет через локальный стек протокола TCP/IP (Loopback).
  3. Десериализация и вычистка пользовательских настроек: Тонкий клиент распаковывает полученный контекст и вычитывает индивидуальные настройки конкретного пользователя (положение колонок, сохраненные отборы, условное оформление).
  4. Построение интерфейса (GUI Layout): Тонкий клиент визуально формирует элементы формы, строит деревья GUI-компонентов и применяет правила оформления.

Способ 1. Очистка кэша тонкого клиента и серверных временных файлов

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

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

  1. Завершим все сеансы пользователей, испытывающих проблемы с открытием форм.
  2. Удалим содержимое каталогов локального кэша тонкого клиента на ПК пользователя или в профиле терминального сервера:

    %AppData%\1C\1cv8

    %LocalAppData%\1C\1cv8

  3. При необходимости очистим временные файлы сервера приложений 1С в каталоге:

    %LocalAppData%\Temp\1C

  4. Альтернативно выполним запуск 1С с параметром /ClearCache в строке подключения базы.

Способ 2. Сброс индивидуальных настроек пользователя и проверка профиля

На практике часто встречается ситуация, когда у одного пользователя форма открывается за 1 секунду, а у другого в той же терминальной сессии открытие занимает 8–10 секунд. В этом случае причина кроется в накоплении большого массива персональных настроек или повреждении системного хранилища настроек формы.

Разберем по шагам, как диагностировать и устранить эту проблему:

  1. Выполним сброс настроек проблемной формы для конкретного пользователя через стандартный интерфейс: Настройки -> Очистить настройки формы.
  2. Если очистка настроек формы не помогла, проверим гипотезу с повреждением профиля. Создадим нового пользователя системы с аналогичными правами и ролью. Если под новым пользователем форма открывается мгновенно, необходимо полностью очистить хранилище системных настроек исходного пользователя.

Способ 3. Оптимизация состава реквизитов формы и передаваемого контекста

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

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

  1. Проверим свойства реквизитов формы. Очистим флаг Использовать всегда у тяжелых таблиц и коллекций, если данные не требуются сразу при инициализации формы.
  2. Удалим из реквизитов формы временные таблицы значений и служебные структуры, используемые только в серверных процедурах. Заменим их локальными переменными функций.
  3. Если необходимо передать массив данных на клиент без включения в контекст формы, поместим данные во временное хранилище и передадим только адрес:
    
    // На сервере
    АдресХранилища = ПоместитьВоВременноеХранилище(ТяжелыеДанные, УникальныйИдентификатор);
    
    // На клиенте в ПриОткрытии или по требованию
    Данные = ПолучитьИзВременногоХранилища(АдресХранилища);
    
  4. Сократим количество элементов условного оформления, задаваемых программно при создании формы, так как они вызывают длительный расчет визуальной DOM-модели на клиенте.

Способ 4. Настройка антивирусного ПО и локального сетевого контроля

Даже при работе пользователей в терминальном режиме (RDP) на одном сервере с сервером 1С, клиентский процесс 1cv8.exe связывается с рабочим процессом rphost.exe через локальный сетевой сокет (Loopback, 127.0.0.1). Если на сервере установлен антивирус или фаервол, перехватывающий локальный TCP/IP-трафик, проверка сериализованных пакетов контекста 1С может вызывать паузы в несколько секунд.

Для предотвращения этих задержек выполним следующие настройки:

  1. Добавим процессы 1cv8.exe, 1cv8c.exe и rphost.exe в список исключений сканера реального времени антивируса.
  2. Исключим из проверки антивирусными средствами сетевые порты кластера 1С (по умолчанию 1540, 1541, 1560-1591).
  3. Добавим каталоги кэша и временных файлов 1С в исключения проверки файловой системы.

Подводя итоги: для устранения паузы между ПриСозданииНаСервере и ПриОткрытии следует действовать комплексно. В первую очередь необходимо произвести очистку локального кэша и сброс настроек формы для проблемных пользователей. Затем провести ревизию состава реквизитов формы на предмет передачи избыточного контекста и проверить исключения сетевого экрана на сервере.

← На главную