Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Отбор контрагентов по которым не было продаж (число прочтений - 5519 )
layman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Местоположение: smr
Зарегистрирован: 18. Июля 2013
Пол: Мужской
Отбор контрагентов по которым не было продаж
25. Апреля 2014 :: 08:32
Печать  
Необходимо получить список контрагентов, с условием если не было продаж, то включать в список.
Запрос такой
Код
Выбрать все
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с НачПериод по КонПериод;
|Контрагенты = Справочник.Контрагенты.ТекущийЭлемент, Регистр.Продажи.Покупатель;
|ПродСтоимость = Регистр.Продажи.ПродСтоимость;
|Функция ПродСтоимостьСумма = Сумма(ПродСтоимость);
|Группировка Контрагенты без групп все;";
Если СокрЛП(ВыбМенеджер)<>"" Тогда
ТекстЗапроса = ТекстЗапроса + " Условие(Запрос.Контрагенты.Менеджер = ВыбМенеджер);";
КонецЕсли; 


На прямых запросам написал так:
Код
Выбрать все
|SELECT
|    max(Рег.IDDoc) as [Док $Документ],
|    max(Жур.IDDocDef) as Док_вид,
|    sum($Рег.ПродСтоимость) as ПродСтоимость,
|    Спр.ID as [Контрагент $Справочник.Контрагенты],
|    max(CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)) as ДатаДок
|FROM
|    $Регистр.Продажи as Рег (nolock)
|INNER JOIN
|    _1Sjourn as Жур (nolock) ON Жур.IDDoc = Рег.IDDoc
|INNER JOIN
|$Документ.Реализация as Док (nolock) ON Док.IDDoc = Жур.IDDoc
|INNER JOIN
|   $Справочник.Контрагенты as Спр (nolock) ON Спр.ID = $Док.Контрагент
|        AND  $Спр.Менеджер = :ВыбМен
|WHERE
|    Жур.Date_Time_IDDoc BETWEEN :Нач AND :Кон~ AND
|    Жур.IDDocDef = $ВидДокумента.Реализация AND
|    Жур.Closed & 1 = 1
|GROUP BY Спр.ID
|"; 

запрос работает, но вот как вывести контрагентов, у которых не было продаж в этот период. Кто знает подскажите.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Отбор контрагентов по которым не было продаж
Ответ #1 - 25. Апреля 2014 :: 08:43
Печать  
Дык у тебя даже твой чорный запрос этого не возвращает Улыбка)

А так, примитив
селект клиентос фром справочник.клиентосов вере клиентос нот ин (селект клиентос фром вТ.Продажи())  усё.
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Отбор контрагентов по которым не было продаж
Ответ #2 - 25. Апреля 2014 :: 09:10
Печать  
Eprst писал(а) 25. Апреля 2014 :: 08:43:
Дык у тебя даже твой чорный запрос этого не возвращает Улыбка)

А так, примитив
селект клиентос фром справочник.клиентосов вере клиентос нот ин (селект клиентос фром вТ.Продажи())  усё.


Код
Выбрать все
Set NoCount On
SELECT Спр.ID as [Контрагент $Справочник.Контрагенты]
FROM $Справочник.Контрагенты as Спр WITH (nolock)
WHERE Спр.ISFOLDER=2 AND Спр.ID Not In (Select Distinct $Рег.Покупатель From $Регистр.Продажи as Рег WITH (nolock))
 


  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Отбор контрагентов по которым не было продаж
Ответ #3 - 25. Апреля 2014 :: 09:16
Печать  
дистиникт лучше выкинуть, лишняя нагрузка
Улыбка
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Отбор контрагентов по которым не было продаж
Ответ #4 - 25. Апреля 2014 :: 09:18
Печать  
Eprst писал(а) 25. Апреля 2014 :: 09:16:
дистиникт лучше выкинуть, лишняя нагрузка
Улыбка


И
Код
Выбрать все
Спр.ISFOLDER=2 

добавил
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Отбор контрагентов по которым не было продаж
Ответ #5 - 25. Апреля 2014 :: 09:27
Печать  
leov-001 писал(а) 25. Апреля 2014 :: 09:18:
Eprst писал(а) 25. Апреля 2014 :: 09:16:
дистиникт лучше выкинуть, лишняя нагрузка
Улыбка


И
Код
Выбрать все
Спр.ISFOLDER=2 

добавил


Да, действительно "дистинкт лучше выкинуть". Так быстрей работает.
Код
Выбрать все
Set NoCount On
SELECT Спр.ID as [Контрагент $Справочник.Контрагенты]
FROM $Справочник.Контрагенты as Спр WITH (nolock)
WHERE Спр.ISFOLDER=2 AND Спр.ID Not In (Select $Рег.Покупатель From $Регистр.Продажи as Рег WITH (nolock) Group By $Рег.Покупатель)
 



  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Отбор контрагентов по которым не было продаж
Ответ #6 - 25. Апреля 2014 :: 09:47
Печать  
гроуп бай тоже можно выкинуть
Улыбка

и.. переписать так например:
exists (select * From $Регистр.Продажи as Рег  (nolock) where $Рег.Покупатель = Спр.id )

хотя, можно и нот ин и без всего (без дистиникт и гроуп бай)

ЗЫ: только заместо $Регистр.Продажи аутору скорее всего нужно пихать ВТ.Продажи.. с параметрами периода и т.д..
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Отбор контрагентов по которым не было продаж
Ответ #7 - 25. Апреля 2014 :: 10:02
Печать  
Eprst писал(а) 25. Апреля 2014 :: 09:47:
гроуп бай тоже можно выкинуть
Улыбка

и.. переписать так например:
exists (select * From $Регистр.Продажи as Рег  (nolock) where $Рег.Покупатель = Спр.id )

хотя, можно и нот ин и без всего (без дистиникт и гроуп бай)

ЗЫ: только заместо $Регистр.Продажи аутору скорее всего нужно пихать ВТ.Продажи.. с параметрами периода и т.д..


Скорей всего период нужен.
Код
Выбрать все
Рег.DATE_TIME_IDDOC BETWEEN :Нач AND :Кон~ 


Если свойствах регистра установлен флажок «Быстрая обработка движений».
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Отбор контрагентов по которым не было продаж
Ответ #8 - 20. Мая 2014 :: 12:07
Печать  
Если просто список контрагентов по которым не было продаж, и в регистре продаж нет контрагента.
то не проще без всяких подзапросов, а просто RIGHT JOIN контрагентов и условие на $Док.Контрагент
is null ну и в join еще да как написали isfolder = 2 лучше.
в селекте Спр.id вот и список, группировки в итоге не нужны, так как по таким контрагентам нет продаж же.

Код
Выбрать все
|SELECT
|    Спр.ID as [Контрагент $Справочник.Контрагенты]
|FROM $Регистр.Продажи as Рег (nolock)
|INNER JOIN _1Sjourn as Жур (nolock) ON Жур.IDDoc = Рег.IDDoc
|LEFT JOIN $Документ.Реализация as Док (nolock) ON Док.IDDoc = Жур.IDDoc
|RIGHT JOIN $Справочник.Контрагенты as Спр (nolock) ON Спр.ID = $Док.Контрагент AND Спр.ISFOLDER = 2
|WHERE Жур.Date_Time_IDDoc BETWEEN :Нач AND :Кон~
|    AND Жур.IDDocDef = $ВидДокумента.Реализация
|    AND $Док.Контрагент is null
|    AND $Спр.Менеджер = :ВыбМен
|";
 


если в регистре есть "быстрая обработка движение" как писали уже, то вовсе журнал не нужен (но тогда чуть условие поменяются)
« Последняя редакция: 21. Мая 2014 :: 06:04 - pavlo »  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать