Группировка компонентов по алиасу
Представьте себе компанию панков. Каждый из них уникален, каждый - личность. Но при этом у них есть и что-то общее - все они панки. К каждому можно обратиться как: "Эй, ты, панк!", и он не только отзовется громогласным "Хой!", но возможно даже предложит Вам пива.
Попробуем описать нашу небольшую и дружную компанию:
&Желудь
&Прозвище("Панк")
Процедура ПриСозданииОбъекта()
КонецПроцедуры&Желудь
&Прозвище("Панк")
Процедура ПриСозданииОбъекта()
КонецПроцедуры&Желудь
&Прозвище("Панк")
Процедура ПриСозданииОбъекта()
КонецПроцедуры&Желудь
&Прозвище("Панк")
Процедура ПриСозданииОбъекта()
КонецПроцедурыЧудесная компания собралась, неправда ли? Что же мы можем сделать с этими красавцами? Получить их как пачку желудей! В этом нам поможет метод Поделка.НайтиЖелуди():
Панки = Поделка.НайтиЖелуди("Панк");
Ожидаем.Что(Панки).ИмеетТип("Массив");
Ожидаем.Что(Панки.Количество()).Равно(4);
Для Каждого Панк Из Панки Цикл
Панк.Хой();
КонецЦикла;Этот бэнд можно получить не только императивно, через НайтиЖелуди, но и внедрить в качестве зависимости. Для указания того, что мы ждем массив из панков, а не какого-то конкретного, у аннотации &Пластилин есть параметр Тип, который может принимать значения всех &ПрилепляемаяКоллекция, в частности Массив:
Процедура ПриСозданииОбъекта(&Пластилин(Значение = "Панк", Тип = "Массив") Панки)
Для Каждого Панк Из Панки Цикл
Панк.Хой();
КонецЦикла;
КонецПроцедурыАналогичный параметр (третий) есть и у метода НайтиЖелуди:
Панки = Поделка.НайтиЖелуди("Панк", , "Массив");По умолчанию, через &Пластилин внедряется единичный Желудь, а метод НайтиЖелуди возвращает Массив.
Помимо единичного желудя и массива, РокБэнд можно получить в виде соответствия ("Соответствие"), где ключом будет имя панка жёлудя, а значением - сам жёлудь, и в виде таблицы значений ("ТаблицаЗначений"), в каждой строке которой будет содержаться Имя, ОпределениеЖелудя и сам Желудь.
И вообще, загляните в документацию библиотеки autumn-collections, там много вкусных типов!
И даже больше, РокБэнд можно получить своим собственным способом, для этого нужно создать у себя свой уникальный СобирательПанков.os, в котором нужно определить два метода, один который получает на входе панка и его описание, а второй который возвращает собранную банду
// СобирательПанков.os
Перем Банда;
// Тут нам на вход приходит очередной панк
Процедура Добавить(Панк, ОпределениеПанка) Экспорт
Для Каждого РольИИсполнитель Из Банда Цикл
Если Не ЗначениеЗаполнено(РольИИсполнитель.Значение) Тогда
Банда.Вставить(РольИИсполнитель.Ключ, Желудь);
Прервать;
КонецЕсли;
КонецЦикла;
Коллекция.Добавить(ОпределениеЖелудя.Имя());
КонецПроцедуры
// А тут нам надо вернуть собранную банду
Функция Получить() Экспорт
Возврат Новый ФиксированнаяСтруктура(Банда);
КонецФункции
&ПрилепляемаяКоллекция("СобирательПанков")
Процедура ПриСозданииОбъекта()
Банда = Новый Структура(
"Гитарист, Барабанщик, БасГитарист, Вокалист"
);
КонецПроцедурыТеперь нам вернётся целая собранная группа:
Панки = Поделка.НайтиЖелуди("Панк", , "СобирательПанков");
// > Панки.Гитарист
// > Панки.Барабанщик
// > Панки.БасГитарист
// > Панки.Вокалист