Как определить ночное и дневное время

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. Zekert 03.09.12 12:41 Сейчас в теме
Добрый день Уважаемые коллеги. Помогите решить вопрос. Для табеля учета рабочего времени нужно определить сколько сорудник отработал в новное а сколько в древное время.

Например у нас есть 2 параметра (даты). Сотрудник начал работать 02.08.2012 01:00:00 а закончил 03.08.2012 12:00:00

Ночное время с 22:00 до 06:00. Итак получается, что
02.08.2012 он отработал
ночь - 7
вчего - 23

03.08.2012
ночь - 6
всего - 12

Эту информацию буду записывать в регистр что бы потом автоматически формировался табель.

Заранее благодарен за ответ.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. Ledalex 04.09.12 14:49 Сейчас в теме
Ну можно сделать как - то так:
НочалоНочноеВремя = 22;
ОкончаниеНочноеВремя = 6;

НачалоРаботыЧасы = Час(ДатаНачала);


ОкончаниеРаботаЧасы = Час(ДатаОкончания);

Если (НачалоРаботыЧасы>=НочалоНочноеВремя) Тогда
Если НачалоРаботыЧасы < 24 Тогда
ВремяДоПолуночи = 24- НачалоРаботыЧасы;
НочныеЧасы = ВремяДоПолуночи + ОкончаниеНочноеВремя;
Иначе
ВремяПослеПолуночи = ОкончаниеНочноеВремя - ВремяДоПолуночи;
НочныеЧасы = ВремяПослеПолуночи;
КонецЕсли;

ИначеЕсли НачалоРаботыЧасы< ОкончаниеНочноеВремя Тогда
НочныеЧасы = ОкончаниеНочноеВремя - НачалоРаботыЧасы;

КонецЕсли;

Если (ОкончаниеРаботаЧасы>ОкончаниеНочноеВремя) ИЛИ (ОкончаниеРаботаЧасы <НочалоНочноеВремя) Тогда
ДневныеЧасы = ОкончаниеРаботаЧасы - ОкончаниеНочноеВремя;
КонецЕсли;

Сообщить("НочныеЧасы " + НочныеЧасы + " ДневныеЧасы " + ДневныеЧасы);


Единственное что если нужно учитывать обеденное время в ночные часы, то неоходимо будет пересчитать с учетом обеденного времени.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. sea123 15 03.09.12 20:14 Сейчас в теме
(1) Zekert, сначала сравните дату начала выхода на работу и дату окончания. Если даты не совпадают это гарантированно дает ответ, что было 2 рабочих периода:
1. с времени выхода до 24-00
2. с 00-00 до времени окончания.

В первом случае сравниваете время выхода с 22-00 (начало ночных часов). Если время выхода меньше, то тут считаем 2 часа выхода. Если больше, считаем разницу часов между выходом и 24-00.
во втором случае сравниваем время окончания смены с 06-00 (окончание ночных часов). Если время выхода больше, то тут считаем 6 часов выхода. Если больше, то значит все отработанное время есть ночное.

Если же дата начала смены и окончания совпадают, то опять сравниваем начало смены с 06-00 и окончание смены с 22-00.

Внимание: уточните время обеденного перерыва для ночных смен. на них, возможно, придется корректировать ночное время. (Было в одной организации у нас, что если ночных часов было отработано 1,5 , то надо ставить 2, т.к. перерыв у ночной смены всего полчаса и т.п.)
2. Oksanau 03.09.12 12:45 Сейчас в теме
Не совсем понятен вопрос. А вообще когда настриваете график работы там есть такие параметры как начало ночных часов и начало дневных часов.
4. s1koka 03.09.12 13:11 Сейчас в теме
если речь о банальном тогда может так?
Количество отработанных часов

РазностьДат = (КонПериода - НачПериода)/60;
Сообщить("Минут " + Строка(РазностьДат));
РазностьДат = РазностьДат/60;
Сообщить("Часов " + Строка(РазностьДат));


а день это или ночь опередить условием типа вхождения в определённый промежуток времени


ЧасДаты = Час(КонПериод)
Если ЧасДаты >= День И ЧасДаты <= Ночь Тогда
//Бла бла бла это день и обработывать условие
Иначе
//Бла бла бла это ночь .......
КонецЕсли;



(2) Человек явно отписался в ветке прогамирования, а не в контретной тематики типа ЗУП.

а так совет порыться в типовых там всё уже давно описано
3. Oksanau 03.09.12 12:49 Сейчас в теме
и на основании этого графика табель автоматически формируется.
5. Oksanau 03.09.12 13:50 Сейчас в теме
Да я уже сама поняла, что не то пишу. уже когда написала сообщения, заметила что ветка программирования...
6. Oksanau 03.09.12 13:52 Сейчас в теме
А мне еще добрые люди и плюсы за мои ответы поставили. Zekert, Удалите пожалуйста, мои сообщения
8. Ledalex 04.09.12 14:49 Сейчас в теме
Ну можно сделать как - то так:
НочалоНочноеВремя = 22;
ОкончаниеНочноеВремя = 6;

НачалоРаботыЧасы = Час(ДатаНачала);


ОкончаниеРаботаЧасы = Час(ДатаОкончания);

Если (НачалоРаботыЧасы>=НочалоНочноеВремя) Тогда
Если НачалоРаботыЧасы < 24 Тогда
ВремяДоПолуночи = 24- НачалоРаботыЧасы;
НочныеЧасы = ВремяДоПолуночи + ОкончаниеНочноеВремя;
Иначе
ВремяПослеПолуночи = ОкончаниеНочноеВремя - ВремяДоПолуночи;
НочныеЧасы = ВремяПослеПолуночи;
КонецЕсли;

ИначеЕсли НачалоРаботыЧасы< ОкончаниеНочноеВремя Тогда
НочныеЧасы = ОкончаниеНочноеВремя - НачалоРаботыЧасы;

КонецЕсли;

Если (ОкончаниеРаботаЧасы>ОкончаниеНочноеВремя) ИЛИ (ОкончаниеРаботаЧасы <НочалоНочноеВремя) Тогда
ДневныеЧасы = ОкончаниеРаботаЧасы - ОкончаниеНочноеВремя;
КонецЕсли;

Сообщить("НочныеЧасы " + НочныеЧасы + " ДневныеЧасы " + ДневныеЧасы);


Единственное что если нужно учитывать обеденное время в ночные часы, то неоходимо будет пересчитать с учетом обеденного времени.
9. Shrek2015 04.09.12 16:04 Сейчас в теме
а табелировщики не указывают разве готовые ночные и вечерние часы?
Для отправки сообщения требуется регистрация/авторизация

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот