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