Работа со временем (вхождение в промежуток)

1. Igor1218 07.11.19 08:30 Сейчас в теме
Добрый день! Есть время начала и окончания работы сотрудника. Необходимо проверить, входит ли это время в промежуток времени смены.
Пример:
1) Сотрудник Иван пришел в 07:00, ушел в 16:00
Время смены 6:00-15:00.
Результат: Входит - 8 часов.
2) Сотрудник Иван пришел в 00:00, ушел в 6:00
Время смены 16:00-18:00.
Учитываю разные варианты, но при применении все равно ничего не выходит.
По теме из базы знаний
Найденные решения
19. Igor1218 08.11.19 15:56 Сейчас в теме
(17) Не все периоды отрабатывает. Вот итоговый вариант, который у меня получился. Отрабатывает со всеми периодами.
ВЫБОР
	КОГДА (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудНачалоСекунда) * (ВТРаботаСоВременем.СкудНачалоСекунда - ВТРаботаСоВременем.СменаОкончанияСекунда) * (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СменаОкончанияСекунда) <= 0
			ИЛИ (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудНачалоСекунда) * (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудОкончанияСекунда) * (ВТРаботаСоВременем.СкудНачалоСекунда - ВТРаботаСоВременем.СкудОкончанияСекунда) >= 0
		ТОГДА ИСТИНА
	ИНАЧЕ ЛОЖЬ
КОНЕЦ
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. tolyan_ekb 104 07.11.19 08:36 Сейчас в теме
(1) часы с часами не получается сравнить или что?
4. Igor1218 07.11.19 08:44 Сейчас в теме
(2)Ну смотрите. В задаче может быть 4 варианта, когда время входит в заданный интервал. Я все учел, но он все равно выводит неправильный результат
Прикрепленные файлы:
6. user623969_dusa 07.11.19 08:52 Сейчас в теме
(4) легче все учесть если идти от обратного: интервалы не пересекаются если дата начала одного больше даты конца другого или интервал с другой стороны дата конца первого меньше даты начала второго, иначе интервалы пересекаются
14. YannikAlx 43 07.11.19 09:29 Сейчас в теме
(4) Покажите как вы все учли , и самое главное КАКОЙ результат правильный для вас?
Вот в этой картинке все 4 варианта = ИСТИНА?
Или только 2 - самый большой период и центральный, то есть я хочу уточнить если сотрудник отработал всего скажем 1 час из времени смены- это Истина?
15. Igor1218 07.11.19 09:30 Сейчас в теме
(14)
если сотрудник отработал всего скажем 1 час из времени смены- это Истина?
- Приемлемый вариант.
16. Teut_Vlad 179 07.11.19 09:31 Сейчас в теме
(15) а нужно давать результат что он отработал 1 час из своей смены, или достаточно Булево
18. Igor1218 07.11.19 09:35 Сейчас в теме
(16)
достаточно Булево

Дальше я сам, большое спасибо)
5. karamazoff 95 07.11.19 08:50 Сейчас в теме
(1)
Пример:
1) Сотрудник Иван пришел в 07:00, ушел в 16:00
Время смены 6:00-15:00.
Результат: Входит - 6 часов

Откуда выходит 6 часов??? Если попадание в смену, то с 7 до 15, 8 часов...
7. Igor1218 07.11.19 08:53 Сейчас в теме
3. Teut_Vlad 179 07.11.19 08:40 Сейчас в теме
PS не знаю какие у вас там регистры фигурируют,
что если попробовать так?
ВЫБОР
	КОГДА ДоначисленияСотрудникам.ДатаНачала МЕЖДУ &ДатаНачалаСмены И &ДатаКонцаСмены
			ИЛИ ДоначисленияСотрудникам.ДатаОкончания МЕЖДУ &ДатаНачалаСмены И &ДатаКонцаСмены
		ТОГДА ИСТИНА
	ИНАЧЕ ЛОЖЬ
КОНЕЦ
8. Igor1218 07.11.19 09:05 Сейчас в теме
(3)Условие не отрабатывает при таком варианте
Прикрепленные файлы:
9. Teut_Vlad 179 07.11.19 09:08 Сейчас в теме
(8) Получеится же "Истина или Истина" или "Ложь ил Ложь"
а что нужно?
10. Igor1218 07.11.19 09:12 Сейчас в теме
(9) Сотрудник пришел в 5, ушел в 18.
Смена начинается в 6, заканчивается в 17.
ВЫБОР
    КОГДА 5 МЕЖДУ 6 И 17
            ИЛИ 18 МЕЖДУ 6 И 17
        ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
КОНЕЦ

Он попал в эту смену, но при таком условии результат будет ЛОЖЬ.
12. Teut_Vlad 179 07.11.19 09:18 Сейчас в теме
13. Teut_Vlad 179 07.11.19 09:25 Сейчас в теме
(10) еще одно условие или
У вас два варианта:
несколько условий
ИЛИ
получать два массива с каждой секундой (или часом) и проверять на совпадения
Igor1218; +1 Ответить
17. Igor1218 07.11.19 09:34 Сейчас в теме
(13)
ВЫБОР
		КОГДА ВТПроверка.ВремяНачала МЕЖДУ СменыРаботыСотрудниковРасписание.ВремяНачала И СменыРаботыСотрудниковРасписание.ВремяОкончания
				ИЛИ ВТПроверка.ВремяОкончания МЕЖДУ СменыРаботыСотрудниковРасписание.ВремяНачала И СменыРаботыСотрудниковРасписание.ВремяОкончания
				ИЛИ ВТПроверка.ВремяНачала < СменыРаботыСотрудниковРасписание.ВремяНачала
					И ВТПроверка.ВремяОкончания > СменыРаботыСотрудниковРасписание.ВремяОкончания
					И РАЗНОСТЬДАТ(ВТПроверка.ВремяОкончания, ВТПроверка.ВремяНачала, СЕКУНДА) >= РАЗНОСТЬДАТ(СменыРаботыСотрудниковРасписание.ВремяОкончания, СменыРаботыСотрудниковРасписание.ВремяНачала, СЕКУНДА)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ 
Показать

Работает с такими условиями, спасибо @darkmessiahan и @Lenten.
Teut_Vlad; +1 Ответить
19. Igor1218 08.11.19 15:56 Сейчас в теме
(17) Не все периоды отрабатывает. Вот итоговый вариант, который у меня получился. Отрабатывает со всеми периодами.
ВЫБОР
	КОГДА (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудНачалоСекунда) * (ВТРаботаСоВременем.СкудНачалоСекунда - ВТРаботаСоВременем.СменаОкончанияСекунда) * (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СменаОкончанияСекунда) <= 0
			ИЛИ (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудНачалоСекунда) * (ВТРаботаСоВременем.СменаНачалоСекунда - ВТРаботаСоВременем.СкудОкончанияСекунда) * (ВТРаботаСоВременем.СкудНачалоСекунда - ВТРаботаСоВременем.СкудОкончанияСекунда) >= 0
		ТОГДА ИСТИНА
	ИНАЧЕ ЛОЖЬ
КОНЕЦ
11. Lenten 25 07.11.19 09:14 Сейчас в теме
с точки зрения житейской логики, вам нужно понять что человек пришел раньше начала смены и ушел после, а так же что провел на работе больше часов, чем длится смена за вычетом обеда.

ВремяПришел <= НачалоСмены и ВремяУшел >= КонецСмены и (ВремяУшел - ВремяПришел ) >= (КонецСмены - НачалоСмены - ВремяНаОбед)
Igor1218; Teut_Vlad; +2 Ответить
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)