|
Подсчет рабочего времени с точностью до секунды, между двумя датами | ☑ | ||
---|---|---|---|---|
0
sereka0908
23.12.14
✎
10:46
|
Я новичок, есть задание, ломаю голову: Имеется регистр сведений «ПроизводственныйКалендарь», который хранит в себе свойства дней (рабочий, выходной, предвыходной), две даты, которые мы выбираем сами, справочник пользователи, который хранит в себе дату начала работы для пользователя, период обеда и дату окончания рабочего дня. Какой алгоритм действий мне необходим?
|
|||
1
sereka0908
23.12.14
✎
10:48
|
И еще момент, как реализовать это в форме внешней обработки?
|
|||
2
Cube
23.12.14
✎
10:48
|
Дата1 - Дата2 пробовал уже?
|
|||
3
Cube
23.12.14
✎
10:49
|
(1) Эргономично, инновационно и с душой :)
|
|||
4
Alex S D
23.12.14
✎
10:49
|
(2) а выходные дни?
|
|||
5
vicof
23.12.14
✎
10:49
|
предвыходной?)) пятница что ли?
|
|||
6
Timon1405
23.12.14
✎
10:50
|
самое интересное будет при подсчетах, когда обычный день 10:00-18:00, предвыходной день 10:00-17:00, а обед 16:30 - 17:30
|
|||
7
sereka0908
23.12.14
✎
10:53
|
Обычный день с 8:00 до 17:00, обед с 12:00 до 13:00, есть некоторые люди, которые работают с 9 до 18 и обед с 13 до 14, выхходные суббота и воскресенье, предпраздничные - короткий день, т.е. по 7часов + обед, и это перед красными днями календаря.
|
|||
8
Alex S D
23.12.14
✎
10:54
|
и нахрен тут период обеда, если он у всех 1 ч.?
|
|||
9
Cube
23.12.14
✎
10:55
|
(7) Ну вот и решай сам. Для новичка задача самое то. Если сам не решишь - не ту профессию ты выбрал...
|
|||
10
sereka0908
23.12.14
✎
10:55
|
(8) Просто дату для подсчета можно выбрать например 23.12.2014 12:30:00
|
|||
11
Timon1405
23.12.14
✎
10:56
|
>> какой алгоритм действий мне необходим?
напомнило — Куда мне отсюда идти? — А куда ты хочешь попасть? — А мне все равно, только бы попасть куда-нибудь. — Тогда все равно куда идти. Куда-нибудь ты обязательно попадешь© |
|||
12
Жан Пердежон
23.12.14
✎
10:56
|
напиши сам хоть что-нибудь
|
|||
13
Oleg_ka
23.12.14
✎
10:59
|
(0) Автор у Вас онкология структуры данных третье степени.
|
|||
14
Иде я?
23.12.14
✎
11:05
|
Не забываем перенос праздничных дней.
|
|||
15
Иде я?
23.12.14
✎
11:06
|
А также еще графики работы, сокращенный день для кормящих матерей и по инвалидности
|
|||
16
Иде я?
23.12.14
✎
11:07
|
Автор - из более старшой даты вычти более свежую и получишь время в секундах. Или не получишь...Тут как бит выпадет
|
|||
17
sereka0908
25.12.14
✎
12:19
|
Дата1 – Начальная дата Дата2 – Конечная дата
1. Выбираем даты. 2. Выбираем необходимого пользователя. 3. Выбираем из Справочника Пользователи необходимые поля(Наименование, НачалоРабочегоВремени, КонецРабочегоВремени, НачалоОбеда, КонецОбеда). 4. Если поля НачалоРабочегоВремени, КонецРабочегоВремени, НачалоОбеда, КонецОбеда – пустые, то устанавливаем их 09:00, 18:00, 13:00 и 14:00 соответственно. 5. Задаем Дата3=НачалоДня(Дата1). 6. Дата3=НачалоДня(Дата1); 7. Отработано=0; 8. Если НачРабВр = 8.00 Тогда У=Дата3+8*3600, П=Дата3+12*3600, О=Дата3+13*3600, К=Дата3+17*3600 Иначе У=Дата3+9*3600, П=Дата3+13*3600, О=Дата3+14*3600, К=Дата3+18*3600. 9. Делаем выборку из РегистраСведений Производственный Календарь, где Вид «Рабочий» и «Предпраздничный», в интервале Дата3 и Дата1. 10. Если (НачРабВр = 8.00)//рабочий день начинается с 8, Тогда (Если Вид= «Рабочий» Тогда ) |
|||
18
hhhh
25.12.14
✎
12:25
|
в общем тупо берешь сумму всех дней из производственного календаря.
а потом вычитаешь за первый и последний день, время, которое не входит в период. |
|||
19
sereka0908
26.12.14
✎
02:04
|
есть уже дальнейший алгоритм, но испытываю затруднения, с подсчетом, когда обе даты выбраны в один день
|
|||
20
sereka0908
26.12.14
✎
02:04
|
1Если (НачРабВр = 8.00) 1Тогда (2Если Вид= «Рабочий» 2Тогда (3Если
Дата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 7КонецЕсли)6КонецЕсли)5КонецЕсли)4КонецЕсли) //один и тот же день=?\\ 3Иначе (8Если (У<=Дата1<П и Дата2<П) 8Тогда ОтработаноВремени= ОтработаноВремени+(Дата2-Дата1) 8Иначе (9Если (О<=Дата1<К и Дата2<К) 9Тогда ОтработаноВремени= ОтработаноВремени+(Дата2-Дата1) 9Иначе (10Если (Дата1<У и Дата2>К) 10Тогда ОтработаноВремени= ОтработаноВремени+8*3600 10Иначе |
|||
21
ИС-2
naïve
26.12.14
✎
07:27
|
(20) начинал когда-то писать подобный запрос.
ЧасКонРабДня - время окончания рабочего дня ДатаНач, ДатаКон - интервал за который надо вычислить. Этот запрос надо еще подпилить - учитывать время начала рабочего дня ВЫБРАТЬ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ВЫБОР КОГДА НАЧАЛОПЕРИОДА(&Датанач, ДЕНЬ) = РегламентированныйПроизводственныйКалендарь.ДатаКалендаря ТОГДА ВЫБОР КОГДА ЧАС(&Датанач) < &ЧасКонРабДня ТОГДА РАЗНОСТЬДАТ(&Датанач, ДОБАВИТЬКДАТЕ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ЧАС, &ЧасКонРабДня), СЕКУНДА) ИНАЧЕ 0 КОНЕЦ ИНАЧЕ 8 * 60 * 60 КОНЕЦ КАК РабочихСекунд, ДОБАВИТЬКДАТЕ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ЧАС, &ЧасКонРабДня) КАК ВремяКонРабДня ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ) И РегламентированныйПроизводственныйКалендарь.ВидДня В(&РабочиеДни) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |