[Запросы 1С] Отбор документов по заданным условиям

1. user1346608 28.01.20 06:19 Сейчас в теме
Добрый день.

Мне необходимо вывести за год покупателей по Расходным накладным по следующим условиям:

1) "новых" покупателей, то есть тех, по которым первая расходная накладная проведена не раньше месяца
2) "ушедших" - по которым последняя расходная накладная проведена более полугода назад
3) "вернувшихся" - по которым разница даты проведения между расходками была более полугода
4) "постоянных" - в каждом месяце есть хотя бы одна проведенная расходка

Условия скажем так относительные, мне важно понять как прописывать подобное условия, может кто подсказать?

В данном коде выводятся все расходки за год. Покупатель = РасходнаяНакладная.Покупатель.Телефон

ВЫБРАТЬ
	РасходнаяНакладная.Покупатель.Телефон КАК ПокупательТелефон,
	РасходнаяНакладная.Ссылка КАК ПокупкиЗаГод
ИЗ
	Документ.РасходнаяНакладная КАК РасходнаяНакладная
ГДЕ
	НЕ РасходнаяНакладная.ПометкаУдаления
	И НЕ РасходнаяНакладная.Фирма.ПометкаУдаления
	И РасходнаяНакладная.Проведен
	И РасходнаяНакладная.Дата МЕЖДУ &НачалоГода И &КонецГода
	И РасходнаяНакладная.Фирма.ВидФилиала = &ВидФилиала
	И НЕ РасходнаяНакладная.Покупатель.Телефон ЕСТЬ NULL
	И РасходнаяНакладная.Фирма.Город = &Город
	
СГРУППИРОВАТЬ ПО
		РасходнаяНакладная.Покупатель.Телефон
                РасходнаяНакладная.Ссылка

УПОРЯДОЧИТЬ ПО
	ПокупкиЗаГод УБЫВ
Показать
По теме из базы знаний
Найденные решения
2. ZergKRSK 129 28.01.20 07:46 Сейчас в теме
(1) а в чем сложность то? Вот вам пример по п.2
ВЫБРАТЬ
	РасходнаяНакладная.Контрагент КАК Контрагент,
	РасходнаяНакладная.Ссылка
ИЗ
	Документ.РасходнаяНакладная КАК РасходнаяНакладная
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			РасходнаяНакладная.Контрагент КАК Контрагент,
			МАКСИМУМ(РасходнаяНакладная.Дата) КАК Дата
		ИЗ
			Документ.РасходнаяНакладная КАК РасходнаяНакладная
		ГДЕ
			РасходнаяНакладная.Проведен
			И РасходнаяНакладная.Дата МЕЖДУ &ДатаНачалоГода И &ДатаКонецГода
		
		СГРУППИРОВАТЬ ПО
			РасходнаяНакладная.Контрагент) КАК ВложенныйЗапрос
		ПО РасходнаяНакладная.Дата = ВложенныйЗапрос.Дата
			И РасходнаяНакладная.Контрагент = ВложенныйЗапрос.Контрагент
ГДЕ
	РасходнаяНакладная.Дата МЕЖДУ &ДатаНачалоГода И &ДатаКонецГода
	И РасходнаяНакладная.Проведен
	И РАЗНОСТЬДАТ(РасходнаяНакладная.Дата, &ДатаКонецГода, МЕСЯЦ) >= 6

УПОРЯДОЧИТЬ ПО
	Контрагент
АВТОУПОРЯДОЧИВАНИЕ
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ZergKRSK 129 28.01.20 07:46 Сейчас в теме
(1) а в чем сложность то? Вот вам пример по п.2
ВЫБРАТЬ
	РасходнаяНакладная.Контрагент КАК Контрагент,
	РасходнаяНакладная.Ссылка
ИЗ
	Документ.РасходнаяНакладная КАК РасходнаяНакладная
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			РасходнаяНакладная.Контрагент КАК Контрагент,
			МАКСИМУМ(РасходнаяНакладная.Дата) КАК Дата
		ИЗ
			Документ.РасходнаяНакладная КАК РасходнаяНакладная
		ГДЕ
			РасходнаяНакладная.Проведен
			И РасходнаяНакладная.Дата МЕЖДУ &ДатаНачалоГода И &ДатаКонецГода
		
		СГРУППИРОВАТЬ ПО
			РасходнаяНакладная.Контрагент) КАК ВложенныйЗапрос
		ПО РасходнаяНакладная.Дата = ВложенныйЗапрос.Дата
			И РасходнаяНакладная.Контрагент = ВложенныйЗапрос.Контрагент
ГДЕ
	РасходнаяНакладная.Дата МЕЖДУ &ДатаНачалоГода И &ДатаКонецГода
	И РасходнаяНакладная.Проведен
	И РАЗНОСТЬДАТ(РасходнаяНакладная.Дата, &ДатаКонецГода, МЕСЯЦ) >= 6

УПОРЯДОЧИТЬ ПО
	Контрагент
АВТОУПОРЯДОЧИВАНИЕ
Показать
3. d.batovskiy 28.01.20 09:13 Сейчас в теме
(2)Только лучше делать через временную таблицу, а не вложенный запрос.
6. buganov 200 28.01.20 09:55 Сейчас в теме
5. user1346608 28.01.20 09:27 Сейчас в теме
(2) подскажите, правильно ли я понял принцип?

1. во вложенном запросе мы отбираем последнюю проведенную расходку по контрагенту
2. далее мы отбираем те последние расходки, которые были проведены более чем 6 месяцев назад

Получается, по п.1 я могу пойти по такому же принципу? только отбираю не функцией макс, а мин

с п.3 уже возникают сложности, потому тут не сравнивается с первой или последней расходкой, а с рандомной, нет мыслей как прописать условие
по п.4, к сожалению, также нет мыслей
7. ZergKRSK 129 28.01.20 10:35 Сейчас в теме
(5)
подскажите, правильно ли я понял принцип?

Правильно.

п.3 необходимо уточнить. Разница между двумя последними расходными или как?
п.4 в каком разрезе хотите видеть данные? Достаточно просто перечня контрагентов или нужны ссылки на расходные накладные?
9. user1346608 28.01.20 10:45 Сейчас в теме
(7)

п.3 необязательно между последними, главное чтобы за год между последующими друг за другом расходками было больше 6 месяцев.

Допустим, "какая-нибудь расходка" проведена 10 января 2019, а именно последующая только 15 июня 2019

п.4 достаточно перечня контрагентов
10. user1346608 29.01.20 04:55 Сейчас в теме
(7) по п.3 получилось выполнить проверку среди всех расходок контрагента, но как выполнить проверку по последующим друг за другом расходкам, нет мыслей

ВЫБРАТЬ
	РасходнаяНакладная.Покупатель.Телефон КАК ПокупательТелефон,
	РасходнаяНакладная.Ссылка КАК ПокупкиЗаГод,
	РасходнаяНакладная.Дата КАК Дата1
ПОМЕСТИТЬ Т1
ИЗ
	Документ.РасходнаяНакладная КАК РасходнаяНакладная
ГДЕ
	НЕ РасходнаяНакладная.ПометкаУдаления
	И НЕ РасходнаяНакладная.Фирма.ПометкаУдаления
	И РасходнаяНакладная.Проведен
	И РасходнаяНакладная.Дата МЕЖДУ &НачалоГода И &КонецГода
	И РасходнаяНакладная.Фирма.ВидФилиала = &ВидФилиала
	И НЕ РасходнаяНакладная.Покупатель.Телефон ЕСТЬ NULL
	И РасходнаяНакладная.Фирма.Город = &Город

СГРУППИРОВАТЬ ПО
	РасходнаяНакладная.Покупатель.Телефон,
	РасходнаяНакладная.Ссылка,
	РасходнаяНакладная.Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	РасходнаяНакладная.Покупатель.Телефон КАК ПокупательТелефон,
	РасходнаяНакладная.Ссылка КАК ПокупкиЗаГод,
	РасходнаяНакладная.Дата КАК Дата2
ПОМЕСТИТЬ Т2
ИЗ
	Документ.РасходнаяНакладная КАК РасходнаяНакладная
ГДЕ
	НЕ РасходнаяНакладная.ПометкаУдаления
	И НЕ РасходнаяНакладная.Фирма.ПометкаУдаления
	И РасходнаяНакладная.Проведен
	И РасходнаяНакладная.Дата МЕЖДУ &НачалоГода И &КонецГода
	И РасходнаяНакладная.Фирма.ВидФилиала = &ВидФилиала
	И НЕ РасходнаяНакладная.Покупатель.Телефон ЕСТЬ NULL
	И РасходнаяНакладная.Фирма.Город = &Город
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Т1.ПокупательТелефон КАК ПокупательТелефон,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Т1.ПокупкиЗаГод) КАК ПокупкиЗаГод
ИЗ
	Т1 КАК Т1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т2 КАК Т2
		ПО Т1.ПокупательТелефон = Т2.ПокупательТелефон
ГДЕ
	РАЗНОСТЬДАТ(Т1.Дата1, Т2.Дата2, МЕСЯЦ) >= 6

СГРУППИРОВАТЬ ПО
	Т1.ПокупательТелефон
Показать
4. VictorRGB2 13 28.01.20 09:15 Сейчас в теме
как вариант - каждое из условий в отдельный запрос и все объединяется
типа так
// запрос по условию 1
ВЫБРАТЬ....
ГДЕ ...

ОБЪЕДИНИТЬ

// запрос по условию 2
ВЫБРАТЬ ...
ГДЕ...

ОБЪЕДИНИТЬ... и т.д.

тоже самое можно сделать и через временные таблицы
8. buganov 200 28.01.20 10:37 Сейчас в теме
Выбрать Различные
Расходная.Контрагент, НачалоМесяца(Расходная.Дата)
ПОМЕСТИТЬ Доки
Из Документ.РасходнаяНакладная Как Расходная
ГДЕ Расходная.Дата Между &Начало и &Конец
;
Выбрать
"Новые"
Доки.Контрагент
Из Доки Как Доки
Имеющие Минимум(Доки.Дата) > &НачалоТекущегоМесяца

Объединить Все

Выбрать
"Ушли"
Доки.Контрагент
Из Доки Как Доки
Имеющие Максимум(Доки.Дата) > &Середина

Объединить Все

Выбрать
"Вернувшиеся Что то вроде "
Доки.Контрагент,
Из Доки Как Доки
Левое соединение (Выбрать * Из Доки Как Доки) Как ВЗ
Где
РазностьДат(ВТ.Дата, ВЗ.Дата, Месяц) >6

Объединить все

Выбрать
"Постоянные"
Доки.Контрагент
Из Доки Как Доки
Имеющие Количество(Различные Доки.Дата) =12
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот