|
Возможно ли получить выборку запросом без использования циклов? | ☑ | ||
---|---|---|---|---|
0
slasher
18.11.14
✎
14:11
|
Доброго времени суток всем!
Есть запрос: ВЫБРАТЬ ПоступлениеТоваровУслугТовары.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ГДЕ ПоступлениеТоваровУслугТовары.Номенклатура В(&СписокТоваров) В списке товаров, например яблоки и груши. Запросом нужно получить ссылки на документы, в которых есть И яблоки И груши одновременно. А не ИЛИ яблоки ИЛИ груши. Понятно, что можно сделать в цикле, сначала яблоки, потом груши, но это не вариант. Список товаром может быть большим. |
|||
1
Ненавижу 1С
гуру
18.11.14
✎
14:12
|
не поверишь, но в данном случае будет хотя бы ЯБЛОКИ или ГРУШИ
|
|||
2
Banned
18.11.14
✎
14:13
|
Пить во вторник днём - вредно.
|
|||
3
Ненавижу 1С
гуру
18.11.14
✎
14:13
|
(0) или тебе "исключающее или" XOR нужно?
|
|||
4
sapphire
18.11.14
✎
14:14
|
(0) Правильно понимаю, что нужно что бы весь перечень списка был?
|
|||
5
Maxus43
18.11.14
✎
14:16
|
ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Ссылка, Количество(ПоступлениеТоваровУслугТовары.Ссылка) ..... Имеющие Количество(ПоступлениеТоваровУслугТовары.Ссылка)=2 |
|||
6
sapphire
18.11.14
✎
14:17
|
(5) Это если не ведется учет в разрезе серий и характеристик :)
|
|||
7
Эмбеддер
18.11.14
✎
14:18
|
1) 2 запроса, 1-й - документы с яблоками, 2-й - документы с грушами. СОЕДИНЕНИЕ по документу
2) внутренний запрос - ОБЪЕДИНЕНИЕ, 2 колонки - в первой цифра 1 и 0 во второй, если есть яблоко в строке документа и 0 и 1 соответственно, если груши СГРУППИРОВАТЬ ПО Документ ИМЕЮЩИЕ СУММА(КоличествоСтрокГруши)>=1 И СУММА(КоличествоСтрокЯблоки)>=1 и так далее - вариантов много |
|||
8
sapphire
18.11.14
✎
14:18
|
(5) А то вполне может статься, что будет
Товар Хар Яблоки Ранет Грушу Белая Яблоки Белый налив |
|||
9
sapphire
18.11.14
✎
14:19
|
(7) Садись, 2
|
|||
10
Ненавижу 1С
гуру
18.11.14
✎
14:19
|
ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ГДЕ ПоступлениеТоваровУслугТовары.Номенклатура В(&СписокТоваров) СГРУППИРОВАТЬ ПО ПоступлениеТоваровУслугТовары.Ссылка ИМЕЮЩИЕ Количество(РАЗЛИЧНЫЕ ПоступлениеТоваровУслугТовары.Номенклатура)=2 |
|||
11
DrZombi
гуру
18.11.14
✎
14:19
|
(0) Лучше так
ВЫБРАТЬ ПоступлениеТоваровУслугТовары.Ссылка, Количество(Ралзличное ПоступлениеТоваровУслугТовары.Номенклатура) КАК КолРаличное ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ГДЕ ПоступлениеТоваровУслугТовары.Номенклатура В(&СписокТоваров) Имеющие Количество(Ралзличное ПоступлениеТоваровУслугТовары.Номенклатура) = &КолНужныхЭлементов |
|||
12
Эмбеддер
18.11.14
✎
14:20
|
(9) да мне все равно
|
|||
13
slasher
18.11.14
✎
14:20
|
(4) да, нужно чтобы весь список был
|
|||
14
DrZombi
гуру
18.11.14
✎
14:21
|
(13) Смотри в (10), Повнимательней или в (11) :)
|
|||
15
Maxus43
18.11.14
✎
14:21
|
(8) ну под условия конкретные доработать. Я не вижу чо там у автора. это есно частный случай
|
|||
16
Эмбеддер
18.11.14
✎
14:22
|
(13) понятно. я то понял, что 1 яблоко и 1 груша и уже документ проходит по условию
|
|||
17
slasher
18.11.14
✎
14:26
|
(3) не, исключающее или не надо
|
|||
18
slasher
18.11.14
✎
14:28
|
(5) по-моему фигня получится
|
|||
19
slasher
18.11.14
✎
14:29
|
(6) характеристик и серий нету
|
|||
20
Эмбеддер
18.11.14
✎
14:29
|
(18) это правильно решение. сформулируйте условие задачи
|
|||
21
zsergey
18.11.14
✎
14:30
|
(0) Если я правильно понял задачу, предлагаю так:
//Готовим врем. таблицу ВЫБРАТЬ &Яблоки ПОМЕСТИТЬ ВремТаб ОБЪЕДИНИТЬ ВЫБРАТЬ &Груши ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПоступлениеТоваровУслугТовары.Ссылка, КОЛИЧЕСТВО(ПоступлениеТоваровУслугТовары.Номенклатура) КАК Кол ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремТаб КАК ВремТаб ПО ПоступлениеТоваровУслугТовары.Номенклатура = ВремТаб.Товар1 ГДЕ ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон И ПоступлениеТоваровУслугТовары.Ссылка.Проведен СГРУППИРОВАТЬ ПО ПоступлениеТоваровУслугТовары.Ссылка имеющие КОЛИЧЕСТВО(ПоступлениеТоваровУслугТовары.Номенклатура)=1 |
|||
22
an-korot
18.11.14
✎
14:35
|
вы примитивную задачку по основам информатики мусолите )))
"как исключить из множества значения принадлежащие другому множеству" ВЫБРАТЬ ТаблицаА.ИзмерениеА ИЗ РегистрСведений.ТаблицаА КАК ТаблицаА ГДЕ (НЕ ТаблицаА.ИзмерениеА В (ВЫБРАТЬ ТаблицаА.ИзмерениеА ИЗ РегистрСведений.ТаблицаА КАК ТаблицаА ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ТаблицаВ КАК ТаблицаВ ПО ТаблицаА.ИзмерениеА = ТаблицаВ.ИзмерениеВ)) //====================================================================== ссылка на полный текст http://www.1c-h.ru/?p=917 |
|||
23
slasher
18.11.14
✎
14:49
|
(10) последняя цифра это, как я понял количество элементов списке?
а если в списке будет группа, запрос перестанет работать? |
|||
24
antoneus
18.11.14
✎
14:52
|
(23) Почему перестанет? Находишь количество элементов справочника в списке и передаешь в запрос.
|
|||
25
Ненавижу 1С
гуру
18.11.14
✎
14:53
|
(23) можешь во временной таблице посчитать число входящих элементов
|
|||
26
Гёдза
18.11.14
✎
14:59
|
через 2 левых соединения делается влет.
Но вот возможно ли для произвольного количества? без формирования текста |
|||
27
Гёдза
18.11.14
✎
15:00
|
(26) хотя (11) решает вроде
|
|||
28
kudlach
18.11.14
✎
15:07
|
Если тебе нужно получить перечень документов, в которых есть каждый товар из списка -
ВЫБРАТЬ РАЗЛИЧНЫЕ Док1.Ссылка ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ СтрокаТовар.Ссылка ИЗ Документ.РеализацияТоваровУслуг.Товар КАК СтрокаТовар ГДЕ СтрокаТовар.Номенклатура=&Товар1) КАК Док1 ПРЯМОЕ СОЕДИНЕННИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СтрокаТовар.Ссылка ИЗ Документ.РеализацияТоваровУслуг.Товар КАК СтрокаТовар ГДЕ СтрокаТовар.Номенклатура=&Товар2) КАК Док2 ПО Док1.Ссылка=Док2.Ссылка ПРЯМОЕ СОЕДИНЕННИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СтрокаТовар.Ссылка ИЗ Документ.РеализацияТоваровУслуг.Товар КАК СтрокаТовар ГДЕ СтрокаТовар.Номенклатура=&Товар2) КАК Док2 ПО Док1.Ссылка=Док3.Ссылка Как ни печально, но множество документов, в которых содержится один конкретный товар нужно выбирать отдельно. Текст Соединения можешь сделать в цикле по массиву значений, начиная со второго значения. первое - в основной текст включи. |
|||
29
Гёдза
18.11.14
✎
15:08
|
ПРЯМОЕ СОЕДИНЕННИЕ
Это что-то новенькое |
|||
30
kudlach
18.11.14
✎
15:12
|
(29) да, ВНУТРЕННЕЕ конечно же. сори.
Я его помню как Inner join, а в 1с 8.х уже двненько надобности не было в нем. Подзапамятовал. |
|||
31
kudlach
18.11.14
✎
15:15
|
Ну, кстати, если приложится, то и в (21) с использованием КОЛИЧЕСТВО(...) есть кусок истины - не в лоб, я бя заценил как нерутинный вариант.
|
|||
32
slasher
18.11.14
✎
15:24
|
(10)(11) нормально работает
|
|||
33
slasher
18.11.14
✎
15:27
|
(28) как-то сложно всё, а если 100 товаров? будет 101 запрос?
|
|||
34
kudlach
18.11.14
✎
15:31
|
(32) да, (10), (11) - проще
(33) если формируется запрос в цикле, то по барабану сколько их. В скуле, на сколько я помню, аналогичные запросы формируются на порядок быстрее после выполнения первого, но тут, да, 10 вариант менее головоломный. |
|||
35
slasher
18.11.14
✎
15:49
|
всем спасибо за помощь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |