Имя: Пароль:
1C
 
получить на СКД 3 склада, с которых шла максимальная сумма продаж по каждому партнеру УТ11
,
0 Dimarik_1
 
15.10.21
18:45
Можете подсказать, как можно решить данную задачу в отчете на СКД.  Сразу говорю, это запросом не сделать.
Что мне нужно, по каждому партнеру-контрагенту определить, на каких складах он больше всего купил товара в рублях. и вывести Склад1, Склад2, Склад3 (название и сумму).
Запросом нельзя сделать, потому что никак не обработаешь ситуацию в запросе, когда на 2 складах была одинаковая продажа. Если б не было таких ситуаций, тогда бы можно было вывести  сначала максимальный один склад, потом второй и третий затем. Но так не получится.
По этой причине я полагаю, что так можно сделать только на СКД.
Я так понимаю, что для этого необходимо использовать ВычислитьВыражениеСГруппировкойТаблицаЗначений.Только как бы его использовать, не могу додумать до конца. Может подскажете?
1 серый КТУЛХУ
 
15.10.21
18:54
запросом
2 Ненавижу 1С
 
гуру
15.10.21
19:01
(0) чушь что запросом нельзя
3 Dimarik_1
 
15.10.21
19:13
как это можно сделать запросом, если учесть что у меня могут быть 2 одинаковые суммы? Можете посказать?
4 Dimarik_1
 
15.10.21
19:15
я вижу запросом следующее. Определяю максимальную сумму продажи. Вывожу склад с максимальной суммой продажи. Делаю соедниние по контрагент-партнер и сумма. Без проблем все отработает. Только как быть если у меня 2 суммы? одинаковые по 2 складам. Тогда что мне делать? Определять Максимум по коду?
не уверен что еще такой подход оптимален.
5 ГеннадийУО
 
15.10.21
19:20
(4) Выбрать Первые 3
6 Dimarik_1
 
15.10.21
19:29
да не получится так. у меня 1000 клиентов. и по каждому клиенту надо выбрать 3 склада. Если Выбрать первые 3, тогда у меня будет всего лишь 3 записи
7 youalex
 
15.10.21
19:41
(6) как то так можно, схематично
1)Склад/Контрагент/Сумма - тут понятно
2)Где СУММА >= (Выбрать top 1 из top 3 ГДЕ т1.Контрагент= т2.Контрагент)
8 youalex
 
15.10.21
19:53
(7) а, сравнивать со вложенным в 1с нельзя же, тогда только top 3

ВЫБРАТЬ * из вт
ГДЕ СУММА В (ВЫБРАТЬ ПЕРВЫЕ 3 влож.Сумма ИЗ вт влож ГДЕ вт.Контрагент = влож.Контрагент УПОРЯДОЧИТЬ ПО Сумма Убыв)
9 youalex
 
15.10.21
20:03
(8) + РАЗЛИЧНЫЕ еще надо, ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 3
10 серый КТУЛХУ
 
15.10.21
23:21
//длинное и нудное решение "в лоб" запросом:
ВЫБРАТЬ РеализацияТоваровУслуг.Контрагент, РеализацияТоваровУслуг.Склад, СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втРеализация1
ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ РеализацияТоваровУслуг.Проведен
СГРУППИРОВАТЬ ПО РеализацияТоваровУслуг.Контрагент, РеализацияТоваровУслуг.Склад
;
ВЫБРАТЬ втРеализация.Контрагент КАК Контрагент, МАКСИМУМ(втРеализация.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втМакс1 ИЗ втРеализация1 КАК втРеализация СГРУППИРОВАТЬ ПО втРеализация.Контрагент
;
ВЫБРАТЬ втРеализация.Контрагент КАК Контрагент, втРеализация.Склад, МАКСИМУМ(втРеализация.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втМаксСклад1
ИЗ втРеализация1 КАК втРеализация ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМакс1 КАК втМакс1 ПО втРеализация.Контрагент = втМакс1.Контрагент И втРеализация.СуммаДокумента = втМакс1.СуммаДокумента
СГРУППИРОВАТЬ ПО втРеализация.Контрагент, втРеализация.Склад
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ втРеализация.Контрагент, втРеализация.Склад, МАКСИМУМ(втРеализация.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втРеализация2
ИЗ втРеализация1 КАК втРеализация ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМаксСклад1 КАК втМаксСклад1 ПО втРеализация.Контрагент = втМаксСклад1.Контрагент И втРеализация.Склад <> втМаксСклад1.Склад
СГРУППИРОВАТЬ ПО втРеализация.Контрагент, втРеализация.Склад
;
ВЫБРАТЬ втРеализация2.Контрагент КАК Контрагент, МАКСИМУМ(втРеализация2.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втМакс2 ИЗ втРеализация2 КАК втРеализация2 СГРУППИРОВАТЬ ПО втРеализация2.Контрагент
;
ВЫБРАТЬ втРеализация2.Контрагент КАК Контрагент, втРеализация2.Склад, МАКСИМУМ(втРеализация2.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втМаксСклад2
ИЗ втРеализация2 КАК втРеализация2 ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМакс2 КАК втМакс2 ПО втРеализация2.Контрагент = втМакс2.Контрагент И втРеализация2.СуммаДокумента = втМакс2.СуммаДокумента
СГРУППИРОВАТЬ ПО втРеализация2.Контрагент, втРеализация2.Склад
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ втРеализация2.Контрагент, втРеализация2.Склад, МАКСИМУМ(втРеализация2.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втРеализация3
ИЗ втРеализация2 КАК втРеализация2 ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМаксСклад2 КАК втМаксСклад2 ПО втРеализация2.Контрагент = втМаксСклад2.Контрагент И втРеализация2.Склад <> втМаксСклад2.Склад
СГРУППИРОВАТЬ ПО втРеализация2.Контрагент, втРеализация2.Склад
;
ВЫБРАТЬ втРеализация3.Контрагент КАК Контрагент, МАКСИМУМ(втРеализация3.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втМакс3 ИЗ втРеализация3 КАК втРеализация3 СГРУППИРОВАТЬ ПО втРеализация3.Контрагент
;
ВЫБРАТЬ втРеализация3.Контрагент КАК Контрагент, втРеализация3.Склад, МАКСИМУМ(втРеализация3.СуммаДокумента) КАК СуммаДокумента
ПОМЕСТИТЬ втМаксСклад3
ИЗ втРеализация3 КАК втРеализация3 ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМакс3 КАК втМакс3 ПО втРеализация3.Контрагент = втМакс3.Контрагент И втРеализация3.СуммаДокумента = втМакс3.СуммаДокумента
СГРУППИРОВАТЬ ПО втРеализация3.Контрагент, втРеализация3.Склад
;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ втМаксСклад1.Контрагент, втМаксСклад1.Склад, втМаксСклад1.СуммаДокумента ИЗ втМаксСклад1 КАК втМаксСклад1
ОБЪЕДИНИТЬ ВЫБРАТЬ втМаксСклад2.Контрагент, втМаксСклад2.Склад, втМаксСклад2.СуммаДокумента ИЗ втМаксСклад2 КАК втМаксСклад2
ОБЪЕДИНИТЬ ВЫБРАТЬ втМаксСклад3.Контрагент, втМаксСклад3.Склад, втМаксСклад3.СуммаДокумента ИЗ втМаксСклад3 КАК втМаксСклад3
УПОРЯДОЧИТЬ ПО Контрагент, СуммаДокумента УБЫВ, Склад
11 toypaul
 
гуру
16.10.21
08:11
В СКД делаешь группировку по партнеру, подчиненную по складу. На группировке по складу ставишь сортировку по сумме с убыванием, и добавляешь отбор по полю НомерПоПорядку <=3

В запросе надо попробовать сделать тоже самое. То есть пронумеровать подчиненные строки (по складу) для каждого партнера
12 toypaul
 
гуру
16.10.21
08:13
Кстати в запросе тоже надо сделать сортировку не общую (по всему набору), а только внутри партнера по складу

Думается мне что стандартными средствами запросов в 1С это или вообще невозможно или слишком сложно - на СКД это проще сделать
13 pechkin
 
16.10.21
09:47
Задача на нуиерацию в запросе
14 echo77
 
16.10.21
10:21
(0) Так должно получиться? https://yadi.sk/i/ltZhCtUiP6qJ3A
Настройка в СКД - Количество записей = N, Сортируем по ресурсу Сумма по убыванию
15 серый КТУЛХУ
 
16.10.21
16:42
запрос (10) некрасивый но полностью рабочий - проверено.
16 youalex
 
16.10.21
20:18
(4) > Только как быть если у меня 2 суммы? одинаковые по 2 складам.
Если надо строго три склада вывести, то

ВЫБРАТЬ * из вт
ГДЕ Склад В (ВЫБРАТЬ ПЕРВЫЕ 3  влож.Склад ИЗ вт влож ГДЕ вт.Контрагент = влож.Контрагент УПОРЯДОЧИТЬ ПО Сумма Убыв, Склад)

Здесь доп. упорядочивание по ссылке склада, но ты можешь как угодно их ранжировать.