TGViewer
1С:Предприятие 8 1С:Предприятие 8 @devlab1c · 866 subscribers
Post #447 362
Ускорение обработки данных в 1С

В этой статье расскажу о том, как можно распараллеливать выполнение длительной обработки данных. Рассмотрим на примере процедуры, в которой получаем массив объектов и обрабатываем по очереди.


Процедура ДлительнаяОперация()

МассивОбъектов = ПолучитьМассивОбъектов();

Для Каждого Ссылка Из МассивОбъектов Цикл

ОбработатьОбъект(Ссылка);

КонецЦикла;

КонецПроцедуры


&НаКлиенте
Процедура ЗапуститьДлительнуюОперацию(Команда)

ДлительнаяОперация();

КонецПроцедуры



У меня операция занимает 15 сек.

Создаем процедуру ЗапуститьДлительнуюОперациюНаСервере(), в которой получим массив объектов и разделим его на несколько частей, на каждую часть массива создадим фоновое задание.


Процедура ЗапуститьДлительнуюОперацию(Команда)

ЗапуститьДлительнуюОперациюНаСервере();

КонецПроцедуры

&НаСервере
Процедура ЗапуститьДлительнуюОперациюНаСервере()

МассивОбъектов = ПолучитьМассивОбъектов();

МассивЧастейОбъектов = Новый Массив;

КолЭлементов = Цел(МассивОбъектов.Количество() / 3);

ЧастьОбъектов = Новый Массив;

Для Индекс = 0 По МассивОбъектов.ВГраница() Цикл

Если ЧастьОбъектов.Количество() >= КолЭлементов Тогда
МассивЧастейОбъектов.Добавить(ЧастьОбъектов);
ЧастьОбъектов = Новый Массив;
КонецЕсли;

ЧастьОбъектов.Добавить(МассивОбъектов.Получить(Индекс));

КонецЦикла;

Если ЧастьОбъектов.Количество() > 0 Тогда
МассивЧастейОбъектов.Добавить(ЧастьОбъектов);
КонецЕсли;

Для Каждого ЧастьОбъектов Из МассивЧастейОбъектов Цикл
ПараметрыВыполнения = Новый Массив;
ПараметрыВыполнения.Добавить(ЧастьОбъектов);

ФоновыеЗадания.Выполнить("СвойОбщийМодуль.ДлительнаяОперация", ПараметрыВыполнения, Новый УникальныйИдентификатор);
КонецЦикла;

КонецПроцедуры



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


Процедура ДлительнаяОперация(ЧастьОбъектов) Экспорт 

Для Каждого Объект Из ЧастьОбъектов Цикл
ОбработатьОбъект(Объект);
КонецЦикла;

КонецПроцедуры


В результате время на операцию занимает меньше секунды.

Но это не значит, что весь массив за это время обработан. Мы лишь запустили задания, которые начали обрабатывать данные в фоне. Если необходима дальнейшая обработка результатов, то можно отловить результаты выполнения фоновых заданий.

👉@DevLab1C
  • 🔥 2
  • ❤ 1
  • 👍 1
More from @devlab1c
  1. Sep 23, 2026Отбор документов с пустой ссылкой источник 📲 Мы в MAX 👉@DevLab1C
  2. Sep 21, 2026Отборы в отчетах источник 📲 Мы в MAX 👉@DevLab1C
  3. Sep 20, 20261С: Администрирование Установка и публикация базы 1С на IIS под ОС Windows 10/11 Присоедин…
  4. Sep 17, 2026Оптимизация запросов к СУБД при активном динамическом поиске в динамических списках источн…
  5. Sep 14, 2026Массовое исправление реквизита документов источник 📲 Мы в MAX 👉@DevLab1C
  6. Sep 11, 2026Автоматический перезапуск службы 1С на Windows Server с очисткой кеша-сеансов Доброго дня,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →