|
Функциональные параметры в 1С | ☑ | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
Ненавижу 1С
гуру
10.12.10
✎
10:51
|
К сожалению в 1С нет функциональных типов, но можно извратится и написать:
//ДляКаждогоИзКоллекции - выполняет код для каждого элемента коллекции, //удовлетворяющего условию (если задано) //для элемента коллекции используется идентификатор "Элемент" //Параметры: // Коллекция - используемая коллекция // Делегат - строка выполняемого кода, каждый оператор включая последний должен заканчиваться ";", // Условие - строка условия, должна вычислять значение типа булево, // необязательный, если не задан, то выполняется для всех элементов // Параметр - дополнительный параметр произвольного типа, требующийся для обхода коллекции, // в строке делегата и коллекции доступен через идентификатор "Параметр" Процедура ДляКаждогоИзКоллекции(Коллекция, Делегат, Условие=Неопределено, Параметр=Неопределено) Экспорт Если Условие=Неопределено Тогда Условие = "Истина"; КонецЕсли; Для каждого Элемент Из Коллекция Цикл Усл = Вычислить(Условие); Если Усл Тогда Выполнить(Делегат); КонецЕсли; КонецЦикла; КонецПроцедуры фигня скажете? будете правы, но сам цикл и оператор условия писать не нужно! Пример использования: Параметр = Новый Структура("Сумма,УсловиеСкидки",0,УсловиеСкидки); ДляКаждогоИзКоллекции(Товары,"Параметр.Сумма=Параметр.Сумма+Элемент.Сумма;","Элемент.ПроцентАвтоматическихСкидок+Элемент.ПроцентСкидкиНаценки>=Параметр.УсловиеСкидки",Параметр); СуммаСБольшимиСкидками = Параметр.Сумма; ну и еще подобные процедуры: Процедура ДляКаждогоИзВыборки(Выборка, Делегат, Условие=Неопределено, Параметр=Неопределено) Экспорт Если Условие=Неопределено Тогда Условие = "Истина"; КонецЕсли; Пока Выборка.Следующий() Цикл Усл = Вычислить(Условие); Если Усл Тогда Выполнить(Делегат); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура УдалитьЭлементыКоллекции(Коллекция, Условие=Неопределено) Экспорт Если Условие=Неопределено Тогда Условие = "Истина"; КонецЕсли; Для й=-Коллекция.Количество()+1 По 0 Цикл Элемент = Коллекция[-й]; Усл = Вычислить(Условие); Если Усл Тогда Коллекция.Удалить(-й); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||||||||||||
1
КМ155
10.12.10
✎
10:51
|
(0) лавры Г1С покоя не дают ?
Автор, пишите ещё! |
|||||||||||||
2
Ненавижу 1С
гуру
10.12.10
✎
10:53
|
(1) угадал ))
|
|||||||||||||
3
Defender aka LINN
10.12.10
✎
10:53
|
Тебя Г1С покусал?
Что это вообще? |
|||||||||||||
4
ДенисЧ
10.12.10
✎
10:53
|
Поздравляю, ты прочитал Банду четырёх...
Автор, пишите ещё! |
|||||||||||||
5
КМ155
10.12.10
✎
10:55
|
(2) ступай на дубовый форум и ипи ему(форуму и Г1С) мозги
|
|||||||||||||
6
Ненавижу 1С
гуру
10.12.10
✎
11:02
|
хочу как в C#
к сожалению разные коллекции 1С даже не придерживаются единых именований методов |
|||||||||||||
7
Ненавижу 1С
гуру
10.12.10
✎
11:04
|
(1)(3)(5) а что это вы его вспомнили?
|
|||||||||||||
8
budanila
10.12.10
✎
11:06
|
(0)неплохо))
Автор, пишите ещё! |
|||||||||||||
9
Лефмихалыч
10.12.10
✎
11:07
|
(7) не только они
|
|||||||||||||
10
Wingless
10.12.10
✎
11:09
|
Ага, и в духе типовых от 1С сделать хрень из (0) формируемой из 8 вложенных вызовов.
Не надо нам этого |
|||||||||||||
11
Defender aka LINN
10.12.10
✎
11:10
|
(7) Та тоже велокаты всяческие изобретал...
|
|||||||||||||
12
Jolly Roger
10.12.10
✎
11:19
|
делегаты, конечно, не помешали бы, но примеры в (0), действительно в духе Г1С...
Автор, пишите ещё! |
|||||||||||||
13
Ненавижу 1С
гуру
10.12.10
✎
11:23
|
(12) ну а как по другому реализовать делегаты в 1С?
|
|||||||||||||
14
Ненавижу 1С
гуру
10.12.10
✎
11:40
|
Почему не во всех коллекциях есть Скопировать()?
трудно было сделать единоообразно? |
|||||||||||||
15
Defender aka LINN
10.12.10
✎
11:46
|
(14) Что этот метод должен сделать с табличной частью, например?
|
|||||||||||||
16
Ненавижу 1С
гуру
10.12.10
✎
11:51
|
(15) C# например в самую универсальную - массив
ну тут можно или в массив, или в ТЗ это не проблема |
|||||||||||||
17
Defender aka LINN
10.12.10
✎
11:58
|
(16) Вообще-то, "скопировать" подразумевает получение копии объекта. Ну, хотя бы из названия это следует. А у тебя получится совсем другой объект. ВНЕЗАПНО как-то.
|
|||||||||||||
18
Ненавижу 1С
гуру
10.12.10
✎
12:19
|
(17) это лучше чем ничего
кстати, о ТЧ, почему они этот тип изобрели просто загадка какая то, нельзя было объявить что объект имеет ТЗ согласно ТЧ то есть когда пишешь Объект = Документы.Татата.СоздатьДокумент(); Товары = Объект.Товары; //почему не ТЗ? неужели не могли упростить? насоздавали понимаешь 9000 типов опять почему вместо вот этих Документы.Татата.СоздатьДокумент() Справочники.Прапрапра.СоздатьЭлемент() Справочники.Прапрапра.СоздатьГруппу() не писать единообразно: Новый Документы.Татата() //новый документ Новый Справочники.Прапрапра() //новый элемент Новый Справочники.Прапрапра(Ложь) //новый элемент Новый Справочники.Прапрапра(Истина) //новая группа |
|||||||||||||
19
Defender aka LINN
10.12.10
✎
12:24
|
(18) В ТЗ, знаете ли, можно состав колонок, например, менять...
Вообще говоря, меня почему-то жутко раздражают люди, которые начинают ныть, что "в 1С все не так, как в C/C++/C#/MSSQL/Oracle/php...". Не нравится - звиздуйте кодить на те языки, где все это есть. |
|||||||||||||
20
Ненавижу 1С
гуру
10.12.10
✎
12:36
|
(19) кстати собираюсь
по теме: все верно, но ведь можно выделить и общие вещи, наконец тупо в параметре передавать параметр КолонкиРидОнли, объявить просто что будет исключение и т.д. и т.п. масса вариантов! |
|||||||||||||
21
Defender aka LINN
10.12.10
✎
12:37
|
(20) Угу. Вот потом весело - получаешь ТЗ и хрен угадаешь, что это - то ли обычная таблица, то ли табличная часть... Тип-то один и тот же.
|
|||||||||||||
22
Ненавижу 1С
гуру
10.12.10
✎
12:43
|
(21) и тут легко обходится, достаточно параметра Владелец, которого как это ни странно нет у ТЧ, а должно бы быть
|
|||||||||||||
23
Defender aka LINN
10.12.10
✎
12:48
|
(22) Какой, нахрен, _параметр_ у ТЗ? Ты какое-то монстроподобное угробище хочешь.
Учитесь пользоваться тем, что есть. |
|||||||||||||
24
Ненавижу 1С
гуру
10.12.10
✎
12:52
|
обычный атрибут )) какой уж тут монстр
вот почему у ТЧ его нет? а ведь он как private есть (иил через события), но мы его не видим - ведь если ТЧ изменить меняется модифицированность объекта |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |