Имя: Пароль:
1C
1С v8
Поиск по элементам коллекции набора данных СКД
0 Leksus
 
16.09.11
14:11
Например часто возникает такая задача:
необходимо в настройках СКД программно найти и установить поле отбора.
Как это эффективно решать?
У элементов коллекции набора данных СКД нет метода Найти()
Есть возможность получить по индексу, но как получить индекс необходимого элемента?
1 also
 
16.09.11
14:21
Перебор
2 Leksus
 
16.09.11
14:37
(1) печально :(
3 chingiz
 
16.09.11
15:24
КоллекцияЭлементовОтбораКомпоновкиДанных (DataCompositionFilterItemCollection)
Индекс (IndexOf)
Синтаксис:

Индекс(<Элемент>)
Параметры:

<Элемент> (обязательный)

Тип: ЭлементОтбораКомпоновкиДанных; ГруппаЭлементовОтбораКомпоновкиДанных. Элемент, индекс которого определяется.
Возвращаемое значение:

Тип: Число.
Описание:

Получает индекс элемента в коллекции.
4 Axel2009
 
16.09.11
15:35
(3) особенно если надо найти по имени
5 chingiz
 
16.09.11
15:36
6 chingiz
 
16.09.11
15:37
Сам сейчас сижу над подобным. Только не с отбором, а с выбором 8)
7 Axel2009
 
16.09.11
15:42
а с индексом как по имени?
8 chingiz
 
16.09.11
15:48
Да я вот сам бьюсь. Мне нужно получить индекс ГруппыВыбранныхЭлементов и что-то не выходит.

КомпоновщикНастроек.Настройки.Выбор.Элементы[2].Элементы.Получить(ЭлементыФормы.ПолеСписка.ТекущаяСтрока.ПолучитьИдентификатор())

Вот с ПолемСписка все ясно, он берет Текущую Строку и получает индекс, и мы его благополучно пихаем в Получить. Но вот порнографию в виде "Элементы[2]" мне нужно убрать, а то пользователь ведь может передвинуть ГруппуПолей в настройках...
9 Axel2009
 
16.09.11
15:53
а что во 2ом элементе находится?
10 Axel2009
 
16.09.11
15:53
что делать если пользователь "может удалить"?
11 chingiz
 
16.09.11
16:05
Первый это ГруппаВыбранныхПолей, а второй сами поля. Ну дак если удалит, то и поля не будет...значит ошибка :) Мне то не грозит, эта Группа всегда включена и используется....а вот то что ее могут подвинуть, это нужно решить :\
12 Axel2009
 
16.09.11
16:08
ну сделай имя группировки. и проверяй по имени
13 Робинзон Крузо
 
16.09.11
16:19
В (1), пожалуй, правильно сказано. Отборов не бывает уж очень много. так что использование перебора в данном случае некритично.
14 chingiz
 
16.09.11
16:27
Мда, что же я на (1) не посмотрел :) Вот и решение в коде:

   Для каждого Элемент из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
       Если Элемент.Заголовок = "Характер поездок" Тогда
           Индекс = КомпоновщикНастроек.Настройки.Выбор.Элементы.Индекс(Элемент);
       КонецЕсли;
   КонецЦикла;
15 chingiz
 
16.09.11
16:28
Респект (1) и (13), я уже как только не извращаюсь 2 часа по незнанию 8))
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший