![]() |
Запрос: вхождение нескольких значений в табличную часть Задача: Есть справочник с табличной частью. Нужно найти все элементы этого справочника, в табличной части которых присутствует несколько задаваемых значений. Эти значения задаются некой другой табличной частью (или таблицей значений или списком значений) - тут не важно, как проще так и будут задаваться. Очень желательно запросом это сделать. Не могу придумать и поиск тоже не находит подобной задачи. Может кто подаст гениальную мысль о том как это можно сделать. |
Для решения таких задач предназначены критерии отбора |
ВЫБРАТЬ РАЗЛИЧНЫЕ КонтрагентыМенеджерыПокупателя.Ссылка ИЗ Справочник.Контрагенты.МенеджерыПокупателя КАК КонтрагентыМенеджерыПокупателя ГДЕ КонтрагентыМенеджерыПокупателя.МенеджерПокупателя В (ВЫБРАТЬ ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Наименование = "ИВАНОВ") Как-то так. |
2-Климов Сергей > +МенеджерВременныхТаблиц, тогда таблицу значений в параметры можно запихать 0-Dmitry3U >коллега, вам надо запросы подучить. это же азы. |
Коллеги, возможно я не совсем корректно определил задачу. Позвольте на примере: 1) Справочник: Физ.Лица 2) Справочник: Контрагенты 2.1) имеет табл.часть: Менеджеры, типа: Физ.лица 3) в отчете\обработке задается несколько значений типа: Физ.лица (Иванов, Петров, Васечкин) 4) Необходимо найти всех Контрагентов, в табличной части Менеджеров у которых присутствуют все заданные значения (Иванов, Петров, Васечкин). 4.1) Если нет хотя бы одного - пропускаем, если кроме этих трех есть и другие - выбираем. |
Количество задаваемых значений, понятно, может быть любым. |
в (2) правильно написано, только названия справочников поправить осталось |
(6) конечно нет. ему нужно условие на весь список. |
(0) делаешь подзапрос, в нём запрос к табличной части менеджеры на выборку ССылки + левое соединение со списком(помести в табличку) уникальных физ. лиц + группировка по физлицу + подсчет Количество(Табличка.ФизЛицо) как Всего + условие на Имеющие Количество(Табличка.ФизЛицо) = КоличествоФизЛицВТабличкеКотороеМожешьПолучитьВПакетномЗапросе Ну и всё.. делаешь основной запрос + условие, ссылка в (тут подзапрос, что выше) |
+8 наврал немного, надо Количество(ССылка) как Всего + условие на Имеющие Количество(ССылка) + сгруппировать ССылка... |
да, и не левое соединение, а внутреннее в подзапросе. |
Ёпрст> пытаюсь разобраться в написанном ... сложно ... но кажется улавливаю суть идеи - спасибо ... |
(11) На вот, примитивный запрос - покажет, клиентосов, у которых есть 3 договора. Тебе по аналогии - соединение с табличкой твоих физлиц нужно и усё.. ВЫБРАТЬ Контрагенты.Ссылка КАК Контрагент, ДоговорыКонтрагентов.Ссылка КАК Договор ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец ГДЕ Контрагенты.Ссылка В (ВЫБРАТЬ Контрагенты.Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец СГРУППИРОВАТЬ ПО Контрагенты.Ссылка ИМЕЮЩИЕ КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3) |
12-Ёпрст > Даже и без соединений сработает... Выбрать Различные Ссылка, Менеджер Из Контрагенты.Менеджеры ГДЕ Менеджер в (&Список) С дальнейшей группировкой и условием |
(13) ^))))))))))0 какая наивность Автору нужно условие на вхождение ВСЕХ кто есть в списке условия, а не кого-то одного из списка.. |
14-Ёпрст > С дальнейшей группировкой и условием решает |
+14 об этом, написано в (4.3 и 4.4) |
(15) Как решает ? Пример приведи более конкретный. |
СГРУППИРОВАТЬ ПО Контрагенты.Ссылка ИМЕЮЩИЕ КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3) |
(18) согласен, можно и так. |
Только, один хрен..подзапрос нужен будет, или Менеджер в максимум оборачивать |
для корректной группировки Но.. это детали :) |
Угу, оборачивать во внешний запрос придётся |
Так. Кажется понимаю теперь. Если я все верно понял - обязательным условием должна быть уникальность элементов и в табличной части и в выбранных значениях. Так как мы не конкретные вхождения проверяем, а кол-во вхождений. Идея с проверкой именно кол-ва вхождений - хороша. Есть ли возможность все-таки именно конкретные вхождения проверить ? А то иначе придется условия вешать на заполнение табличной части. |
[em]обязательным условием должна быть уникальность[/em]. Совершенно необязательно. Уникальность в выбранных значениях нужна только для облегчения чтения запроса. можно делать не ИМЕЮЩИЕ КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3 а соединение с Выбрать Сумма(1) Из (Выбрать Различные (&Список)) |
Спасибо всем. Запрос явно уже не уровня новичков, сам бы не разобрался. Буду пробовать. |
Как-то когда select-запрос на английском то легче понимается, а на русском вообще труба пока что. |
| Текущее время: 05:44. Часовой пояс GMT +3. |