Оптимизация бесшовной интеграции «1С:Управление холдингом 3.1» с «1С:Документооборот 2»
22 декабря 2022
7 минут
Обозначения
УХ — конфигурация «1С:Управление холдингом», версия 3.1.17.11.
ДО — конфигурация «1С:Документооборот 2», версия 2.1.13.28.
Инцидент
После обновления конфигурации УХ образовалась ситуация:
не поступают или слишком медленно поступают документы из ДО в УХ;
не поступают или слишком медленно поступают документы из УХ в ДО.
Регламентное задание: «Интеграция с 1С:Документооборот» завершалась с ошибкой.
Анализ
При анализе обнаружились следующие моменты:
При обновлении (в течение 3 дней) в базе ДО скопилось много сообщений.
В базе УХ к обмену накопилось много справочников и документов, размер которых составил более 2,5 Гб.
Обмен запускался и длился около 2-3 часов. Из-за превышения порога длительности завершался с ошибкой. В результате часто возникали сетевые ошибки, и обмен никак не проходил до конца. С каждым запуском процесс начинался сначала. Из 10 попыток одна могла пройти успешно. Поэтому формулировка обозначена как «не поступают или слишком медленно поступают документы из УХ в ДО».
Пока длились безуспешные попытки обмена, в это время к нему регистрировались новые справочники и документы. Размер сообщения возрастал.
При попытках отправки данных из УХ в ДО в базе ДО копилось новое огромное количество сообщений. В итоге - постоянно медленное получение данных из УХ в ДО и медленная передача данных из ДО в УХ.
Рис.1 Очередь сообщений к обмену с ДО
Рис.1 Очередь сообщений к обмену с ДОРис.2 Размеры сообщений к обмену с ДО.
Рис.2 Размеры сообщений к обмену с ДО.
Типовой код процедуры обмена 1c
Рис.3 Типовой код процедуры обмена
Программно обмен сделан так, что в одной процедуре выполняется сначала подготовка
данных к передаче из УХ в ДО, затем передача из УХ в ДО и загрузка данных из ДО в УХ.
Недостатком такой структуры построения является последовательное выполнение, что в результате и привело к замедлениям и остановке самого обмена.
Решение: распараллеливание процессов
Один единый процесс мы разделяем на три отдельных независимых:
процесс подготовки данных для передачи из УХ в ДО;
процесс передачи данных из УХ в ДО;
процесс загрузки данных из ДО в УХ.
Вместо запуска одной процедуры отдельно настроен запуск трех. Программный код доработан следующим образом.
Рис.4 Оптимизированный код процедуры обмена.
Рис.4 Оптимизированный код процедуры обмена.
В процедуре «ВыполнитьОбменДанными» добавлен параметр «ДопПараметрыВыполнения» . При запуске процедуры без передачи этого параметра выполняется типовой код.
При запуске процедуры с этим параметром выполняется наш добавленный код, в котором в зависимости от значений ключей внутри параметра вызываются типовые процедуры: «ПодготовитьДанныеДляОтправки» , «ОтправитьДанные» , «ПолучитьДанные» .
Далее можно создать три отдельных регламентных задания, которые вызывают только одну процедуру «ВыполнитьОбменДанными» , но с разными значениями параметра «ДопПараметрыВыполнения» . В нашем случае, чтобы было меньше доработок конфигурации и для большей оперативности внесения правок созданы три внешние обработки:
Обработки добавляются в справочник «Дополнительные обработки» и для каждой настраивается запуск по расписанию.
В нашем примере расписание следующее:
Подготовка данных: каждые 5 минут.
Отправка данных: каждые 10 минут.
Загрузка данных: каждые 15 минут.
В результате доработки мы получили независимо работающие процессы: подготовки, отправки и загрузки данных.
Во вложении находятся обработки, которые запускаются вместо типового регламентного задания.
Казалось, относительно новый релиз УХ, и можно было в типовой коробке провести данную оптимизацию. Однако до сих пор в типовых конфигурациях обмен последовательный.
Кроме распараллеливания процессов, остались значительно объемные сообщения, из-за которых стопорилась отправка. Такие сообщения, к сожалению, пришлось пропустить, а документы пришлось зарегистрировать к обмену заново уже порционно, чтобы исключить повторения ошибки. Так как теперь обработка «Подготовка данных» выполняется независимо от отправки и загрузки, то в дальнейшем исключено разрастание размера сообщения, а увеличением частоты запуска (например не 5 минут, а 3 минуты) можно дополнительно уменьшить порцию данных и, соответственно, размер сообщения.
Ограничения:
- версии ДО и УХ не поддерживают пропуск сообщений;
- версии ДО и УХ не поддерживают асинхронную передачу сообщений.
Вложения к материалу:
Код подготовки данных - скачать.
Код отправки данных - скачать.
Код получения данных - скачать.