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