Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

как в запросе отобрать максимальные значения?

как в запросе отобрать максимальные значения?
Я
   Александр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
получить сначала по каждой номенклатуре максимальные цены
потом соединить с исходной таблицей по номенклатуре и цене

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.