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