Если вы уже разобрались, что 1С не распараллеливает ваши задачи автоматически, а нагрузка на сервер не превышает 10% как бы вы ни старались, но вам очень хочется нагрузить сервер на 100%, то это сделать несложно.
Берем пару функций из темы //infostart.ru/1c/articles/1102674/, вставляем все это в какой нибудь общий модуль вместе с нижеследующим кодом, переделываем под себя и используем в ваших обработках процедуру "ОбработатьКоллекциюМногопоточно_ПроизвольнаяОбработка".
#Область МногопоточныеОбработкиКоллекций
Функция КонтрольИОжиданиеОбработкиКоллекции(КоллекцияЗначений,КоличествоПотоков,МассивФоновыхЗаданий)
ПрерыватьВсе = Ложь;
МассивЗаданийКонтроль = Новый Массив;
МассивВыполняемыхЗаданий = ФоновыеЗадания.ОжидатьЗавершенияВыполнения(МассивФоновыхЗаданий,2);
Для Инд = 0 По МассивВыполняемыхЗаданий.Количество()-1 Цикл
МассивЗаданийКонтроль.Добавить(МассивВыполняемыхЗаданий[Инд]);
КонецЦикла;
инд=0;
Пока МассивЗаданийКонтроль.Количество()>0 Цикл
Если Инд>МассивЗаданийКонтроль.Количество()-1 Тогда
инд=МассивЗаданийКонтроль.Количество()-1;
КонецЕсли;
МассивЗаданийКнтр = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("УникальныйИдентификатор",МассивЗаданийКонтроль[инд].УникальныйИдентификатор));
Если МассивЗаданийКнтр.Количество()>0 Тогда
МассивЗаданийКонтроль[инд] = МассивЗаданийКнтр[0];
КонецЕсли;
ТекСообщения = МассивЗаданийКонтроль[инд].ПолучитьСообщенияПользователю(Ложь);
Если ПрерыватьВсе = Истина Тогда
МассивЗаданийКонтроль[инд].Отменить();
ИначеЕсли (МассивЗаданийКонтроль[инд].Состояние = СостояниеФоновогоЗадания.Активно
И ТекСообщения.Количество()>0) ИЛИ МассивЗаданийКонтроль[инд].Состояние <> СостояниеФоновогоЗадания.Активно Тогда
Если ТекСообщения.Количество()<>0 Тогда
ТекСообщение = ТекСообщения.Получить(ТекСообщения.Количество()-1).Текст;
Иначе
ТекСообщение = "Закончено:";
//Ничего не возвращается, тк нет сообщения
КонецЕсли;
Если Лев(ТекСообщение,6)="Ошибка" Тогда
Сообщить(ТекСообщение);
МассивЗаданийКонтроль[инд].Отменить();
МассивЗаданийКонтроль.Удалить(инд);
Продолжить;
//Возврат Неопределено;
ИначеЕсли Лев(ТекСообщение,10)="Выполнено:"
ИЛИ ТекСообщение = "Закончено:" Тогда
МассивЗаданийКонтроль[инд].Отменить();
МассивЗаданийКонтроль.Удалить(инд);
Иначе
КонецЕсли;
КонецЕсли;
Инд = Инд+1;
Если Инд>МассивЗаданийКонтроль.Количество()-1 Тогда
инд=0;
КонецЕсли;
КонецЦикла;
исхКоллекция = Неопределено;
Для Каждого ТекЗадание Из МассивФоновыхЗаданий Цикл
Сообщения = ТекЗадание.ПолучитьСообщенияПользователю(Истина);
Если Сообщения.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
XMLПакетДанных = Сред(Сообщения.Получить(Сообщения.Количество()-1).Текст,11);
ХранилищеПакетаДанных = XMLЗначение(Тип("ХранилищеЗначения"),XMLПакетДанных);
ПакетДанных = ХранилищеПакетаДанных.Получить();
Если ПакетДанных=Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(КоллекцияЗначений)=Тип("ТаблицаЗначений") Тогда
Если исхКоллекция = Неопределено Тогда
исхКоллекция = ПакетДанных.СкопироватьКолонки();
КонецЕсли;
Для Каждого ТекСтрока Из ПакетДанных Цикл
НовСтрока = исхКоллекция.Добавить();
ЗаполнитьЗначенияСвойств(НовСтрока,ТекСтрока);
КонецЦикла;
ИначеЕсли ТипЗнч(КоллекцияЗначений)=Тип("Массив") Тогда
Если исхКоллекция = Неопределено Тогда
исхКоллекция = Новый Массив;
КонецЕсли;
Для Каждого ТекСтрока Из ПакетДанных Цикл
исхКоллекция.Добавить(ТекСтрока);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат исхКоллекция;
КонецФункции
Функция ПолучитьЧастьКоллекцииЗначений (КоллекцияЗначений,Начало, КоличествоСтрок) Экспорт
МассивСтрок = Новый Массив;
КонечныйИндекс = Начало+КоличествоСтрок-1;
//Инд = Начало;
Для Инд = Начало По КонечныйИндекс Цикл
Если Инд>КоллекцияЗначений.Количество()-1 Тогда
Прервать;
КонецЕсли;
МассивСтрок.Добавить(КоллекцияЗначений.Получить(Инд));
//Инд = Инд+1;
КонецЦикла;
Если ТипЗнч(КоллекцияЗначений) = Тип("ТаблицаЗначений") Тогда
исхКоллекция = КоллекцияЗначений.Скопировать(МассивСтрок);
Возврат исхКоллекция
Иначе
Возврат МассивСтрок;
КонецЕсли;
КонецФункции
Функция РазделитьКоллекциюНаМассивКоллекций (КоллекцияЗначений,РазмерМассива) Экспорт
Инд = 0;
МассивПакетовДанных = Новый Массив;
Если КоллекцияЗначений.Количество()>РазмерМассива Тогда
РазмерПакета = ?(Окр(КоллекцияЗначений.Количество()/РазмерМассива,0)>0,Окр(КоллекцияЗначений.Количество()/РазмерМассива,0),1);
Иначе
РазмерПакета = 1;//КоллекцияЗначений.Количество();
КонецЕсли;
Пока Инд<КоллекцияЗначений.Количество() Цикл
Если КоллекцияЗначений.Количество()-РазмерПакета<0 Тогда
ПакетДанных = ПолучитьЧастьКоллекцииЗначений(КоллекцияЗначений,Инд,КоллекцияЗначений.Количество()-Инд);
Иначе
ПакетДанных = ПолучитьЧастьКоллекцииЗначений(КоллекцияЗначений,Инд,РазмерПакета);
КонецЕсли;
МассивПакетовДанных.Добавить(ПакетДанных);
Инд = Инд+РазмерПакета;
КонецЦикла;
Возврат МассивПакетовДанных;
КонецФункции
Функция ОбщееКоличествоСтрокМассиваКоллекций (МассивКоллекций) Экспорт
ИтогоКоличество = 0;
Для Каждого ТекТаблица Из МассивКоллекций Цикл
ИтогоКоличество = ИтогоКоличество + ТекТаблица.Количество();
КонецЦикла;
Возврат ИтогоКоличество;
КонецФункции
//Произвольная обработка, передавать таблицу для обработки и в тексте обработки функционал обработкий для одной строки (ТекСтрокаПакета)
Функция ОбработатьКоллекциюМногопоточно_ПроизвольнаяОбработка (КоллекцияЗначений,ТекстОбработки,КоличествоПотоков,ПараметрыОбработки) Экспорт
//В тексте обработки можно заполнить исхПакетДанных, если нужно вернуть
//новую коллекцию созданную на основе старой, иначе просто обработать коллекцию
МассивПакетов = РазделитьКоллекциюНаМассивКоллекций(КоллекцияЗначений,КоличествоПотоков);
Инд = 0;
МассивФоновыхЗаданий = Новый Массив;
Для Каждого ПакетДанных Из МассивПакетов Цикл
ТекстПроцедуры =
"Попытка
| исхПакетДанных = ?(ТипЗнч(ПакетДанных)=Тип(""Массив""),Новый Массив,ПакетДанных.Скопировать());
| исхПакетДанных.Очистить();
| Для Каждого ТекСтрокаПакета Из ПакетДанных Цикл
| "+ТекстОбработки+"
| КонецЦикла;
| //Вернем обрабатываемую таблицу
| Сообщение = Новый СообщениеПользователю;
| исхПакетДанных = ?(исхПакетДанных.Количество()<>0,исхПакетДанных,ПакетДанных);
| Сообщение.Текст = ""Выполнено:""+XMLСтрока(Новый ХранилищеЗначения(исхПакетДанных,Новый СжатиеДанных(9)));
| Сообщение.Сообщить();
|Исключение
| Сообщение = Новый СообщениеПользователю;
| Сообщение.Текст = ""Ошибка ""+ОписаниеОшибки();
| Сообщение.Сообщить();
| ВызватьИсключение ОписаниеОшибки();
|КонецПопытки;";
ФоновоеЗадание = nlgm_ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстПроцедуры,Новый Структура("ПакетДанных,ПараметрыОбработки",ПакетДанных,ПараметрыОбработки),"МногопоточнаяОбработкаТаблицы"+Инд);
МассивФоновыхЗаданий.Добавить(ФоновоеЗадание);
инд = инд+1;
КонецЦикла;
исхКоллекция = КонтрольИОжиданиеОбработкиКоллекции(КоллекцияЗначений,КоличествоПотоков,МассивФоновыхЗаданий);
Возврат исхКоллекция;
КонецФункции
#КонецОбласти