Вход | Регистрация


1С:Предприятие ::

Метки: 

Пересечение интервалов времени в запросе - выбрать разные интервалы

Я
   PCcomCat
 
12.04.17 - 14:16
Доброго времени, уважаемые!

Туплю. Подскажите, как следующее сделать?

Запрос:

ВЫБРАТЬ
    СменыПериодыСмены.Ссылка КАК Смена,
    СменыПериодыСмены.НомерСтроки КАК НомерСтрокиИнтервала,
    СменыПериодыСмены.ВремяНачала КАК ВремяНачалаИнтервала,
    СменыПериодыСмены.ВремяОкончания КАК ВремяОкончанияИнтервала
ПОМЕСТИТЬ ТаблицаИнтервалов
ИЗ
    Справочник.Смены.ПериодыСмены КАК СменыПериодыСмены
ГДЕ
    СменыПериодыСмены.Ссылка В(&СписокСмен)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаИнтервалов.Смена,
    ТаблицаИнтервалов.НомерСтрокиИнтервала,
    ТаблицаИнтервалов.ВремяНачалаИнтервала,
    ТаблицаИнтервалов.ВремяОкончанияИнтервала,
    ТаблицаИнтервалов1.Смена КАК СменаПересечения,
    ТаблицаИнтервалов1.НомерСтрокиИнтервала КАК НомерСтрокиИнтервалаПересечения,
    ТаблицаИнтервалов1.ВремяНачалаИнтервала КАК ВремяНачалаИнтервалаПересечения,
    ТаблицаИнтервалов1.ВремяОкончанияИнтервала КАК ВремяОкончанияИнтервалаПересечения
ИЗ
    ТаблицаИнтервалов КАК ТаблицаИнтервалов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаИнтервалов КАК ТаблицаИнтервалов1
        ПО (НЕ ТаблицаИнтервалов.Смена = ТаблицаИнтервалов1.Смена)
            И (ТаблицаИнтервалов.ВремяНачалаИнтервала МЕЖДУ ТаблицаИнтервалов1.ВремяНачалаИнтервала И ТаблицаИнтервалов1.ВремяОкончанияИнтервала
                ИЛИ ТаблицаИнтервалов.ВремяОкончанияИнтервала МЕЖДУ ТаблицаИнтервалов1.ВремяНачалаИнтервала И ТаблицаИнтервалов1.ВремяОкончанияИнтервала)

В результате получаю две строки:
Смена 1 пересекается со сменой 2 
Смена 2 пересекается со сменой 1

Нужно свернуть в одну. Как?
 
 
   PCcomCat
 
1 - 13.04.17 - 10:01
Подниму тему.

Я реализовала через группировку по интервалу пересечения. (Запрос немного другой.)
Но ... мне не нравится немного, т.к. есть опасения, что могут совпасть пересечения интервалов для нескольких смен.

Может, делал кто подобное? Поделитесь опытом.
   Лодырь
 
2 - 13.04.17 - 10:08
(1) Слушай, ну заменить еще одним запросом  пары 1-2 и 2-1 на 1-2, 1-2 и выбрать уникальные - думаю несложно Главное чтобы придумать порядок среди смен.
   PCcomCat
 
3 - 13.04.17 - 10:09
(2) Не уловлю... Можно подробнее?
   PCcomCat
 
4 - 13.04.17 - 10:10
+(3)Вернее, я понимаю, что как-то так. Но, блин, не сведу мысли в кучу...
   PCcomCat
 
5 - 13.04.17 - 10:11
Вот так получила нужный результат, но мне не нравится текст:
ВЫБРАТЬ
    СменыПериодыСмены.Ссылка КАК Смена,
    СменыПериодыСмены.НомерСтроки КАК НомерСтрокиИнтервала,
    СменыПериодыСмены.ВремяНачала КАК ВремяНачалаИнтервала,
    СменыПериодыСмены.ВремяОкончания КАК ВремяОкончанияИнтервала
ПОМЕСТИТЬ ТаблицаИнтервалов
ИЗ
    Справочник.Смены.ПериодыСмены КАК СменыПериодыСмены
ГДЕ
    СменыПериодыСмены.Ссылка В(&СписокСмен)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаИнтервалов.Смена,
    ТаблицаИнтервалов.НомерСтрокиИнтервала,
    ТаблицаИнтервалов.ВремяНачалаИнтервала,
    ТаблицаИнтервалов.ВремяОкончанияИнтервала,
    ТаблицаИнтервалов1.Смена КАК СменаПересечения,
    ТаблицаИнтервалов1.ВремяНачалаИнтервала КАК ВремяНачалаИнтервала1,
    ТаблицаИнтервалов1.ВремяОкончанияИнтервала КАК ВремяОкончанияИнтервала1,
    ТаблицаИнтервалов1.НомерСтрокиИнтервала КАК НомерСтрокиИнтервалаПересечения,
    ВЫБОР
        КОГДА ТаблицаИнтервалов.ВремяНачалаИнтервала > ТаблицаИнтервалов1.ВремяНачалаИнтервала
            ТОГДА ТаблицаИнтервалов.ВремяНачалаИнтервала
        ИНАЧЕ ТаблицаИнтервалов1.ВремяНачалаИнтервала
    КОНЕЦ КАК ВремяНачалаИнтервалаПересечения,
    ВЫБОР
        КОГДА ТаблицаИнтервалов.ВремяОкончанияИнтервала < ТаблицаИнтервалов1.ВремяОкончанияИнтервала
            ТОГДА ТаблицаИнтервалов.ВремяОкончанияИнтервала
        ИНАЧЕ ТаблицаИнтервалов1.ВремяОкончанияИнтервала
    КОНЕЦ КАК ВремяОкончанияИнтервалаПересечения
ПОМЕСТИТЬ ТаблицаПересечений
ИЗ
    ТаблицаИнтервалов КАК ТаблицаИнтервалов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаИнтервалов КАК ТаблицаИнтервалов1
        ПО (НЕ ТаблицаИнтервалов.Смена = ТаблицаИнтервалов1.Смена)
            И (ТаблицаИнтервалов.ВремяНачалаИнтервала МЕЖДУ ТаблицаИнтервалов1.ВремяНачалаИнтервала И ТаблицаИнтервалов1.ВремяОкончанияИнтервала
                ИЛИ ТаблицаИнтервалов.ВремяОкончанияИнтервала МЕЖДУ ТаблицаИнтервалов1.ВремяНачалаИнтервала И ТаблицаИнтервалов1.ВремяОкончанияИнтервала)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    МИНИМУМ(ТаблицаПересечений.НомерСтрокиИнтервала) КАК НомерСтрокиИнтервала,
    МАКСИМУМ(ТаблицаПересечений.НомерСтрокиИнтервалаПересечения) КАК НомерСтрокиИнтервалаПересечения,
    ТаблицаПересечений.ВремяНачалаИнтервалаПересечения,
    ТаблицаПересечений.ВремяОкончанияИнтервалаПересечения
ПОМЕСТИТЬ РазличныеПересечения
ИЗ
    ТаблицаПересечений КАК ТаблицаПересечений

СГРУППИРОВАТЬ ПО
    ТаблицаПересечений.ВремяНачалаИнтервалаПересечения,
    ТаблицаПересечений.ВремяОкончанияИнтервалаПересечения
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаПересечений.Смена,
    ТаблицаПересечений.НомерСтрокиИнтервала,
    ТаблицаПересечений.ВремяНачалаИнтервала КАК ВремяНачалаИнтервала,
    ТаблицаПересечений.ВремяОкончанияИнтервала КАК ВремяОкончанияИнтервала,
    ТаблицаПересечений.СменаПересечения,
    ТаблицаПересечений.ВремяНачалаИнтервала1,
    ТаблицаПересечений.ВремяОкончанияИнтервала1,
    ТаблицаПересечений.НомерСтрокиИнтервалаПересечения,
    ТаблицаПересечений.ВремяНачалаИнтервалаПересечения,
    ТаблицаПересечений.ВремяОкончанияИнтервалаПересечения
ИЗ
    РазличныеПересечения КАК РазличныеПересечения
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаПересечений КАК ТаблицаПересечений
        ПО РазличныеПересечения.НомерСтрокиИнтервала = ТаблицаПересечений.НомерСтрокиИнтервала
            И РазличныеПересечения.НомерСтрокиИнтервалаПересечения = ТаблицаПересечений.НомерСтрокиИнтервалаПересечения
            И РазличныеПересечения.ВремяНачалаИнтервалаПересечения = ТаблицаПересечений.ВремяНачалаИнтервалаПересечения
            И РазличныеПересечения.ВремяОкончанияИнтервалаПересечения = ТаблицаПересечений.ВремяОкончанияИнтервалаПересечения

УПОРЯДОЧИТЬ ПО
    ВремяНачалаИнтервала,
    ВремяОкончанияИнтервала
   PCcomCat
 
6 - 13.04.17 - 10:12
Как вставлять текст в форуме, чтобы он весь сворачивался в группировку?
   Naf2017
 
7 - 13.04.17 - 10:14
но могут же и 3 и 4 смены "смыкаться" в один интервал?
   PCcomCat
 
8 - 13.04.17 - 10:16
(7)Нужно исключить наложение.
   Naf2017
 
9 - 13.04.17 - 10:18
например, на числах:
(1,5)
(2,7)
(3,8)
(4,10)

должно превратиться в (1,10) так?
   PCcomCat
 
10 - 13.04.17 - 10:20
В качестве эксперимента использую интервалы, чтобы впоймать пересечения:
Смена 1: 08:00 - 10:00
         10:15 - 12:00
         13:00 - 15:00
         15:15 - 18:00

Смена 2: 16:00 - 19:15
         19:30 - 21:15
         22:15 - 00:15
         00:30 - 02:15
         02:30 - 10:10
 
  Рекламное место пустует
   PCcomCat
 
11 - 13.04.17 - 10:21
Пересечения Смены1 и Смены 2 в интервале: 08:00 - 10:00
                                          16:00 - 18:00
   Вафель
 
12 - 13.04.17 - 10:21
нужно просто найти пересечения и все?
   Лодырь
 
13 - 13.04.17 - 10:21
Что должно быть на выходе в твоем тестовом примере?
   Вафель
 
14 - 13.04.17 - 10:22
Начало1 < Окончание2 И Начало2 < Окончание1
   Naf2017
 
15 - 13.04.17 - 10:28
(11) смен всего две?
   PCcomCat
 
16 - 13.04.17 - 10:31
(15)Я не могу спрогнозировать, сколько их будет. Может две а может и три. А могут переназначить, а там кривые интервалы. Нужно предупредить ситуации.
   PCcomCat
 
17 - 13.04.17 - 10:34
(14) ))) Получаю туже фигню:

Смена 2 интервал 5 - Смена 1 интервал 1 - пересечение 08:00 - 10:00
Смена 1 интервал 1 - Смена 2 интервал 5 - пересечение 08:00 - 10:00

Смена 2 интервал 1 - Смена 1 интервал 4 - пересечение 16:00 - 18:00
Смена 1 интервал 4 - Смена 2 интервал 1 - пересечение 16:00 - 18:00
   PCcomCat
 
18 - 13.04.17 - 10:35
Программно, конечно, выберу уникальные. Но хотелось запросом получить...
   Naf2017
 
19 - 13.04.17 - 10:37
1. запрос в (0) поместить в временную таблицу
2. далее ее же и вывести, но

ВЫБРАТЬ РАЗЛИЧНЫЕ

и

ВЫБОР КОГДА Смена.Наименование>СменаПересечения.Наименование 
ТОГДА СменаПересечения
ИНАЧЕ Смена
КОНЕЦ КАК Смена

и

ВЫБОР КОГДА Смена.Наименование>СменаПересечения.Наименование 
ТОГДА Смена
ИНАЧЕ СменаПересечения
КОНЕЦ КАК СменаПересечения
   PCcomCat
 
20 - 13.04.17 - 10:40
(19) Не то что-то написал.
   PCcomCat
 
21 - 13.04.17 - 10:59
Ладно, обработаю программно. Спасибо всем!



Список тем форума
Рекламное место пустует   Рекламное место пустует
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует