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


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

В этой группе 1С