Имя: Пароль:
1C
1С v8
Получить последние цены номенклатуры без учета других измерений
0 Slon747
 
31.05.12
10:54
Требуется получить последние цены номенклатуры без учета характеристик и др. измерений.
Понятно, что цен может быть несколько на каждую позицию, поэтому буду брать МИНИМУМ(Цена). Можно было бы решить это через Итоги, а потом из каждой группировки взять по первой строке:

ВЫБРАТЬ
   ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
   ЦеныНоменклатурыСрезПоследних.Период КАК Период,
   ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
   ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент КАК Коэффициент
ИЗ
   РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ТипЦен) КАК ТипЦен}) КАК ЦеныНоменклатурыСрезПоследних

УПОРЯДОЧИТЬ ПО
   Период УБЫВ
ИТОГИ ПО
   Номенклатура


Но проблема в том, что эти цены мне нужны для использования в построителе отчета. А он не принимает ТЗ, которую можно было бы заполнить этими данными.
Как можно получить нужные данные для дальнейшего использования в пакетном запросе?
1 Cube
 
31.05.12
10:56
(0) Если я правильно понял, ты хочешь получить минимальную цену номенклатуры и характеристику для этой цены, так?
2 Slon747
 
31.05.12
10:58
(1) Нет. Мне нужна одна цена(пусть минимальная), но без учета характеристики. Т.е. с любой характеристикой
3 Cube
 
31.05.12
10:59
(2) Ну на:

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

СГРУППИРОВАТЬ ПО
   ЦеныНоменклатурыСрезПоследних.Номенклатура
4 Slon747
 
31.05.12
11:02
(3) Ни фига. Так мы получаем последние цены на все характеристики.
Т.е. если есть цена 11.00 на характерисику с периодом 01.01.2006 и есть цена 23.00 на характеристику с периодом 01.01.2012, то вернет цену 11.00
5 Cube
 
31.05.12
11:05
(4) Какое условие - такое решение. Ты сам определись, чего хочешь, потом спрашивай.
6 Slon747
 
31.05.12
11:06
(5) По-моему я понятно объяснил
7 kotletka
 
31.05.12
11:07
ну так из 3 срез последних просто убери и все
8 echo77
 
31.05.12
11:07
Получайте срез последних без использования виртуальных таблиц, например так:
- Вложенный запрос по реальной таблице цен, где группируете по номенклатуре, получаете максимальный период
- Соединяете таблицу цен со вложенным запросом по номенклатуре, периоду, берете цену из реальной таблицы, группируете по номенклатуре, периоду, цену минимальную/максимальную берете
9 Cube
 
31.05.12
11:10
(6) Не знаю, лично я ничего не понял...
10 Slon747
 
31.05.12
11:10
(7)(8) Спасибо. Раз нет других вариантов, то попробую. так.
Просто думаю, что без вирт. таблицы будет работать заметно медленнее.
11 DEVIce
 
31.05.12
11:12
(10). Виртуальная таблица как раз и реализует то, что написано в (8)
12 shuhard
 
31.05.12
11:15
(10) используй срез для получения даты
ВЫБРАТЬ
   ЦеныНоменклатурыСрезПоследних.Номенклатура,
   МИНИМУМ(ЦеныНоменклатурыСрезПоследних.Период) КАК Период
ПОМЕСТИТЬ ДатаСреза
ИЗ
   РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЦеныНоменклатуры.Номенклатура,
   ЦеныНоменклатуры.ТипЦен,
   ЦеныНоменклатуры.Цена
ИЗ
   ДатаСреза КАК ДатаСреза
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
       ПО ДатаСреза.Период = ЦеныНоменклатуры.Период
           И ДатаСреза.Номенклатура = ЦеныНоменклатуры.Номенклатура
13 Slon747
 
31.05.12
11:33
(12) Похоже, что правильно.
Только МИНИМУМ заменил на МАКСИМУМ и в основном запросе сгруппировал по номенклатуре с МИНИМУМ(ЦеныНоменклатуры.Цена).
Спасибо. Буду пробовать.