Запрос 1С

1. user1553339 28.02.21 13:50 Сейчас в теме
Требуется написать запрос, возвращающий для каждого Контрагенту минимальную дату, когда сумма продаж была максимальной, и максимальную дату, когда сумма продаж была минимальной, а также суммы продаж на эти даты.
Вторые сутки мудрю.По отдельно указанному Контрагенту найти не проблема. А вот по всем контрагентам одним запросом не получается. Было испытано все: ОБЪЕДИНИТЬ, Вложенный запрос,Временные таблицы и т.д. Не помогает.
Мне хотя-бы идею.
По теме из базы знаний
Найденные решения
5. spec8s 825 28.02.21 14:49 Сейчас в теме
(1)
Требуется написать запрос, возвращающий для каждого Контрагенту минимальную дату, когда сумма продаж была максимальной,


// 1. Поместим все продажи по контрагентам по дням во временную таблицу
ВЫБРАТЬ
	Продажи.Период КАК ДатаПродажи,
	Продажи.АналитикаУчетаПоПартнерам КАК Контрагент,
	Продажи.СуммаВыручкиОборот КАК СуммаПродажи
ПОМЕСТИТЬ ПродажиПоДням
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , День, ) КАК Продажи
;

////////////////////////////////////////////////////////////­////////////////////
// 2. Свернем таблицу продаж  в разрезе контрагента и мин, макс суммы
ВЫБРАТЬ
	ПродажиПоДням.Контрагент КАК Контрагент,
	МИНИМУМ(ПродажиПоДням.СуммаПродажи) КАК МинСуммаПродажи,
	МАКСИМУМ(ПродажиПоДням.СуммаПродажи) КАК МаксСуммаПродажи
ПОМЕСТИТЬ МинМаксСуммы
ИЗ
	ПродажиПоДням КАК ПродажиПоДням

СГРУППИРОВАТЬ ПО
	ПродажиПоДням.Контрагент
;

////////////////////////////////////////////////////////////­////////////////////
// 3. Присоединим к свернутой таблице даты, 2 раза, 

// 1й раз по полю мин сумма продажи
// 2й раз по полю макс сумма продажи

// Затем свернем таблицу, к датам продажи применим функции Мин и Макс

ВЫБРАТЬ
	МинМаксСуммы.Контрагент КАК Контрагент,
	МинМаксСуммы.МинСуммаПродажи КАК МинСуммаПродажи,
	МинМаксСуммы.МаксСуммаПродажи КАК МаксСуммаПродажи,
	МИНИМУМ(ПродажиПоДнямМин.ДатаПродажи) КАК МинДатаПродажи,
	МАКСИМУМ(ПродажиПоДнямМакс.ДатаПродажи) КАК МаксДатаПродажи
ИЗ
	МинМаксСуммы КАК МинМаксСуммы
		// Соединим по полю МИН
		ЛЕВОЕ СОЕДИНЕНИЕ ПродажиПоДням КАК ПродажиПоДнямМакс
		ПО (МинМаксСуммы.Контрагент = ПродажиПоДнямМакс.Контрагент
				И МинМаксСуммы.МинСуммаПродажи = ПродажиПоДнямМакс.СуммаПродажи)
		
		// Соединим по полю МАКС		
		ЛЕВОЕ СОЕДИНЕНИЕ ПродажиПоДням КАК ПродажиПоДнямМин
		ПО (МинМаксСуммы.Контрагент = ПродажиПоДнямМин.Контрагент
				И МинМаксСуммы.МаксСуммаПродажи = ПродажиПоДнямМин.СуммаПродажи)
				
СГРУППИРОВАТЬ ПО
	МинМаксСуммы.Контрагент,
	МинМаксСуммы.МинСуммаПродажи,
	МинМаксСуммы.МаксСуммаПродажи
Показать
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 28.02.21 14:46 Сейчас в теме
(1) как-то так:
ВЫБРАТЬ
	РасчетыСКлиентамиОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК АналитикаУчетаПоПартнерамКонтрагент,
	РасчетыСКлиентамиОбороты.ПериодДень КАК Период,
	РасчетыСКлиентамиОбороты.СуммаПриход КАК СуммаПриход
ПОМЕСТИТЬ ВТ_Продажи
ИЗ
	РегистрНакопления.РасчетыСКлиентами.Обороты(, , Авто, ) КАК РасчетыСКлиентамиОбороты

ИНДЕКСИРОВАТЬ ПО
	АналитикаУчетаПоПартнерамКонтрагент,
	СуммаПриход
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Продажи.АналитикаУчетаПоПартнерамКонтрагент КАК АналитикаУчетаПоПартнерамКонтрагент,
	МИНИМУМ(ВТ_Продажи.СуммаПриход) КАК СуммаПриходМинимум,
	МАКСИМУМ(ВТ_Продажи.СуммаПриход) КАК СуммаПриходМаксимум
ПОМЕСТИТЬ ВТ_МинМакс
ИЗ
	ВТ_Продажи КАК ВТ_Продажи

СГРУППИРОВАТЬ ПО
	ВТ_Продажи.АналитикаУчетаПоПартнерамКонтрагент

ИНДЕКСИРОВАТЬ ПО
	АналитикаУчетаПоПартнерамКонтрагент
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент КАК АналитикаУчетаПоПартнерамКонтрагент,
	МАКСИМУМ(ВТ_Продажи.Период) КАК Период,
	NULL КАК СуммаПриходМаксимум,
	ВТ_МинМакс.СуммаПриходМинимум КАК СуммаПриходМинимум
ИЗ
	ВТ_МинМакс КАК ВТ_МинМакс
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Продажи КАК ВТ_Продажи
		ПО (ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент = ВТ_Продажи.АналитикаУчетаПоПартнерамКонтрагент)
			И (ВТ_МинМакс.СуммаПриходМинимум = ВТ_Продажи.СуммаПриход)

СГРУППИРОВАТЬ ПО
	ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент,
	ВТ_МинМакс.СуммаПриходМинимум

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент,
	МИНИМУМ(ВТ_Продажи.Период),
	ВТ_МинМакс.СуммаПриходМаксимум,
	NULL
ИЗ
	ВТ_МинМакс КАК ВТ_МинМакс
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Продажи КАК ВТ_Продажи
		ПО ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент = ВТ_Продажи.АналитикаУчетаПоПартнерамКонтрагент
			И ВТ_МинМакс.СуммаПриходМаксимум = ВТ_Продажи.СуммаПриход

СГРУППИРОВАТЬ ПО
	ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент,
	ВТ_МинМакс.СуммаПриходМаксимум

УПОРЯДОЧИТЬ ПО
	АналитикаУчетаПоПартнерамКонтрагент,
	СуммаПриходМинимум,
	СуммаПриходМаксимум
Показать
7. user1553339 28.02.21 16:57 Сейчас в теме
(4)
ВЫБРАТЬ
РасчетыСКлиентамиОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК АналитикаУчетаПоПартнерамКонтрагент,
РасчетыСКлиентамиОбороты.ПериодДень КАК Период,
РасчетыСКлиентамиОбороты.СуммаПриход КАК СуммаПриход
ПОМЕСТИТЬ ВТ_Продажи
ИЗ
РегистрНакопления.РасчетыСКлиентами.Обороты(, , Авто, ) КАК РасчетыСКлиентамиОбороты

ИНДЕКСИРОВАТЬ ПО
АналитикаУчетаПоПартнерамКонтрагент,
СуммаПриход
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
ВТ_Продажи.АналитикаУчетаПоПартнерамКонтрагент КАК АналитикаУчетаПоПартнерамКонтрагент,
МИНИМУМ(ВТ_Продажи.СуммаПриход) КАК СуммаПриходМинимум,
МАКСИМУМ(ВТ_Продажи.СуммаПриход) КАК СуммаПриходМаксимум
ПОМЕСТИТЬ ВТ_МинМакс
ИЗ
ВТ_Продажи КАК ВТ_Продажи

СГРУППИРОВАТЬ ПО
ВТ_Продажи.АналитикаУчетаПоПартнерамКонтрагент

ИНДЕКСИРОВАТЬ ПО
АналитикаУчетаПоПартнерамКонтрагент
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент КАК АналитикаУчетаПоПартнерамКонтрагент,
МАКСИМУМ(ВТ_Продажи.Период) КАК Период,
NULL КАК СуммаПриходМаксимум,
ВТ_МинМакс.СуммаПриходМинимум КАК СуммаПриходМинимум
ИЗ
ВТ_МинМакс КАК ВТ_МинМакс
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Продажи КАК ВТ_Продажи
ПО (ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент = ВТ_Продажи.АналитикаУчетаПоПартнерамКонтрагент)
И (ВТ_МинМакс.СуммаПриходМинимум = ВТ_Продажи.СуммаПриход)

СГРУППИРОВАТЬ ПО
ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент,
ВТ_МинМакс.СуммаПриходМинимум

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент,
МИНИМУМ(ВТ_Продажи.Период),
ВТ_МинМакс.СуммаПриходМаксимум,
NULL
ИЗ
ВТ_МинМакс КАК ВТ_МинМакс
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Продажи КАК ВТ_Продажи
ПО ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент = ВТ_Продажи.АналитикаУчетаПоПартнерамКонтрагент
И ВТ_МинМакс.СуммаПриходМаксимум = ВТ_Продажи.СуммаПриход

СГРУППИРОВАТЬ ПО
ВТ_МинМакс.АналитикаУчетаПоПартнерамКонтрагент,
ВТ_МинМакс.СуммаПриходМаксимум

УПОРЯДОЧИТЬ ПО
АналитикаУчетаПоПартнерамКонтрагент,
СуммаПриходМинимум,
СуммаПриходМаксимум
Показать

(4)

Почти идеально. По условию отдельно должна быть видна МИНИМАЛЬНАЯ ДАТА, когда сумма продаж была максимальной, и МАКСИМАЛЬНАЯ ДАТА, когда сумма продаж была минимальной.
9. spacecraft 28.02.21 17:02 Сейчас в теме
(7) это просто получить уже из существующего кода.
5. spec8s 825 28.02.21 14:49 Сейчас в теме
(1)
Требуется написать запрос, возвращающий для каждого Контрагенту минимальную дату, когда сумма продаж была максимальной,


// 1. Поместим все продажи по контрагентам по дням во временную таблицу
ВЫБРАТЬ
	Продажи.Период КАК ДатаПродажи,
	Продажи.АналитикаУчетаПоПартнерам КАК Контрагент,
	Продажи.СуммаВыручкиОборот КАК СуммаПродажи
ПОМЕСТИТЬ ПродажиПоДням
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , День, ) КАК Продажи
;

////////////////////////////////////////////////////////////­////////////////////
// 2. Свернем таблицу продаж  в разрезе контрагента и мин, макс суммы
ВЫБРАТЬ
	ПродажиПоДням.Контрагент КАК Контрагент,
	МИНИМУМ(ПродажиПоДням.СуммаПродажи) КАК МинСуммаПродажи,
	МАКСИМУМ(ПродажиПоДням.СуммаПродажи) КАК МаксСуммаПродажи
ПОМЕСТИТЬ МинМаксСуммы
ИЗ
	ПродажиПоДням КАК ПродажиПоДням

СГРУППИРОВАТЬ ПО
	ПродажиПоДням.Контрагент
;

////////////////////////////////////////////////////////////­////////////////////
// 3. Присоединим к свернутой таблице даты, 2 раза, 

// 1й раз по полю мин сумма продажи
// 2й раз по полю макс сумма продажи

// Затем свернем таблицу, к датам продажи применим функции Мин и Макс

ВЫБРАТЬ
	МинМаксСуммы.Контрагент КАК Контрагент,
	МинМаксСуммы.МинСуммаПродажи КАК МинСуммаПродажи,
	МинМаксСуммы.МаксСуммаПродажи КАК МаксСуммаПродажи,
	МИНИМУМ(ПродажиПоДнямМин.ДатаПродажи) КАК МинДатаПродажи,
	МАКСИМУМ(ПродажиПоДнямМакс.ДатаПродажи) КАК МаксДатаПродажи
ИЗ
	МинМаксСуммы КАК МинМаксСуммы
		// Соединим по полю МИН
		ЛЕВОЕ СОЕДИНЕНИЕ ПродажиПоДням КАК ПродажиПоДнямМакс
		ПО (МинМаксСуммы.Контрагент = ПродажиПоДнямМакс.Контрагент
				И МинМаксСуммы.МинСуммаПродажи = ПродажиПоДнямМакс.СуммаПродажи)
		
		// Соединим по полю МАКС		
		ЛЕВОЕ СОЕДИНЕНИЕ ПродажиПоДням КАК ПродажиПоДнямМин
		ПО (МинМаксСуммы.Контрагент = ПродажиПоДнямМин.Контрагент
				И МинМаксСуммы.МаксСуммаПродажи = ПродажиПоДнямМин.СуммаПродажи)
				
СГРУППИРОВАТЬ ПО
	МинМаксСуммы.Контрагент,
	МинМаксСуммы.МинСуммаПродажи,
	МинМаксСуммы.МаксСуммаПродажи
Показать
10. user1553339 28.02.21 17:05 Сейчас в теме
(5)
// 1. Поместим все продажи по контрагентам по дням во временную таблицу
ВЫБРАТЬ
Продажи.Период КАК ДатаПродажи,
Продажи.АналитикаУчетаПоПартнерам КАК Контрагент,
Продажи.СуммаВыручкиОборот КАК СуммаПродажи
ПОМЕСТИТЬ ПродажиПоДням
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , День, ) КАК Продажи
;

////////////////////////////////////////////////////////////­­////////////////////
// 2. Свернем таблицу продаж в разрезе контрагента и мин, макс суммы
ВЫБРАТЬ
ПродажиПоДням.Контрагент КАК Контрагент,
МИНИМУМ(ПродажиПоДням.СуммаПродажи) КАК МинСуммаПродажи,
МАКСИМУМ(ПродажиПоДням.СуммаПродажи) КАК МаксСуммаПродажи
ПОМЕСТИТЬ МинМаксСуммы
ИЗ
ПродажиПоДням КАК ПродажиПоДням

СГРУППИРОВАТЬ ПО
ПродажиПоДням.Контрагент
;

////////////////////////////////////////////////////////////­­////////////////////
// 3. Присоединим к свернутой таблице даты, 2 раза,

// 1й раз по полю мин сумма продажи
// 2й раз по полю макс сумма продажи

// Затем свернем таблицу, к датам продажи применим функции Мин и Макс

ВЫБРАТЬ
МинМаксСуммы.Контрагент КАК Контрагент,
МинМаксСуммы.МинСуммаПродажи КАК МинСуммаПродажи,
МинМаксСуммы.МаксСуммаПродажи КАК МаксСуммаПродажи,
МИНИМУМ(ПродажиПоДнямМин.ДатаПродажи) КАК МинДатаПродажи,
МАКСИМУМ(ПродажиПоДнямМакс.ДатаПродажи) КАК МаксДатаПродажи
ИЗ
МинМаксСуммы КАК МинМаксСуммы
// Соединим по полю МИН
ЛЕВОЕ СОЕДИНЕНИЕ ПродажиПоДням КАК ПродажиПоДнямМакс
ПО (МинМаксСуммы.Контрагент = ПродажиПоДнямМакс.Контрагент
И МинМаксСуммы.МинСуммаПродажи = ПродажиПоДнямМакс.СуммаПродажи)

// Соединим по полю МАКС
ЛЕВОЕ СОЕДИНЕНИЕ ПродажиПоДням КАК ПродажиПоДнямМин
ПО (МинМаксСуммы.Контрагент = ПродажиПоДнямМин.Контрагент
И МинМаксСуммы.МаксСуммаПродажи = ПродажиПоДнямМин.СуммаПродажи)

СГРУППИРОВАТЬ ПО
МинМаксСуммы.Контрагент,
МинМаксСуммы.МинСуммаПродажи,
МинМаксСуммы.МаксСуммаПродажи
Показать
2. Sergex 57 28.02.21 14:18 Сейчас в теме
Уточните эти максимумы и минимумы надо за определенный период найти?
6. user1553339 28.02.21 16:33 Сейчас в теме
(2) В идеале за период. Но мне хотя-бы просто подход к решению. Я так понимаю период в выборку добавить будет не проблема в дальнейшем....
3. antz 28.02.21 14:46 Сейчас в теме
Выбрать минимум и максимум сумм по контрагенту, соединить с таблицей контрагентов, сумм и дат по контрагенту и сумме, выбрать из результата максимум и минимум дат по контрагенту.
8. user1553339 28.02.21 16:59 Сейчас в теме
(3)
Нужна не просто максимальная и минимальная дата, а минимальная дата, когда сумма продаж была максимальной, и максимальная дата, когда сумма продаж была минимальной
11. ivsher 02.03.21 11:57 Сейчас в теме
Два раза отсортировать вашу временную таблицу. Первый раз по значениям Продажи по возрастанию даты по убыванию. Верхняя строка и будет ваша максимальная продажа минимальная дата. Второй раз сортируйте по Продажи по убыванию даты по возрастанию и верхней строке получите максимальную дату с минимальной продажей.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день