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