Вход | Регистрация
 

Будни: Отбор строк табличной части

Будни: Отбор строк табличной части
Я
   Волшебник
 
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
Небольшая добавка к статье в этой ветке:
Волшебнику (Отбор строк табличной части)
   Guard
 
2 - 20.09.04 - 10:29
Уже не помню почему, но я делал реализацию подчинённых друг другу табличных частей не на основе события "ПриАктивизацииСтроки", а события "ПриВыводеСтроки". Хотелось бы знать почему волшебник рекомендует именно событие "ПриАктивизацииСтроки"? Это связано с производительностью или с чем?
   Волшебник
 
3 - 20.09.04 - 10:51
Событие ПриАктивизацииСтроки возникает при установке курсора на опр. строку, т.е. при смене текущей строки.

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.