Сергей Земко

0
Рейтинг

velsevur
Земко Сергей



  •   Регистрация: 04.08.2015 (7 лет назад)

  •   Был(а) на сайте: 07.06.2023

Друзья
  • Иван Филимонов
Подписчики 1

Комментарии

DevМногопоточность. Универсальный «Менеджер потоков» 2.1#44 01.02.19 16:15
(43)
Благодаря помощи автора темы проблема была решена путем правки модуля МП,

Строки с 1514-1516 необходимо обернуть в условие

Код
Если РезультатОбработки = "ДополненныйФрагментКоллекции" Тогда


Спасибо DarkAn
DevМногопоточность. Универсальный «Менеджер потоков» 2.1#43 01.02.19 14:07
(42) Не вижу номера в профиле, возможно нужно быть в друзьях. Версия 2.0.5. Скачивался МП с другого аккаунта "Cruciann".

Код
      Сообщить("Обработка в потоках.");
      ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
      
      СтруктураПараметров = векМенеджерПотоков.ПолучитьСтруктуруПараметровИнициализацииМенеджераПотоков("ОбработатьКоллекциюДокументовОчередипереобеспечения","");
      векМодульМенеджераПотоков.ПолучитьПараметрыМП("ЗаказПоставщику",СтруктураПараметров);
      СтруктураПараметромМП = векМенеджерПотоков.ИнициализироватьМенеджерПотоков(СтруктураПараметров);
      
#Область Костыли
      КодСоздания   = "КоллекцияПриемник = Новый СписокЗначений;";
      КодДобавления = "ЗаполнитьЗначенияСвойств(КоллекцияПриемник.Добавить(), КоллекцияИсточник[ИндексКоллекции]);";

      Структура = Новый Структура;
      Структура.Вставить("КодСоздания"  , КодСоздания);
      Структура.Вставить("КодДобавления", КодДобавления);
      
      СтруктураПараметромМП.ПараметрыИнициализации.ПараметрыОбработкиКоллекции.Вставить("АлгоритмыРаботыСКоллекцией", Структура);
#КонецОбласти

      Для Каждого ДокументСсылка Из Коллекция Цикл 
         СтруктурапараметровОбъекта = Новый Структура;
         СтруктурапараметровОбъекта.Вставить("Период",ДокументСсылка.Период);
         
         векМенеджерПотоков.ОбработатьОбъект(СтруктураПараметромМП,ДокументСсылка.Документ,СтруктурапараметровОбъекта);
      КонецЦикла;
      векМенеджерПотоков.ДождатьсяОстановкиМенеджераПотоков(СтруктураПараметромМП);
      
      ВремяКонцаВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах();
      ВремяВыполненияВМиллисекундах = ВремяКонцаВыполнения - ВремяНачала;
      Сообщить("Окончание потоковой обработки: "+ВремяВыполненияВМиллисекундах / 1000);



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


Код
Если ИмяСобытия = "ПриПолученииРесурсов" Тогда            //Поток
         
         ОтветСобытия = ПриПолученииРесурсов(пПараметрыСобытия);
         //Сообщение = Новый СообщениеПользователю;
         //Сообщение.Текст = "Ресурс получен";
         //Сообщение.Сообщить();
      
      ИначеЕсли ИмяСобытия = "ПриОбработкеДействияПотока" Тогда      //Поток
         СтруктураДанных = пПараметрыСобытия.СтруктураДанных;
         ПараметрыДляОбъекта = СтруктураДанных.ПараметрыДляОбъекта;
         
         РегистрыСведений.векОчередьДляПереобеспечения.ОбработатьДокумент(ПараметрыДляОбъекта.Период, СтруктураДанных.ОбрабатываемыйОбъект);


Код
Функция ПриПолученииРесурсов(пПараметрыСобытия)
   
   СтруктураДанных = пПараметрыСобытия.СтруктураДанных;
   ОбрабатываемыйОбъект = СтруктураДанных.ОбрабатываемыйОбъект;
   
   ТабличнаяЧастьДокумента = ПолучитьТабличнуюЧастьДокумента(ОбрабатываемыйОбъект);
   
   МассивРесурсов = Новый Массив;
   МассивРесурса  = Новый Массив;
   МассивРесурса.Добавить(векПолучитьЗначениеРеквизита(ОбрабатываемыйОбъект,"Склад"));
   
   Для каждого СтрокаТЧД из ТабличнаяЧастьДокумента Цикл
      МассивРесурса.Добавить(СтрокаТЧД.Номенклатура);
   КонецЦикла;
   
   МассивРесурсов.Добавить(МассивРесурса);
   
   Возврат МассивРесурсов;
   
КонецФункции

Прикрепленные файлы:

{4E7E4C0D-D3B1-408E-A07C-5957395B025C}.png.jpg
DevМногопоточность. Универсальный «Менеджер потоков» 2.1#41 01.02.19 12:09
(40) Спасибо.

Подскажите что я делаю не так:
1. Получаю параметры "ПолучитьСтруктуруПараметровИнициализацииМенеджераПотоков"
2. Инициализирую МП "ИнициализироватьМенеджерПотоков"
3. В цикле обхожу выборку документов методом "ОбработатьОбъект"
4. После цикла ожидаю завершения МП "ДождатьсяОстановкиМенеджераПотоков"

Получаю ошибку:
Код
Поле объекта не обнаружено (АлгоритмыРаботыСКоллекцией)
КодСоздания   = пСтруктураПараметров.ПараметрыИнициализации.ПараметрыОбработкиКоллекции.АлгоритмыРаботыСКоллекцией.КодСоздания;


В структуре "ПараметрыОбработкиКоллекции" действительно нет "АлгоритмыРаботыСКоллекцией".

Перед циклом дописал:
Код
КодСоздания   = "КоллекцияПриемник = Новый СписокЗначений;";
      КодДобавления = "ЗаполнитьЗначенияСвойств(КоллекцияПриемник.Добавить(), КоллекцияИсточник[ИндексКоллекции]);";

      Структура = Новый Структура;
      Структура.Вставить("КодСоздания"  , КодСоздания);
      Структура.Вставить("КодДобавления", КодДобавления);
      
      СтруктураПараметромМП.ПараметрыИнициализации.ПараметрыОбработкиКоллекции.Вставить("АлгоритмыРаботыСКоллекцией", Структура);


А как нужно было сделать правильно?
DevМногопоточность. Универсальный «Менеджер потоков» 2.1#39 30.01.19 10:59
Подскажите, что нужно сделать, что-бы сработал механизм формирования ресурсов.
Запускаю потоки через "мпМенеджерПотоков.ОбработатьКоллекциюОбъектов".

Цитата
2. "ПриПолученииРесурсов" Это основное событие распараллеливания - тут по каждому документу необходимо собирать его ресурсы. Как? Смотрите примеры из презентации или статьи
не срабатывает.
DevМногопоточность. Универсальный «Менеджер потоков» 2.1#35 29.01.19 9:10
(34)
Цитата
2. "ПриПолученииРесурсов" Это основное событие распараллеливания - тут по каждому документу необходимо собирать его ресурсы. Как? Смотрите примеры из презентации или статьи

Доброго дня.
А можно привести пример кода для формирования ресурса и как потом им пользоваться. Я в этом месте застрял.