![]() |
![]() |
![]() |
|
Будни: Отбор строк табличной части | ☑ | ||
---|---|---|---|---|
0
Волшебник
17.09.04
✎
10:19
|
Часто возникает задача показать только нужные строки в табличной части документа или справочника (или другого объекта). Для этого можно использовать замечательное свойство ОтборСтрок, которое входит в расширение табличного поля, связанного с табличной частью.
Использовать его очень просто: //установить отбор ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Установить(ЗначениеОтбора); //отключить отбор ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Установить(,Ложь); или 2-й вариант: ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Использование = Истина; ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.ВидСравнения = ВидСравнения.Равно; ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Значение = ЗначениеОтбора; А теперь конкретные примеры: -------- //выбрать строки с ценой = 100 ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Установить(100); -------- //выбрать строки с ценой 100 и опр. валютой ЭлементыФормы.тпТовары.ОтборСтрок.Валюта.Установить(ВалютаУпр); ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Установить(200); -------- //выбрать строки с ценой >= 100 (неравенство) ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Использование = Истина; ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ВидСравнения = ВидСравнения.БольшеИлиРавно; ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Значение = 100; -------- //выбрать строки с ценой от 100 до 200 (интервал) ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Использование = Истина; ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ВидСравнения = ВидСравнения.Интервал; ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ЗначениеС = 100; ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ЗначениеПо = 200; -------- //выбрать строки с определенными товарами по списку ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Использование = Истина; ЭлементыФормы.тпТовары.ОтборСтрок.Товар.ВидСравнения = ВидСравнения.ВСписке; ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Значение.Добавить(Товар1); ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Значение.Добавить(Товар2); -------- С помощью этого свойства можно реализовать подчиненные (связанные) табличные части. При смене текущей строки в первой табличной части вторая табличная часть показывает только связанную информаци. Например, таким образом можно реализовать работу с комплектами: 1-я таб. часть - комплекты, вторая - состав комплекта. Во второй табличной части должна быть колонка - идентификационный признак, связывающий ее с первой табличной частью. Таких колонок может быть несколько (составной ключ); В событии ПриАктивизацииСтроки для первого табличного поля пишем: ЭлементыФормы.СоставКомплекта.ОтборСтрок.Комплект.Установить(Комплект); ----------- Обращаю ваше внимание, что при таком отборе не используются индексы и для больших табличных частей возможно замедление работы. |
|||
1
Волшебник
17.09.04
✎
14:41
|
Небольшая добавка к статье в этой ветке:
Волшебнику (Отбор строк табличной части) |
|||
2
Guard
20.09.04
✎
10:29
|
Уже не помню почему, но я делал реализацию подчинённых друг другу табличных частей не на основе события "ПриАктивизацииСтроки", а события "ПриВыводеСтроки". Хотелось бы знать почему волшебник рекомендует именно событие "ПриАктивизацииСтроки"? Это связано с производительностью или с чем?
|
|||
3
Волшебник
20.09.04
✎
10:51
|
Событие ПриАктивизацииСтроки возникает при установке курсора на опр. строку, т.е. при смене текущей строки.
Событие ПриВыводеСтроки возникает при формировании КАЖДОЙ строки табличного поля, грубо говоря, при перерисовке (очень приблизительно). Через это событие нельзя в принципе реализовать подчиненные табличные части. Вернее можно, но это будет полный изврат. |
|||
4
Guard
13.10.04
✎
09:08
|
Может подскажете как бороться с такой вещью. При добавлении новой записи в подчинённую табличную часть она куда-то исчезает. И чтобы её увидеть - необходимо в главной табличной части сместиться на другую запись и вернуться назад. Причём это касается только первой добавленной записи в подч. табл. части, дальше вторая и последующие появляются сразу. Не пойму в чём тут фишка.
Обновление формы не помогает. |
|||
5
Волшебник
13.10.04
✎
09:39
|
При добавлении записи в подчиненную таб. часть нужно присваивать ей реквизиты, по которым она связана с основной.
|
|||
6
Guard
13.10.04
✎
09:53
|
Ну само собой.
Если это не делать - никакой подчинённости не будет. Фишка в том, что первая введённая запись почему-то пропадает. Т.е. не пропадает совсем, а не отображается. Как будто поставили отбор по другому значению связующего реквизита. Причём это происходит как при программном добавлении так и при ручном. |
|||
7
Guard
13.10.04
✎
11:57
|
Так кто-нить реализовывал корректно работающее подчинение табличных частей? Поделитесь опытом если не жалко.
|
|||
9
Волшебник
13.10.04
✎
12:23
|
(7) У меня все работает как надо.
|
|||
10
Prost
25.11.04
✎
08:52
|
А как сделать отбор по части строки ?
Например, есть значение "+ + +". Нужно отобрать строки с плюсом на 3 позиции строки. |
|||
11
Shaytan
25.11.04
✎
09:17
|
1)Делаешь запрос, получаешь массив нужных элементов, передаёшь в отбор.
2)Сделать дополнительный реквизит справочника, котороый содержит значение "3 позиции строки". И делать по нему отбор |
|||
12
Andrey Grudcin
01.02.05
✎
15:49
|
А как получить отобранные строки табличной части?
|
|||
13
Волшебник
модератор
01.02.05
✎
15:51
|
(12) Выбрать их еще раз запросом или циклом.
|
|||
14
Andrey Grudcin
01.02.05
✎
16:30
|
Почему то не получается.
Я вешаю на табличную часть стандартное действие "Установить отбор и сортировку списка...", выполняю его, задаю условия - табличная часть обновляется в соответствии с фильтром. Но когда я пишу Для каждого ТекОперация из ТаблицаОпераций цикл ... КонецЦикла; то обход захватывает ВСЕ строки таб. части, а надо только те, которые удовлетворяют отбору (т.е те которые отображаются в форме после установки отбора). |
|||
15
Волшебник
модератор
01.02.05
✎
16:39
|
(14) Ключевое слово "ОТОБРАТЬ ИХ ЕЩЕ РАЗ"
|
|||
16
Andrey Grudcin
01.02.05
✎
17:42
|
что значит отобрать их еще раз?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |