Подскажите пожалуйста как программно создать множественный и единичный отбор в отчете.
Отчет сделал без скд и построителя. Макетом и выводил области.
Создал в отчете реквизит тип выбрал отбор. Потом создал табличное поле в данных выбрал реквизит отбор .
В запросе получал сотрудников,подразделение,контрагент .
Процедура ПолеВидаСравненияНоменклатураПриИзменении(Элемент)
ПриИзмененииПоляВидаСравнения(ЭтаФорма, Элемент, "Номенклатура");
КонецПроцедуры
Процедура ПолеВидаСравненияКонтрагентПриИзменении(Элемент)
ПриИзмененииПоляВидаСравнения(ЭтаФорма, Элемент, "Контрагенты");
КонецПроцедуры
Процедура ПриИзмененииПоляВидаСравнения(Форма, Элемент, Поле) Экспорт
Если Элемент.Значение = ВидСравнения.ВСписке
ИЛИ Элемент.Значение = ВидСравнения.НеВСписке
ИЛИ Элемент.Значение = ВидСравнения.ВСпискеПоИерархии
ИЛИ Элемент.Значение = ВидСравнения.НеВСпискеПоИерархии Тогда
Значение = Неопределено;
Если Форма.ЭлементыФормы[Поле].ТипЗначения <> Новый ОписаниеТипов("СписокЗначений")Тогда
Значение = Форма.ЭлементыФормы[Поле].Значение;
Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СписокЗначений");
Форма.ЭлементыФормы[Поле].ТипЗначенияСписка = Новый ОписаниеТипов("СправочникСсылка."+Поле);
КонецЕсли;
Если ЗначениеЗаполнено(Значение) Тогда
Форма.ЭлементыФормы[Поле].Значение.Добавить(Значение);
КонецЕсли;
ИначеЕсли Элемент.Значение = ВидСравнения.Равно
ИЛИ Элемент.Значение = ВидСравнения.ВИерархии
ИЛИ Элемент.Значение = ВидСравнения.НеРавно
ИЛИ Элемент.Значение = ВидСравнения.НеВИерархии
Тогда
Значение = Неопределено;
Если Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СписокЗначений")Тогда
Если Форма.ЭлементыФормы[Поле].Значение.Количество()>0 Тогда
Значение = Форма.ЭлементыФормы[Поле].Значение[0].Значение;
КонецЕсли;
Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СправочникСсылка."+Поле);
КонецЕсли;
Если ЗначениеЗаполнено(Значение) Тогда
Форма.ЭлементыФормы[Поле].Значение = Значение;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
Перед формированием отчета добавить условие в запрос в соответствии с заданными настройками
...
Если ЭлементыФормы.ОтборПоНоменклатуре.Значение И ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) тогда
УсловиеНоменклатуры = " Номенклатура "+ПолучитьУсловиеЗапроса(ЭтаФорма, "Номенклатура")+" (&Номенклатура)";
Запрос.УстановитьПараметр("Номенклатура", ЭлементыФормы.Номенклатура.Значение);
КонецЕсли;
....
Функция ПолучитьУсловиеЗапроса(Форма, Поле) Экспорт
ФрагментУсловия = "";
Если Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.Равно Тогда
ФрагментУсловия = "=";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеРавно Тогда
ФрагментУсловия = "<>";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСписке Тогда
ФрагментУсловия = "В";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеВСписке Тогда
ФрагментУсловия = "НЕ В";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВИерархии Тогда
ФрагментУсловия = "В ИЕРАРХИИ";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеВИерархии Тогда
ФрагментУсловия = "НЕ В ИЕРАРХИИ";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСпискеПоИерархии Тогда
ФрагментУсловия = "В ИЕРАРХИИ";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеВСпискеПоИерархии Тогда
ФрагментУсловия = "НЕ В ИЕРАРХИИ";
КонецЕсли;
Возврат ФрагментУсловия;
КонецФункции
Процедура ПолеВидаСравненияНоменклатураПриИзменении(Элемент)
ПриИзмененииПоляВидаСравнения(ЭтаФорма, Элемент, "Номенклатура");
КонецПроцедуры
Процедура ПолеВидаСравненияКонтрагентПриИзменении(Элемент)
ПриИзмененииПоляВидаСравнения(ЭтаФорма, Элемент, "Контрагенты");
КонецПроцедуры
Процедура ПриИзмененииПоляВидаСравнения(Форма, Элемент, Поле) Экспорт
Если Элемент.Значение = ВидСравнения.ВСписке
ИЛИ Элемент.Значение = ВидСравнения.НеВСписке
ИЛИ Элемент.Значение = ВидСравнения.ВСпискеПоИерархии
ИЛИ Элемент.Значение = ВидСравнения.НеВСпискеПоИерархии Тогда
Значение = Неопределено;
Если Форма.ЭлементыФормы[Поле].ТипЗначения <> Новый ОписаниеТипов("СписокЗначений")Тогда
Значение = Форма.ЭлементыФормы[Поле].Значение;
Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СписокЗначений");
Форма.ЭлементыФормы[Поле].ТипЗначенияСписка = Новый ОписаниеТипов("СправочникСсылка."+Поле);
КонецЕсли;
Если ЗначениеЗаполнено(Значение) Тогда
Форма.ЭлементыФормы[Поле].Значение.Добавить(Значение);
КонецЕсли;
ИначеЕсли Элемент.Значение = ВидСравнения.Равно
ИЛИ Элемент.Значение = ВидСравнения.ВИерархии
ИЛИ Элемент.Значение = ВидСравнения.НеРавно
ИЛИ Элемент.Значение = ВидСравнения.НеВИерархии
Тогда
Значение = Неопределено;
Если Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СписокЗначений")Тогда
Если Форма.ЭлементыФормы[Поле].Значение.Количество()>0 Тогда
Значение = Форма.ЭлементыФормы[Поле].Значение[0].Значение;
КонецЕсли;
Форма.ЭлементыФормы[Поле].ТипЗначения = Новый ОписаниеТипов("СправочникСсылка."+Поле);
КонецЕсли;
Если ЗначениеЗаполнено(Значение) Тогда
Форма.ЭлементыФормы[Поле].Значение = Значение;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
Перед формированием отчета добавить условие в запрос в соответствии с заданными настройками
...
Если ЭлементыФормы.ОтборПоНоменклатуре.Значение И ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) тогда
УсловиеНоменклатуры = " Номенклатура "+ПолучитьУсловиеЗапроса(ЭтаФорма, "Номенклатура")+" (&Номенклатура)";
Запрос.УстановитьПараметр("Номенклатура", ЭлементыФормы.Номенклатура.Значение);
КонецЕсли;
....
Функция ПолучитьУсловиеЗапроса(Форма, Поле) Экспорт
ФрагментУсловия = "";
Если Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.Равно Тогда
ФрагментУсловия = "=";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеРавно Тогда
ФрагментУсловия = "<>";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСписке Тогда
ФрагментУсловия = "В";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеВСписке Тогда
ФрагментУсловия = "НЕ В";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВИерархии Тогда
ФрагментУсловия = "В ИЕРАРХИИ";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеВИерархии Тогда
ФрагментУсловия = "НЕ В ИЕРАРХИИ";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.ВСпискеПоИерархии Тогда
ФрагментУсловия = "В ИЕРАРХИИ";
ИначеЕсли Форма.ЭлементыФормы["ПолеВидаСравнения"+Поле].Значение = ВидСравнения.НеВСпискеПоИерархии Тогда
ФрагментУсловия = "НЕ В ИЕРАРХИИ";
КонецЕсли;
Возврат ФрагментУсловия;
КонецФункции
получилось создать отбор ,только привезать его к запросу не получаеться, я так понял что нужно в запросе где условия,вставлять новые условия учитывая отборы
ГДЕ
| ВЫБОР
| КОГДА &СотрудникЗаполнен = ИСТИНА
| ТОГДА Заказ.Сотрудник = &Сотрудник
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ВЫБОР
| КОГДА &КонтрагентЗаполнен = ИСТИНА
| ТОГДА Заказ.Контрагент = &Контрагент
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ВЫБОР
| КОГДА &ФилиалЗаполнен = ИСТИНА
| ТОГДА Заказ.Филиал = &Филиал
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И Заказ.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)
| И Заказ.Проведен = ИСТИНА
а это код для отбора
Отбор = ВнешнийОтчетОбъект.ОтборОбщий;
ДоступныеПоляОтбора = Отбор.ПолучитьДоступныеПоля();
Поле = ДоступныеПоляОтбора.Добавить("Контрагент", "Контрагент",
Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
Поле.Отбор = Истина;
Поле = ДоступныеПоляОтбора.Добавить("Филиал", "Филиал",
Новый ОписаниеТипов("СправочникСсылка.Филиалы"));
Поле.Отбор = Истина;
Поле = ДоступныеПоляОтбора.Добавить("Сотрудник", "Сотрудник",
Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Поле.Отбор = Истина;