Имя: Пароль:
1C
1С v8
Сложный запрос 2
,
0 KuJIT
 
11.01.16
16:10
Помогите, пожалуйста с составлением запроса.
Есть Справочник Партнеры, есть документы Счет и Заявка, которые имеют реквизит "Партнер".
Нужно выбрать некоторые поля партнера и количество документов, которые ссылаются на этого партнера. Т.е. Примерно так:
Выборка.СсылкаПартнера, Выборка.ИмяПартнера, Выборка.КоличествоСчетов, Выборка.КоличествоЗаявок;

Я сделал так:

        Запрос.Текст = "ВЫБРАТЬ
                   |    Партнеры.Ссылка,
                   |    Партнеры.ОсновнойМенеджер,
                   |    Партнеры.Альянс_Автор КАК Автор,
                   |    Партнеры.ДатаРегистрации,
                   |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Альянс_Заявка.Ссылка) КАК КоличествоЗаявок,
                   |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ CRM_СчетНаОплатуПокупателю.Ссылка) КАК КоличествоСчетов
                   |ИЗ
                   |    Справочник.Партнеры КАК Партнеры
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Альянс_Заявка КАК Альянс_Заявка
                   |        ПО Партнеры.Ссылка = Альянс_Заявка.Заказчик
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.CRM_СчетНаОплатуПокупателю КАК CRM_СчетНаОплатуПокупателю
                   |        ПО Партнеры.Ссылка = CRM_СчетНаОплатуПокупателю.Партнер
                   |ГДЕ
                   |    CRM_СчетНаОплатуПокупателю.ПометкаУдаления = ЛОЖЬ
                   |    И Альянс_Заявка.ПометкаУдаления = ЛОЖЬ
                   |    И Партнеры.ПометкаУдаления = ЛОЖЬ    
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    Партнеры.Ссылка,
                   |    Партнеры.ОсновнойМенеджер,
                   |    Партнеры.Альянс_Автор,
                   |    Партнеры.ДатаРегистрации";    


Однако, по такому запросу выбираются только те партнеры, на которых ссылается хотя бы одна заявка и хотя бы один счет, а мне нужны и с нулевым количеством, тоже. Что я делаю не так?
1 Господин ПЖ
 
11.01.16
16:12
|ГДЕ
                   |    CRM_СчетНаОплатуПокупателю.ПометкаУдаления = ЛОЖЬ
                   |    И Альянс_Заявка.ПометкаУдаления = ЛОЖЬ
2 shuhard
 
11.01.16
16:12
(0)[Что я делаю не так?]
всё
3 Господин ПЖ
 
11.01.16
16:13
делаешь по сути внутреннее соединение
4 ВРедная
 
11.01.16
16:14
До применения отбора у тебя получается некая таблица, типа:

Партнер Акт заявка
П1      акт null
П2      null null
П3      акт заявка

Как ты думаешь, если в этой таблице найти только те строки, у которых акт и заявка не помечены на удаление, что останется?
5 HardBall
 
11.01.16
16:15
Условия в ГДЕ перенеси в условия соединения
6 noviolg
 
11.01.16
16:16
(5) или ЕстьNULL в условии учесть
7 HardBall
 
11.01.16
16:17
ПО Партнеры.Ссылка = CRM_СчетНаОплатуПокупателю.Партнер И Партнеры.ПометкаУдаления = ЛОЖЬ
ИЛИ (6)
8 KuJIT
 
11.01.16
17:12
(7) Я туповат -_-

                   |ИЗ
                   |    Справочник.Партнеры КАК Партнеры
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Альянс_Заявка КАК Альянс_Заявка
                   |        ПО Партнеры.Ссылка = Альянс_Заявка.Заказчик И Альянс_Заявка.ПометкаУдаления = ЛОЖЬ
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.CRM_СчетНаОплатуПокупателю КАК CRM_СчетНаОплатуПокупателю
                   |        ПО Партнеры.Ссылка = CRM_СчетНаОплатуПокупателю.Партнер И CRM_СчетНаОплатуПокупателю.ПометкаУдаления = ЛОЖЬ
                   |ГДЕ
                   |    И Партнеры.ПометкаУдаления = ЛОЖЬ  

Так вы имеете в виду изменить?
9 KuJIT
 
11.01.16
17:18
(4) там не Акт и Заявка, а Количество актов и количество заявок
10 HardBall
 
11.01.16
17:18
(8)
Точно. Я не то скопипастил.
11 KuJIT
 
11.01.16
17:18
(5) Как это должно выглядеть?
12 KuJIT
 
11.01.16
17:19
(10) {Форма.Форма.Форма(51)}: Ошибка при вызове метода контекста (Выполнить)
    Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(15, 5)}: Синтаксическая ошибка "И"
<<?>>И Партнеры.ПометкаУдаления = ЛОЖЬ
13 KuJIT
 
11.01.16
17:20
(12) Тупля =)
14 KuJIT
 
11.01.16
17:22
(10) Все сработало. Большое спасибо :D
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший