Запрос по контрагентам у которых не было продаж
Доброго времени суток эксперты!
Учусь писать запросы, так вот застрял на том как написать следующий запрос: вывожу всех контрагентов у которых не было продаж за период
Где я ошибаюсь?
Учусь писать запросы, так вот застрял на том как написать следующий запрос: вывожу всех контрагентов у которых не было продаж за период
ВЫБРАТЬ
Контрагенты.Ссылка,
Продажи.Стоимость,
Продажи.ДокументПродажи
ИЗ
РегистрНакопления.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Продажи.Контрагент = Контрагенты.Ссылка
Где Продажи.Стоимость is null
ПоказатьГде я ошибаюсь?
По теме из базы знаний
- Опыт успешного внедрения УТ 11 в небольшом подразделении большой компании
- Нейросеть для прогнозирования: универсальная обработка и методика для любой конфигурации. Примеры прогнозирования бизнес процессов
- Загрузка чеков ФНС в документы 1С:БП, 1С:УНФ, 1С:ERP, 1С:КА и 1С:УТ
- Анализ номенклатуры без движения за определенный период (1С:УНФ)
- Аналитика и BI. Белые пятна рынка и тренды, которые нельзя игнорировать
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ВЫБРАТЬ
Контрагенты.Ссылка,
Продажи.Стоимость,
Продажи.ДокументПродажи
ИЗ
РегистрНакопления.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Продажи.Контрагент = Контрагенты.Ссылка
Где ЕстьNull(Продажи.Стоимость, 0) = 0
Показать
(1) Если у вас продажи "за период", то как минимум не хватает параметров в запросе к виртуальной таблице. Без них он вам за всю историю существования базы выдаст данные. Ну и да, соединение в обратную сторону.
ВЫБРАТЬ
Контрагенты.Ссылка,
Продажи.Стоимость,
Продажи.ДокументПродажи
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи(&ДатаНач, &ДатаКон, , ) КАК Продажи
ПО Продажи.Контрагент = Контрагенты.Ссылка
Где Продажи.Стоимость ЕСТЬ NULL
Показать
Жестоко Вы как...
Делайте проще и еще проще :
Простая логика - сначала выбираем всех контрагентов у которых были покупки за период во временную таблицу :
а за тем связываем со всеми контрагентами в еще одной временной таблице
а потом применяем условие
Вуаля.
Делайте проще и еще проще :
Простая логика - сначала выбираем всех контрагентов у которых были покупки за период во временную таблицу :
ВЫБРАТЬ РАЗЛИЧНЫЕ
Продажи .Контрагент КАК Покупатель
ПОМЕСТИТЬ ВТ_Покупатели
ИЗ
РегистрНакопления.Продажи КАК Продажи
ГДЕ
Продажи .Сумма > 0
И Продажи.Период МЕЖДУ &ПериодНачало И &ПериодОкончание
;
Показатьа за тем связываем со всеми контрагентами в еще одной временной таблице
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Контрагенты.Ссылка КАК Ссылка,
ВТ_Покупатели.Покупатель = Контрагенты.Ссылка КАК Купил
ПОМЕСТИТЬ ВТ_ВсеКонтрагенты
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Покупатели КАК ВТ_Покупатели
ПО Контрагенты.Ссылка = ВТ_Покупатели.Покупатель
;
Показатьа потом применяем условие
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ВсеКонтрагенты.Ссылка КАК Контрагент
ИЗ
ВТ_ВсеКонтрагенты КАК ВТ_ВсеКонтрагенты
ГДЕ
ВТ_ВсеКонтрагенты.Купил = ЛОЖЬ
Вуаля.
Вопрос принципиально в ошибках : Вот запрос и результат:
Запрос: ВТ_Продажи (Записей в результате: 0)
Контрагент
Теперь сделаем по другому : Левое соединение от Контрагентов :
получим искомый результат (то что хотели):
Контрагент
Любимый
Другой
Но жизнь сложнее , нам необходимо выбирать продажи без возвратов :
и тогда простой вариант не катит :( :
получаем результат пустой.... Проверяйте
ВЫБРАТЬ
"Ассоль" КАК Контрагент
ПОМЕСТИТЬ ВТ_Контрагенты
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Комплесный"
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Другой"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
"Ассоль" КАК Контрагент,
10 КАК Сумма
ПОМЕСТИТЬ ВТ_Продажи
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Комплексный",
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Комплексный",
10
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Контрагенты.Контрагент КАК Контрагент
ИЗ
ВТ_Продажи КАК ВТ_Продажи
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Контрагенты КАК ВТ_Контрагенты
ПО ВТ_Продажи.Контрагент = ВТ_Контрагенты.Контрагент
ГДЕ
ВТ_Продажи.Контрагент ЕСТЬ NULL
ПоказатьЗапрос: ВТ_Продажи (Записей в результате: 0)
Контрагент
Теперь сделаем по другому : Левое соединение от Контрагентов :
ВЫБРАТЬ
"Ассоль" КАК Контрагент
ПОМЕСТИТЬ ВТ_Контрагенты
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Комплексный"
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Любимый"
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Другой"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
"Ассоль" КАК Контрагент,
10 КАК Сумма
ПОМЕСТИТЬ ВТ_Продажи
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Комплексный",
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Комплексный",
10
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Контрагенты.Контрагент КАК Контрагент
ИЗ
ВТ_Контрагенты КАК ВТ_Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Продажи КАК ВТ_Продажи
ПО ВТ_Контрагенты.Контрагент = ВТ_Продажи.Контрагент
ГДЕ
ВТ_Продажи.Контрагент ЕСТЬ NULL
Показатьполучим искомый результат (то что хотели):
Контрагент
Любимый
Другой
Но жизнь сложнее , нам необходимо выбирать продажи без возвратов :
и тогда простой вариант не катит :( :
ВЫБРАТЬ
"Ассоль" КАК Контрагент
ПОМЕСТИТЬ ВТ_Контрагенты
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Комплексный"
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Любимый"
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Другой"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
"Ассоль" КАК Контрагент,
10 КАК Сумма
ПОМЕСТИТЬ ВТ_Продажи
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Комплексный",
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Комплексный",
10
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Контрагенты.Контрагент КАК Контрагент
ИЗ
ВТ_Контрагенты КАК ВТ_Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Продажи КАК ВТ_Продажи
ПО ВТ_Контрагенты.Контрагент = ВТ_Продажи.Контрагент
ГДЕ
ВТ_Продажи.Контрагент ЕСТЬ NULL
И ВТ_Продажи.Сумма > 0
Показатьполучаем результат пустой.... Проверяйте
(18)Вы прикалываетесь или реально не понимаете как работают виртуальная таблица оборотов регистра накопления?
Судя по тому, что вы написали, возвраты у вас регистрируются в том же регистре, что и продажи.
Если это так, то обороты дадут сразу результат с учетом возвратов. Если необходимо узнать количество именно возвратов, то выводим обороты, противоположные регистрации продаж.
Если возвраты регистрируются в другом регистре, то левое соединение контрагентов с оборотами этого регистра даст все возвраты. Если необходо узнать, по каким контрагентам не было возвратов, так же ограничивает запрос конструкцией ГДЕ ВозвратыОбороты.Контрагент IS NULL
Судя по тому, что вы написали, возвраты у вас регистрируются в том же регистре, что и продажи.
Если это так, то обороты дадут сразу результат с учетом возвратов. Если необходимо узнать количество именно возвратов, то выводим обороты, противоположные регистрации продаж.
Если возвраты регистрируются в другом регистре, то левое соединение контрагентов с оборотами этого регистра даст все возвраты. Если необходо узнать, по каким контрагентам не было возвратов, так же ограничивает запрос конструкцией ГДЕ ВозвратыОбороты.Контрагент IS NULL
Держи, брат
ВЫБРАТЬ
"Ассоль" КАК Контрагент
ПОМЕСТИТЬ ВТ_Контрагенты
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Комплесный"
ОБЪЕДИНИТЬ
ВЫБРАТЬ
"Другой"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
"Ассоль" КАК Контрагент,
10 КАК Сумма
ПОМЕСТИТЬ ВТ_Продажи
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Комплексный",
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Комплексный",
10
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Контрагенты.Контрагент КАК Контрагент
ИЗ
ВТ_Продажи КАК ВТ_Продажи
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Контрагенты КАК ВТ_Контрагенты
ПО ВТ_Продажи.Контрагент = ВТ_Контрагенты.Контрагент
ГДЕ
ВТ_Продажи.Контрагент ЕСТЬ NULL
Показать
(24) А может все просто и им за количество строк кода стали платить , а мы с вами отстали?
Это кроме того , что в половине примеров вообще бред...
Это кроме того , что в половине примеров вообще бред...
ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
ПО Продажи.Контрагент = Контрагенты.Ссылка
Где Продажи.Стоимость is null
ну я бы брал не стоимость в условии а количество (патамушо корректировки могут быть))) ну и обороты использовать, а не чистую таблицу
ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(<ну там параметры нужные, если что ))>) КАК Продажи
ПО Контрагенты.Ссылка = Продажи.Контрагент
ИМЕЮЩИЕ
ЕСТЬNULL(Продажи.КоличествоОборот, 0) = 0
Показать
(26) Исправил
ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты() КАК Продажи
ПО Контрагенты.Ссылка = Продажи.Контрагент
group by Контрагенты.Ссылка
ИМЕЮЩИЕ
sum(ЕСТЬNULL(Продажи.КоличествоОборот, 0)) = 0
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот