Имя: Пароль:
1C
1С v8
Проблема с запросом
,
0 jamesgold
 
28.04.15
09:40
Добрый день, прошу помочь!

Имеется две таблицы: Регистр накопленния и табличная часть документа.

Примерно выглядит так, скрин:
http://s018.radikal.ru/i523/1504/26/67abc859a88e.jpg

Необходимо в итоговой таблице к номенклатуре с количеством подставлять цену с самой поздней датой из табличной части документа

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

Скрин:
http://s018.radikal.ru/i517/1504/69/ff08d06776a4.jpg
1 jsmith82
 
28.04.15
09:43
ну, тут надо писать вложенный запрос с максимум
а вообще лучше запили регистр сведений, который заполняется при проведении документа
2 jamesgold
 
28.04.15
09:45
Поподробней можно насчет максимум?
3 zak555
 
28.04.15
09:45
> Необходимо в итоговой таблице к номенклатуре с количеством подставлять цену с самой поздней датой из табличной части документа


клеит движения рн с тч по регистратору, номенклатуре и количеству
отсюда достаём цену
4 Drac0
 
28.04.15
09:52
(1) +1
5 jamesgold
 
28.04.15
09:56
Как это будет примерно выглядеть с максумум? Можно схематично набросать?
6 zak555
 
28.04.15
09:58
(5) ты лучше определись -- может ли быть в одном документе прихода две одинаковые строки в количественном выражении, но с разной ценной ?

если нет -- делай 3 -- без всяких там вложенных запросов
7 jsmith82
 
28.04.15
09:59
8 jamesgold
 
28.04.15
11:27
Переписал запрос с функцией максимум:

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

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

Скрин:
http://s017.radikal.ru/i442/1504/d1/d80f3ff93f34.jpg

Подскажите, что допилить в запросе, чтобы получалась одна строчка где дата максимальная?
9 jsmith82
 
28.04.15
11:36
цену убери, потом левое с ТЧ по дата и номенклатура, там цену выдернешь
10 jamesgold
 
28.04.15
12:22
(9) В итоге получился следующий запрос:
ВЫБРАТЬ
    МАКСИМУМ(ПоступлениеИнструментаИРасходниковТовары.Ссылка.Дата) КАК Дата,
    ПоступлениеИнструментаИРасходниковТовары.Номенклатура КАК Номенклатура,
    ВложенныйЗапрос.Цена
ИЗ
    Документ.ПоступлениеИнструментаИРасходников.Товары КАК ПоступлениеИнструментаИРасходниковТовары
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПоступлениеИнструментаИРасходниковТовары.Ссылка.Дата КАК Дата,
            ПоступлениеИнструментаИРасходниковТовары.Номенклатура КАК Номенклатура,
            ПоступлениеИнструментаИРасходниковТовары.Цена КАК Цена
        ИЗ
            Документ.ПоступлениеИнструментаИРасходников.Товары КАК ПоступлениеИнструментаИРасходниковТовары) КАК ВложенныйЗапрос
        ПО ПоступлениеИнструментаИРасходниковТовары.Номенклатура = ВложенныйЗапрос.Номенклатура
            И ПоступлениеИнструментаИРасходниковТовары.Ссылка.Дата = ВложенныйЗапрос.Дата
ГДЕ
    ПоступлениеИнструментаИРасходниковТовары.Номенклатура = &Номенклатура

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


Но результат тотже, теже 3 строки
11 anaed
 
28.04.15
12:41
Но в (7) же ссылка...

Проблема в том, что для каждого сочетания номенклатура+цена Дата максимальна, а вам нужен максимум только для номенклатуры.

1) Загоняете выборку со всеми сочетаниями номенклатура-цена-дата в 1ую временную таблицу.
2) Во 2ую временную таблицу выбираете записи с максимальными датами из 1ой таблицу группируя только по номенклатуре.
Таким образом получаете табличку в которой для каждой номенклатуры указана последняя дата. Теперь нужно из 1 таблицы отобрать нужные записи, для этого:
3) Внутреннем соединением соединяете 1 и 2 таблицу по номенклатуре и датам.

Ваши "исправленные" запросы ерунда какая-то. В первую временную таблицу попробуйте поместить выборку из (0), только уберите во вложенном запросе упорядочивание и "первые", чтобы все даты получить.
12 jamesgold
 
28.04.15
12:52
Спасибо за развернутый ответ, сейчас попробую и обязательно отпишусь (11)
13 jsmith82
 
28.04.15
13:06
(10) я сказал цену убрать
14 jsmith82
 
28.04.15
13:06
а, сорри
15 jamesgold
 
28.04.15
15:32
(11) Большое спасибо, все получилось!

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_НомПоследняяДата.Номенклатура,
    ВТ_НомПоследняяДата.Дата,
    ВТ_Общий_ДатаНоменклатураЦена.Цена
ИЗ
    ВТ_НомПоследняяДата КАК ВТ_НомПоследняяДата
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Общий_ДатаНоменклатураЦена КАК ВТ_Общий_ДатаНоменклатураЦена
        ПО ВТ_НомПоследняяДата.Дата = ВТ_Общий_ДатаНоменклатураЦена.Дата
            И ВТ_НомПоследняяДата.Номенклатура = ВТ_Общий_ДатаНоменклатураЦена.Номенклатура