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