Подсчет рабочего времени с точностью до секунды, между двумя датами #729490


#0 by sereka0908
Я новичок, есть задание, ломаю голову: Имеется регистр сведений «ПроизводственныйКалендарь», который хранит в себе свойства дней (рабочий, выходной, предвыходной), две даты, которые мы выбираем сами, справочник пользователи, который хранит в себе дату начала работы для пользователя, период обеда и дату окончания рабочего дня. Какой алгоритм действий мне необходим?
#1 by sereka0908
И еще момент, как реализовать это в форме внешней обработки?
#2 by Cube
Дата1 - Дата2 пробовал уже?
#3 by Cube
Эргономично, инновационно и с душой :)
#4 by Alex S D
а выходные дни?
#5 by vicof
предвыходной?)) пятница что ли?
#6 by Timon1405
самое интересное будет при подсчетах, когда обычный день 10:00-18:00, предвыходной день 10:00-17:00, а обед 16:30 - 17:30
#7 by sereka0908
Обычный день с 8:00 до 17:00, обед с 12:00 до 13:00, есть некоторые люди, которые работают с 9 до 18 и обед с 13 до 14, выхходные суббота и воскресенье, предпраздничные -  короткий день, т.е. по 7часов + обед, и это перед красными днями календаря.
#8 by Alex S D
и нахрен тут период обеда, если он у всех 1 ч.?
#9 by Cube
Ну вот и решай сам. Для новичка задача самое то. Если сам не решишь - не ту профессию ты выбрал...
#10 by sereka0908
Просто дату для подсчета можно выбрать например 23.12.2014 12:30:00
#11 by Timon1405
>> какой алгоритм действий мне необходим? напомнило — Куда мне отсюда идти? — А куда ты хочешь попасть? — А мне все равно, только бы попасть куда-нибудь. — Тогда все равно куда идти. Куда-нибудь ты обязательно попадешь©
#12 by Жан Пердежон
напиши сам хоть что-нибудь
#13 by Oleg_ka
Автор у Вас онкология структуры данных третье степени.
#14 by Иде я?
Не забываем перенос праздничных дней.
#15 by Иде я?
А также еще графики работы, сокращенный день для кормящих матерей и по инвалидности
#16 by Иде я?
Автор - из более старшой даты вычти более свежую и получишь время в секундах. Или не получишь...Тут как бит выпадет
#17 by sereka0908
Дата1 – Начальная дата   Дата2 – Конечная дата 1.    Выбираем даты. 2.    Выбираем необходимого пользователя. 3.    Выбираем из Справочника Пользователи необходимые поля(Наименование, НачалоРабочегоВремени, КонецРабочегоВремени, НачалоОбеда, КонецОбеда). 4.    Если поля НачалоРабочегоВремени, КонецРабочегоВремени, НачалоОбеда, КонецОбеда – пустые, то устанавливаем их 09:00, 18:00, 13:00 и 14:00 соответственно. 5.    Задаем Дата3=НачалоДня(Дата1). 8.    Если НачРабВр = 8.00 Тогда     У=Дата3+8*3600,     К=Дата3+18*3600. 9.    Делаем выборку из РегистраСведений  Производственный Календарь, где Вид «Рабочий» и «Предпраздничный», в интервале Дата3 и Дата1.
#18 by hhhh
в общем тупо берешь сумму всех дней из производственного календаря. а потом вычитаешь за первый и последний день, время, которое не входит в период.
#19 by sereka0908
есть уже дальнейший алгоритм, но испытываю затруднения, с подсчетом, когда обе даты выбраны в один день
#20 by sereka0908
Дата3<>Дата4 3Тогда(4Если (У<=Дата1<П) 4Тогда ОтработаноВремени= ОтработаноВремени+(П-Дата1)+4*3600 4Иначе (5Если О<=Дата1<К 5Тогда ОтработаноВремени= ОтработаноВремени+(К-Дата1) 5Иначе (6Если Дата1<У 6Тогда ОтработаноВремени= ОтработаноВремени+8*3600 6Иначе (7Если П<=Дата1<О 7Тогда ОтработаноВремени= ОтработаноВремени+4*3600   (8Если (У<=Дата1<П и Дата2<П) 8Тогда ОтработаноВремени= Дата2>К) 10Тогда ОтработаноВремени= ОтработаноВремени+8*3600 10Иначе
#21 by ИС-2
начинал когда-то писать подобный запрос. ЧасКонРабДня - время окончания рабочего дня ДатаНач, ДатаКон - интервал за который надо вычислить. Этот запрос надо еще подпилить - учитывать время начала рабочего дня ГДЕ     РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ)     И РегламентированныйПроизводственныйКалендарь.ВидДня В(&РабочиеДни)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С