Имя: Пароль:
1C
1С v8
Массив в параметр запроса
0 alvenav
 
26.12.12
11:16
Всем привет, в простейшем запросе закопался. При передаче массива в качестве параметра результат запроса пуст. Не могу понять что не так.
Вот запрос.

Запрос = новый Запрос;
   Запрос.УстановитьПараметр("НачПериода", НачПериода);
   Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));
   Запрос.УстановитьПараметр("Проект", Проект);
   Запрос.УстановитьПараметр("Анкета", Анкета);
   Запрос.УстановитьПараметр("Список", МассивКонтрагентов);
   
   //Запрос.МенеджерВременныхТаблиц = МВТ;
   Если ТипОтчета = 0 Тогда
       Запрос.Текст = "ВЫБРАТЬ
                      |    CRM_Телемаркетинг.Ссылка,
                      |    CRM_Телемаркетинг.Дата,
                      |    CRM_Телемаркетинг.Проведен,
                      |    CRM_Телемаркетинг.ТиповаяАнкета,
                      |    CRM_Телемаркетинг.Участники.(
                      |        Опрос,
                      |        РезультатОбработкиЗвонка,
                      |        Контрагент,
                      |        КонтактноеЛицо,
                      |        Телефон
                      |    ) Как Участники
                      |   ИЗ
                      |        Документ.CRM_Телемаркетинг КАК CRM_Телемаркетинг
                      |ГДЕ
                      |    CRM_Телемаркетинг.Дата МЕЖДУ &НачПериода И &КонПериода
                      |    И CRM_Телемаркетинг.Проект = &Проект
                      |    И CRM_Телемаркетинг.ТиповаяАнкета = &Анкета
                      |    И CRM_Телемаркетинг.Проведен = ИСТИНА
                      |    И CRM_Телемаркетинг.Участники.Опрос = ЗНАЧЕНИЕ(Документ.Опрос.ПустаяСсылка)
                      |    И CRM_Телемаркетинг.Участники.Контрагент НЕ В(&Список)
                      |    И CRM_Телемаркетинг.Участники.Контрагент НЕ В(ВЫБРАТЬ
                      |                                                        РежимРаботыКонтрагентовСрезПоследних.Контрагент Как контрагент
                      |                                                   ИЗ
                      |                                                       РегистрСведений.РежимРаботыКонтрагентов.СрезПоследних КАК РежимРаботыКонтрагентовСрезПоследних
                      |                                                   ГДЕ
                      |                                                        РежимРаботыКонтрагентовСрезПоследних.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.НеРаботает))"
                      ;
       
       Результат = Запрос.Выполнить().Выгрузить();
1 le_
 
26.12.12
11:19
(0) А нормальный запрос к ТЧ написать нет желания?
2 sapphire
 
26.12.12
11:19
(0) Отключи условие массива - проверь запрос.
3 sapphire
 
26.12.12
11:20
(1) Не, нонче народ исключительно конструктором галиматью пишут... Думать им не чем, да и не умеют небось.
4 alvenav
 
26.12.12
11:22
5 alvenav
 
26.12.12
11:22
Ой
6 alvenav
 
26.12.12
11:23
Нормальный это какой?
7 sapphire
 
26.12.12
11:24
(6) Это который в полях содержит не более одной точки...
8 alvenav
 
26.12.12
11:24
Без условия запрос работает.
9 alvenav
 
26.12.12
11:26
Думаю, к решению вопроса, "нормальность" запроса к табличной части значения не имеет
10 tdm
 
26.12.12
11:27
(8) зачит условие исключает все результаты выборки))
у вас в конце где "не в (&...)" точно скорее всего где то "ИЛИ" вместо "И" нужно
11 tdm
 
26.12.12
11:30
(9) прямое...если сначала продумать запрос а не тупо накидать - обычно такие проблемы и не возникают)
12 Starhan
 
26.12.12
11:30
(8) ты тогда определись чего ты хочешь. И адекватно желаемому задай условия в запросе.
13 alvenav
 
26.12.12
11:37
Результат пуст, даже если убрать последнее условие
14 singlych
 
26.12.12
11:38
видимо, нужно что-то вроде
И НЕ (CRM_Телемаркетинг.Участники.Контрагент В(&Список)
ИЛИ CRM_Телемаркетинг.Участники.Контрагент В(ВЫБРАТЬ...))
15 singlych
 
26.12.12
11:51
(14) чето гоню
16 hhhh
 
26.12.12
12:04
(13) а все контрагенты из табличной части, они все точно-точно в этом списке? Может там только один контрагент в список входит, а остальные нет?
17 alvenav
 
26.12.12
12:08
(16) Как раз все контрагенты табличной части могут в списке и не быть, тех которых нет в списке мы и должны получить в результате.
18 hhhh
 
26.12.12
12:11
(17) так нормальное условие напишите. Чего же вы условие поставили, что все контрагенты входят?
19 hhhh
 
26.12.12
12:14
(18)+ но лучше конечно вам отбросить эти глупые понты и делать запрос не по документу, а по табличной части, как все нормальные люди, и как советуют в (1).
20 Бледно Золотистый
 
26.12.12
12:17
(17) А что же вы в запросе выдергиваете документы, если нужны контрагенты?
21 alvenav
 
26.12.12
12:22
(19) я согласен, запрос на скорую руку. К (17) условие верно.
22 Classic
 
26.12.12
12:25
Сообщить(ТипЗнч(МассивКонтрагентов));
Сообщить(МассивКонтрагентов.Количество());
23 alvenav
 
26.12.12
12:27
Условие с вложенным запросом срабатывает
24 m-serg74
 
26.12.12
12:27
(3) это не конструктор, это "ручная работа", конструктор только В может, а НЕ alvenav от себя руками добавил
25 Абыр
 
26.12.12
12:28
(0) если в массиве не элементы, а группы, то надо В ИЕРАРХИИ
26 sapphire
 
26.12.12
12:33
(19) Запрос к шапке + условие по периоду сокращает выборку коли стоит первым. Т.к. будет обработан первым.
27 sapphire
 
26.12.12
12:33
Конструктор - зло, ИМХО.
28 alvenav
 
26.12.12
12:39
(22) Значения в массиве есть, Тип - Спр Контрагенты
(25) Групп точно нет
29 lapinio
 
26.12.12
12:48
В ТЧ CRM_Телемаркетинг.Участники.Контрагент НЕ В (Выбрать ....) без массива ,а запросом. И ТЧ Лучше отдельно хотя бы вложенным запросом
30 alvenav
 
26.12.12
13:00
(27) Согласен, после переработки запроса все заработало
31 alvenav
 
26.12.12
13:10

Запрос.Текст = "ВЫБРАТЬ
                      |    CRM_Телемаркетинг.Ссылка,
                      |    CRM_Телемаркетинг.Ссылка.Дата,
                      |    CRM_Телемаркетинг.Ссылка.Проведен,
                      |    CRM_Телемаркетинг.Ссылка.ТиповаяАнкета,
                      |    CRM_Телемаркетинг.Опрос,
                      |    CRM_Телемаркетинг.РезультатОбработкиЗвонка,
                      |    CRM_Телемаркетинг.Контрагент,
                      |    CRM_Телемаркетинг.КонтактноеЛицо,
                      |    CRM_Телемаркетинг.Телефон
                      |ИЗ
                      |        Документ.CRM_Телемаркетинг.Участники КАК CRM_Телемаркетинг
                      |ГДЕ
                      |    CRM_Телемаркетинг.Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода
                      |    И CRM_Телемаркетинг.Ссылка.Проект = &Проект
                      |    И CRM_Телемаркетинг.Ссылка.ТиповаяАнкета = &Анкета
                      |    И CRM_Телемаркетинг.Ссылка.Проведен = ИСТИНА
                      |    И CRM_Телемаркетинг.Опрос = ЗНАЧЕНИЕ(Документ.Опрос.ПустаяСсылка)
                      |    И (CRM_Телемаркетинг.Контрагент НЕ В(&Список)
                      |    И CRM_Телемаркетинг.Контрагент НЕ В(ВЫБРАТЬ
                      |                                                        РежимРаботыКонтрагентовСрезПоследних.Контрагент Как контрагент
                      |                                                   ИЗ
                      |                                                       РегистрСведений.РежимРаботыКонтрагентов.СрезПоследних КАК РежимРаботыКонтрагентовСрезПоследних
                      |                                                   ГДЕ
                      |                                                        РежимРаботыКонтрагентовСрезПоследних.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.НеРаботает)))"
                      ;
       
       Результат = Запрос.Выполнить().Выгрузить();
       Результат.ВыбратьСтроку();