Имя: Пароль:
1C
1С v8
Отбор по списку значений в построителе запроса
0 1snik_d
 
10.06.21
14:33
Всем привет! Никак не получается организовать отбор по списку значений в построителе запроса.
    
ПостроительЗапроса.Текст =
        "ВЫБРАТЬ
        |    ОтчетКомитентуОПродажах.Ссылка КАК Документ,
        |    ОтчетКомитентуОПродажах.Контрагент КАК Контрагент,
        |    КонтрагентыКонтактнаяИнформация.Представление КАК СписокЭлектронныхАдресов
        |ИЗ
        |    Документ.ОтчетКомитентуОПродажах КАК ОтчетКомитентуОПродажах
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
        |        ПО ОтчетКомитентуОПродажах.Контрагент = КонтрагентыКонтактнаяИнформация.Ссылка
        |            И (КонтрагентыКонтактнаяИнформация.Тип = &ТипКонтактнойИнформации)
        |            И (КонтрагентыКонтактнаяИнформация.Вид = &ВидКонтактнойИнформации)
        |ГДЕ
        |    ОтчетКомитентуОПродажах.Дата МЕЖДУ &НачалоПериода И &КонецПериода
        |{ГДЕ
        |    ОтчетКомитентуОПродажах.Контрагент.*}";
    
    Если ЗначениеЗаполнено(Объект.Контрагент) Тогда
        ОтборПоКонтрагенту = ПостроительЗапроса.Отбор.Добавить("Контрагент");
        ОтборПоКонтрагенту.Значение = Объект.Контрагент;
        ОтборПоКонтрагенту.ВидСравнения = ВидСравнения.ВСписке;
        ОтборПоКонтрагенту.Использование = Истина;
    КонецЕсли;

Ругается на неверный тип в отборе. Как это сделать?
1 1snik_d
 
10.06.21
14:34
Да, "Контрагент" - Это реквизит обработки с типом "СписокЗначений"
2 Timon1405
 
10.06.21
14:45
ОтборПоКонтрагенту.Значение = Объект.Контрагент.ВыгрузитьЗначения();
3 1snik_d
 
10.06.21
14:46
(2) Так тоже ругается на тип значения. Он ждет Тип значения "КонтрагентСсылка", а я не пойму как ему список пихнуть
4 1snik_d
 
10.06.21
14:47
Если передать конкретного контрагента, то все отрабатывает правильно
5 youalex
 
10.06.21
14:47
Местами попробуй поменять строчки с ВидСравнения и Значение
(вроде был такой прикол)
6 1snik_d
 
10.06.21
14:49
(5) Бл..ть, так работает. Огромное мерси!
7 ДенисЧ
 
10.06.21
14:49
"ОтборПоКонтрагенту.Значение = Объект.Контрагент;
ОтборПоКонтрагенту.ВидСравнения = ВидСравнения.ВСписке;
"

Абрам Моисеевич, Вы или трусики наденьте, или крестик снимите...

В смысле - если указываешь "в списке", Так и передеавай список...
8 1snik_d
 
10.06.21
14:50
(7) Так и передаю, там прикол в порядке строк в коде
9 Малыш Джон
 
10.06.21
15:01
(6) По умолчанию ВидСравнения  -  это ВидСравнения.Равно, поэтому когда туда передается список он преобразуется к единичному значению и когда потом устанавливается ВидСравнения.ВСписке происходит такая ошибка. Поэтому всегда надо сначала ВидСравнения устнавливать, а потом Значение.
Это не только в построителе запроса, это вообще везде, где используется Отбор.