Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1544/)
-   -   Запрос: вхождение нескольких значений в табличную часть (http://forums.kuban.ru/f1544/zapros_vhozhdenie_neskol-kih_znachenij_v_tablichnuyu_chast--5118017.html)

Dmitry3U 08.12.2013 20:12

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

Reaper 08.12.2013 20:14

Для решения таких задач предназначены критерии отбора

Климов Сергей 09.12.2013 10:08

ВЫБРАТЬ РАЗЛИЧНЫЕ
КонтрагентыМенеджерыПокупателя.Ссылка
ИЗ
Справочник.Контрагенты.МенеджерыПокупателя КАК КонтрагентыМенеджерыПокупателя
ГДЕ
КонтрагентыМенеджерыПокупателя.МенеджерПокупателя В
(ВЫБРАТЬ
ФизическиеЛица.Ссылка
ИЗ
Справочник.ФизическиеЛица КАК ФизическиеЛица
ГДЕ
ФизическиеЛица.Наименование = "ИВАНОВ")

Как-то так.

Управление торговлей 11 09.12.2013 19:10

2-Климов Сергей > +МенеджерВременныхТаблиц, тогда таблицу значений в параметры можно запихать
0-Dmitry3U >коллега, вам надо запросы подучить. это же азы.

Dmitry3U 09.12.2013 21:15

Коллеги, возможно я не совсем корректно определил задачу. Позвольте на примере:
1) Справочник: Физ.Лица
2) Справочник: Контрагенты
2.1) имеет табл.часть: Менеджеры, типа: Физ.лица
3) в отчете\обработке задается несколько значений типа: Физ.лица (Иванов, Петров, Васечкин)
4) Необходимо найти всех Контрагентов, в табличной части Менеджеров у которых присутствуют все заданные значения (Иванов, Петров, Васечкин).
4.1) Если нет хотя бы одного - пропускаем, если кроме этих трех есть и другие - выбираем.

Dmitry3U 09.12.2013 21:19

Количество задаваемых значений, понятно, может быть любым.

EvG32 10.12.2013 07:30

в (2) правильно написано, только названия справочников поправить осталось

Ёпрст 10.12.2013 08:16

(6) конечно нет.
ему нужно условие на весь список.

Ёпрст 10.12.2013 08:21

(0) делаешь подзапрос, в нём запрос к табличной части менеджеры на выборку ССылки + левое соединение со списком(помести в табличку) уникальных физ. лиц + группировка по физлицу + подсчет Количество(Табличка.ФизЛицо) как Всего
+ условие на Имеющие Количество(Табличка.ФизЛицо) = КоличествоФизЛицВТабличкеКотороеМожешьПолучитьВПакетномЗапросе

Ну и всё.. делаешь основной запрос + условие, ссылка в (тут подзапрос, что выше)

Ёпрст 10.12.2013 08:23

+8 наврал немного, надо Количество(ССылка) как Всего
+ условие на Имеющие Количество(ССылка) + сгруппировать ССылка...

Ёпрст 10.12.2013 08:24

да, и не левое соединение, а внутреннее в подзапросе.

Dmitry3U 10.12.2013 16:05

Ёпрст> пытаюсь разобраться в написанном ... сложно ... но кажется улавливаю суть идеи - спасибо ...

Ёпрст 10.12.2013 16:36

(11) На вот, примитивный запрос - покажет, клиентосов, у которых есть 3 договора. Тебе по аналогии - соединение с табличкой твоих физлиц нужно и усё..

ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент,
ДоговорыКонтрагентов.Ссылка КАК Договор
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
ГДЕ
Контрагенты.Ссылка В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ПО
Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3)

roma n 10.12.2013 16:52

12-Ёпрст > Даже и без соединений сработает...

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

С дальнейшей группировкой и условием

Ёпрст 10.12.2013 16:56

(13) ^))))))))))0
какая наивность

Автору нужно условие на вхождение ВСЕХ кто есть в списке условия, а не кого-то одного из списка..

roma n 10.12.2013 16:57

14-Ёпрст > С дальнейшей группировкой и условием решает

Ёпрст 10.12.2013 16:57

+14 об этом, написано в (4.3 и 4.4)

Ёпрст 10.12.2013 16:58

(15) Как решает ?
Пример приведи более конкретный.

roma n 10.12.2013 16:58

СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3)

Ёпрст 10.12.2013 17:02

(18) согласен, можно и так.

Ёпрст 10.12.2013 17:03

Только, один хрен..подзапрос нужен будет, или Менеджер в максимум оборачивать

Ёпрст 10.12.2013 17:04

для корректной группировки
Но.. это детали
:)

roma n 10.12.2013 17:04

Угу, оборачивать во внешний запрос придётся

Dmitry3U 11.12.2013 12:40

Так. Кажется понимаю теперь.
Если я все верно понял - обязательным условием должна быть уникальность элементов и в табличной части и в выбранных значениях. Так как мы не конкретные вхождения проверяем, а кол-во вхождений.
Идея с проверкой именно кол-ва вхождений - хороша.
Есть ли возможность все-таки именно конкретные вхождения проверить ?
А то иначе придется условия вешать на заполнение табличной части.

roma n 11.12.2013 16:23

[em]обязательным условием должна быть уникальность[/em]. Совершенно необязательно. Уникальность в выбранных значениях нужна только для облегчения чтения запроса.
можно делать не
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Контрагенты.Ссылка) = 3
а соединение с
Выбрать Сумма(1) Из (Выбрать Различные (&Список))

Dmitry3U 13.12.2013 13:02

Спасибо всем. Запрос явно уже не уровня новичков, сам бы не разобрался. Буду пробовать.

Путевый лист 13.12.2013 20:00

Как-то когда select-запрос на английском то легче понимается, а на русском вообще труба пока что.


Текущее время: 05:44. Часовой пояс GMT +3.