Имя: Пароль:
1C
1С v8
Подскажите с запросом
0 егаис
 
17.11.13
14:49
Формируется виртуальная таблица
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЦеныСрезПоследних.Цена,
    ЦеныСрезПоследних.Номенклатура.Код,
    ЦеныСрезПоследних.Период
ПОМЕСТИТЬ тз
ИЗ
    РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
ГДЕ
    ЦеныСрезПоследних.ТипЦен = &ТипЦен
    И ЦеныСрезПоследних.Номенклатура.ПометкаУдаления = &ПометкаУдаления

Есть еще одно измерение "Поставщик", поэтому получаются записи с одинаковым кодом, разными ценами и периодом
Типа
001 32,00 01.01.13
001 31,50 05.01.13
001 33,00 13.03.13
002 50,00 15.01.13
002 70,00 16.01.13
и т.д.
Подскажите как получить строку с максимальной датой по каждому товару?
2 Tateossian
 
17.11.13
15:05
Во-первых переделай запрос так
РегистрСведений.Цены.СрезПоследних(, НЕ ЦеныСрезПоследних.Номенклатура.ПометкаУдаления И ЦеныСрезПоследних.ТипЦен = &ТипЦен)
3 Tateossian
 
17.11.13
15:06
МАКИСИМУМ(ЦеныСрезПоследних.Период) в полях

и в блоке СГРУППИРОВАТЬ ПО

ЦеныСрезПоследних.Цена,
ЦеныСрезПоследних.Номенклатура.Код
4 егаис
 
17.11.13
15:07
(3) он всегда будет максимум в разрезе еще одного измерения "Поставщик", записи останутся те же
5 Tateossian
 
17.11.13
15:10
(4) Но в запросе у тебя нет этого поля. Как так получится?
6 егаис
 
17.11.13
15:12
по измерению

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

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

результат

00000029    36,41    25.04.2013 0:00:00
00000029    36,42    25.04.2013 0:00:00
00000029    36,50    26.04.2013 0:00:00
00000029    37,15    25.04.2013 0:00:00
00000029    38,20    25.04.2013 0:00:00
00000029    38,79    25.04.2013 0:00:00
00000029    39,17    19.09.2013 8:00:00
00000029    44,00    25.04.2013 0:00:00
00000030    24,77    25.04.2013 0:00:00
00000030    25,49    25.04.2013 0:00:00
00000030    26,11    25.04.2013 0:00:00
00000030    27,50    26.04.2013 0:00:00
00000030    29,49    25.04.2013 0:00:00
00000030    30,79    02.10.2013 8:00:00
00000033    58,04    25.04.2013 0:00:00
00000033    61,52    25.04.2013 0:00:00
00000033    64,33    25.04.2013 0:00:00
00000033    66,08    25.04.2013 0:00:00
7 егаис
 
17.11.13
15:13
тут надо это все в виртуальный тз запихнуть и потом по максимуму выбрать, не пойму как (
8 Tateossian
 
17.11.13
15:18
ВЫБРАТЬ
    Цена,
    Код,
    МАКСИМУМ(Период) ИЗ (


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

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

СГРУППИРОВАТЬ ПО
    Цена,
    Код
9 Tateossian
 
17.11.13
15:19
А, подожди, цену надо убрать и с ней соединить. Я торможу, сейчас напишу.
10 alexiv79
 
17.11.13
15:20
(0)  Что за конфа? Не УТ ?
11 егаис
 
17.11.13
15:20
(10) типа, отраслевая от раруса
12 егаис
 
17.11.13
15:20
цены хранятся в разрезе поставщиков
13 Prince-Sentido
 
17.11.13
15:21
<1C>ВЫБРАТЬ
    ЦеныСрезПоследних.Цена,
    ЦеныСрезПоследних.ТипЦен,
    ЦеныСрезПоследних.Номенклатура
ИЗ
    РегистрСведений.Цены.СрезПоследних(
            ,
            НЕ Номенклатура.ПометкаУдаления
                И ТипЦен = &ТипЦен) КАК ЦеныСрезПоследних
</1C>
14 alexiv79
 
17.11.13
15:21
(12)  Что-то подобное видел в Альфа-авто
15 Wobland
 
17.11.13
15:21
(13) в чего это вдруг не пометка?
16 alexiv79
 
17.11.13
15:22
(15)  Может так не используемую номенклатуру помечают
17 Tateossian
 
17.11.13
15:23
(15) Да, понятно, тут я не прав. Суть в том - чтобы поместить это в параметр виртуальной таблицы.
18 егаис
 
17.11.13
15:24
и так не работает
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЦеныСрезПоследних.Цена,
    ЦеныСрезПоследних.Номенклатура.Код,
    МАКСИМУМ(ЦеныСрезПоследних.Период) КАК Период
ПОМЕСТИТЬ тз
ИЗ
    РегистрСведений.Цены.СрезПоследних(
            ,
            (НЕ Номенклатура.ПометкаУдаления)
                И ТипЦен = &ТипЦен) КАК ЦеныСрезПоследних

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

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

СГРУППИРОВАТЬ ПО
    тз.НоменклатураКод,
    тз.Цена
19 alexiv79
 
17.11.13
15:24
(12)  Чета мне кажется надо ПЕРВЫЕ использовать
20 Prince-Sentido
 
17.11.13
15:24
(15) да, точно. В виде параметра в условии задания. Но можно и не используемую номенклатуру не учитывать, как частный случай
21 Wobland
 
17.11.13
15:25
выбрать максимальные даты, соединить со срезом ещё не предлагали?
22 Wobland
 
17.11.13
15:26
(21) хотя, чего это я?.. сгруппировать уже пробовали?
23 егаис
 
17.11.13
15:27
(19) первые 1 с упорядочиванием - так только один элемент выйдет
(21) да, да, вот думалки не хватает на это
24 Tateossian
 
17.11.13
15:28
Попробуй так

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

СГРУППИРОВАТЬ ПО
          ЦеныСрезПоследних.Номенклатура.Код,
    ЦеныСрезПоследних1.Цена
25 Wobland
 
17.11.13
15:29
(23) начни с запроса, который даст тебе крайнюю дату для каждой номенклатуры
26 егаис
 
17.11.13
15:33
(24) не
27 alexiv79
 
17.11.13
15:34
(23) А если Максимум - цена и период? Просто получается так, что у тебя допустим от 2 поставщиков на 1 дату 2 цены - какую из них выбрать?
28 Tateossian
 
17.11.13
15:37
(26) А что не? Там ошибка у меня в запросе.
29 alexiv79
 
17.11.13
15:38
+(27)  Если среднюю по цене бери - но все засит от постановки задачи
30 егаис
 
17.11.13
15:42
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Код,
    МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Период) КАК Период,
    ЦеныНоменклатурыСрезПоследних1.Цена
ИЗ
    РегистрСведений.Цены.СрезПоследних(
            ,
            Номенклатура.ПометкаУдаления = &ПометкаУдаления
                И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних1
        ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыСрезПоследних1.Номенклатура
            И ЦеныНоменклатурыСрезПоследних.Период = ЦеныНоменклатурыСрезПоследних1.Период

СГРУППИРОВАТЬ ПО
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Код,
    ЦеныНоменклатурыСрезПоследних1.Цена
31 егаис
 
17.11.13
15:42
(28) исправил, тоже самое
32 егаис
 
17.11.13
15:43
(27) срез последних на что? цена - ресурс
33 Tateossian
 
17.11.13
15:47
(32) Так а что тебе надо увидеть? Просто последнюю цену, или конкретного поставщика? Вот так ты получишь правильные последние цены (в прошлый раз я забыл во внутреннем соединении поставит фильтр на тип цен):

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

СГРУППИРОВАТЬ ПО
    ЦеныСрезПоследних.Номенклатура.Код,
    ЦеныСрезПоследних1.Цена
34 alexiv79
 
17.11.13
15:48
(32)  У номенклатура Шкаф, у поставщика ИП Иванов цена 100, у поставщика ИП Петров 120 на 01.01.2013 - какую тебе цену надо? Максимульную? Среднию?
35 alexiv79
 
17.11.13
15:49
+(34)  Прежде чем начать писать запрос, надо подумать - что ты хочешь получить в результате
36 егаис
 
17.11.13
15:55
максимальную по дате по типу цены, поставщик не важен
37 alexiv79
 
17.11.13
15:56
(34)  Если тебя периодичность регистра в пределах дня - то последней цены от двух разных поставщиком не будет - у них одинаковые даты могут быть - например 01.11.2013 00:00:00 - какую из них надо выбрать? Скорее всего среднюю-или где поставщик- пустое значение
38 alexiv79
 
17.11.13
15:57
(36)  Тогда вместо  
ЦеныСрезПоследних.Цена попробуй
Максимум(ЦеныСрезПоследних.Цена) КАК Цена
39 егаис
 
17.11.13
15:58
(37), (38) ты о чем вообще, не в теме?
нужно получить значение цены по каждой номенклатуре на последнюю дату. Регистр имеет измерения "Номенклатура" и "Поставщик", ресурс "Цена".
Азбука, результат всегда будет по всем измерениям.
40 alexiv79
 
17.11.13
15:59
(39) Понятно-думать ты не хочешь. Ну давай, дерзай. Потом посмотрю чем это все кончится
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой