Процедура РаспределитьДокументыСЗависимостямиПоПотокам(ТаблицаРезультат, ДокументыПоКоличествуПоля,МенеджерВременныхТаблиц = Неопределено, КоличествоОбъектовВПорции) ТаблицаРезультат.Индексы.Добавить("Регистратор, НомерПорции"); ТаблицаРезультат.Индексы.Добавить("ЗначениеПоля, НомерПорции"); ТекКоличествоПоляВПорции = 0; НомерПорции = 1; ЗначенияПоля = Новый Массив; ДокументыСПолем = Новый Массив; Для каждого СтрокаДокумент Из ДокументыПоКоличествуПоля Цикл РаспределятьДальше = Ложь; ДокументУжеВПорции = ПоДокументуУказанаПорция(СтрокаДокумент.Регистратор, ТаблицаРезультат); Если ДокументУжеВПорции Тогда Продолжить; Иначе ДокументыСПолем.Добавить(СтрокаДокумент.Регистратор); РаспределятьДальше = Истина; КонецЕсли; Если ТекКоличествоПоляВПорции > КоличествоОбъектовВПорции Тогда НомерПорции = НомерПорции + 1; ТекКоличествоПоляВПорции = 0; КонецЕсли; Пока РаспределятьДальше Цикл ПараметрыУказанияПорции = Новый Структура; ПараметрыУказанияПорции.Вставить("НомерПорции", НомерПорции); ПараметрыУказанияПорции.Вставить("МассивОбхода", ДокументыСПолем); ПараметрыУказанияПорции.Вставить("ИмяКолонки","Регистратор"); ПараметрыУказанияПорции.Вставить("МассивСледующегоОбхода", ЗначенияПоля); ПараметрыУказанияПорции.Вставить("ИмяКолонкиСледующегоОбхода","ЗначениеПоля"); УстановитьНомерПорции(ПараметрыУказанияПорции, ТаблицаРезультат); ТекКоличествоПоляВПорции = ТекКоличествоПоляВПорции+ЗначенияПоля.Количество(); ПараметрыУказанияПорции.Вставить("МассивОбхода", ЗначенияПоля); ПараметрыУказанияПорции.Вставить("ИмяКолонки","ЗначениеПоля"); ПараметрыУказанияПорции.Вставить("МассивСледующегоОбхода",ДокументыСПолем); ПараметрыУказанияПорции.Вставить("ИмяКолонкиСледующегоОбхода","Регистратор"); УстановитьНомерПорции(ПараметрыУказанияПорции, ТаблицаРезультат); Если ДокументыСПолем.Количество() = 0 Тогда РаспределятьДальше = Ложь; КонецЕсли; КонецЦикла; КонецЦикла; Если МенеджерВременныхТаблиц <> Неопределено Тогда// необходимо зафиксировать результаты распределения в ВТ Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ |ТаблицаПоПорциям.Регистратор КАК Регистратор, |ТаблицаПоПорциям.НомерПорции КАК НомерПорции |ПОМЕСТИТЬ ВТРаспределенныеДокументыПоПорциям |ИЗ |&ТаблицаПоПорциям КАК ТаблицаПоПорциям"; Запрос.УстановитьПараметр("ТаблицаПоПорциям", ТаблицаРезультат); Запрос.Выполнить(); КонецЕсли; КонецПроцедуры Процедура УстановитьНомерПорции(ПараметрыУказанияПорции, ТаблицаРезультат) Для каждого ЭлементМассива Из ПараметрыУказанияПорции.МассивОбхода Цикл Отбор = Новый Структура; Отбор.Вставить(ПараметрыУказанияПорции.ИмяКолонки, ЭлементМассива); Отбор.Вставить("НомерПорции", 0); НайденныеСтроки = ТаблицаРезультат.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 0 Тогда Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл НайденнаяСтрока.НомерПорции = ПараметрыУказанияПорции.НомерПорции; ЗначениеКолонкиСледующегоОбхода = НайденнаяСтрока [ПараметрыУказанияПорции.ИмяКолонкиСледующегоОбхода]; ПараметрыУказанияПорции.МассивСледующегоОбхода.Добавить(ЗначениеКолонкиСледующегоОбхода); КонецЦикла; КонецЕсли; КонецЦикла; ПараметрыУказанияПорции.МассивОбхода.Очистить(); КонецПроцедуры Функция ПоДокументуУказанаПорция(Регистратор, ТаблицаРезультат) Отбор = Новый Структура; Отбор.Вставить("Регистратор", Регистратор); Отбор.Вставить("НомерПорции",0); НайденныеСтроки = ТаблицаРезультат.НайтиСтроки(Отбор); Возврат НайденныеСтроки.Количество() = 0; КонецФункции