Обозначения
УХ — конфигурация «1С:Управление холдингом», версия 3.1.17.11.
ДО — конфигурация «1С:Документооборот 2», версия 2.1.13.28.
Инцидент
После обновления конфигурации УХ образовалась ситуация:
-
не поступают или слишком медленно поступают документы из ДО в УХ;
-
не поступают или слишком медленно поступают документы из УХ в ДО.
Регламентное задание: «Интеграция с 1С:Документооборот» завершалась с ошибкой.
Анализ
При анализе обнаружились следующие моменты:
-
При обновлении (в течение 3 дней) в базе ДО скопилось много сообщений.
-
В базе УХ к обмену накопилось много справочников и документов, размер которых составил более 2,5 Гб.
-
Обмен запускался и длился около 2-3 часов. Из-за превышения порога длительности завершался с ошибкой. В результате часто возникали сетевые ошибки, и обмен никак не проходил до конца. С каждым запуском процесс начинался сначала. Из 10 попыток одна могла пройти успешно. Поэтому формулировка обозначена как «не поступают или слишком медленно поступают документы из УХ в ДО».
-
Пока длились безуспешные попытки обмена, в это время к нему регистрировались новые справочники и документы. Размер сообщения возрастал.
-
При попытках отправки данных из УХ в ДО в базе ДО копилось новое огромное количество сообщений. В итоге - постоянно медленное получение данных из УХ в ДО и медленная передача данных из ДО в УХ.
63 801 976 583 994; ДатаСоздания: 21.10.2022 22:16:23; Размер:2 720Мб = 2 785 522Кб
63 801 977 897 005; ДатаСоздания: 21.10.2022 22:38:17; Размер:2 721Мб = 2 786 214Кб
63 802 001 223 488; ДатаСоздания: 22.10.2022 5:07:03; Размер:2 763Мб = 2 828 972Кб
63 802 009 881 152; ДатаСоздания: 22.10.2022 7:31:21; Размер:655Мб = 670 253Кб
63 802 014 287 617; ДатаСоздания: 22.10.2022 8:44:47; Размер:310Мб = 317 115Кб
63 802 017 516 686; ДатаСоздания: 22.10.2022 9:38:36; Размер:208Мб = 212 659Кб
63 802 021 077 103; ДатаСоздания: 22.10.2022 10:37:57; Размер:249Мб = 254 556Кб
63 802 025 718 604; ДатаСоздания: 22.10.2022 11:55:18; Размер:373Мб = 382 195Кб
63 802 030 634 317; ДатаСоздания: 22.10.2022 13:17:14; Размер:355Мб = 363 150Кб
63 802 036 204 298; ДатаСоздания: 22.10.2022 14:50:04; Размер:444Мб = 455 060Кб
63 802 042 614 871; ДатаСоздания: 22.10.2022 16:36:54; Размер:474Мб = 485 540Кб
63 802 050 119 752; ДатаСоздания: 22.10.2022 18:41:59; Размер:558Мб = 571 679Кб
63 802 055 579 842; ДатаСоздания: 22.10.2022 20:12:59; Размер:284Мб = 290 762Кб
63 802 058 158 833; ДатаСоздания: 22.10.2022 20:55:58; Размер:174Мб = 177 926Кб
63 802 060 055 806; ДатаСоздания: 22.10.2022 21:27:35; Размер:87Мб = 89 000Кб
63 802 061 534 480; ДатаСоздания: 22.10.2022 21:52:14; Размер:42Мб = 43 338Кб
63 802 061 690 669; ДатаСоздания: 22.10.2022 21:54:50; Размер:42Мб = 43 338Кб
63 802 067 464 215; ДатаСоздания: 22.10.2022 23:31:04; Размер:15Мб = 15 365Кб
63 802 081 756 102; ДатаСоздания: 23.10.2022 3:29:16; Размер:3Мб = 3 149Кб
63 802 097 256 959; ДатаСоздания: 23.10.2022 7:47:36; Размер:25Мб = 25 280Кб
63 802 115 269 504; ДатаСоздания: 23.10.2022 12:47:49; Размер:368Мб = 376 639Кб
63 802 115 676 899; ДатаСоздания: 23.10.2022 12:54:36; Размер:373Мб = 381 644Кб
63 802 119 110 051; ДатаСоздания: 23.10.2022 13:51:50; Размер:326Мб = 333 318Кб
63 802 121 285 099; ДатаСоздания: 23.10.2022 14:28:05; Размер:205Мб = 210 389Кб
Взглянем на типовой код процедуры обмена.
Программно обмен сделан так, что в одной процедуре выполняется сначала подготовка
данных к передаче из УХ в ДО, затем передача из УХ в ДО и загрузка данных из ДО в УХ.
Недостатком такой структуры построения является последовательное выполнение, что в результате и привело к замедлениям и остановке самого обмена.
Решение: распараллеливание процессов
Один единый процесс мы разделяем на три отдельных независимых:
-
процесс подготовки данных для передачи из УХ в ДО;
-
процесс передачи данных из УХ в ДО;
-
процесс загрузки данных из ДО в УХ.
Вместо запуска одной процедуры отдельно настроен запуск трех. Программный код доработан следующим образом.
В процедуре «ВыполнитьОбменДанными» добавлен параметр «ДопПараметрыВыполнения» . При запуске процедуры без передачи этого параметра выполняется типовой код.
При запуске процедуры с этим параметром выполняется наш добавленный код, в котором в зависимости от значений ключей внутри параметра вызываются типовые процедуры: «ПодготовитьДанныеДляОтправки» , «ОтправитьДанные» , «ПолучитьДанные» .
Далее можно создать три отдельных регламентных задания, которые вызывают только одну процедуру «ВыполнитьОбменДанными» , но с разными значениями параметра «ДопПараметрыВыполнения» . В нашем случае, чтобы было меньше доработок конфигурации и для большей оперативности внесения правок созданы три внешние обработки:
-
модуль объекта которых одинаков;
-
за исключением наименования;
-
за исключением процедуры «ПодготовитьДанные».
Для подготовки данных:
Процедура ПодготовитьДанные() Экспорт ДопПараметрыВыполнения = Новый Структура; ДопПараметрыВыполнения.Вставить("ПодготовитьДанные", Истина); ДопПараметрыВыполнения.Вставить("ОтправитьДанные", Ложь); ДопПараметрыВыполнения.Вставить("ПолучитьДанные", Ложь); ИнтеграцияС1СДокументооборотОбмен.ВыполнитьОбменДанными(ДопПараметрыВыполнения); КонецПроцедуры
Для отправки данных:
Процедура ПодготовитьДанные() Экспорт ДопПараметрыВыполнения = Новый Структура; ДопПараметрыВыполнения.Вставить("ПодготовитьДанные", Ложь); ДопПараметрыВыполнения.Вставить("ОтправитьДанные", Истина); ДопПараметрыВыполнения.Вставить("ПолучитьДанные", Ложь); ИнтеграцияС1СДокументооборотОбмен.ВыполнитьОбменДанными(ДопПараметрыВыполнения); КонецПроцедуры
Для загрузки данных:
Процедура ПодготовитьДанные() Экспорт ДопПараметрыВыполнения = Новый Структура; ДопПараметрыВыполнения.Вставить("ПодготовитьДанные", Ложь); ДопПараметрыВыполнения.Вставить("ОтправитьДанные", Ложь); ДопПараметрыВыполнения.Вставить("ПолучитьДанные", Истина); ИнтеграцияС1СДокументооборотОбмен.ВыполнитьОбменДанными(ДопПараметрыВыполнения); КонецПроцедуры
Обработки добавляются в справочник «Дополнительные обработки» и для каждой настраивается запуск по расписанию.
В нашем примере расписание следующее:
-
Подготовка данных: каждые 5 минут.
-
Отправка данных: каждые 10 минут.
-
Загрузка данных: каждые 15 минут.
В результате доработки мы получили независимо работающие процессы: подготовки, отправки и загрузки данных.
Во вложении находятся обработки, которые запускаются вместо типового регламентного задания.
Казалось, относительно новый релиз УХ, и можно было в типовой коробке провести данную оптимизацию. Однако до сих пор в типовых конфигурациях обмен последовательный.
Кроме распараллеливания процессов, остались значительно объемные сообщения, из-за которых стопорилась отправка. Такие сообщения, к сожалению, пришлось пропустить, а документы пришлось зарегистрировать к обмену заново уже порционно, чтобы исключить повторения ошибки. Так как теперь обработка «Подготовка данных» выполняется независимо от отправки и загрузки, то в дальнейшем исключено разрастание размера сообщения, а увеличением частоты запуска (например не 5 минут, а 3 минуты) можно дополнительно уменьшить порцию данных и, соответственно, размер сообщения.
Ограничения:
- версии ДО и УХ не поддерживают пропуск сообщений;
- версии ДО и УХ не поддерживают асинхронную передачу сообщений.
Вложения к материалу:
Код подготовки данных - скачать.Код отправки данных - скачать.
Код получения данных - скачать.