|
Помогите составить запрос | ☑ | ||
---|---|---|---|---|
0
alexei366
05.06.12
✎
16:53
|
Необходимо ограничить список выбора контрагентов, выводить только тех которые не встречались в реквизите другого справочника (договоры). Вот скелет
Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Наименование, | Контрагенты.Код |ИЗ | Справочник.Контрагенты КАК Контрагенты | | "; |
|||
1
shuhard
05.06.12
✎
16:56
|
(0)ВЫБРАТЬ
Контрагенты.Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец ГДЕ ДоговорыКонтрагентов.Ссылка ЕСТЬ NULL И Контрагенты.ЭтоГруппа = ЛОЖЬ |
|||
2
alexei366
05.06.12
✎
17:01
|
Про это я думал уже, а вложенный запрос в условии не работает?
|
|||
3
ОператорПК
05.06.12
✎
17:12
|
(0) На формах списков работает конструкция "Не в" так что можно получить список:
ВЫБРАТЬ ДоговорыКонтрагентов.Владелец ИЗ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов и использовать "Не в списке" |
|||
4
alexei366
05.06.12
✎
17:29
|
ВЫБРАТЬ
Контрагенты.Ссылка ИЗ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов Где использовать Не В (Выбрать Договоры.Владелец Из Справочник Договоры КАК Договоры ) Типо того? |
|||
5
ОператорПК
05.06.12
✎
17:39
|
(4) можно и так, только зачем? В (3) все проще.
|
|||
6
shuhard
05.06.12
✎
17:42
|
(2) вложенный запрос работает в разы медленнние
|
|||
7
alexei366
05.06.12
✎
17:51
|
Так в будущем мне понадобиться к примеру выводить список контрагентов, с указанием количества подчиненных справочников по каждому из них.Вот вложенный запрос в качестве итогового поля у меня не получается, посылает подальше, это вообще возможно в 1с 8.2. Пример
ВЫБРАТЬ Контрагенты.Ссылка, (Выбрать Количество(*) Из Справочник.ПодчиненныйСпр КАК ПодчиненныйСпр Где ПодчиненныйСпр.Владелец = Контрагенты.Ссылка) КАК Количество ИЗ Справочник.Контрагенты КАК Контрагенты |
|||
8
alexei366
05.06.12
✎
17:52
|
ИЛИ же придётся сначало групировать по владельцу подчинённый , а потом лепить Контрагентов
|
|||
9
shuhard
05.06.12
✎
17:58
|
(7) ВЫБРАТЬ
ДоговорыКонтрагентов.Владелец КАК Контрагент, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДоговорыКонтрагентов.Ссылка) КАК ЧислоДоговоров ИЗ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов СГРУППИРОВАТЬ ПО ДоговорыКонтрагентов.Владелец |
|||
10
alexei366
05.06.12
✎
18:07
|
Итог какойто такой, кто что скажит и добавит
Процедура АвтоподборЗаказчик(Текст,СсИспол,ДанныеВыбора) Экспорт ДанныеВыбора = Новый СписокЗначений; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.Наименование, | Контрагенты.Код |ИЗ | Справочник.Контрагенты КАК Контрагенты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеИсполнителя КАК ДанныеИсполнителя | ПО Контрагенты.Ссылка = ДанныеИсполнителя.Контрагент.Ссылка |ГДЕ | Контрагенты.Наименование ПОДОБНО &Наим | И ДанныеИсполнителя.Контрагент.Ссылка ЕСТЬ NULL | И Контрагенты.Ссылка НЕ В (Выбрать Договоры.Заказчик.Ссылка Из Справочник.Договоры КАК Договоры Где Договоры.Исполнитель.Ссылка = &Исполн)"; Запрос.УстановитьПараметр("Наим","%"+Текст+"%"); Запрос.УстановитьПараметр("Исполн",СсИспол); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ДанныеВыбора.Добавить(Выборка.Ссылка,Выборка.Наименование+" ("+Выборка.Код+")"); КонецЦикла; КонецПроцедуры |
|||
11
alexei366
05.06.12
✎
18:12
|
А почему тута ругается на условие?
| Контрагенты.Наименование ПОДОБНО &Наим | И (Выбрать Количество(*) ИЗ РегистрСведений.ДанныеИсполнителя КАК ДанныеИсполнителя1 Где ДанныеИсполнителя1.Контрагент.Ссылка = Контрагенты.Ссылка) = 0 |
|||
12
sergeante
05.06.12
✎
18:14
|
(11) бред написал
|
|||
13
alexei366
05.06.12
✎
18:14
|
Последнее или предпоследнее?
|
|||
14
hhhh
05.06.12
✎
18:15
|
(13) вот это
Выбрать Количество(*) ИЗ РегистрСведений.ДанныеИсполнителя КАК ДанныеИсполнителя1 Где ДанныеИсполнителя1.Контрагент.Ссылка = Контрагенты.Ссылка не число. А ты его с нулем сравниваешь. |
|||
15
sergeante
05.06.12
✎
18:15
|
(10) разыменовывание полей до ссылки "Договоры.Заказчик.Ссылка" - атата! Вложеный запрос - атата! Тебе ж написали как - левым соединением с фильтрацией по NULL!
делай как (6) и (9) |
|||
16
sergeante
05.06.12
✎
18:17
|
(14) ага, ещё и в условии.
|
|||
17
alexei366
05.06.12
✎
18:24
|
А для интереса как правильно написать
И (Выбрать Количество(*) ИЗ РегистрСведений.ДанныеИсполнителя КАК ДанныеИсполнителя1 Где ДанныеИсполнителя1.Контрагент.Ссылка = Контрагенты.Ссылка) = 0 |
|||
18
shuhard
05.06.12
✎
18:32
|
(17) Открой для себя HAVING
|
|||
19
alexei366
05.06.12
✎
18:33
|
Если не впадлу, покажешь на примере, как это в 1с. На постгресе то я знаю
|
|||
20
alexei366
05.06.12
✎
18:33
|
Пытаюсь по анологии с постгресом писать
|
|||
21
shuhard
05.06.12
✎
18:33
|
(19) в 1С так же как на постгресе
|
|||
22
alexei366
05.06.12
✎
18:34
|
вот это в постгресе работает без проблем
И (Выбрать Количество(*) ИЗ РегистрСведений.ДанныеИсполнителя КАК ДанныеИсполнителя1 Где ДанныеИсполнителя1.Контрагент.Ссылка = Контрагенты.Ссылка) = 0 |
|||
23
alexei366
05.06.12
✎
18:35
|
вот это даже как отдельное поле не выведешь в итоги
(Выбрать Количество(*) ИЗ РегистрСведений.ДанныеИсполнителя КАК ДанныеИсполнителя1 Где ДанныеИсполнителя1.Контрагент.Ссылка = Контрагенты.Ссылка) КАК Колич |
|||
24
SUA
05.06.12
✎
18:40
|
(23)->(9)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |