Пусть исходно есть некий источник данных для их последующей обработки - РезультатЗапроса, или ТаблицаЗначений. Т.е. собрали запросом необходимые к проведению документы, или - поместили их в таблицу значений (в том случае если алгоритм выборки слишком сложный для того, чтобы обойтись только запросом). Для демонстрации возьму с потолка такую задачу: необходимо отобрать реализацию, и для клиента с ФИО = "Иванов Иван Иванович" все документы провести. Составим запрос:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровИУслуг.Ссылка,
| РеализацияТоваровИУслуг.Клиент.ФИО КАК ФИОКлиента
|ИЗ
| Документ.РеализацияТоваровИУслуг КАК РеализацияТоваровИУслуг
|";
РезультатЗапроса = Запрос.Выполнить();
... и реализуем код для обработки данных:
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
об = Выборка.Ссылка.ПолучитьОбъект();
Если Выборка.ФИОКлиента = "Иванов Иван Иванович" Тогда
об.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецЦикла;
Это не очень оптимальное решение, исключительно для демонстрации условие осталось внутри цикла - хотя конечно логичнее было бы сразу отобрать в запросе. Теперь запускаем этот код на выполнение в фоне. Распределим нагрузку: предположим что в нашей выборке 100`000 документов. Тогда распределяя это количество на 10 фоновых заданий получаем 10`000 документов на одно задание. Распределение выполняется функцией "ТаблицаФоновыхЗадач":
ТаблицаФоновыхЗадач = ФоновыеЗаданияСервер.ТаблицаФоновыхЗадач(РезультатЗапроса, 10, "Проведение документов");
После того, как таблица фоновых задач сформирована - необходимо подготовить код к передаче, параметром. Цикл по набору данных будет выполнен автоматически, поэтому понадобится только тело цикла. Этот кусок будет передан в метод ГК "Выполнить", его требуется преобразовать в строку. После того, как параметры подготовлены, их остается передать в функцию "ВыполнитьВФоне". В итоге текущий пример примет такой вид:
Код = "
| об = Выборка.Ссылка.ПолучитьОбъект();
| Если Выборка.ФИОКлиента = ""Иванов Иван Иванович"" Тогда
| об.Записать(РежимЗаписиДокумента.Проведение);
| КонецЕсли;";
ТаблицаФоновыхЗадач = ФоновыеЗаданияСервер.ТаблицаФоновыхЗадач(РезультатЗапроса, 10, "Проведение документов");
ФоновыеЗаданияСервер.ВыполнитьВФоне(ТаблицаФоновыхЗадач, Код);
Мониторить результат можно с помощью консоли инструментов разработчика (скриншот). Обратите внимание на колонку "Сообщения": при выполнении очередной итерации цикла по порции набора выполняется пустое "Сообщение пользователю". По количеству этих сообщений можно судить о количестве прошедших итераций, получаем своеобразный прогресс-бар: на скриншоте выделена строка фонового задания №5, и можно увидеть что из 10000 операции выполнено 4160.