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