Имя: Пароль:
1C
1С v8
Помогите с запросом.
0 Viktosha
 
19.10.12
13:29
Не могу сообразить(видимо сказывается пятница), как сделать выборку с регистра сведений с периодом и к нему левым соеднинием тоже регистр сведений со срезом последних, но дата среза должна быть меньше даты периода первого регистра, т.е. например, цены номенклатуры контрагентов зарегистрированы на даты: 100 рубл на 01.01.2012, 200 рублей на 01.03.2012 и 300 рублей на 01.06.2012 и есть второй регистр цен, они зарегистрированы на 01.01.2012 150 р и на 05.04.2012 220 р
Должно вывестить:
01.01.2012 | 100 р | 150 р
01.03.2012 | 200 р | 150 р
01.06.2012 | 300 р | 220 р

Пример запроса, где просто вторая цена вытаскивается самая последняя, а надо на период
ВЫБРАТЬ
   ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
   ЦеныНоменклатуры.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ЦеныНоменклатуры.ТипЦен.Владелец КАК Контрагент,
   ЦеныНоменклатуры.ТипЦен.ТипЦеныНоменклатуры КАК ТипЦен,
   КОНЕЦПЕРИОДА(ЦеныНоменклатуры.Период, ДЕНЬ) КАК ПериодЦен,
   ВЫБОР
       КОГДА ЦеныНоменклатуры.ЕдиницаИзмерения = &ПустаяЕдиницаИзмерения
           ТОГДА ЦеныНоменклатуры.Цена * КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность / &КурсВалютыОтчета
       ИНАЧЕ ЦеныНоменклатуры.Цена * КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность / ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент / &КурсВалютыОтчета
   КОНЕЦ КАК Цена,
   ВЫБОР
       КОГДА ЕСТЬNULL(РублевыеЦеныКомпании.РублеваяЦена, 0) <> 0
           ТОГДА ВЫБОР
                   КОГДА ЦеныНоменклатуры.ЕдиницаИзмерения = &ПустаяЕдиницаИзмерения
                       ТОГДА 100 * (-РублевыеЦеныКомпании.РублеваяЦена + ЦеныНоменклатуры.Цена * КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность / &КурсВалютыОтчета) / РублевыеЦеныКомпании.РублеваяЦена
                   ИНАЧЕ 100 * (-РублевыеЦеныКомпании.РублеваяЦена + ЦеныНоменклатуры.Цена * КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность / &КурсВалютыОтчета / ЦеныНоменклатуры.ЕдиницаИзмерения.Коэффициент) / РублевыеЦеныКомпании.РублеваяЦена
               КОНЕЦ
       ИНАЧЕ 0
   КОНЕЦ КАК ПроцентОтклоненияОтЦеныКомпании,
   ЕСТЬNULL(РублевыеЦеныКомпании.РублеваяЦена, 0) КАК РублеваяЦена

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



ИТОГИ
   СРЕДНЕЕ(Цена),
   СРЕДНЕЕ(ПроцентОтклоненияОтЦеныКомпании),
   СРЕДНЕЕ(РублеваяЦена)
ПО
   ОБЩИЕ

По сути - это анализ цен поставщиков на каждую поставку
1 Error pro
 
19.10.12
13:31
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший