Использование СКД для произвольных отборов.
В качестве примера берется непростая задача:
Отбор в табличной части документа «Реализация товаров услуг» по нескольким реквизитам и их комбинациям. Типовой механизм позволяет только найти элементы в одной колонке (не динамический список) см:
Для настройки фильтра будем использовать условное оформление формы.
На форме добавим в ТЧ Товары реквизит «Видимость» булево и настроим условное оформление строки не него. В дальнейшем Для Строк попадающих в отбор будем проставлять Видимость = Истина, для остальных Ложь.
1 Обработка Установка отбора по табличной части . основной параметр – таблица значений.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
                Тест = Ложь;
                Если Тест Тогда
                               Возврат;
                КонецЕсли;
                УстановитьНачальныеНастройки();
КонецПроцедуры
Для тестирования Тест = Истина. ДокументСсылка выбирается вручную на форме.
&НаКлиенте
Процедура ДокументСсылкаПриИзменении(Элемент)
                УстановитьНастройкиДляТеста();
КонецПроцедуры
2 Установка настроек
&НаСервере
Процедура УстановитьНастройкиДляТеста()
                //отличие от  УстановитьНачальныеНастройки
                //здесь нет установленных параметров формы
                //которые устанавливаются программно при вызове формы
Для начала получим таблицу значений:
 ТабДок                                               = Объект.ДокументСсылка.Товары.Выгрузить();
Т.к. Таблица для отбора находится на клиенте, преобразуем ТЗ в массив структур
МассивСтруктур             = ТаблицуВМассивСтруктур(ТабДок);
Теперь заполним таблицу для отбора:
 Для Каждого Стр Из МассивСтруктур Цикл
                               ТабДляОтбора.Добавить(Стр);
                КонецЦикла;
                // Преобразуем таблицу значений в массив структур для передачи клиенту (форме).
                скд                                        = РеквизитФормыВЗначение("Объект").ПолучитьСхемуОтбора();
Получаем схему СКД по умолчанию она пустая.
 НастроитьПоляСхемы(СКД, ТабДок.Колонки);
Заполняем поля схемы и передаем ее клиенту и передаем управление компановщику настроек
Теперь от нас ничего не зависит.
 АдресСхемы                    = ПоместитьВоВременноеХранилище(скд,  УникальныйИдентификатор);
                // МассивСтруктур и АдресСхемы - реквизиты формы. они нам нужны на клиенте.
                Объект.КомпановщикНастроекОтбора.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
                Объект.КомпановщикНастроекОтбора.ЗагрузитьНастройки(скд.НастройкиПоУмолчанию);
КонецПроцедуры
Полное описание во вложении
Вступайте в нашу телеграмм-группу Инфостарт
