Имя: Пароль:
1C
1С v8
Срез последних на дату регистратора в запросе
0 luckymarina
 
13.08.11
14:27
нужно вывести движения товаров по еще одному показателю СтоимостьПрод, который рассчитывается как СтоимостьОборот*Курс (на дату регистратора, что хранится в регистре сведений)    
Если так написать, то СтоимостьПрод вообще не выдается (урывок кода)
|(ВЫБРАТЬ
   |ПродажиОбороты.Мк КАК Мк,
   |ПродажиОбороты.Номенклатура КАК Номенклатура,
   |ПродажиОбороты.Регистратор КАК Регистратор,
   |ПродажиОбороты.Период КАК Период,
   |ПродажиОбороты.СтоимостьОборот*ТаблицаРегистраПродажи.Курс/100  КАК СтоимостьПрод,
   |ПродажиОбороты.СтоимостьОборот КАК Стоимость
   |ИЗ
   |            РегистрНакопления.ПродажиТТ.Обороты(&ДатаНач, &ДатаКон, Регистратор, { Мк.* КАК Мк, Номенклатура.* КАК Номенклатура}) КАК ПродажиОбороты
   |ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |МАКСИМУМ(КурсыМк.Курс) КАК Курс,
   |МАКСИМУМ(КурсыМк.Период) КАК Период,  
   |КурсыМк.Мк КАК Мк
   |ИЗ
   |РегистрСведений.КурсыМк КАК КурсыМк
   |ГДЕ
   |    КурсыМк.Период МЕЖДУ &ДатаНачала И &ДатаКонца
   |    {ГДЕ
   |    КурсыМк.Курс.* КАК Курс,
   |        КурсыМк.Мк.* КАК Мк}
           
   |    СГРУППИРОВАТЬ ПО
   |    КурсыМк.Мк) КАК ТаблицаРегистраПродажи
   |ПО ТаблицаРегистраПродажи.Мк = ПродажиОбороты.Мк
   |И ТаблицаРегистраПродажи.Период = ПродажиОбороты.период ) КАК ВложенныйЗапрос  
если так, то курс берется последний, а не на дату
|(ВЫБРАТЬ
   |ПродажиОбороты.Мк КАК Мк,
   |ПродажиОбороты.Номенклатура КАК Номенклатура,
   |ПродажиОбороты.Регистратор КАК Регистратор,
   |ПродажиОбороты.Период КАК Период,
   |ПродажиОбороты.СтоимостьОборот*ТаблицаРегистраПродажи.Курс/100  КАК СтоимостьПрод,
   |ПродажиОбороты.СтоимостьОборот КАК Стоимость
   |ИЗ
   |            РегистрНакопления.ПродажиТТ.Обороты(&ДатаНач, &ДатаКон, Регистратор, { Мк.* КАК Мк, Номенклатура.* КАК Номенклатура}) КАК ПродажиОбороты
   |ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |МАКСИМУМ(КурсыМк.Курс) КАК Курс,
   |КурсыМк.Мк КАК Мк
   |ИЗ
   |РегистрСведений.КурсыМк КАК КурсыМк
   |ГДЕ
   |    КурсыМк.Период МЕЖДУ &ДатаНачала И &ДатаКонца
   |    {ГДЕ
   |    КурсыМк.Курс.* КАК Курс,
   |        КурсыМк.Мк.* КАК Мк}
           
   |    СГРУППИРОВАТЬ ПО
   |    КурсыМк.Мк) КАК ТаблицаРегистраПродажи
   |ПО ТаблицаРегистраПродажи.Мк = ПродажиОбороты.Мк) КАК ВложенныйЗапрос  
Смотрела здесь Книга знаний: Срез последних на каждую дату в запросе, но никак не могу под себя сформировать. Помогите разобраться!
1 luckymarina
 
13.08.11
14:29
за основу отчета брала отчет ВаловаяПрибыль (Управление торговлей для Украины)
2 Шурик71
 
13.08.11
14:39
Мне долго объяснять некогда, но попробую передать смысл.

Есть регистраторы, у них есть дата. Итого имеем таблицу с датами регистраторов.
Есть таблица записей рег.св. курсов. Каждый курс НАЧИНАЕТ действовать с даты указанной в этой таблице даты, и действует все следующие даты, пока не будет новой записи в регистре.

Значит, к регистраторам сначала надо присоединять таблицу рег. сведений, находя максимальную ДАТУ (а не курс!), не большую даты регистратора.

А вот найдя эту самую макс. дату - можно еще раз присоединять рег. сведений по этой макс. дате и получать нужный курс.

Все, дальше сама.
3 luckymarina
 
13.08.11
16:20
Спасибо, получилось!