|
Отобрать документы с номенклатурой входящей в несколько списков |
☑ |
0
Fannasankh
05.08.17
✎
19:40
|
Допустим, у нас есть три некоторых списка номенклатуры. Нужно запросом выбрать документы, содержащие в табличной части хотя бы одну номенклатуру из каждого списка. Тип документа один. Не все типы документов. Возможно ли? И как?
|
|
1
Fannasankh
05.08.17
✎
19:50
|
Приходит в голову сделать выборку по одному списку, потом по другому, по третьему и найти их пересечение. Но, наверное, это не слишком то оптимально.
|
|
2
Fram
05.08.17
✎
19:56
|
В языке запросов есть спец оператор для такого "пересечения"
|
|
3
VladZ
05.08.17
✎
19:57
|
В запросе:
Номенклатура в (&Список1)
или Номенклатура в (&Список2)
или Номенклатура в (&Список3)
|
|
4
Fannasankh
05.08.17
✎
21:15
|
(2) какой?
|
|
5
Fannasankh
05.08.17
✎
21:16
|
(3) это не то. Так мы найдём входящую в какой-то один
|
|
6
AlvlSpb
05.08.17
✎
22:24
|
(5) Соедини три списка в один и условие ГДЕ по созданному общему списку
|
|
7
VladZ
06.08.17
✎
06:01
|
(5) А тебе как нужно? Чтобы номенклатура была во всех трех списках? Используй "И" вместо "ИЛИ".
|
|
8
rphosts
06.08.17
✎
06:04
|
(7) не быстрее будет сформировать общий список (БЕЗ ПОВТОРЯЮЩИХСЯ) а потом проверять по нему?
Или если на сходе тоже список то брать внутреннее соединение этого списка проверяемых номенклатур с общим списком?
|
|
9
rphosts
06.08.17
✎
06:07
|
на сходе = на входе
|
|
10
Мимохожий Однако
06.08.17
✎
07:23
|
(5) сам себе противоречишь в (0)
|
|
11
MSOliver
06.08.17
✎
07:32
|
1. Собираешь три списка документов (с необходимым отбором), к каждому списку добавляешь поле со значением 1
2. Объединяешь три списка документов, группируешь, сумма по полю со значением 1
3. Отбираешь по значению поля равное 3
|
|
12
palpetrovich
06.08.17
✎
08:37
|
(0) так не ?
ВЫБРАТЬ
СчетНаОплатуПокупателюТовары.Ссылка
ПОМЕСТИТЬ С1
ИЗ
Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
ГДЕ
СчетНаОплатуПокупателюТовары.Номенклатура В(&Спис1)
;
ВЫБРАТЬ
СчетНаОплатуПокупателюТовары.Ссылка
ПОМЕСТИТЬ С2
ИЗ
Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
ГДЕ
СчетНаОплатуПокупателюТовары.Номенклатура В(&Спис2)
;
ВЫБРАТЬ
СчетНаОплатуПокупателюТовары.Ссылка
ПОМЕСТИТЬ С3
ИЗ
Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
ГДЕ
СчетНаОплатуПокупателюТовары.Номенклатура В(&Спис3)
;
ВЫБРАТЬ
С1.Ссылка
ИЗ
С1 КАК С1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ С2 КАК С2 ПО С1.Ссылка = С2.Ссылка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ С3 КАК С3 ПО С1.Ссылка = С3.Ссылка
|
|
13
mistеr
06.08.17
✎
19:17
|
(0)
ГДЕ ОсновнойЗапрос.Номенклатура В (
ВЫБРАТЬ Номенклатура ИЗ Список1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Номенклатура ИЗ Список2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Номенклатура ИЗ Список3
)
Если списки большие, слить их в ВТ и проиндексировать.
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший