Добрый день! Есть время начала и окончания работы сотрудника. Необходимо проверить, входит ли это время в промежуток времени смены.
Пример:
1) Сотрудник Иван пришел в 07:00, ушел в 16:00
Время смены 6:00-15:00.
Результат: Входит - 8 часов.
2) Сотрудник Иван пришел в 00:00, ушел в 6:00
Время смены 16:00-18:00.
Учитываю разные варианты, но при применении все равно ничего не выходит.
---
Не все периоды отрабатывает. Вот итоговый вариант, который у меня получился. Отрабатывает со всеми периодами.

```1c
    ВЫБОР
    КОГДА (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудНачалоСекунда) * (ВТРаботаСоВременем.СкудНачалоСекунда - ВТРаботаСоВременем.СменаОкончанияСекунда) * (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СменаОкончанияСекунда) <= 0
    ИЛИ (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудНачалоСекунда) * (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудОкончанияСекунда) * (ВТРаботаСоВременем.СкудНачалоСекунда - ВТРаботаСоВременем.СкудОкончанияСекунда) >= 0
    ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ
```
---
часы с часами не получается сравнить или что?
---
Ну смотрите. В задаче может быть 4 варианта, когда время входит в заданный интервал. Я все учел, но он все равно выводит неправильный результат
---
легче все учесть если идти от обратного: интервалы не пересекаются если дата начала одного больше даты конца другого или интервал с другой стороны дата конца первого меньше даты начала второго, иначе интервалы пересекаются
---
Покажите как вы все учли , и самое главное КАКОЙ результат правильный для вас?
Вот в этой картинке все 4 варианта = ИСТИНА?
Или только 2 - самый большой период и центральный, то есть я хочу уточнить если сотрудник отработал всего скажем 1 час из времени смены- это Истина?
---
если сотрудник отработал всего скажем 1 час из времени смены- это Истина? - Приемлемый вариант.
---
а нужно давать результат что он отработал 1 час из своей смены, или достаточно Булево
---
достаточно Булево
Дальше я сам, большое спасибо)
---
Пример:
1) Сотрудник Иван пришел в 07:00, ушел в 16:00
Время смены 6:00-15:00.
Результат: Входит - 6 часов
Откуда выходит 6 часов??? Если попадание в смену, то с 7 до 15, 8 часов...
---
Опечатка, поправил.
---
PS не знаю какие у вас там регистры фигурируют,
что если попробовать так?

```1c
    ВЫБОР
    КОГДА ДоначисленияСотрудникам.ДатаНачала МЕЖДУ &ДатаНачалаСмены И &ДатаКонцаСмены
    ИЛИ ДоначисленияСотрудникам.ДатаОкончания МЕЖДУ &ДатаНачалаСмены И &ДатаКонцаСмены
    ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ
```
---
Условие не отрабатывает при таком варианте
---
Получеится же "Истина или Истина" или "Ложь ил Ложь"
а что нужно?
---
Сотрудник пришел в 5, ушел в 18.
Смена начинается в 6, заканчивается в 17.

```1c
    ВЫБОР
    КОГДА 5 МЕЖДУ 6 И 17
    ИЛИ 18 МЕЖДУ 6 И 17
    ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ
```

Он попал в эту смену, но при таком условии результат будет ЛОЖЬ.
---
ок, не сроботает
(10) My Webpage
---
еще одно условие или
У вас два варианта:
 несколько условий
ИЛИ
получать два массива с каждой секундой (или часом) и проверять на совпадения
---
```1c
    ВЫБОР
    КОГДА ВТПроверка.ВремяНачала МЕЖДУ СменыРаботыСотрудниковРасписание.ВремяНачала И СменыРаботыСотрудниковРасписание.ВремяОкончания
    ИЛИ ВТПроверка.ВремяОкончания МЕЖДУ СменыРаботыСотрудниковРасписание.ВремяНачала И СменыРаботыСотрудниковРасписание.ВремяОкончания
    ИЛИ ВТПроверка.ВремяНачала < СменыРаботыСотрудниковРасписание.ВремяНачала
    И ВТПроверка.ВремяОкончания > СменыРаботыСотрудниковРасписание.ВремяОкончания
    И РАЗНОСТЬДАТ(ВТПроверка.ВремяОкончания, ВТПроверка.ВремяНачала, СЕКУНДА) >= РАЗНОСТЬДАТ(СменыРаботыСотрудниковРасписание.ВремяОкончания, СменыРаботыСотрудниковРасписание.ВремяНачала, СЕКУНДА)
    ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ
```

Работает с такими условиями, спасибо @darkmessiahan и @Lenten.
---
Не все периоды отрабатывает. Вот итоговый вариант, который у меня получился. Отрабатывает со всеми периодами.

```1c
    ВЫБОР
    КОГДА (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудНачалоСекунда) * (ВТРаботаСоВременем.СкудНачалоСекунда - ВТРаботаСоВременем.СменаОкончанияСекунда) * (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СменаОкончанияСекунда) <= 0
    ИЛИ (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудНачалоСекунда) * (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудОкончанияСекунда) * (ВТРаботаСоВременем.СкудНачалоСекунда - ВТРаботаСоВременем.СкудОкончанияСекунда) >= 0
    ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ
```
---
с точки зрения житейской логики, вам нужно понять что человек пришел раньше начала смены и ушел после, а так же что провел на работе больше часов, чем длится смена за вычетом обеда.

ВремяПришел <= НачалоСмены и ВремяУшел >= КонецСмены и (ВремяУшел - ВремяПришел ) >= (КонецСмены - НачалоСмены - ВремяНаОбед)
---
```1c
    ВЫБРАТЬ
    ВложенныйЗапрос.МаксНачПериода < ВложенныйЗапрос.МинКонПериода КАК ИнтервалыПересекаются
    ИЗ
    (ВЫБРАТЬ
    ВЫБОР
    КОГДА ПланированиеРесурсов.НачалоИнтервала > &НачалоРабот
    ТОГДА ПланированиеРесурсов.НачалоИнтервала
    ИНАЧЕ &НачалоРабот
    КОНЕЦ КАК МаксНачПериода,
    ВЫБОР
    КОГДА ПланированиеРесурсов.КонецИнтервала < &ОкончаниеРабот
    ТОГДА ПланированиеРесурсов.КонецИнтервала
    ИНАЧЕ &ОкончаниеРабот
    КОНЕЦ КАК МинКонПериода
    ИЗ
    РегистрСведений.ПланированиеРесурсов КАК ПланированиеРесурсов) КАК ВложенныйЗапрос
```