Выборка документов, содержащих ВСЕ значения параметра (список) #584334


#0 by McCoy
Есть список номенклатуры. Необходимо выбрать все Заказы за период, которые содержат ВСЮ номенклатуру из списка. Вроде бы все просто: в СКД создаем простейший запрос по Заказам, добавляем параметр &Товар (тот самый список номенклатур), добавляем условие В:    И ЗаказСостав.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода И тут соображаем: выбираются Заказы, содержащие не ВЕСЬ список товара, а содержащие хотя бы одну номенклатуру из списка-параметра &Товар. Как быть? Можно ли решить одним запросом? Кто сталкивался?
#1 by shuhard
составь список заказов не содержащий данный список номенклатуры и исключи его из своего списка
#2 by Rovan
получит то же самое - где хотя бы 1
#3 by Mort
Сделай таблицу номенклатуры и смотри левым соединением с ТЧ есть ли позиции NULL в правой части (ТЧ)
#4 by Defender aka LINN
И? Ну, извратным путем, разве что. Сначала посчитать размер списка (выборкой из справочника), потом искать заказы, где количество строк с номенклатурой из списка равно этому количеству
#5 by Rovan
надо в запросе получить кол-во строк ТЧ попавшей в список и сравнить это кол-во с колвом значений переданного списка - если равно то берем этот док
#6 by shuhard
не а
#7 by Defender aka LINN
Дада :)
#8 by Mort
Доктор, меня все игнорируют.
#9 by Mort
Если нужно 100% чтобы не только был весь список в составе ТЧ, но и лишних не было, можно делать полное соединение и смотреть отсутствие NULLов в обеих частях.
#10 by McCoy
Нужно чтобы весь список входил в ТЧ документа, но не обязательно чтобы он на 100% совпадал с ТЧ (т.е. может быть и другая номенклатура). Mort, не понял насчет "Сделай таблицу номенклатуры и смотри левым соединением с ТЧ есть ли позиции NULL в правой части (ТЧ)". Я реализовал задачу. Криво-косо правда. Выяснил что параметр &Товар будет ограничен количеством не более 5 штук. В СКД создал 5 параметров: Товар1, Товар2,... Товар5. И по количеству введенных параметров (могут искать как одну номенклатуру, так и несколько) откорректировал запрос. Получается нечто вроде: ВЫБРАТЬ            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ                ЗаказСостав.Ссылка КАК Ссылка            ИЗ Если будут выбраны параметры Товар1 и Товар 5, то текст запроса будет переделан. Если будет выбрано например 3 параметра, добавится еще один вложенный запрос "Товары3", еще одно внутреннее соединение. Криво, косо, неоптимально это все... Не нравится мне это решение. Но из услышанных здесь предложений более оптимального пока не уловил...
#11 by shuhard
пипец загрузи свой список во временную таблицу и соедини тебе ж русским языком Mort объяснил
#12 by McCoy
Точно! Балбесина я:) Спасибо Морту)
#13 by McCoy
Не получается. Можно было попробовать через полное соединение отловить Null, но СКД премило съедает "нули". Погрызу еще эту тему, но кажется уперся в тупик... P.S. Дядьки, не бейте ногами! Как вы "номерок в кавычках" в сообщении выставляете со ссылкой на сообщение?
#14 by orefkov
PS: ты не поверишь...
#15 by Defender aka LINN
Можно просто запрос к справочнику сделать. Уж там-то наверняка все эти элементы есть, я гарантирую это :)
#16 by orefkov
я язык запросов 8ки плохо знаю, но на скл это решается примерно так: ИЗ Документ.Заказ.Состав КАК ЗаказСостав внутреннее соединение ТвояВремТаблица по ЗаказСостав.Товар = ТвояВремТаблица.Товар группировка по ЗаказСостав.Ссылка имееющие сумма = &КоличествоТоваровВСписке
#17 by McCoy
отчего же. Чем умничать, подсказал бы)
#18 by McCoy
это я про P.S. Но похоже ты прав насчет количества. Попробую
#19 by Defender aka LINN
Я это в говорил :)
#20 by McCoy
я помню, хотелось просто красиво сделать... Но видно иначе не выйдет:)
#21 by McCoy
Сделал. Ниже запрос, может кому понадобится. УТ на примере документа ЗаказПокупателя. Сравнение идет по количеству товара в списке из параметра запроса и в самих Заказах, как предложил Проверял, работает корректно.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С