Имя: Пароль:
1C
1С v8
Как отобрать минимальные значения в запросе?
,
0 Boudybuilder
 
11.04.12
11:16
На даный момент показывает так :

Номенклатура1  Хароактеристика1         25            Поставщик1
Номенклатура1  Хароактеристика1         30            Поставщик2
Номенклатура1  Хароактеристика1         35            Поставщик3

Надо отобрать с самым меньшим значением по цена:

Номенклатура1  Хароактеристика1         25            Поставщик1


Что в запросе шаманить?
1 zak555
 
11.04.12
11:17
Мин () ?
2 Wobland
 
11.04.12
11:18
сгруппировать по минимуму
3 guitar_player
 
11.04.12
11:18
группировка по Номенклатура1  Хароактеристика1        , минимум по цене. потом соединение с первоначальной таблицей для получения поставщика
4 Широкий
 
11.04.12
11:18
(1)(2) неуд
5 Широкий
 
11.04.12
11:22
1. отсортировать по количеству и выбрать первые 1
2. Запрос условие количество в (Выбрать мин количество)
6 qeos
 
11.04.12
11:25
или
1. сгруппировать по минимуму без поставщика
2. соединить по количеству + поставщик..
7 Boudybuilder
 
11.04.12
11:25
Спасибо(3) !

(3)(5) Два варианта... Который лучше?
8 qeos
 
11.04.12
11:25
(3) черт.. не дочитал ))
9 Широкий
 
11.04.12
11:29
(7)  Мой :) в (7) неверно
10 Широкий
 
11.04.12
11:31
В (5), если не понятно, два варианта решения
11 Boudybuilder
 
11.04.12
11:35
(3)(6) Первую таблицу сделал. А Как соединить?


ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,
   МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена
ИЗ
   РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

СГРУППИРОВАТЬ ПО
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры
АВТОУПОРЯДОЧИВАНИЕ

Первую таблицу сделал...
12 Boudybuilder
 
11.04.12
11:37
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,
   МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена,
   ЦеныНоменклатурыКонтрагентовСрезПоследних1.ТипЦен
ИЗ
   РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних КАК ЦеныНоменклатурыКонтрагентовСрезПоследних1
       ПО ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор = ЦеныНоменклатурыКонтрагентовСрезПоследних1.Регистратор

СГРУППИРОВАТЬ ПО
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,
   ЦеныНоменклатурыКонтрагентовСрезПоследних1.ТипЦен
АВТОУПОРЯДОЧИВАНИЕ


Чтото так не конает...
13 FIXXXL
 
11.04.12
11:43
(5) если б в базе была одна номенклатура...
14 Boudybuilder
 
11.04.12
11:46
(11)????????
15 Широкий
 
11.04.12
11:46
ВЫБРАТЬ
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена
ИЗ
   РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
ГДЕ
   (ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура, ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) В
           (ВЫБРАТЬ
               ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
               МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена
           ИЗ
               РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
           СГРУППИРОВАТЬ ПО
                       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура)
16 FIXXXL
 
11.04.12
11:50
ВЫБРАТЬ
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор.Контрагент
ИЗ
   (ВЫБРАТЬ
       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,
       ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена
   ИЗ
       РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&ДатаСреза, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
   
   СГРУППИРОВАТЬ ПО
       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
       ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&ДатаСреза, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
       ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
           И ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры
           И ВложенныйЗапрос.Цена = ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена
17 Широкий
 
11.04.12
11:52
(16) Тоже самое написал :)
18 FIXXXL
 
11.04.12
11:59
(17) но твой запрос у меня нифига не кажет :(
а мой работает как надо
я давно таким макаром пишу...
19 DrHiHi
 
11.04.12
12:06
(0) не слушай (15)(16), им по 2 бала)))
не учли, то что цена может быть одинаковая у двух поставщиков %))
20 DrHiHi
 
11.04.12
12:08
(19)затупил %))
21 Boudybuilder
 
11.04.12
12:10
(19) И как с этим боремся?
22 DimVad
 
11.04.12
12:16
Ну, Вам нужен список поставщиков с минимальными ценами ? Логично, чтобы выводились все поставщики с одинаковой ценой, если она минимальна. Менеджер будет принимать решение, где покупать. Правда, мне кажется, что предложенные тут варианты запросов какие-то громоздкие...
23 DrHiHi
 
11.04.12
12:19
не учтен пересчет, если в другой валюте приходил товар и не учтена единица измерения))) но если захотеть, то можно реализовать

ВЫБРАТЬ
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ТипЦен.Владелец КАК Контрагент,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ТипЦен,
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.ХарактеристикаНоменклатуры,
   ВложенныйЗапрос.Цена
ИЗ
   (ВЫБРАТЬ
       ВложенныйЗапрос.Номенклатура КАК Номенклатура,
       ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       ВложенныйЗапрос.Цена КАК Цена,
       МАКСИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Период) КАК Период
   ИЗ
       (ВЫБРАТЬ
           ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,
           ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
           МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена
       ИЗ
           РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
       
       СГРУППИРОВАТЬ ПО
           ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
           ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры) КАК ВложенныйЗапрос
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
           ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
               И ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры
               И ВложенныйЗапрос.Цена = ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена
   
   СГРУППИРОВАТЬ ПО
       ВложенныйЗапрос.Номенклатура,
       ВложенныйЗапрос.ХарактеристикаНоменклатуры,
       ВложенныйЗапрос.Цена) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
       ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
           И ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры
           И ВложенныйЗапрос.Период = ЦеныНоменклатурыКонтрагентовСрезПоследних.Период
           И ВложенныйЗапрос.Цена = ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена
24 Boudybuilder
 
11.04.12
12:20
(22) А что же тогда предложите?
25 DimVad
 
11.04.12
12:34
Ну вот я простенький примерчик на пробной базе сделал. Мне кажется, все просто до мычания :

1. Получаем табличку с минимальными ценами по номенклатурам и характеристикам:

ВЫБРАТЬ
   МИНИМУМ(Цены.Цена) КАК Цена,
   Цены.Номенклатура,
   Цены.Характеристика
ПОМЕСТИТЬ МинимальныеЦены
ИЗ
   РегистрСведений.Цены КАК Цены

СГРУППИРОВАТЬ ПО
   Цены.Номенклатура,
   Цены.Характеристика
;

2. Левым соединением выдергиваем всез поставщиков :

ВЫБРАТЬ
   МинимальныеЦены.Цена,
   МинимальныеЦены.Номенклатура,
   МинимальныеЦены.Характеристика,
   Цены.Поставщик
ИЗ
   МинимальныеЦены КАК МинимальныеЦены
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
       ПО МинимальныеЦены.Номенклатура = Цены.Номенклатура
           И МинимальныеЦены.Характеристика = Цены.Характеристика
           И МинимальныеЦены.Цена = Цены.Цена

Усе. Если надо, легко сделать так, чтобы запрос выдавал одного поставщика произвольно (если их несколько с одной ценой). Но итоговый запрос - прост как мычание и его легко менять...
26 Boudybuilder
 
11.04.12
13:24
(19) Если цена одинаковая , то показывает две строки. Как их свернуть в одну. ?!
27 guitar_player
 
11.04.12
13:25
(26) я бы строки в запросе пронумеровал а потом с этим делал то, что я вам написал, т.е. привязывался бы не по цене а по ном.,характеристики, номеру строки
28 DimVad
 
11.04.12
13:31
Мне кажется, что лучше ничего не нумеровать... сейчас, пару минут, мне бухи звонят...
29 DimVad
 
11.04.12
13:36
Под "сверткой" понимается - взять любую строку. Ну, самое простое:

ВЫБРАТЬ
   МинимальныеЦены.Цена,
   МинимальныеЦены.Номенклатура,
   МинимальныеЦены.Характеристика,
   МАКСИМУМ(Цены.Поставщик) КАК Поставщик
ИЗ
   МинимальныеЦены КАК МинимальныеЦены
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
       ПО МинимальныеЦены.Номенклатура = Цены.Номенклатура
           И МинимальныеЦены.Характеристика = Цены.Характеристика
           И МинимальныеЦены.Цена = Цены.Цена

СГРУППИРОВАТЬ ПО
   МинимальныеЦены.Номенклатура,
   МинимальныеЦены.Характеристика,
   МинимальныеЦены.Цена
30 guitar_player
 
11.04.12
13:38
(29) он сказал, у него цены дублируются, не хватает уник. идентификатора
31 DimVad
 
11.04.12
13:43
Ну да, у него вывелось две строки с одинаковыми Номенклатурой, Характеристикой, Ценой и разными поставщиками. Вот я и предложил группировку по Ном, Хар, и Цене, а поставщ. - любого. Я создал две строки в пробной базе в рег. сведений таком, как он написал в первом посте. Все работает. Т.е. в предыдущем примере - две строки с разными поставщиками, сейчас - все o'k. По крайней мере на той структуре, что ТС описал вначале.
32 Boudybuilder
 
11.04.12
13:46
ВЫБРАТЬ
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор.Контрагент
ИЗ
   (ВЫБРАТЬ
       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,
       ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена
   ИЗ
       РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
   
   СГРУППИРОВАТЬ ПО
       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
       ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
       ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
           И ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры
           И ВложенныйЗапрос.Цена = ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена

СГРУППИРОВАТЬ ПО
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,
   ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор.Контрагент

Не сворачивает...
33 DrHiHi
 
11.04.12
13:54
(32) попроюуй 23