gifts2017

СКД отбор по таблице значений или таблице документа

Опубликовал Михаил (ZMGMSC) в раздел Программирование - Инструментарий

Пример использования СКД для установки отбора. На управляемой форме в табличной части документа можно установить отбор только по одному реквизиту. Данная обработка позволяет делать произвольные отборы.

Использование СКД для произвольных отборов.

В качестве примера берется непростая задача:

Отбор в табличной части документа «Реализация товаров услуг» по нескольким реквизитам и их комбинациям. Типовой механизм позволяет только найти элементы в одной колонке (не динамический список) см:

 

Для настройки фильтра будем использовать условное оформление формы.

На форме добавим в ТЧ Товары реквизит «Видимость»  булево и настроим условное оформление строки не него. В дальнейшем Для Строк попадающих в отбор будем проставлять Видимость = Истина, для остальных Ложь.

1 Обработка Установка отбора по табличной части . основной параметр – таблица значений.

 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

                Тест = Ложь;

                Если Тест Тогда

                               Возврат;

                КонецЕсли;

                УстановитьНачальныеНастройки();

КонецПроцедуры

 

Для тестирования Тест = Истина. ДокументСсылка выбирается вручную на форме.

&НаКлиенте

Процедура ДокументСсылкаПриИзменении(Элемент)

                УстановитьНастройкиДляТеста();

КонецПроцедуры

 

 

2 Установка настроек

&НаСервере

Процедура УстановитьНастройкиДляТеста()

                //отличие от  УстановитьНачальныеНастройки

                //здесь нет установленных параметров формы

                //которые устанавливаются программно при вызове формы

 

 

Для начала получим таблицу значений:

              

 ТабДок                                               = Объект.ДокументСсылка.Товары.Выгрузить();

Т.к. Таблица для отбора находится на клиенте, преобразуем ТЗ в массив структур

               

МассивСтруктур             = ТаблицуВМассивСтруктур(ТабДок);

Теперь заполним таблицу для отбора:

              

 Для Каждого Стр Из МассивСтруктур Цикл

                               ТабДляОтбора.Добавить(Стр);

                КонецЦикла;

                // Преобразуем таблицу значений в массив структур для передачи клиенту (форме).

                скд                                        = РеквизитФормыВЗначение("Объект").ПолучитьСхемуОтбора();

Получаем схему СКД по умолчанию она пустая.

              

 НастроитьПоляСхемы(СКД, ТабДок.Колонки);

Заполняем поля схемы и передаем ее клиенту и передаем управление компановщику настроек

Теперь от нас ничего не зависит.

              

 АдресСхемы                    = ПоместитьВоВременноеХранилище(скд,  УникальныйИдентификатор);

                // МассивСтруктур и АдресСхемы - реквизиты формы. они нам нужны на клиенте.

                Объект.КомпановщикНастроекОтбора.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));

                Объект.КомпановщикНастроекОтбора.ЗагрузитьНастройки(скд.НастройкиПоУмолчанию);

КонецПроцедуры

Полное описание во вложении

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка
.epf 11,55Kb
22.07.14
7
.epf 1.0 11,55Kb 7 Скачать
Описание
.docx 303,56Kb
22.07.14
3
.docx 1 303,56Kb 3 Скачать
Обработка + описание в архиве.
.rar 283,47Kb
24.07.14
35
.rar 1 283,47Kb 35 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Лыткин (TrinitronOTV) 23.07.14 05:39
было бы здорово реализовать такой механизм заполнения табличной части без изменения конфигурации
2. Михаил (ZMGMSC) 23.07.14 09:15
В этой теме заложен принцип работы с СКД для построения отборов.
Заполнение ТЧ это частный случай реализации данной обработки.
3. Саша Безымяный (help1Ckr) 23.07.14 09:52
Спасибо огромное за выложенный код. Работа с отборами скд на форме не в отчете думаю понадобится многим
4. Михаил (ZMGMSC) 23.07.14 10:39
Не забывайте ставить плюсы ;)
5. Александр Савостин (savostin.alex) 28.07.14 01:04
После установки первого критерия отбора, после нажатия Ctrl+F, в открывшемся окне становится доступен флаг "Искать в найденном".
gull22; bashinsky; +2 Ответить 2
6. Михаил (ZMGMSC) 28.07.14 09:44
(5) savostin.alex, это в форме документа или в форме обработки?
7. Дмитрий Елисеев (w-divin) 31.07.14 11:28
Интересненько. Вот только очень сильно напрягает в тексте "компАновщик" ))) а так идейка замечательная. надо будет присобачить себе )))

(5) savostin.alex, и так ...дцать раз. и когда на очередном шаге забудешь поставить эту галку - "наша песня хороша, начинай сначала" ))) Ну и плюс по реквизитам поиском тебе не удастся что-либо найти )))

8. Дмитрий Елисеев (w-divin) 31.07.14 11:30
(0) И еще неплохо было бы уйти от модальности ввиду направления развития платформы )))
9. Михаил (ZMGMSC) 31.07.14 15:55
Не представляю как тут можно уйти от модальности, если мы делаем отбор в тч документа?
В других случаях это будет нормально.
10. Марина Семёнова (SemenovaMarinaV) 13.08.14 08:26
11. Александр Полтава (Патриот) 13.08.14 15:20
13. Марина Семёнова (SemenovaMarinaV) 10.11.14 16:34
Огромное спасибо Помогло
14. Антон Лыткин (Trise) 18.02.16 20:37
15. Михаил (ZMGMSC) 24.02.16 14:59
(14) Trise, Там есть ссылка на полную версию, она отправляет на мою страничку :)
16. Рамиль Баширов (bashirov.rs) 01.06.16 15:28
Эффективно работает только на малом количестве строк в табличной части. Есть варианты более производительный?
17. Владимир Брунько (VivaBrunko) 01.06.16 15:44
Хз, пока еще не нашел сам
18. Михаил (ZMGMSC) 02.06.16 11:26
Тормоза могут быть при передаче данных на сервер
или условное оформление формы будет тормозить.
Только искать принципиально другой подход
Можно сравнить со скоростью стандтартного поиска по значению.
Он тоже тормозит с боольшими таблицами
Учтите, что таб. часть документа еще может не записана в БД.
19. Василий Коровин (Vass429) 24.08.16 17:03
Очень большой проблемой при игре с видимостью строк табличной части является следующее:

У нас есть документ. В нем 20 строк.
Допустим, по условиям нашего отбора были отобраны строки 1, 2 и 10, а остальные стали невидимыми.
Мы выделяем комбинацией клавиш Shift + END отобранные строки и затем удаляем выделенные строки.
Казалось бы, должны удалиться строки 1, 2 и 10, но помимо этого удаляются и строки с 3 по 9.

Очень часто отбор нужен в таком разрезе. Может кто - нибудь подскажет, как обойти эту ситуацию.
Прошу не предлагать мне, что то типа: "Зажми Shift и отдельно выдели каждую из строк, а потом удали".
Это работает, но это не выход из ситуации. Пользователь не должен помнить, что в управляемых формах есть такая проблема.
20. Михаил (ZMGMSC) 31.08.16 17:52
пользователю не надо давать такую возможность
если мы сами установили отбор
как вариант можно программно выполнить удаление строк.
отключив стандартную обработку.
я всегда пользовался shift и стрелочки верх низ
это работало.
Пользователю фиолетово, здесь надо программно обработать
21. Remi Mova (MovaRemi) 24.10.16 11:10
Спасибо за обработку, давно искал решение подобной задачи. Интересует вопрос: не будет ли эффективней для установки видимости воспользоваться механизмом "ОтборСтрок", а не "Условным оформлением" ?
22. Василий Коровин (Vass429) 26.10.16 13:42
(20) ZMGMSC, Согласен, что надо программно обработать, но как? Попробовал идти через "ВыделенныеСтроки", но свойство, отвечающее за видимость имеет одно и тоже значение, хотя на форме отображаются строки, согласно отбору. И зажать Shift и стрелку вниз - это не выход, если у вас хотя бы 100 строк, согласно отбору, то это будет не очень быстро
23. Михаил (ZMGMSC) 01.11.16 16:34
отобраны строки 1, 2 и 10, а остальные стали невидимыми.
Мы выделяем комбинацией клавиш Shift + END отобранные строки и затем удаляем выделенные строки.
Казалось бы, должны удалиться строки 1, 2 и 10,
Когда строки скрыты их номера не поменялись, если требуется менять строки местами, то для них надо добавлять поле ИД.
Осталось проверить номер выделенной строки на = 1 2 10
если соотв то удалять
24. Михаил (ZMGMSC) 01.11.16 16:36
механизмом "ОтборСтрок", а не "Условным оформлением"
Попробуйте, напишите потом :)
мне тоже интересно
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа