Имя: Пароль:
1C
1С v8
Запрос к табличной части справочника.
, ,
0 НеПалец
 
07.01.14
23:18
Нужно отобрать только те элементы справочника, в табличной части которых содержится несколько строк, удовлетворяющих условию.

Этот запрос дает пусто. При этом если условие оставить одно - выборка есть.

    ЗапросПравила = Новый Запрос("ВЫБРАТЬ
    |    ПравилаНаборОпцийУсловия.Ссылка
    |ИЗ
    |    Справочник.Правила.НаборОпцийУсловия КАК ПравилаНаборОпцийУсловия
    |ГДЕ
    |    ПравилаНаборОпцийУсловия.ОпцияУсловия = &ОпцияУсловия1
    |    И ПравилаНаборОпцийУсловия.ОпцияУсловия = &ОпцияУсловия2");

Спасибо.
1 Нууф-Нууф
 
07.01.14
23:27
Или
2 НеПалец
 
07.01.14
23:32
(1)
В этом случае выборка содержит элементы, в которых встречается  Условие1 ИЛИ Условие2.
А нужно Условие1 И Условие2.

Если нет хотя бы одного значения условия в ТЧ - элемент в выборку не выводим.
3 Homer
 
07.01.14
23:33
сделай соединение
4 НеПалец
 
07.01.14
23:35
(3)
не понимаю, чего с чем.
5 Elf_80_lvl
 
07.01.14
23:38
Выбрать по условию и сгруппировать по ссылке, вывести только те где больше чем 1
6 НеПалец
 
07.01.14
23:42
(5)
Это через "ОБЪЕДИНИТЬ"?
7 Elf_80_lvl
 
07.01.14
23:49
Я не понимаю в чем твоя печаль? В том что сразу два условия не работают или в том, что не знаешь, как вывести только тот справочник, у которого сразу несколько строк подходят под условия?
8 НеПалец
 
07.01.14
23:56
Нужно вывести только те элементы, табличные части которых содержат ВСЕ значения, перечисленные в условиях.
9 Torquader
 
08.01.14
00:00
Сначала выбираем все, у кого выполняется первое условие (указывая единицу в новом поле), потом выбираем все, у кого выполняется второе условие, (добавляя двойку в новом поле).
Выборка делается во временную таблицу - потом делаем выборку из неё с группировкой и суммированием по новому полю, ну и отбираем все значения, у которых новое поле равно трём - легко обобщается на произвольное число условий.
10 Torquader
 
08.01.14
00:01
Не забываем только при первой выборке также делать группировку по ссылке, чтобы не было нескольких одинаковых (у одного элемента, в общем случае, может быть несколько строк, подходящих под условие).
11 НеПалец
 
08.01.14
00:07
(10)
Видимо, садо-мазо - наше все.
12 Torquader
 
08.01.14
00:08
(11) Ну можно и внутренним соединением таблицы сама с собой, но скорость работы будет хуже, чем в (9).
13 НеПалец
 
08.01.14
00:15
Ок. Спасибо.
14 Fram
 
08.01.14
02:54
(12) в (5) получше вариант
15 Fram
 
08.01.14
02:56
(0) а у вас, батенька, судя по вопросу, отсутствует понимание таблиц и запросов SQL
16 mistеr
 
08.01.14
04:25
(12) Не соглашусь, что "хуже". Если реквизит поиска индексирован, то внутреннее соединение - оптимальный способ.

Кстати, (9) тоже можно упростить. Выбираем из ТЧ один раз по условию ИЛИ.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн