Многопоточная обработка данных в 1С через фоновые задания
Массовая обработка документов, справочников и расчётов способна занять минуты или десятки минут. Если выполнять её в основном сеансе, интерфейс становится недоступным, пользователи ждут завершения операции, а клиент может потерять соединение с сервером.
Фоновые задания позволяют перенести вычислительную работу в отдельный серверный сеанс. Несколько независимых заданий обрабатывают разные порции данных параллельно, а пользователь контролирует их состояние без постоянного ожидания. Реализация требует продуманного разбиения данных, контроля ошибок и защиты от конфликтующих записей.
Подготовка данных и границы параллелизма
Сначала измерьте последовательную обработку на реальном объёме: зафиксируйте время, количество прочитанных и изменённых объектов, наиболее медленные операции. Этот базовый замер понадобится для оценки эффекта параллельной схемы и определения узкого места.
Затем разделите набор данных на порции. Для документов удобно использовать диапазон дат или устойчивый идентификатор, для элементов справочника — код или ключ группировки. Каждая порция должна быть независимой, не пересекаться с другими и содержать понятный признак готовности. Количество заданий регулируйте по фактической нагрузке, доступным серверным сеансам и лицензиям.
Механизм фоновых заданий
Фоновое задание создаётся через ФоновыеЗадания.Добавить, после чего платформа запускает указанную процедуру в отдельном сеансе. В параметры передают только сериализуемые значения: идентификаторы, даты, строки и простые структуры. Временные объекты и ссылки на элементы текущего сеанса передавать нельзя.
Для запуска большого набора данных удобно создать несколько заданий с разными границами обработки. Каждое из них читает собственную порцию и записывает результат в заранее подготовленные таблицы или файлы. Метод ОжидатьЗавершения подходит для небольших операций или автоматических проверок; в пользовательском интерфейсе лучше показывать состояние и обновлять его по таймеру.
Фоновое задание не является потоком операционной системы и не предоставляет общей памяти. Механизм управляет серверными сеансами, а конкуренция возникает на уровне общих данных, блокировок и подключений. Поэтому простое увеличение числа заданий не гарантирует пропорциональное ускорение.
Построение конвейера обработки
Надёжный конвейер включает реестр заданий, обработчик порции и этап проверки результатов. В реестре хранятся идентификатор, границы данных, статус, время запуска, число попыток и текст ошибки. Обработчик должен быть повторяемым: повторный запуск не должен создавать дубли или дважды изменять документы.
После завершения расчёта проверяйте количество обработанных записей и контрольные суммы. Только успешно проверенные порции переводятся в состояние готовности. Если результат требуется загрузить в KUBiK, сформируйте пакет операций и передайте его через предусмотренный канал обмена. Повторная передача пакета должна распознаваться как обновление уже проведённой операции.
Отдельно продумайте транзакции и блокировки. Параллельные задания не должны одновременно изменять один документ или общий регистр без явного порядка. Для независимых записей используйте отдельные объекты, а объединение результатов выполняйте после завершения всех порций.
Сравнение способов запуска
Выбор способа запуска зависит от срочности, наблюдаемости и допустимой нагрузки на инфраструктуру.
| Критерий | Фоновое задание | Регламентное задание | Внешний обработчик |
|---|---|---|---|
| Запуск | По действию пользователя или событию | По расписанию | Через очередь или программный интерфейс |
| Среда выполнения | Серверный сеанс 1С | Серверный сеанс 1С | Внешний сервис |
| Масштабирование | Несколько порций в пределах кластера | Ограничено расписанием | Собственная горизонтальная масштабируемость |
| Контроль результата | Состояние задания и журнал | Журнал выполнения | Собственные журналы и метрики |
| Повторные попытки | Реализуются приложением | Происходят по следующему запуску | Управляются внешней системой |
Фоновые задания лучше подходят для интерактивных массовых операций. Регламентные удобны для регулярной загрузки, а внешний обработчик оправдан при необходимости длительных расчётов, независимого масштабирования или special‑нагрузки.
Рекомендации для устойчивого фонового конвейера
Перед промышленным запуском закрепите следующие правила:
- Ограничивайте число одновременно активных заданий и оставляйте серверу ресурсы для обычной работы.
- Делайте каждую порцию независимой, воспроизводимой и безопасной при повторном запуске.
- Сохраняйте ошибки в реестре заданий с указанием этапа, порции и причины сбоя.
- Проверяйте готовность всех результатов перед объединением или передачей в другие системы.
- Начинайте с пилотного набора данных и сравнивайте показатели с последовательным вариантом.
Запустите пилот на ограниченном диапазоне документов, измерьте фактическое ускорение и проверьте отсутствие дублей. Зафиксируйте безопасный лимит параллелизма, журнал состояний и порядок перезапуска unfinished-заданий. Затем перенесите проверенную схему на рабочий контур и подключите пользователей к наблюдению за фоновой обработкой через KUBiK.