Имя: Пароль:
1C
1С v8
как в запросе отобрать максимальные значения?
0 Александр111
 
12.02.20
13:31
Есть документы поступления номенклатуры
Необходимо за указанный период получить для заданного набора номенклатуры максимальные цены и ссылки на документы поступления
Запрос вида

"ВЫБРАТЬ
|    ПоступлениеТоваровУслугТовары.Ссылка КАК Документ,
|    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
|    МАКСИМУМ(ПоступлениеТоваровУслугТовары.Цена) КАК Цена
|ИЗ
|    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|    ПоступлениеТоваровУслугТовары.Ссылка.Дата >= &ДатаНачала
|    И ПоступлениеТоваровУслугТовары.Ссылка.Дата <= &ДатаОкончания
|    И ПоступлениеТоваровУслугТовары.Ссылка.Проведен = &Проведен
|    И НЕ ПоступлениеТоваровУслугТовары.Ссылка.НомерВходящегоДокумента ЕСТЬ NULL
|    И НЕ ПоступлениеТоваровУслугТовары.Ссылка.ДатаВходящегоДокумента ЕСТЬ NULL
|    И ПоступлениеТоваровУслугТовары.Номенклатура В(&Список)
|СГРУППИРОВАТЬ ПО
|    ПоступлениеТоваровУслугТовары.Номенклатура,
|    ПоступлениеТоваровУслугТовары.Ссылка
|УПОРЯДОЧИТЬ ПО
|    Номенклатура,
|    Цена УБЫВ";
Выдает все документы,например
Поступление 0000-007598 от 28.11.2018     Соединитель СР 50-748 ФВ    692,09
Поступление 0000-005599 от 12.09.2018     Соединитель СР 50-748 ФВ    649,20
Поступление 0000-002538 от 24.05.2019     Соединитель СР50-074 ПВ    639,00
Поступление 0000-001156 от 11.03.2019     Соединитель СР50-074 ПВ    597,00
Нужно чтобы было
Поступление  0000-007598 от 28.11.2018     Соединитель СР 50-748 ФВ    692,09
Поступление  0000-002538 от 24.05.2019     Соединитель СР50-074 ПВ    639,00

Как это сделать?
1 Ненавижу 1С
 
гуру
12.02.20
13:34
получить сначала по каждой номенклатуре максимальные цены
потом соединить с исходной таблицей по номенклатуре и цене

результат для конкретной номенклатуры может оказаться неоднозначным (несколько документов с одинаковой ценой)
2 Александр111
 
12.02.20
13:38
Я могу обработать таблицу значений полученную в запросе, но что будет быстрей?
3 Александр111
 
12.02.20
13:40
может можно прикрутить
" ВЫБРАТЬ первые 1
4 RomanYS
 
12.02.20
13:43
(3) Теоретически можно. "Коррелированный запрос"
5 Александр111
 
12.02.20
13:54
(3) Теоретически можно. "Коррелированный запрос" - не понятно.
6 RomanYS
 
12.02.20
13:59
7 Александр111
 
12.02.20
14:01
из  http://www.gilev.ru/выбрать-в-запросе-одну-запись-из-неско/
При использовании коррелированных запросов нельзя забывать о подводных камнях этого механизма, в частности о том, что он может служить причиной падения производительности запроса.
8 RomanYS
 
12.02.20
14:05
(7) поэтому "теоретически". Если ты не тиражку пишешь, то скорей всего это будет норм вариант.
9 Александр111
 
12.02.20
14:19
сделал так
  Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
                     Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
                     Запрос.УстановитьПараметр("Проведен", Истина);
                     Запрос.УстановитьПараметр("Список", Список);
                     Таблица20=Запрос.Выполнить().Выгрузить();
                     Таблица20.Колонки.Добавить("Отбор");
                     Ном=Справочники.Номенклатура.ПустаяСсылка();
                     Для каждого КД20 из Таблица20 цикл
                         Если КД20.Номенклатура<>Ном тогда
                            КД20.Отбор=1;
                            ном=КД20.Номенклатура;
                        КонецЕсли;
                        
                    КонецЦикла;
                    Отбор = Новый Структура("Отбор");
                       Отбор.Вставить("Отбор",1 );
                    ТабОтбор=Таблица20.Скопировать(Отбор);
10 Greeen
 
12.02.20
14:47
(9) Ловко =)
Независимо от того, куда вы едете — это в гору и против ветра!