Имя: Пароль:
1C
1С v8
Подскажите с запросом 8.2
0 sapravka
 
30.03.14
23:46
Здравствуйте.
Если что не так - прошу сильно не ругать.
Делаю запрос в БП ред. 2.0:

Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваровУслуг.МОЛ,
        |    ПоступлениеТоваровУслуг.Склад,
        |    ЦеныНоменклатурыСрезПоследних.Цена * ПоступлениеТоваровУслугТовары.Количество КАК ЦенаПродажи
        |ИЗ
        |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
        |        ПО ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |        ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
        |ГДЕ
        |    ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = ""000000001""
        |    И ПоступлениеТоваровУслуг.Ссылка = &ТекущийДокумент";

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

И вот тут отбирается цены на дату только последние, а необходимо, что бы отбиралась на актуальную цену документа, то есть если делаем документ прошлым периодом, а там цена на товар была, например 100 рублей, а сейчас (последняя цена, например 120 руб.), то все равно отбирается по 120.
Убедительно прошу, подскажите, как в запросе составить условие, что бы цены брались на дату составления документа?
Где именно условие задать?
И где и как прописать?
И для этого актуально использовать РегистрСведений.ЦеныНоменклатуры.СрезПоследних или необходимо использовать РегистрСведений.ЦеныНоменклатуры?
1 zippygrill
 
30.03.14
23:51
Поищи на форуме запрос на каждую дату. Ну или иди на сайте 1cskd.ru
2 Armando
 
31.03.14
00:08
3 Armando
 
31.03.14
00:10
И здесь
"ПО ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка"
ссылку надо еще раз несколько упомянуть... чтоб наверняка.
4 Redkiy
 
31.03.14
06:21
1. установи параметр &ДатаСреза в таблице первого соединения
2. второе соединение лишнее, используй ПоступлениеТоваровУслугТовары.Ссылка.МОЛ
5 Redkiy
 
31.03.14
06:22
и это ГДЕ ЦеныНоменклатурыСрезПоследних.ТипЦен... тоже в параметры виртуальной таблицы засунь
6 Рэйв
 
31.03.14
06:23
(3)+1
даже вот так будет надежнее:

ПО ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка.Ссылка.Ссылка.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка.Ссылка.Ссылка.Ссылка
7 catena
 
31.03.14
08:22
Не нужен тут срез последних на каждую дату, документ-то один. тут нужно просто срез ограничить.

РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НужнаяДата)
8 ivanovnm
 
31.03.14
09:05
(6) Четвертое ".Ссылка" лишнее, три работают достаточно надежно
9 ivanovnm
 
31.03.14
09:07
(7) Максимум(Период)
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних
ГДЕ Период <= &НужнаяДата
10 catena
 
31.03.14
09:28
(9)Ну тогда уж без среза последних. Хотя смысл, если есть специально обученная виртуальная таблица?
11 xXeNoNx
 
31.03.14
09:34
(0) кури параметры виртуальной таблицы "Срез последних", сейчас у тебя будет по всем периодам выборка идти и будет куча записей
12 ivanovnm
 
31.03.14
09:35
(10) Со срезом прикольнее
13 toys
 
31.03.14
09:38
(0) смысл в том чтобы получить самую максимальную запись по периоду из ЦенНоменклатуры, которая меньше даты документа...для этого делай соединение документа с регистром сведений "ЦеныНоменклатуры" в условие связи Док.Дата>ЦеныНом.Период, ЦеныНом.Период в суммируемые поля с функцией "Максимум", ЦеныНом.Цена в группируемые.
14 WildSery
 
31.03.14
09:43
(0) Убери "ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка", достаточно писать "ПоступлениеТоваровУслугТовары.Номенклатура", и в ценах тоже.

Перемести условие "ЦеныНоменклатурыСрезПоследних.ТипЦен.Код" из ГДЕ в условие соединения, иначе левое соединение становится внутренним.

Запрос.УстановитьПараметр("ДатаТекущегоДокумента", ЭтотОбъект.Дата);
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаТекущегоДокумента)