Имя: Пароль:
1C
1С v8
Получить последнюю цену закупки
0 LastUnion
 
15.02.18
04:25
Здравствуйте, помогите пожалуйста решить такую задачку: есть регистр сведений ЦеныНоменклатурыПоставщиков, мне нужно получить последние цены на все товары. Я делаю так:

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



Проблема в том, что строк в результате выполнения запроса с одним товаром может быть несколько, связано это с тем, как я понял, что в регистре отличаются значения измерений(таких как "Поставщик" и т.д.) В итоге я получаю что-то типа такого:

НазваниеТовара 100р.
НазваниеТовара 100р.
НазваниеТовара 120р.


Как сделать так, чтобы выбиралась только последняя цена на текущий момент, без учета остальных измерений?
1 shadow_sw
 
15.02.18
04:27
На какую дату выборка? если выбирать из СрезПоследних без указания даты - ты и получаешь все что есть
2 LastUnion
 
15.02.18
04:32
На текущую дату, подставлял и текущую как параметр вирутальной таблицы, но результат не меняется
3 LastUnion
 
15.02.18
04:33
он сейчас выбирает последние цены по всем поставщикам, период тут не при чем
4 LastUnion
 
15.02.18
04:33
А мне нужно просто последнюю цену закупки без учета поставщиков
5 shadow_sw
 
15.02.18
04:36
ВЫБРАТЬ
    ЦеныНоменклатурыПоставщиковСрезПоследних.Цена КАК ЦенаЗакупки,
    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
ИЗ
    РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(&НаДату, ) КАК ЦеныНоменклатурыПоставщиковСрезПоследних

&НаДату = ТекущаяДата()
6 shadow_sw
 
15.02.18
04:36
(3) сам с собой разговариваешь?:)
7 LastUnion
 
15.02.18
04:38
(5) Сейчас, попробую ещё раз, секунду (6) Новенький здесь, только узнал, что можно ссылаться на сообщения других)
8 LastUnion
 
15.02.18
04:43
(5) Все осталось как было...

В регистре получается лежит что-то типа такого:

Номенклатура     Цена          Поставщик            Дата
Номенклатура1    100            ООО"Поставщик1"    01.01.2018
Номенклатура1    100            ООО"Поставщик2"    06.01.2018  
Номенклатура1    100            ООО"Поставщик1"    08.01.2018
Номенклатура1    120            ООО"Поставщик2"    10.01.2018

В итоге я получаю
Номенклатура1    100  
Номенклатура1    120

Потому что поставщики разные....


А мне нужно получить последнюю закупочную цену:

Номенклатура1    120
9 Mankubus
 
15.02.18
05:48
(8) изучай временные таблицы и выражение МАКСИМУМ
10 Mankubus
 
15.02.18
05:50
1. Получаешь все цены с периодом и номенклатурой
2. Выбираешь максимальный период по каждой номенклатуре
3. Соединяет 1 и 2, выбирая только цены с максимальным периодом
11 LastUnion
 
15.02.18
05:59
(10) Сейчас попробую
12 LastUnion
 
15.02.18
06:05
(10) Сделал так как вы говорили? Ничего не изменилось


Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                   |    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
                   |    ЦеныНоменклатурыПоставщиковСрезПоследних.Период КАК Период,
                   |    ЦеныНоменклатурыПоставщиковСрезПоследних.Цена
                   |ПОМЕСТИТЬ ВСЕЦЕНЫ
                   |ИЗ
                   |    РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(, ) КАК ЦеныНоменклатурыПоставщиковСрезПоследних
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
                   |    МАКСИМУМ(ЦеныНоменклатурыПоставщиковСрезПоследних.Период) КАК Период
                   |ПОМЕСТИТЬ ЦЕНЫСМАКСПЕРИОДОМ
                   |ИЗ
                   |    РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ВСЕЦЕНЫ.Номенклатура,
                   |    ВСЕЦЕНЫ.Цена
                   |ИЗ
                   |    ВСЕЦЕНЫ КАК ВСЕЦЕНЫ
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦЕНЫСМАКСПЕРИОДОМ КАК ЦЕНЫСМАКСПЕРИОДОМ
                   |        ПО ВСЕЦЕНЫ.Номенклатура = ЦЕНЫСМАКСПЕРИОДОМ.Номенклатура";
13 VladZ
 
15.02.18
06:09
(12) Читай внимательно!!! "Получаешь все цены". Все!!! А не срез последних.
14 chelentano
 
15.02.18
06:39
(12) В таком случае надо работать с физической таблицей, а не с виртуальной
15 catena
 
15.02.18
07:13
(13)Интересно, и чем будет отличаться выборка всех цен по максимальному периоду от выборки цен из среза последних?
16 catena
 
15.02.18
07:14
+(15)опять же по маскимальному периоду
17 chelentano
 
15.02.18
07:52
(15) Срез последних выдает записи по всем измерениям. Надо только одну.
18 catena
 
15.02.18
07:59
(17)Покажите мне вариант записей регистра, которые дадут разный результат в выборках:

Выбрать максимум(период), измерение1 из регистрсведений
Сгруппировать по измерение1


Выбрать максимум(период), измерение1 из регистрсведений.срезпоследних
Сгруппировать по измерение1
19 chelentano
 
15.02.18
08:13
(18) Извиняюсь. Не так понял :)
20 НЕА123
 
15.02.18
08:14
(12)
добавь


И ВСЕЦЕНЫ.Период = ЦЕНЫСМАКСПЕРИОДОМ.Период
Ошибка? Это не ошибка, это системная функция.