Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Добрый день Уважаемые коллеги. Помогите решить вопрос. Для табеля учета рабочего времени нужно определить сколько сорудник отработал в новное а сколько в древное время.
Например у нас есть 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
Эту информацию буду записывать в регистр что бы потом автоматически формировался табель.
Заранее благодарен за ответ.
Например у нас есть 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
Эту информацию буду записывать в регистр что бы потом автоматически формировался табель.
Заранее благодарен за ответ.
По теме из базы знаний
- Интеграция сценарного тестирования в процесс разработки
- Не спеша, эффективно и правильно – путь разработки. Часть 1. Парадигма
- WEB-интерфейсы как механизм сбора и контроля данных в розничной сети. Инструменты и наработки
- Готовые механизмы 1С: ЗУП, представления
- Базы данных. Несколько шагов до серьезного обслуживания
Найденные решения
Ну можно сделать как - то так:
НочалоНочноеВремя = 22;
ОкончаниеНочноеВремя = 6;
НачалоРаботыЧасы = Час(ДатаНачала);
ОкончаниеРаботаЧасы = Час(ДатаОкончания);
Если (НачалоРаботыЧасы>=НочалоНочноеВремя) Тогда
Если НачалоРаботыЧасы < 24 Тогда
ВремяДоПолуночи = 24- НачалоРаботыЧасы;
НочныеЧасы = ВремяДоПолуночи + ОкончаниеНочноеВремя;
Иначе
ВремяПослеПолуночи = ОкончаниеНочноеВремя - ВремяДоПолуночи;
НочныеЧасы = ВремяПослеПолуночи;
КонецЕсли;
ИначеЕсли НачалоРаботыЧасы< ОкончаниеНочноеВремя Тогда
НочныеЧасы = ОкончаниеНочноеВремя - НачалоРаботыЧасы;
КонецЕсли;
Если (ОкончаниеРаботаЧасы>ОкончаниеНочноеВремя) ИЛИ (ОкончаниеРаботаЧасы <НочалоНочноеВремя) Тогда
ДневныеЧасы = ОкончаниеРаботаЧасы - ОкончаниеНочноеВремя;
КонецЕсли;
Сообщить("НочныеЧасы " + НочныеЧасы + " ДневныеЧасы " + ДневныеЧасы);
Единственное что если нужно учитывать обеденное время в ночные часы, то неоходимо будет пересчитать с учетом обеденного времени.
НочалоНочноеВремя = 22;
ОкончаниеНочноеВремя = 6;
НачалоРаботыЧасы = Час(ДатаНачала);
ОкончаниеРаботаЧасы = Час(ДатаОкончания);
Если (НачалоРаботыЧасы>=НочалоНочноеВремя) Тогда
Если НачалоРаботыЧасы < 24 Тогда
ВремяДоПолуночи = 24- НачалоРаботыЧасы;
НочныеЧасы = ВремяДоПолуночи + ОкончаниеНочноеВремя;
Иначе
ВремяПослеПолуночи = ОкончаниеНочноеВремя - ВремяДоПолуночи;
НочныеЧасы = ВремяПослеПолуночи;
КонецЕсли;
ИначеЕсли НачалоРаботыЧасы< ОкончаниеНочноеВремя Тогда
НочныеЧасы = ОкончаниеНочноеВремя - НачалоРаботыЧасы;
КонецЕсли;
Если (ОкончаниеРаботаЧасы>ОкончаниеНочноеВремя) ИЛИ (ОкончаниеРаботаЧасы <НочалоНочноеВремя) Тогда
ДневныеЧасы = ОкончаниеРаботаЧасы - ОкончаниеНочноеВремя;
КонецЕсли;
Сообщить("НочныеЧасы " + НочныеЧасы + " ДневныеЧасы " + ДневныеЧасы);
Единственное что если нужно учитывать обеденное время в ночные часы, то неоходимо будет пересчитать с учетом обеденного времени.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Zekert, сначала сравните дату начала выхода на работу и дату окончания. Если даты не совпадают это гарантированно дает ответ, что было 2 рабочих периода:
1. с времени выхода до 24-00
2. с 00-00 до времени окончания.
В первом случае сравниваете время выхода с 22-00 (начало ночных часов). Если время выхода меньше, то тут считаем 2 часа выхода. Если больше, считаем разницу часов между выходом и 24-00.
во втором случае сравниваем время окончания смены с 06-00 (окончание ночных часов). Если время выхода больше, то тут считаем 6 часов выхода. Если больше, то значит все отработанное время есть ночное.
Если же дата начала смены и окончания совпадают, то опять сравниваем начало смены с 06-00 и окончание смены с 22-00.
Внимание: уточните время обеденного перерыва для ночных смен. на них, возможно, придется корректировать ночное время. (Было в одной организации у нас, что если ночных часов было отработано 1,5 , то надо ставить 2, т.к. перерыв у ночной смены всего полчаса и т.п.)
1. с времени выхода до 24-00
2. с 00-00 до времени окончания.
В первом случае сравниваете время выхода с 22-00 (начало ночных часов). Если время выхода меньше, то тут считаем 2 часа выхода. Если больше, считаем разницу часов между выходом и 24-00.
во втором случае сравниваем время окончания смены с 06-00 (окончание ночных часов). Если время выхода больше, то тут считаем 6 часов выхода. Если больше, то значит все отработанное время есть ночное.
Если же дата начала смены и окончания совпадают, то опять сравниваем начало смены с 06-00 и окончание смены с 22-00.
Внимание: уточните время обеденного перерыва для ночных смен. на них, возможно, придется корректировать ночное время. (Было в одной организации у нас, что если ночных часов было отработано 1,5 , то надо ставить 2, т.к. перерыв у ночной смены всего полчаса и т.п.)
Не совсем понятен вопрос. А вообще когда настриваете график работы там есть такие параметры как начало ночных часов и начало дневных часов.
если речь о банальном тогда может так?
Количество отработанных часов
РазностьДат = (КонПериода - НачПериода)/60;
Сообщить("Минут " + Строка(РазностьДат));
РазностьДат = РазностьДат/60;
Сообщить("Часов " + Строка(РазностьДат));
а день это или ночь опередить условием типа вхождения в определённый промежуток времени
ЧасДаты = Час(КонПериод)
Если ЧасДаты >= День И ЧасДаты <= Ночь Тогда
//Бла бла бла это день и обработывать условие
Иначе
//Бла бла бла это ночь .......
КонецЕсли;
(2) Человек явно отписался в ветке прогамирования, а не в контретной тематики типа ЗУП.
а так совет порыться в типовых там всё уже давно описано
Количество отработанных часов
РазностьДат = (КонПериода - НачПериода)/60;
Сообщить("Минут " + Строка(РазностьДат));
РазностьДат = РазностьДат/60;
Сообщить("Часов " + Строка(РазностьДат));
а день это или ночь опередить условием типа вхождения в определённый промежуток времени
ЧасДаты = Час(КонПериод)
Если ЧасДаты >= День И ЧасДаты <= Ночь Тогда
//Бла бла бла это день и обработывать условие
Иначе
//Бла бла бла это ночь .......
КонецЕсли;
(2) Человек явно отписался в ветке прогамирования, а не в контретной тематики типа ЗУП.
а так совет порыться в типовых там всё уже давно описано
Да я уже сама поняла, что не то пишу. уже когда написала сообщения, заметила что ветка программирования...
Ну можно сделать как - то так:
НочалоНочноеВремя = 22;
ОкончаниеНочноеВремя = 6;
НачалоРаботыЧасы = Час(ДатаНачала);
ОкончаниеРаботаЧасы = Час(ДатаОкончания);
Если (НачалоРаботыЧасы>=НочалоНочноеВремя) Тогда
Если НачалоРаботыЧасы < 24 Тогда
ВремяДоПолуночи = 24- НачалоРаботыЧасы;
НочныеЧасы = ВремяДоПолуночи + ОкончаниеНочноеВремя;
Иначе
ВремяПослеПолуночи = ОкончаниеНочноеВремя - ВремяДоПолуночи;
НочныеЧасы = ВремяПослеПолуночи;
КонецЕсли;
ИначеЕсли НачалоРаботыЧасы< ОкончаниеНочноеВремя Тогда
НочныеЧасы = ОкончаниеНочноеВремя - НачалоРаботыЧасы;
КонецЕсли;
Если (ОкончаниеРаботаЧасы>ОкончаниеНочноеВремя) ИЛИ (ОкончаниеРаботаЧасы <НочалоНочноеВремя) Тогда
ДневныеЧасы = ОкончаниеРаботаЧасы - ОкончаниеНочноеВремя;
КонецЕсли;
Сообщить("НочныеЧасы " + НочныеЧасы + " ДневныеЧасы " + ДневныеЧасы);
Единственное что если нужно учитывать обеденное время в ночные часы, то неоходимо будет пересчитать с учетом обеденного времени.
НочалоНочноеВремя = 22;
ОкончаниеНочноеВремя = 6;
НачалоРаботыЧасы = Час(ДатаНачала);
ОкончаниеРаботаЧасы = Час(ДатаОкончания);
Если (НачалоРаботыЧасы>=НочалоНочноеВремя) Тогда
Если НачалоРаботыЧасы < 24 Тогда
ВремяДоПолуночи = 24- НачалоРаботыЧасы;
НочныеЧасы = ВремяДоПолуночи + ОкончаниеНочноеВремя;
Иначе
ВремяПослеПолуночи = ОкончаниеНочноеВремя - ВремяДоПолуночи;
НочныеЧасы = ВремяПослеПолуночи;
КонецЕсли;
ИначеЕсли НачалоРаботыЧасы< ОкончаниеНочноеВремя Тогда
НочныеЧасы = ОкончаниеНочноеВремя - НачалоРаботыЧасы;
КонецЕсли;
Если (ОкончаниеРаботаЧасы>ОкончаниеНочноеВремя) ИЛИ (ОкончаниеРаботаЧасы <НочалоНочноеВремя) Тогда
ДневныеЧасы = ОкончаниеРаботаЧасы - ОкончаниеНочноеВремя;
КонецЕсли;
Сообщить("НочныеЧасы " + НочныеЧасы + " ДневныеЧасы " + ДневныеЧасы);
Единственное что если нужно учитывать обеденное время в ночные часы, то неоходимо будет пересчитать с учетом обеденного времени.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот