Вопрос Как в 1С получить срез данных на даты из другого множества, т.е. для каждого элемента множества получить значение, действующее на конкретную дату из другого множества.
Ответ Постановка задачи.
Итак, есть множество в виде таблицы «Срез»:
ДатаСреза | ОбъектСреза |
14.01.2010 | 1 |
06.01.2010 | 2 |
14.01.2010 | 3 |
… |
И есть множество в виде таблицы «Ресурсы»:
Дата | Объект | Ресурс |
01.01.2010 | 1 | 100 |
12.01.2010 | 1 | 120 |
23.01.2010 | 1 | 0 |
05.01.2010 | 2 | 20 |
08.01.2010 | 2 | 0 |
15.01.2010 | 2 | 80 |
25.01.2010 | 2 | 40 |
13.01.2010 | 3 | 50 |
17.01.2010 | 3 | 60 |
… |
Требуется определить значение «Ресурс» для каждого объекта «ОбъектСреза» на некую конкретную для этого объекта дату «ДатаСреза», т.е. получить результирующую таблицу:
МаксДата | ОбъектСреза | Ресурс |
12.01.2010 (т.е. на дату 14.01.2010) | 1 | 120 |
05.01.2010 (т.е. на 06.01.2010) | 2 | 20 |
13.01.2010 (т.е. на 14.01.2010) | 3 | 50 |
… |
Запрос, решающий эту задачу:
"ВЫБРАТЬ | МаксДаты.МаксДата, | МаксДаты.ОбъектСреза, | Ресурсы.Ресурс |ИЗ | (ВЫБРАТЬ | Срез.ОбъектСреза КАК ОбъектСреза, | МАКСИМУМ(Ресурсы.Дата) КАК МаксДата | ИЗ | РегистрСведений.Срез КАК Срез | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Ресурсы КАК Ресурсы | ПО Срез.ОбъектСреза = Ресурсы.Объект | И Срез.ДатаСреза >= Ресурсы.Дата | | СГРУППИРОВАТЬ ПО | Срез.ОбъектСреза) КАК МаксДаты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Ресурсы КАК Ресурсы | ПО МаксДаты.ОбъектСреза = Ресурсы.Объект | И МаксДаты.ДатаСреза = Ресурсы.Дата"
А каким образом получить таблицу «Срез»? Сама суть проблемы, чтобы получить ее в запросе необходим СрезПоследних, а как ему передать список нужных дат?
есть еще один вариант, попробуйте:
выбрать
Срез.ДатаСреза,
Срез.ОбъектСреза,
//Рес.Дата,
Рес.Ресурс
из
Срез
левое соединение Ресурсы Рес
по Срез.ОбъектСреза = Рес.Объект
и Срез.ДатаСреза >= Рес.Дата
левое соединение Ресурсы Рес1
по Срез.ОбъектСреза = Рес1.Объект
и Срез.ДатаСреза >= Рес1.Дата
и Рес.Дата < Рес1.Дата
где
Рес1.Дата Есть Null