Имя: Пароль:
IT
Админ
Как запросом выбрать документы, чья товарная часть включает массив значений?
,
0 zakidonoff
 
23.07.14
13:00
К примеру, выбрать только те отчёты, где в товарной части присутствуют все позиции номенклатуры, указанные в массиве?
1 Рэйв
 
23.07.14
13:02
...
ГДЕ
   ТЧ.Номенклатура В(&пиок)
2 Рэйв
 
23.07.14
13:02
список:-)
3 zakidonoff
 
23.07.14
13:03
(1) Это даст ссылки на доки, где хоть одна из позиций присутствует в списке. А нужно непременно все из них. (
4 Wobland
 
23.07.14
13:03
(1) тогда уж ГДЕ ВЕСЬ &Список В (ТЧ.Номенклатура)
5 samozvanec
 
23.07.14
13:06
выбираешь номенклатуру по массиву, соединяешь с тч товары, потом группируешь, чтобы получить ссылки, рядом с которыми нул, потом ищешь как в (1), но еще И НЕ Ссылка в той самой таблице, которую сгруппировал, где еще нулл
6 mikecool
 
23.07.14
13:07
список в ТЗ
тз - во времянку запроса
внутреннее соединение с тч документов даст полное соответствие, имхо, но проверить надо
7 Рэйв
 
23.07.14
13:07
(3)А... вона че:-)
8 1Сергей
 
23.07.14
13:13
я бы считал количество строк
9 1Сергей
 
23.07.14
13:13
(8) + но, это не надежно если товары могут повторяться
10 mikecool
 
23.07.14
13:16
автор, проверь (6) , а то мне лениво )
11 zakidonoff
 
23.07.14
13:21
(10) Уже проверял. Выбирает, опять же все документы, где хоть одно поле соответствует.
Вот насчёт выборки и последующей фильтрации нулевых значений с полным соединением, как (5) - это должно сработать...
Только вот выполняться такой запрос будет дольше, чем я их вручную найду (
12 mikecool
 
23.07.14
13:23
"Выбирает, опять же все документы, где хоть одно поле соответствует" - точно внутреннее соединение между ТЧ документа и таблицей номенклатуры??
13 1Сергей
 
23.07.14
13:24
(12) да, не взлетит так. не мучай его
14 Рэйв
 
23.07.14
13:36
Как вариант:

1.Залить список в ТЗ, тз поместить в вт в запросе.
2.Соединить левым соединением таб части доков с вт, выбрав первым полем .ссылка, а вторым выбор если вт.Номенклатура NULL , то 0, иначе 1
3. сгруппировать по ссылке суммируя выбор.
4. поставить условие Где суммируемый выбор = размеру списка.Т.е. весь список участвует в таб части

самому писать лень, но должно сработать вроде:-)
15 zakidonoff
 
23.07.14
13:39
(12) Например, как-то так - не работает.

ВЫБРАТЬ
    ТоварыЗаказа.Номенклатура
ПОМЕСТИТЬ ТоварыЗаказа
ИЗ
    &ТоварыЗаказа КАК ТоварыЗаказа
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЧекККМТовары.Ссылка
ИЗ
    Документ.ЧекККМ.Товары КАК ЧекККМТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварыЗаказа КАК ТоварыЗаказа
        ПО ЧекККМТовары.Номенклатура = ТоварыЗаказа.Номенклатура
ГДЕ
    ЧекККМТовары.Ссылка.Организация = &Организация
    И ЧекККМТовары.Ссылка.Склад = &Склад

СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Ссылка
16 zakidonoff
 
23.07.14
14:00
(14) Так взлетело, спасибо -)

ВЫБРАТЬ
    ТоварыЗаказа.Номенклатура
ПОМЕСТИТЬ ТоварыЗаказа
ИЗ
    &ТоварыЗаказа КАК ТоварыЗаказа
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.Ссылка
ИЗ
    (ВЫБРАТЬ
        ЧекККМТовары.Ссылка КАК Ссылка,
        СУММА(ВЫБОР
                КОГДА ЕСТЬNULL(ЧекККМТовары.Ссылка, 0) = 0
                    ТОГДА 0
                ИНАЧЕ 1
            КОНЕЦ) КАК Совпадение,
        СУММА(1) КАК ВсегоПолей
    ИЗ
        ТоварыЗаказа КАК ТоварыЗаказа
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары
            ПО (ЧекККМТовары.Номенклатура = ТоварыЗаказа.Номенклатура)
    ГДЕ
        ЧекККМТовары.Ссылка.Организация = &Организация
        И ЧекККМТовары.Ссылка.Склад = &Склад
    
    СГРУППИРОВАТЬ ПО
        ЧекККМТовары.Ссылка) КАК ВложенныйЗапрос
ГДЕ
    ВложенныйЗапрос.Совпадение = ВложенныйЗапрос.ВсегоПолей
17 mikecool
 
23.07.14
14:16
получилось так :

выбрать &Ном1 как Ном
поместить вт_Ном
объединить все
выбрать &ном2
;

выбрать количество(Ном) как Кол
поместить вт_Кол
из вт_Ном
;

выбрать р.Ссылка, р.Номенклатура, выбор когда н.Ном есть null тогда 0 иначе 1 конец как счетчик
поместить вт_реал
из документ.реализациятоваровуслуг.товары как р
левое соединение вт_ном как н по р.Номенклатура = н.Ном
;

выбрать р.Ссылка
из вт_реал как р, вт_Кол как н
сгруппировать по р.Ссылка, н.Кол
имеющие Сумма(р.Счетчик) = н.Кол

первая таблица - это список поиска