Имя: Пароль:
1C
1С v8
Помогите с запросом
0 ver1863
 
02.11.11
16:10
Есть Регистр сведений с двумя измерениями ДатаНачала и ДатаОкончания.  Можно ли запросом получить только те строки, в которых есть пересекающиеся по времени периоды? Подскажите, пожалуйста.
1 izekia
 
02.11.11
16:11
пересекающиеся с чем?
2 izekia
 
02.11.11
16:12
3 Evpatiy
 
02.11.11
16:13
(0) На работу устраиваешься туда где ТС из (2) тестовые задания писал?
4 ver1863
 
02.11.11
16:18
Вообще задача такая. В  документе проводятся заказы на услуги которые имеют длительность. В один момент времени может быть оказана только одна услуга. Нужно это контролировать.
5 unregistered
 
02.11.11
16:19
(0) >> Можно ли...?

- Да
Какие еще есть измерения в регистре?
6 ver1863
 
02.11.11
16:20
Больше нет
7 izekia
 
02.11.11
16:20
что-то на регистры расчетов похоже
8 izekia
 
02.11.11
16:21
сверяешь дату начала с о всеми датами конца, и там наоборот соответственно
9 izekia
 
02.11.11
16:24
типа
выбрать * из регистр где датаконца > &датаначала И датаконца < &датаконца ИЛИ датаначала > &датаначала И датаначала < &датаконца
10 izekia
 
02.11.11
16:25
короче (8) не надо читать, а надо читать (9)
11 ver1863
 
02.11.11
16:25
Спасибо, попробую.
12 izekia
 
02.11.11
16:26
короче все что нужно, это проверить вхождение даты начала или даты окончания в заданный период
если многострочное, то джойни по этому условию
13 МихаилМ
 
02.11.11
16:26
если нет доп измерений - то неправильно спроектирован регистр.

сответственно фул скан и роспись в профнепригодности.
14 ver1863
 
02.11.11
16:29
Можно добавить в качестве третьего измерения Номенклатуру услуги
15 hhhh
 
02.11.11
16:35
процедурный кабинет ваяете?
16 Axel2009
 
02.11.11
16:38
(13) да ладна? если строго по условиям задачи то
ВЫБРАТЬ ДатаНач, ДатаКон ИЗ Таб КАК Таб1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб КАК Таб2 ПО Таб1.ДатаНач < Таб2.ДатаНач И Таб1.ДатаКон > Таб2.ДатаНач
ОБЪЕДИНИТЬ
ВЫБРАТЬ ДатаНач, ДатаКон ИЗ Таб КАК Таб1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб КАК Таб2 ПО Таб1.ДатаНач < Таб2.ДатаКон И Таб1.ДатаКон > Таб2.ДатаКон
17 izekia
 
02.11.11
16:41
(16) ты мне скажи, чем тебя или не устроило и получается, что два одинаковых интервала у тебя будут представлены одной строкой?
18 izekia
 
02.11.11
16:42
два одинаковых внутренних*
19 ver1863
 
02.11.11
21:31
Вроде разобрался,  работает в таком варианте:
ВЫБРАТЬ
   ДатаНачала,
   ДатаОкончания
ИЗ
   Таб КАК Таб 1
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб КАК Таб 2
       ПО ((НЕ(Таб 1.ДатаНачала = Таб 2.ДатаНачала
                   И Таб 1.ДатаОкончания = Таб 2.ДатаОкончания)))
           И ((НЕ(Таб 1.ДатаОкончания < Таб 2.ДатаНачала
                   ИЛИ Таб 2.ДатаОкончания < Таб 1.ДатаНачала)))
20 Axel2009
 
02.11.11
22:28
(17) ниче не понял что хотел сказать =)
(19) 4 неравенства не могут быть преобразованы в 2.. гдето взлетит лишнее
21 МишельЛагранж
 
03.11.11
03:19
а условие "в лоб"
ПО (Таб1.ДатаНачала МЕЖДУ Таб2.ДатаНачала И Таб2.ДатаОкончания
И НЕ Таб1.ДатаНачала <> Таб2.ДатаОкончания)
ИЛИ (Таб1.ДатаОкончания МЕЖДУ Таб2.ДатаНачала И Таб2.ДатаОкончания
И НЕ Таб1.ДатаОкончания <> Таб2.ДатаНачала))
ИЛИ (Таб1.ДатаНачала = Таб2.ДатаНачала И Таб1.ДатаОкончания = Таб2.ДатаОкончания)
для соединения не подходит?
(20) - (19) на самом деле правильно, ведь неравенств будет больше - сравнение по датам окончания автоматом влечет за собой сравнение по датам начала этих же интервалов - ведь дата начала заведомо меньше даты окончания, а это и дает еще два недостающих неравенства (т.е. если Таб1.ДатаОкончания < Таб2.ДатаНачала, то и автоматически Таб1.ДатаНачала < Таб2.ДатаНачала).
(20) - (17) он сказал, что могут быть два идентичных по времени интервала, но одновременно это совершенно разные варианты, представленные разными строками.
Автор, для включения идентичных интервалов оставь проверку на равенство, но различай их между собой еще по какому-то третьму признаку (например, коды строк будут разные).
(19) необходимо еще решить, куда попадают интервалы, у которых ДатаОкончания и ДатаНачала совпадают:
Таб1.ДатаОкончания = Таб2.ДатаНачала ?
Таб2.ДатаОкончания = Таб1.ДатаНачала ?
и дополнить условие на равенство:
И ((НЕ(Таб 1.ДатаОкончания <= Таб 2.ДатаНачала
                   ИЛИ Таб 2.ДатаОкончания <= Таб 1.ДатаНачала)))
т.к. сейчас интервалы "Таб1 1янв 2янв" и "Таб2 2янв 3янв" попадут в отбор как пересекающиеся.

Вот список всех интервалов для проверки:
пересекающиеся:
Ист  Н    К
Таб1 1янв 3янв
Таб2 2янв 4янв

Таб1 1янв 3янв
Таб2 1янв 4янв

Таб1 2янв 4янв
Таб2 1янв 3янв

Таб1 1янв 4янв
Таб2 2янв 4янв

Таб1 1янв 3янв Сидоров
Таб2 1янв 3янв Петров

непересекающиеся:
Ист  Н    К
Таб1 1янв 2янв
Таб2 3янв 4янв

Таб1 1янв 2янв
Таб2 2янв 4янв

Таб1 4янв 5янв
Таб2 3янв 4янв

Таб1 4янв 5янв
Таб2 2янв 3янв
22 izekia
 
03.11.11
09:55
(20) это пля у тебя не попадет нужное
23 Axel2009
 
03.11.11
10:15
(22) нервничаешь то чего?
24 izekia
 
03.11.11
10:16
(23) да кули утро пятница, все мысли о другом уже
25 izekia
 
03.11.11
10:17
(23) а тут еще и работать не дают
26 ver1863
 
03.11.11
11:03
(21)Спасибо за подробный ответ.
27 МишельЛагранж
 
03.11.11
11:09
пожалуйста ))
до (19) сам додумался? )
28 ver1863
 
03.11.11
11:16
Да
29 МишельЛагранж
 
03.11.11
11:53
это ж хорошо )