Имя: Пароль:
1C
1С v8
СКД и регистры накопления: как выбрать первые записи по каждому измерению?
0 icherski
 
15.05.15
10:23
Коллеги, выручайте. Надо получить срез крайних цен закупки по всем товарам. Делаю запрос к соответствующему регистру накопления и получаю следующую картину:

Товар 1 = 20.01.2015 = 500 руб.
Товар 1 = 19.01.2015 = 390 руб.
Товар 1 = 05.12.2014 = 385 руб.
Товар 2 = 15.03.2015 = 1000 руб.
Товар 2 = 10.03.2015 = 990 руб.
...

Необходимо получить картину следующего вида:

Товар 1 = 20.01.2015 = 500 руб.
Товар 2 = 15.03.2015 = 1000 руб.
Товар 3 = 05.02.2015 = 5100 руб.
...

Можно ли это как-то сделать в СКД? Полученную таблицу далее необходимо будет через ЛЕВОЕ СОЕДИНЕНИЕ объединять с другими наборами данных.
1 xaozai
 
15.05.15
10:25
(0) Нужно использовать агрегатную функцию в запросе.
2 Вася Чез
 
15.05.15
10:25
(0) а где запрос?
3 icherski
 
15.05.15
10:31
Запрос в нынешнем виде выглядит вот так:

ВЫБРАТЬ
    Закупки.Номенклатура КАК Номенклатура,
    Закупки.Период КАК Период,
    Закупки.Стоимость / Закупки.Количество КАК Стоимость
ИЗ
    РегистрНакопления.Закупки КАК Закупки

СГРУППИРОВАТЬ ПО
    Закупки.Номенклатура,
    Закупки.Стоимость / Закупки.Количество,
    Закупки.Период

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    Закупки.Период УБЫВ
4 Вася Чез
 
15.05.15
10:37
(3) что-то такое  МАКСИМУМ(Закупки.Период) КАК Период
5 Вася Чез
 
15.05.15
10:39
(3) ещё как вариант, у тебя там сортировка по убыванию же, значит попробуй ВЫБРАТЬ ПЕРВЫЕ 1
6 xaozai
 
15.05.15
10:39
(0) Вот с вашими данными из (0):

ВЫБРАТЬ
    "Товар 1" КАК Товар,
    ДАТАВРЕМЯ(2015, 1, 20) КАК Дата,
    500 КАК Сумма
ПОМЕСТИТЬ Данные

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Товар 1",
    ДАТАВРЕМЯ(2015, 1, 19),
    390

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Товар 1",
    ДАТАВРЕМЯ(2014, 12, 5),
    385

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Товар 2",
    ДАТАВРЕМЯ(2015, 3, 15),
    1000

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Товар 2",
    ДАТАВРЕМЯ(2015, 3, 10),
    990
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Данные.Товар КАК Товар,
    МАКСИМУМ(Данные.Дата) КАК Дата
ПОМЕСТИТЬ ТоварИДата
ИЗ
    Данные КАК Данные

СГРУППИРОВАТЬ ПО
    Данные.Товар
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварИДата.Товар,
    ТоварИДата.Дата,
    Данные.Сумма
ИЗ
    ТоварИДата КАК ТоварИДата
        ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК Данные
        ПО ТоварИДата.Товар = Данные.Товар
            И ТоварИДата.Дата = Данные.Дата
7 icherski
 
15.05.15
10:49
Сделал вот так:

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


Спасибо за помощь!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс