Имя: Пароль:
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) тоже можно упростить. Выбираем из ТЧ один раз по условию ИЛИ.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn