Многие компании при переходе с обычных форм на управляемые (или при разработке новых конфигураций с нуля) сталкиваются с необходимостью организовать удаленную работу пользователей. Часто выбор падает на использование веб-клиента 1С в браузере. Однако на практике выясняется, что открытие форм происходит крайне медленно, а работа становится некомфортной даже при хорошем и стабильном пинге (например, около 30 мс). При этом системные администраторы могут запрещать установку полноценного клиента на локальные машины пользователей из соображений безопасности.
Давайте подробно разберем, почему веб-клиент 1С работает медленнее, проанализируем архитектурные решения этой проблемы и рассмотрим способы оптимизации кода вашей конфигурации.
Веб-клиент платформы 1С объективно работает медленнее тонкого клиента. Часто наблюдается падение скорости работы интерфейса на 20% и более. Рассмотрим основные причины такого поведения:
Если проблема упирается в запрет сисадминов на использование классического прямого подключения к базе, мы можем использовать обходные пути, которые обеспечат скорость тонкого клиента и безопасность веб-доступа.
1. Использование тонкого клиента через веб-сервер
Это оптимальный вариант. Мы устанавливаем на сервер веб-сервер (например, Apache или IIS) и публикуем базу 1С. Затем на локальные машины пользователей устанавливается тонкий клиент 1С, но в настройках базы указывается не прямое подключение к кластеру серверов 1С, а строка подключения к веб-серверу (по протоколу HTTP или HTTPS).
Почему это решает проблему с администраторами? При такой схеме тонкий клиент коннектится к веб-серверу по стандартному порту 80 или 443 (точно так же, как обычный браузер). Прямых линков на сервер баз данных нет. База защищена, а пользователи получают кэширование форм и высокую скорость работы нативного клиента.
2. Технология RemoteApp (Seamless RDP)
Если системные администраторы категорически против установки любого ПО от 1С на машины пользователей, но согласны на использование RDP (Remote Desktop Protocol), отличным компромиссом станет RemoteApp. При таком подходе пользователю не транслируется весь удаленный рабочий стол Windows. Приложение 1С открывается в виде отдельного «бесшовного» окна на локальном компьютере. Интерфейс будет реагировать намного быстрее, чем в браузере, а требования безопасности будут полностью соблюдены.
Если переход с веб-клиента невозможен, нам нужно максимально облегчить конфигурацию. Разберем по шагам, как переписать код, чтобы ускорить рендеринг в браузере.
1. Отказ от обращений через точку в динамических списках
Использование в динамических списках обращений к реквизитам через точку (например, ДокументОснование.Контрагент) крайне негативно сказывается на скорости формирования списка в вебе. Платформа неявно генерирует неоптимальные запросы. Перепишите такие списки на произвольные запросы с явным использованием левого соединения. Посмотрим на пример правильного запроса:
ВЫБРАТЬ
ДокументПродажи.Ссылка,
ДокументПродажи.Дата,
ДокументПродажи.Номер,
Контрагенты.ИНН Как ИННКонтрагента
ИЗ
Документ.РеализацияТоваров Как ДокументПродажи
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты Как Контрагенты
ПО ДокументПродажи.Контрагент = Контрагенты.Ссылка
2. Перенос тяжелых процессов в фоновые задания
Если при открытии формы в обработчике ПриСозданииНаСервере происходят сложные вычисления, форма будет "висеть" у пользователя в браузере. Выясним причину: браузер ждет полного ответа от сервера для отрисовки HTML. Тяжелые операции следует выносить в асинхронные фоновые задания. Форма откроется мгновенно, а пользователь увидит сообщение о том, что данные загружаются. Проанализируем пример использования фоновых операций:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Запускаем расчет данных не блокируя интерфейс
ИдентификаторЗадания = ЗапуститьРасчетВФонеНаСервере();
ПодключитьОбработчикОжидания("ПроверитьЗавершениеФоновогоЗадания", 2);
КонецПроцедуры
&НаСервере
Функция ЗапуститьРасчетВФонеНаСервере()
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
Результат = ДлительныеОперации.ВыполнитьВФоне("МодульРасчетов.ВыполнитьТяжелыйРасчет", , ПараметрыВыполнения);
Возврат Результат.ИдентификаторЗадания;
КонецФункции
3. Облегчение элементов интерфейса
В веб-клиенте скрытые элементы управления и элементы, находящиеся на неактивных вкладках (страницах), всё равно могут обрабатываться платформой и тратить ресурсы клиентской машины. Проанализируем формы: уберите всё лишнее. Если у вас есть страницы с дополнительной информацией (например, история изменений или связанные документы), не инициализируйте эти данные сразу. Запросы для неактивных вкладок лучше выполнять динамически, только в момент переключения пользователя на соответствующую страницу, используя обработчик ПриСменеСтраницы.
Применив архитектурное перестроение на публикацию через веб-сервер и оптимизировав самые тяжелые списки, вы сможете добиться комфортной скорости работы системы 1С для удаленных пользователей без нарушения корпоративных регламентов безопасности.