0
Ненавижу 1С
гуру
10.12.10
✎
10:51
|
Всего мнений: 0
К сожалению в 1С нет функциональных типов, но можно извратится и написать:
//ДляКаждогоИзКоллекции - выполняет код для каждого элемента коллекции,
//удовлетворяющего условию (если задано)
//для элемента коллекции используется идентификатор "Элемент"
//Параметры:
// Коллекция - используемая коллекция
// Делегат - строка выполняемого кода, каждый оператор включая последний должен заканчиваться ";",
// Условие - строка условия, должна вычислять значение типа булево,
// необязательный, если не задан, то выполняется для всех элементов
// Параметр - дополнительный параметр произвольного типа, требующийся для обхода коллекции,
// в строке делегата и коллекции доступен через идентификатор "Параметр"
Процедура ДляКаждогоИзКоллекции(Коллекция, Делегат, Условие=Неопределено, Параметр=Неопределено) Экспорт
Если Условие=Неопределено Тогда
Условие = "Истина";
КонецЕсли;
Для каждого Элемент Из Коллекция Цикл
Усл = Вычислить(Условие);
Если Усл Тогда
Выполнить(Делегат);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
фигня скажете? будете правы, но сам цикл и оператор условия писать не нужно! Пример использования:
Параметр = Новый Структура("Сумма,УсловиеСкидки",0,УсловиеСкидки);
ДляКаждогоИзКоллекции(Товары,"Параметр.Сумма=Параметр.Сумма+Элемент.Сумма;","Элемент.ПроцентАвтоматическихСкидок+Элемент.ПроцентСкидкиНаценки>=Параметр.УсловиеСкидки",Параметр);
СуммаСБольшимиСкидками = Параметр.Сумма;
ну и еще подобные процедуры:
Процедура ДляКаждогоИзВыборки(Выборка, Делегат, Условие=Неопределено, Параметр=Неопределено) Экспорт
Если Условие=Неопределено Тогда
Условие = "Истина";
КонецЕсли;
Пока Выборка.Следующий() Цикл
Усл = Вычислить(Условие);
Если Усл Тогда
Выполнить(Делегат);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура УдалитьЭлементыКоллекции(Коллекция, Условие=Неопределено) Экспорт
Если Условие=Неопределено Тогда
Условие = "Истина";
КонецЕсли;
Для й=-Коллекция.Количество()+1 По 0 Цикл
Элемент = Коллекция[-й];
Усл = Вычислить(Условие);
Если Усл Тогда
Коллекция.Удалить(-й);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
|
|