Вычисление пересекающихся интервалов в линейных и замкнутых пространствах имен
Пусть есть две смены: одна с 20:00 до 8: 00, а вторая с 6:00 до 18:00. Пересекаются ли они? Ответ на данный конкретный вопрос вроде бы вполне очевиден, а вот сформулировать общее правило оказывается совсем не так просто.
В результате запрос, выбирающий смены, пересекающиеся с интервалом времени, заданными переменными @start и @end, выглядит вот так:
select * from tab
where (@start - start) * (start - @end) * (@start - @end) <= 0
or (@start - start) * (@start - end) * (start - end) >= 0;
Это запрос на языке SQL. Для языка запросов 1С время начала и окончания смен потребуется заранее перевести в числовой тип (например, секунды) или использовать встроенную функцию языка запросов "РАЗНОСТЬДАТ".
Данный прием основан на эмуляции логического выражения XOR арифметическим произведением с оценкой знака получившегося результата.
Автор: ildarovich
Определить элементарные интервалы, образующиеся при пересечении всех исходных интервалов
Определение суммарного покрытия перекрывающихся интервалов
Нахождение интервалов в запросе
ОбработчикиОбновленияВИнтервале (БСП)
Объединение непересекающихся интервалов в запросе