Имя: Пароль:
1C
1С v8
Отобрать документы с номенклатурой входящей в несколько списков
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
)

Если списки большие, слить их в ВТ и проиндексировать.