Сам запрос: ТекстЗапроса = " |SELECT | Спр.ID AS [Номенклатура $Справочник.Номенклатура], | Запрос.Остаток AS Остаток, | Запрос.ЦенаПост/Запрос.Остаток AS ЦенаПост, | ЗапросЦены.Цена AS ЦенаРеал, | 0 AS [Фильтр $Число], | 0 AS [Свернуть $Число] |FROM | $Справочник.Номенклатура AS Спр //запрос к остаткам | LEFT JOIN | ( | SELECT | $Рег.Номенклатура AS Спр, | SUM($Рег.ЦенаПост*$Рег.Количество) AS ЦенаПост, | SUM($Рег.Количество) AS Остаток | FROM | $РегистрИтоги.Остатки AS Рег | WHERE | (Рег.Period = :ДатаТА~~)"; Если ПустоеЗначение(фВыбФирма) = 0 Тогда ТекстЗапроса = ТекстЗапроса + " |AND | $Рег.Фирма = :ВыбФирма"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " | GROUP BY | Спр | ) AS Запрос ON Спр.ID = Запрос.Спр //запрос к ценам | LEFT JOIN | ( | SELECT | СпрН.ID AS СпрН, | Цены.Цена AS Цена | FROM | $Справочник.Номенклатура AS СпрН | LEFT JOIN | $Справочник.Цены СпрЦ ON (СпрЦ.ParentExt = СпрН.ID) | AND | ($СпрЦ.ТипЦен = :ТипЦен) | LEFT JOIN | ( | SELECT | Период.objid as objid, | Период.value as Цена | FROM 1sconst as Период | WHERE | Период.date IN | ( | SELECT | MAX(Константа.date) | FROM 1sconst as Константа | WHERE | (Константа.date <= :ВыбДата~~) | AND | (Константа.id = $ИсторияРеквизита.Цены.Цена) | AND | (Константа.objid = Период.objid) | ) | AND Период.id = $ИсторияРеквизита.Цены.Цена | ) AS Цены ON Цены.objid = СпрЦ.ID | ) AS ЗапросЦены ON Спр.ID = ЗапросЦены.СпрН | |WHERE | Спр.ParentID = :Группа | AND | Спр.IsFolder = 2"; Запрос.УстановитьТекстовыйПараметр ("Группа", лГруппа); Запрос.УстановитьТекстовыйПараметр("ДатаТА", НачМесяца(ПолучитьДатуТА())); Запрос.УстановитьТекстовыйПараметр("ВыбДата", ТекущаяДата()); Запрос.УстановитьТекстовыйПараметр("ТипЦен", Константа.РозничнаяЦена); Запрос.УстановитьТекстовыйПараметр("ВыбФирма", фВыбФирма);
Теперь по ошибкам:
1. При выполнении запроса для различных групп товара, поле ЦенаПост для одной из групп товара для всех элементов содержит пустое значение, даже там где есть остатки. Для всех остальных групп показывает все верно.
2. В результате выполнения выдается номенклатура со всеми изменениями ЦенаРеал в пределах текущего месяца, т.е. если было 2 поступления в текущем месяце для данного товара, то получается две строки с одинаковой номенклатурой (цена устанавливается документами), чего нам не нужно, а нужна только последняя цена. Пробовал запрос к ценам выполнять отдельно, работает также, как и тут, выдает лишние строки. По-моему функция MAX должна была выбрать только одно значение...
Где копать - не знаю, так как в запросах не силен то все что нужно в основном скопировал откуда-то и дорабатывал для своих нужд, может ошибка на поверхности, подскажите пожалуйста!
|