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 169 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 31 07.11.19 09:29 Сейчас в теме
(4) Покажите как вы все учли , и самое главное КАКОЙ результат правильный для вас?
Вот в этой картинке все 4 варианта = ИСТИНА?
Или только 2 - самый большой период и центральный, то есть я хочу уточнить если сотрудник отработал всего скажем 1 час из времени смены- это Истина?
15. Igor1218 07.11.19 09:30 Сейчас в теме
(14)
если сотрудник отработал всего скажем 1 час из времени смены- это Истина?
- Приемлемый вариант.
16. darkmessiahan 105 07.11.19 09:31 Сейчас в теме
(15) а нужно давать результат что он отработал 1 час из своей смены, или достаточно Булево
18. Igor1218 07.11.19 09:35 Сейчас в теме
(16)
достаточно Булево

Дальше я сам, большое спасибо)
5. karamazoff 3 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. darkmessiahan 105 07.11.19 08:40 Сейчас в теме
PS не знаю какие у вас там регистры фигурируют,
что если попробовать так?
ВЫБОР
	КОГДА ДоначисленияСотрудникам.ДатаНачала МЕЖДУ &ДатаНачалаСмены И &ДатаКонцаСмены
			ИЛИ ДоначисленияСотрудникам.ДатаОкончания МЕЖДУ &ДатаНачалаСмены И &ДатаКонцаСмены
		ТОГДА ИСТИНА
	ИНАЧЕ ЛОЖЬ
КОНЕЦ
8. Igor1218 07.11.19 09:05 Сейчас в теме
(3)Условие не отрабатывает при таком варианте
Прикрепленные файлы:
9. darkmessiahan 105 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. darkmessiahan 105 07.11.19 09:18 Сейчас в теме
13. darkmessiahan 105 07.11.19 09:25 Сейчас в теме
(10) еще одно условие или
У вас два варианта:
несколько условий
ИЛИ
получать два массива с каждой секундой (или часом) и проверять на совпадения
Igor1218; +1 Ответить
17. Igor1218 07.11.19 09:34 Сейчас в теме
(13)
ВЫБОР
		КОГДА ВТПроверка.ВремяНачала МЕЖДУ СменыРаботыСотрудниковРасписание.ВремяНачала И СменыРаботыСотрудниковРасписание.ВремяОкончания
				ИЛИ ВТПроверка.ВремяОкончания МЕЖДУ СменыРаботыСотрудниковРасписание.ВремяНачала И СменыРаботыСотрудниковРасписание.ВремяОкончания
				ИЛИ ВТПроверка.ВремяНачала < СменыРаботыСотрудниковРасписание.ВремяНачала
					И ВТПроверка.ВремяОкончания > СменыРаботыСотрудниковРасписание.ВремяОкончания
					И РАЗНОСТЬДАТ(ВТПроверка.ВремяОкончания, ВТПроверка.ВремяНачала, СЕКУНДА) >= РАЗНОСТЬДАТ(СменыРаботыСотрудниковРасписание.ВремяОкончания, СменыРаботыСотрудниковРасписание.ВремяНачала, СЕКУНДА)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ 
Показать

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

ВремяПришел <= НачалоСмены и ВремяУшел >= КонецСмены и (ВремяУшел - ВремяПришел ) >= (КонецСмены - НачалоСмены - ВремяНаОбед)
Igor1218; darkmessiahan; +2 Ответить
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

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

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

Программист 1С
Рязань
зарплата от 90 000 руб.
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день