Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Запрос. Временная таблица. Сделать "срез последних без среза последних"

Запрос. Временная таблица. Сделать "срез последних без среза последних"
Я
   ErrorEd88
 
15.01.13 - 12:23
Из регистра сведений ЦеныНоменклатуры пытаюсь выбрать одну "крайнюю" запись за период (срез последних не применяю не просто так).
Упорядочить запрос по дате с убыванием и выбрать первую запись во временной таблице нельзя.
Как оптимальней решить проблему?
Набросал вот это, но сомневаюсь, что работает как нужно:

ВЫБРАТЬ
    ЦеныНоменклатуры.Период КАК Период,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.ТипЦен,
    ЦеныНоменклатуры.Валюта КАК Валюта,
    ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
    ЦеныНоменклатуры.Период <= &Период
    И ЦеныНоменклатуры.ТипЦен = &ТипЦен
;

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

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

ИМЕЮЩИЕ
    ЦеныНоменклатуры.Период = МАКСИМУМ(ВТ.Период)
 
 
   mikecool
 
1 - 15.01.13 - 12:25
"Упорядочить запрос по дате с убыванием и выбрать первую запись во временной таблице нельзя. " а если в подзапросе?
   х86
 
2 - 15.01.13 - 12:28
делай по аналогии срез последних на дату
   DrShad
 
3 - 15.01.13 - 12:32
[(срез последних не применяю не просто так). ] а подробней
   Reset
 
4 - 15.01.13 - 12:36
(0) Запрос не смотрел, но срез последних это просто Поля,максимум(период) из РС
Сгруппировать(список выбираемых полей кроме периода) 
где (условия отбора)
   Reset
 
5 - 15.01.13 - 12:56
Вот вариант по мотивам (0)
ВЫБРАТЬ
    МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.ТипЦен,
    ЦеныНоменклатуры.Валюта КАК Валюта
    Поместить СрезПоследнихИзмерений
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
    ЦеныНоменклатуры.Период <= &Период
    И ЦеныНоменклатуры.ТипЦен = &ТипЦен

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

   ErrorEd88
 
6 - 15.01.13 - 17:33
Всем спасибо за ранние ответы.
Мозги кипят, не могу понять в чем ошибка, кому не лень:
    
КОНЕЦПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК КонецМесяца
ПОМЕСТИТЬ Календарь
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
;

 ////////////////////////////////////////////////////////////////////////////////
 
ВЫБРАТЬ
   УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ДоговорКонтрагента,
    УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Номенклатура,
    УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Цена КАК ЦенаПоДоговору,
    УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ВалютаЦены КАК ВалютаПрайсаПоДоговору,
    Календарь.КонецМесяца,
    МАКСИМУМ(УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Период) КАК Период
ПОМЕСТИТЬ Условия
ИЗ
    РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре КАК УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре,
    Календарь КАК Календарь
ГДЕ
    УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Период <= Календарь.КонецМесяца

СГРУППИРОВАТЬ ПО
    УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ВалютаЦены,
    УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ДоговорКонтрагента,
    УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Номенклатура,
    Календарь.КонецМесяца,
    УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Цена
;

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

СГРУППИРОВАТЬ ПО
    Календарь.КонецМесяца,
    ЦеныНоменклатуры.Валюта,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.Цена,
    ЦеныНоменклатуры.ТипЦен
;

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

 ////////////////////////////////////////////////////////////////////////////////
 
ВЫБРАТЬ
    ВЫБОР
        КОГДА НЕ Условия.ВалютаПрайсаПоДоговору ЕСТЬ NULL 
                И НЕ Условия.ЦенаПоДоговору = 0
            ТОГДА "Прайс по договору"
        КОГДА НЕ ЦеныНом.ВалютаПрайсаПоПредприятию ЕСТЬ NULL 
            ТОГДА "Прайс по предприятию"
        ИНАЧЕ "Прайс не задан"
    КОНЕЦ КАК СпособУказанияПрайса,
    Продажи.КонецМесяца КАК КонецМесяца,
    Продажи.Организация,
    Продажи.Контрагент,
    Продажи.ДоговорКонтрагента,
    Продажи.ВалютаДоговора,
   Продажи.АртикулНоменклатура,
    Продажи.Номенклатура,
    Продажи.КоличествоОборот КАК КоличествоОборот,
    Условия.ВалютаПрайсаПоДоговору,
    Условия.ЦенаПоДоговору КАК ЦенаПоДоговору,
    ЦеныНом.ЦенаПоПредприятию КАК ЦенаПоПредприятию,
    ЦеныНом.ВалютаПрайсаПоПредприятию,
    Продажи.СтоимостьОборот КАК СтоимостьОборот
ИЗ
    Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ Условия КАК Условия
        ПО Продажи.ДоговорКонтрагента = Условия.ДоговорКонтрагента
            И Продажи.Номенклатура = Условия.Номенклатура
            И Продажи.КонецМесяца = Условия.КонецМесяца
        ЛЕВОЕ СОЕДИНЕНИЕ ЦеныНом КАК ЦеныНом
        ПО Продажи.Номенклатура = ЦеныНом.Номенклатура
            И Продажи.КонецМесяца = ЦеныНом.КонецМесяца
ИТОГИ
    СУММА(КоличествоОборот),
    СУММА(ЦенаПоДоговору),
    СУММА(ЦенаПоПредприятию),
    СУММА(СтоимостьОборот)
ПО
    ОБЩИЕ,
    СпособУказанияПрайса,
   КонецМесяца

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует