К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Запрос: вхождение нескольких значений в табличную часть

Гость
0 - 08.12.2013 - 20:12
Задача: Есть справочник с табличной частью.
Нужно найти все элементы этого справочника, в табличной части которых присутствует несколько задаваемых значений. Эти значения задаются некой другой табличной частью (или таблицей значений или списком значений) - тут не важно, как проще так и будут задаваться.
Очень желательно запросом это сделать.
Не могу придумать и поиск тоже не находит подобной задачи.
Может кто подаст гениальную мысль о том как это можно сделать.



Гость
1 - 08.12.2013 - 20:14
Для решения таких задач предназначены критерии отбора
2 - 09.12.2013 - 10:08
ВЫБРАТЬ РАЗЛИЧНЫЕ
КонтрагентыМенеджерыПокупателя.Ссылка
ИЗ
Справочник.Контрагенты.МенеджерыПокупателя КАК КонтрагентыМенеджерыПокупателя
ГДЕ
КонтрагентыМенеджерыПокупателя.МенеджерПокупателя В
(ВЫБРАТЬ
ФизическиеЛица.Ссылка
ИЗ
Справочник.ФизическиеЛица КАК ФизическиеЛица
ГДЕ
ФизическиеЛица.Наименование = "ИВАНОВ")

Как-то так.
Гость
3 - 09.12.2013 - 19:10
2-Климов Сергей > +МенеджерВременныхТаблиц, тогда таблицу значений в параметры можно запихать
0-Dmitry3U >коллега, вам надо запросы подучить. это же азы.
Гость
4 - 09.12.2013 - 21:15
Коллеги, возможно я не совсем корректно определил задачу. Позвольте на примере:
1) Справочник: Физ.Лица
2) Справочник: Контрагенты
2.1) имеет табл.часть: Менеджеры, типа: Физ.лица
3) в отчете\обработке задается несколько значений типа: Физ.лица (Иванов, Петров, Васечкин)
4) Необходимо найти всех Контрагентов, в табличной части Менеджеров у которых присутствуют все заданные значения (Иванов, Петров, Васечкин).
4.1) Если нет хотя бы одного - пропускаем, если кроме этих трех есть и другие - выбираем.
Гость
5 - 09.12.2013 - 21:19
Количество задаваемых значений, понятно, может быть любым.
Гость
6 - 10.12.2013 - 07:30
в (2) правильно написано, только названия справочников поправить осталось
Гость
7 - 10.12.2013 - 08:16
(6) конечно нет.
ему нужно условие на весь список.
Гость
8 - 10.12.2013 - 08:21
(0) делаешь подзапрос, в нём запрос к табличной части менеджеры на выборку ССылки + левое соединение со списком(помести в табличку) уникальных физ. лиц + группировка по физлицу + подсчет Количество(Табличка.ФизЛицо) как Всего
+ условие на Имеющие Количество(Табличка.ФизЛицо) = КоличествоФизЛицВТабличкеКотороеМожешьПолучитьВПакетномЗапросе

Ну и всё.. делаешь основной запрос + условие, ссылка в (тут подзапрос, что выше)
Гость
9 - 10.12.2013 - 08:23
+8 наврал немного, надо Количество(ССылка) как Всего
+ условие на Имеющие Количество(ССылка) + сгруппировать ССылка...
Гость
10 - 10.12.2013 - 08:24
да, и не левое соединение, а внутреннее в подзапросе.
Гость
11 - 10.12.2013 - 16:05
Ёпрст> пытаюсь разобраться в написанном ... сложно ... но кажется улавливаю суть идеи - спасибо ...
Гость
12 - 10.12.2013 - 16:36
(11) На вот, примитивный запрос - покажет, клиентосов, у которых есть 3 договора. Тебе по аналогии - соединение с табличкой твоих физлиц нужно и усё..

ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент,
ДоговорыКонтрагентов.Ссылка КАК Договор
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
ГДЕ
Контрагенты.Ссылка В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ПО
Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3)
Гость
13 - 10.12.2013 - 16:52
12-Ёпрст > Даже и без соединений сработает...

Выбрать Различные Ссылка, Менеджер Из Контрагенты.Менеджеры ГДЕ Менеджер в (&Список)

С дальнейшей группировкой и условием
Гость
14 - 10.12.2013 - 16:56
(13) ^))))))))))0
какая наивность

Автору нужно условие на вхождение ВСЕХ кто есть в списке условия, а не кого-то одного из списка..
Гость
15 - 10.12.2013 - 16:57
14-Ёпрст > С дальнейшей группировкой и условием решает
Гость
16 - 10.12.2013 - 16:57
+14 об этом, написано в (4.3 и 4.4)
Гость
17 - 10.12.2013 - 16:58
(15) Как решает ?
Пример приведи более конкретный.
Гость
18 - 10.12.2013 - 16:58
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3)
Гость
19 - 10.12.2013 - 17:02
(18) согласен, можно и так.
Гость
20 - 10.12.2013 - 17:03
Только, один хрен..подзапрос нужен будет, или Менеджер в максимум оборачивать
Гость
21 - 10.12.2013 - 17:04
для корректной группировки
Но.. это детали
:)
Гость
22 - 10.12.2013 - 17:04
Угу, оборачивать во внешний запрос придётся
Гость
23 - 11.12.2013 - 12:40
Так. Кажется понимаю теперь.
Если я все верно понял - обязательным условием должна быть уникальность элементов и в табличной части и в выбранных значениях. Так как мы не конкретные вхождения проверяем, а кол-во вхождений.
Идея с проверкой именно кол-ва вхождений - хороша.
Есть ли возможность все-таки именно конкретные вхождения проверить ?
А то иначе придется условия вешать на заполнение табличной части.
Гость
24 - 11.12.2013 - 16:23
[em]обязательным условием должна быть уникальность[/em]. Совершенно необязательно. Уникальность в выбранных значениях нужна только для облегчения чтения запроса.
можно делать не
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3
а соединение с
Выбрать Сумма(1) Из (Выбрать Различные (&Список))
Гость
25 - 13.12.2013 - 13:02
Спасибо всем. Запрос явно уже не уровня новичков, сам бы не разобрался. Буду пробовать.
Гость
26 - 13.12.2013 - 20:00
Как-то когда select-запрос на английском то легче понимается, а на русском вообще труба пока что.


К списку вопросов






Copyright ©, Все права защищены