Имя: Пароль:
1C
1С v8
1С 8. Запрос из регистра сведений по периодам с отбором по измерению
0 mishkerdon
 
03.11.15
09:19
Добрый день! Есть регистр сведений "Собственники помещения" с периодичностью "Месяц". Он состоит из измерения "Помещение" и ресурса "Собственник".
Нужно вытащить историю владения определенного помещения определенным собственником. Допустим, с 1 ноября 2014 по 31 декабря 2015 и с 1 апреля 2015 по 1 июля 2015 собственник1 владел помещением. Все это забито в регистре в виде записей:
1 - 01.11.2014 собственник1
2 - 01.01.2015 собственник2
3 - 01.04.2015 собственник1
4 - 01.07.2015 собственник3
Как вытащить историю владения собственником1 через запрос? (т.е. с датой начала и конца владения)
1 Горогуля
 
03.11.15
09:22
сначала выбрать, потом из, затем где
2 Molinor
 
03.11.15
09:25
За тебя предлагаешь сделать? Показывай что сделал, что не получается.
3 mishkerdon
 
03.11.15
09:38
(2) не предлагаю сделать, просто может кто-то сталкивался.
На данный момент вижу только возможность через код сначала вывести конец каждого месяца в указанном периоде, и на конец каждого месяца отдельный запрос запускать, затем результат запроса опять через код сгруппировать по непрерывным периодам.
Но чтобы все это в одном запросе, никак в голову не входит.
4 Ващета
 
03.11.15
09:43
Две таблицы со срезами можно соединить с условием период второй больше периода первой из первой вытаскивать начало пользования, из второй по группировке минимум вытаскивать окончание пользования
5 mishkerdon
 
03.11.15
09:50
(4) что-то не очень понял. Как это сделать, если несколько раз владел помещением?
6 Molinor
 
03.11.15
09:51
(5)
Вытаскиваешь все начала владения помещением нужным собственником, левым соединением цепляешь этот же РС, где период больше начала владения и сменился собственник. И находишь минимум, вот твоя дата окончания владения.
7 hhhh
 
03.11.15
10:21
(5) запрос разве бывает НЕ несколько? Всегда ведь несколько.
8 mishkerdon
 
03.11.15
11:03
(6) разве в этом случае не вернет несколько раз типа 01.11.2014-01.01.2015 и 01.11.2014-01.07.2015 и 01.04.2015-01.07.2015 ?
9 Molinor
 
03.11.15
11:13
(8)
До конца дочитай (6)
"И находишь минимум, вот твоя дата окончания владения."
10 mishkerdon
 
03.11.15
11:14
(9) спасибо большое! попробую написать запрос, если что отпишусь :)
11 mishkerdon
 
03.11.15
11:44
В общем ситуация такая, немножко дополню вышеуказанный совет - после группировки по началу владения и выборки минимального конца владения, нужно затем группировать по концу владения и выбрать минимальное начало владения.
Это делается для исключения двойных записей, когда в РС идут записи типа
1 - 01.01.2015 собственник1
2 - 01.04.2015 собственник1
3 - 01.07.2015 собственник2
12 Molinor
 
03.11.15
11:46
(11)
Ну почему нельзя полностью. то прочитать?
"левым соединением цепляешь этот же РС, где период больше начала владения и !!!сменился собственник!!!"
13 Molinor
 
03.11.15
11:47
(12)
Ошибся, немного не о том подумал.
14 MrKartez
 
03.11.15
12:04
Получаешь периоды владения собственника под номером один. Тащишь это фигню в отдельную вложенную таблицу. во втором пакетном запросе тащишь эту вт и вдовесок физическую таблицу регистра, соединяя по условию ВТ.Период <РегистрСведений.Период, при этом делаешь группировку Минимум (РЕГИСТРСВЕДЕНИЙ.ПИРЕИОД)ВТ.Период - это дата начала владения, Минимум - дата окончания владения, но так как минимум будет означать начала следующего владельца, для понта можешь отнять от даты одну секунду, чтобы вместо 01.11.2015, например, было окончания месяца 31.10.2015 23:59:59