Заранее извиняюсь за длинный текст
Задача в общем-то и не очень сложная: получить таблицу вида Номенклатура, Цена по выбранной фирме на определенную дату
Цена хранится двояко:
1. В "регистре сведений" - регистре без ресурсов с измерениями Фирма, Номенклатура, Цена, ...
2. Непосредственно в спр-ке Номенклатура, реквизит Себестоимость
Вот что получилось
Два вопроса:
1. Как сделать просто и гениально? (особенно смущает узнавание последнего документа установки цен за день, ну и так, у целом)
2. Как получить одну колонку вместо двух? (надо брать не максимальную цену, а по такому принципу: если в регистре цена есть - брать ее, если нет - себестоимость)
ТекстЗапроса = "
|SELECT Запрос.Ном as [Номенклатура $Справочник.Номенклатура]
|, MAX(Запрос.Цена) as ЦенаРег
|, MAX(Запрос.Себ) as ЦенаСпр
|FROM (
|
|SELECT Номенклатура.ID as Ном
|, 0 as Цена
|, $Номенклатура.Себестоимость as Себ
|FROM $Справочник.Номенклатура AS Номенклатура
| WHERE (" + УсловиеВхождения("Номенклатура", "ID", 1, ":СписокТМЦ") + ")
|
|UNION ALL
|
|SELECT $Цены.Номенклатура as Ном
|, $Цены.Цена as Цена
|, 0 as Себ
|FROM $Регистр.Цены AS Цены
|INNER JOIN 1SJOURN AS Журнал ON Цены.IDDOC = Журнал.IDDOC
|WHERE ($Цены.Фирма = :ВыбФирма)
|AND (Журнал.DATE <= :ВыбДата~~)
|AND
|(Журнал.IDDOC in
|(
|Select max(Журнал1.IDDOC)
|from 1SJOURN AS Журнал1
|INNER JOIN $Регистр.Цены AS Цены1 ON Цены1.IDDOC = Журнал1.IDDOC
|WHERE ($Цены.Номенклатура = $Цены1.Номенклатура)
|AND (Журнал1.DATE <= :ВыбДата~~)
|AND ($Цены1.Фирма = $Цены.Фирма)
|)
|)
| AND (" + УсловиеВхождения("$Цены", "Номенклатура", 1, ":СписокТМЦ") + ")
|) as Запрос
|GROUP BY
| Запрос.Ном;
|";