При использовании бесшовной интеграции между 1С:ERP Управление предприятием и 1С:Документооборот (ДО) пользователи часто сталкиваются с деградацией производительности. Проблема проявляется наиболее остро, когда список активных задач пользователя превышает 50 позиций: открытие форм, обновление списков и переход между объектами начинают занимать значительное время. В этой статье мы подробно разберем технические причины этого явления и рассмотрим комплекс мер по оптимизации системы.
Рассмотрим ситуацию, которая часто становится «бутылочным горлышком». Основная причина тормозов при отрисовке списка задач в ERP заключается в так называемой проблеме «N+1 запросов». Проанализируем, как работает механизм получения данных из ДО: когда пользователь открывает список задач, ERP обращается к веб-сервису DMService. Система получает основной список задач (один запрос), но для корректного отображения каждой строки ей требуются дополнительные данные, которые не пришли в основном пакете.
Выясним техническую деталь: в старых версиях Библиотеки интеграции с документооборотом (БИД), встроенной в ERP, при заполнении каждой строки списка вызывается процедура ЗаполнитьСтрокуЗадачиXDTO. Если в данных, возвращаемых веб-сервисом, отсутствует значение реквизита parentBusinessProcess.state (состояние бизнес-процесса), ERP вынуждена делать отдельный, повторный HTTP-запрос к веб-сервису для уточнения этого состояния для каждой задачи в списке.
Таким образом, если у пользователя 50 задач, система выполнит 1 основной запрос и 50 дополнительных. Учитывая накладные расходы на установку TCP-соединения, авторизацию и передачу XML-пакета, суммарная задержка становится критической для комфортной работы. Посмотрим на пример логики, которая вызывает проблему на стороне ERP:
// Фрагмент логики, приводящей к избыточным вызовам
Для Каждого СтрокаЗадачи Из СписокЗадач Цикл
Если СтрокаЗадачи.СостояниеБизнесПроцесса = Неопределено Тогда
// Происходит обращение к веб-сервису ДО за уточнением состояния
Состояние = ИнтеграцияСДокументооборотом.ПолучитьСостояниеПроцесса(СтрокаЗадачи.БизнесПроцесс);
СтрокаЗадачи.СостояниеБизнесПроцесса = Состояние;
КонецЕсли;
КонецЦикла;
Первым и самым эффективным шагом является обновление программных продуктов. Разберем, что именно меняется в новых релизах:
2.1.31 и выше, разработчики 1С устранили ошибку на стороне веб-сервиса. Теперь свойство parentBusinessProcess.state заполняется корректно и передается сразу в общем массиве данных задач. Это исключает необходимость дополнительных обращений со стороны ERP.2.5.12 и выше). В них интегрирована обновленная версия БИД, которая умеет работать с данными пакетно. Даже если каких-то данных не хватает, новые механизмы стараются запрашивать их одним массивом, а не в цикле по одной записи.Проанализируем ситуацию: если обновление конфигураций по каким-то причинам невозможно в ближайшее время, программисту необходимо внести изменения в расширение, оптимизировав метод ЗаполнитьСтрокуЗадачиXDTO таким образом, чтобы данные о состояниях кешировались или запрашивались заранее одним вызовом.
Часто проблема кроется не в коде 1С, а в инфраструктуре передачи данных. Рассмотрим два критически важных параметра веб-сервера, на котором опубликован 1С:Документооборот:
Параметр Keep-Alive. По умолчанию веб-сервер может закрывать соединение после каждого HTTP-ответа. Если у нас 50 запросов, то браузер или платформа 1С будут 50 раз выполнять процедуру «рукопожатия» (handshake). Включение Keep-Alive позволяет выполнять множество запросов внутри одного установленного TCP-соединения. Это сокращает время ожидания в разы, особенно если между серверами ERP и ДО есть сетевая задержка.
Сжатие контента (Gzip/Deflate). XDTO-пакеты (XML), которыми обмениваются системы, имеют текстовый формат и очень хорошо сжимаются. Включите динамическое сжатие для расширения .1cws. Это уменьшит объем передаваемого трафика. Хотя это увеличит нагрузку на CPU серверов, общее время отклика системы для пользователя сократится за счет более быстрой передачи данных по сети.
Иногда веб-сервис ДО долго отдает ответ, потому что сама база данных работает неоптимально. Проанализируем работу запросов к задачам. При получении списка «Мои задачи» система выполняет сложные запросы с учетом прав доступа и различных фильтров (пометка удаления, состояние выполнения).
Выясним, какие действия необходимо предпринять системному администратору или разработчику:
Задача.ЗадачаИсполнителя). Основные поля для индексации: Исполнитель, Выполнена, ПометкаУдаления.Чтобы не гадать, где именно происходит задержка, воспользуемся встроенными инструментами 1С. Разберем порядок действий:
ВыполнитьМетодВебСервиса или аналогичные, значит, проблема в сети или на стороне ДО.8.3.21/8.3.22 работа с XDTO была существенно оптимизирована.Также рекомендуется проверить регистр Замеры времени, если в системе включена подсистема оценки производительности (APDEX). Это позволит увидеть реальную картину задержек у всех пользователей в динамике.
Если запросы объективно тяжелые и их нельзя ускорить немедленно, необходимо предотвратить возникновение ошибок «Таймаут операции». Рассмотрим, как это сделать. В коде интеграции ERP при инициализации соединения с веб-сервисом ДО устанавливается время ожидания. Проанализируем, как можно его увеличить:
// Пример программной установки таймаута
Определение = Новый WSОпределения(АдресWSDL, Логин, Пароль);
Прокси = Новый WSПрокси(Определение, URLПространстваИмен, ИмяСервиса, ИмяПорта);
Прокси.Таймаут = 120; // Устанавливаем 120 секунд вместо стандартных 30
Однако помните, что увеличение таймаута — это не решение проблемы производительности, а лишь способ избежать аварийного завершения работы. Основные усилия должны быть направлены на сокращение количества запросов и обновление конфигураций.
Тормоза при интеграции ERP 2.5 и ДО 2.1 — это комплексная проблема, которая чаще всего решается на программном уровне. Ключевой фактор успеха — переход на версии систем, поддерживающих пакетную передачу данных о состоянии бизнес-процессов. Совмещая обновление ПО с грамотной настройкой веб-сервера (включение Keep-Alive) и оптимизацией базы данных, можно добиться мгновенного открытия списка задач даже при их большом количестве.