Как в 1С получить срез данных на даты из другого множества, т.е. для каждого элемента множества получить значение, действующее на конкретную дату из другого множества (1С: Программисту: Язык запросов)

Вопрос Как в 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

Запрос, решающий эту задачу:

"ВЫБРАТЬ
|	МаксДаты.МаксДата,
|	МаксДаты.ОбъектСреза,
|	Ресурсы.Ресурс
|ИЗ
|	(ВЫБРАТЬ
|		Срез.ОбъектСреза КАК ОбъектСреза,
|		МАКСИМУМ(Ресурсы.Дата) КАК МаксДата
|	ИЗ
|		РегистрСведений.Срез КАК Срез
|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Ресурсы КАК Ресурсы
|			ПО Срез.ОбъектСреза = Ресурсы.Объект
|				И Срез.ДатаСреза >= Ресурсы.Дата
|	
|	СГРУППИРОВАТЬ ПО
|		Срез.ОбъектСреза) КАК МаксДаты
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Ресурсы КАК Ресурсы
|		ПО МаксДаты.ОбъектСреза = Ресурсы.Объект
|			И МаксДаты.ДатаСреза = Ресурсы.Дата"

2 thoughts on “Как в 1С получить срез данных на даты из другого множества, т.е. для каждого элемента множества получить значение, действующее на конкретную дату из другого множества (1С: Программисту: Язык запросов)

  1. А каким образом получить таблицу «Срез»? Сама суть проблемы, чтобы получить ее в запросе необходим СрезПоследних, а как ему передать список нужных дат?

  2. есть еще один вариант, попробуйте:

    выбрать
    Срез.ДатаСреза,
    Срез.ОбъектСреза,
    //Рес.Дата,
    Рес.Ресурс
    из
    Срез

    левое соединение Ресурсы Рес
    по Срез.ОбъектСреза = Рес.Объект
    и Срез.ДатаСреза >= Рес.Дата

    левое соединение Ресурсы Рес1
    по Срез.ОбъектСреза = Рес1.Объект
    и Срез.ДатаСреза >= Рес1.Дата
    и Рес.Дата < Рес1.Дата

    где
    Рес1.Дата Есть Null

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.