Имя: Пароль:
1C
1С v8
Получить среднюю цену продажи и цену последней покупки
0 John83
 
10.10.11
17:05
Если во вложенном запросе по закупкам поставить "ПЕРВЫЕ", то получим только одну закупочную цену, если убрать, то все поступления. Что-то подзабыл, как подобные задачки решаются...
Подсобите, плз
1 John83
 
10.10.11
17:05
ВЫБРАТЬ
   Продажи.Номенклатура,
   Продажи.СредЦена,
   Закупки.ЦенаЗакупки,
   Закупки.ДокументЗакупки
ИЗ
   (ВЫБРАТЬ
       ПродажиОбороты.Номенклатура КАК Номенклатура,
       СРЕДНЕЕ(ВЫБОР
               КОГДА ПродажиОбороты.КоличествоОборот = 0
                   ТОГДА 0
               ИНАЧЕ ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот
           КОНЕЦ) КАК СредЦена
   ИЗ
       РегистрНакопления.Продажи.Обороты(&Дата1, &Дата2, , ) КАК ПродажиОбороты
   
   СГРУППИРОВАТЬ ПО
       ПродажиОбороты.Номенклатура) КАК Продажи
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Закупки.Номенклатура КАК Номенклатура,
           Закупки.Количество КАК Количество,
           Закупки.Стоимость КАК Стоимость,
           МАКСИМУМ(Закупки.ДокументЗакупки) КАК ДокументЗакупки,
           ВЫБОР
               КОГДА Закупки.Количество = 0
                   ТОГДА 0
               ИНАЧЕ Закупки.Стоимость / Закупки.Количество
           КОНЕЦ КАК ЦенаЗакупки
       ИЗ
           РегистрНакопления.Закупки КАК Закупки
       ГДЕ
           Закупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
       
       СГРУППИРОВАТЬ ПО
           Закупки.Номенклатура,
           Закупки.Количество,
           Закупки.Стоимость,
           ВЫБОР
               КОГДА Закупки.Количество = 0
                   ТОГДА 0
               ИНАЧЕ Закупки.Стоимость / Закупки.Количество
           КОНЕЦ) КАК Закупки
       ПО Продажи.Номенклатура = Закупки.Номенклатура
2 Axel2009
 
10.10.11
17:06
нужно выбрать макс дату поступления для начала. а потом уже получить цену.
3 John83
 
10.10.11
17:06
PS сейчас не рассматриваются случаи, когда закупка позже даты конца периода - просто понять суть
4 shuhard
 
10.10.11
17:07
(2) угу
в подзапросе/ВТ дату и на неё связать,
если в одну секунду может быть несколько разных документов, то поставить среднюю по ним
5 John83
 
10.10.11
17:21
(2)(4) кажись вспомнил
сейчас бум пробовать
всем спасибо
6 John83
 
11.10.11
11:25
(4) хм... а если нужно получить еще и того же контрагента из этого документа?
7 John83
 
11.10.11
11:26
пока вот такой вариант

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

УПОРЯДОЧИТЬ ПО
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
8 John83
 
11.10.11
11:30
хотя можно просто использовать МАКСИМУМ/МИНИМУМ в первом вложенном запросе - выберет какой-нить наобум