Top.Mail.Ru
поддержка 24/7
поддержка 24/7

Оптимизация бесшовной интеграции «1С:Управление холдингом 3.1» с «1С:Документооборот 2»

Обозначения

УХ — конфигурация «1С:Управление холдингом», версия 3.1.17.11.

ДО — конфигурация «1С:Документооборот 2», версия 2.1.13.28.

Инцидент

После обновления конфигурации УХ образовалась ситуация:

  • не поступают или слишком медленно поступают документы из ДО в УХ;

  • не поступают или слишком медленно поступают документы из УХ в ДО.

Регламентное задание: «Интеграция с 1С:Документооборот» завершалась с ошибкой. 

Анализ

При анализе обнаружились следующие моменты: 

  • При обновлении (в течение 3 дней) в базе ДО скопилось много сообщений.

  • В базе УХ к обмену накопилось много справочников и документов, размер которых составил более 2,5 Гб. 

  • Обмен запускался и длился около 2-3 часов. Из-за превышения порога длительности завершался с ошибкой. В результате часто возникали сетевые ошибки, и обмен никак не проходил до конца. С каждым запуском процесс начинался сначала. Из 10 попыток одна могла пройти успешно. Поэтому формулировка обозначена как «не поступают или слишком медленно поступают документы из УХ в ДО».

  • Пока длились безуспешные попытки обмена, в это время к нему регистрировались  новые справочники и документы. Размер сообщения возрастал. 

  • При попытках отправки данных из УХ в ДО в базе ДО копилось новое огромное количество сообщений. В итоге - постоянно медленное получение данных из УХ в ДО и медленная передача данных из ДО в УХ.

Рис.1 Очередь сообщений к обмену с ДО
Рис.1 Очередь сообщений к обмену с ДО
Рис.2 Размеры сообщений к обмену с ДО. Рис.2 Размеры сообщений к обмену с ДО.

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Кб

Взглянем на типовой код процедуры обмена.

Типовой код процедуры обмена 1c  Рис.3 Типовой код процедуры обмена

Программно обмен сделан так, что в одной процедуре выполняется сначала подготовка 

данных к передаче из УХ в ДО, затем передача из УХ в ДО  и  загрузка данных из ДО в УХ. 

Недостатком такой структуры построения является последовательное выполнение, что в результате и привело к замедлениям и остановке самого обмена.

Решение: распараллеливание процессов

Один единый процесс мы разделяем на три отдельных независимых:

  • процесс подготовки данных для передачи из УХ в ДО;

  • процесс передачи данных из УХ в ДО;

  • процесс загрузки данных из ДО в УХ.

Вместо запуска одной процедуры отдельно настроен запуск трех. Программный код доработан следующим образом.

Рис.4 Оптимизированный код процедуры обмена. Рис.4 Оптимизированный код процедуры обмена.

В процедуре «ВыполнитьОбменДанными»  добавлен параметр «ДопПараметрыВыполнения» . При запуске процедуры без передачи этого параметра выполняется типовой код. 

При запуске процедуры с этим параметром выполняется наш добавленный код, в котором в зависимости от значений ключей внутри параметра вызываются типовые процедуры: «ПодготовитьДанныеДляОтправки» , «ОтправитьДанные» , «ПолучитьДанные» . 

Далее можно создать три отдельных регламентных задания, которые вызывают только одну процедуру «ВыполнитьОбменДанными» , но с разными значениями параметра «ДопПараметрыВыполнения» . В нашем случае, чтобы было меньше доработок конфигурации и для большей оперативности внесения правок созданы три внешние обработки:

  • модуль объекта которых одинаков; 

  • за исключением наименования;

  • за исключением процедуры «ПодготовитьДанные».


Рис.5 Вызов оптимизированной процедуры обмена.  Рис.5 Вызов оптимизированной процедуры обмена.

Для подготовки данных:

Процедура ПодготовитьДанные() Экспорт	
	ДопПараметрыВыполнения = Новый Структура;
	ДопПараметрыВыполнения.Вставить("ПодготовитьДанные", Истина);
	ДопПараметрыВыполнения.Вставить("ОтправитьДанные", Ложь);
	ДопПараметрыВыполнения.Вставить("ПолучитьДанные", Ложь);
	ИнтеграцияС1СДокументооборотОбмен.ВыполнитьОбменДанными(ДопПараметрыВыполнения);
КонецПроцедуры

Для отправки данных:

Процедура ПодготовитьДанные() Экспорт	
	ДопПараметрыВыполнения = Новый Структура;


	ДопПараметрыВыполнения.Вставить("ПодготовитьДанные", Ложь);
	ДопПараметрыВыполнения.Вставить("ОтправитьДанные", Истина);
	ДопПараметрыВыполнения.Вставить("ПолучитьДанные", Ложь);
	ИнтеграцияС1СДокументооборотОбмен.ВыполнитьОбменДанными(ДопПараметрыВыполнения);
КонецПроцедуры

Для загрузки данных:

Процедура ПодготовитьДанные() Экспорт	
	ДопПараметрыВыполнения = Новый Структура;
	ДопПараметрыВыполнения.Вставить("ПодготовитьДанные", Ложь);
	ДопПараметрыВыполнения.Вставить("ОтправитьДанные", Ложь);
	ДопПараметрыВыполнения.Вставить("ПолучитьДанные", Истина);
	ИнтеграцияС1СДокументооборотОбмен.ВыполнитьОбменДанными(ДопПараметрыВыполнения);
КонецПроцедуры

Обработки добавляются в справочник «Дополнительные обработки» и для каждой настраивается запуск по расписанию. 

В нашем примере расписание следующее: 

  • Подготовка данных: каждые 5 минут.

  • Отправка данных: каждые 10 минут.

  • Загрузка данных: каждые 15 минут.

В результате доработки мы получили независимо работающие процессы: подготовки, отправки и загрузки данных.

Во вложении находятся обработки, которые запускаются вместо типового регламентного задания.

Казалось, относительно новый релиз УХ, и можно было в типовой коробке провести данную оптимизацию. Однако до сих пор в типовых конфигурациях обмен последовательный.

Кроме распараллеливания процессов, остались значительно объемные сообщения, из-за которых стопорилась отправка. Такие сообщения, к сожалению, пришлось пропустить, а документы пришлось зарегистрировать к обмену заново уже порционно, чтобы исключить повторения ошибки. Так как теперь обработка «Подготовка данных» выполняется независимо от отправки и загрузки, то в дальнейшем исключено разрастание размера сообщения, а увеличением частоты запуска (например не 5 минут, а 3 минуты) можно дополнительно уменьшить порцию данных и, соответственно, размер сообщения.

Ограничения:

- версии ДО и УХ не поддерживают пропуск сообщений;

- версии ДО и УХ не поддерживают асинхронную передачу сообщений.

Вложения к материалу:

Код подготовки данных - скачать.
Код отправки данных - скачать.
Код получения данных - скачать.

Внедрение программных продуктов 1С

Загрузка ...