Имя: Пароль:
1C
 
Подсчет времени в минутах
0 user4fun
 
04.11.21
13:10
Всем привет! подскажите пожалуйста как реализовать такое, есть две даты, необходимо посчитать разницу между двумя датами, исходя из того, что нужно брать только рабочее время (09:00 - 21:00) в минутах, желательно в запросе. Например 04.11.2021 08:00 - 05.11.2021 10:00 (13ч = 780 минут). Всем спасибо за ответы.
1 Asmody
 
04.11.21
13:12
(0) в типовых делают через регистр сведений
2 Ненавижу 1С
 
гуру
04.11.21
13:12
(0) без учёта праздников и выходных?
3 user4fun
 
04.11.21
13:14
(2) да, без учета.
4 mistеr
 
04.11.21
13:22
(3) Конфа какая? Производственный календарь есть?
5 user4fun
 
04.11.21
13:24
(4) Альфа авто 5
6 PuhUfa
 
04.11.21
13:31
(0) для каких целей?
7 user4fun
 
04.11.21
13:33
(6) Вывести в отчет эти данные.
8 PuhUfa
 
04.11.21
13:37
(7) информативно... -)
Тогда предположу что это связано с работами в ЗаказНарядах, а если так, то могу предложить РС "ГрафикРаботыРесурсов" где все это "посчитано"... а если еще и все правильно настроено и корректно ведется, то там может считать даже с учетом праздников и выходных.
9 mistеr
 
04.11.21
13:42
(5) Из календаря нужно выбрать интервалы рабочего времени Начало-Конец. Затем считаем их пересечения с входным интервалом. Затем считаем минуты через РазностьДат и суммируем.
10 Ненавижу 1С
 
гуру
04.11.21
13:49
не надо тут календарей:

ВЫБРАТЬ
    РАЗНОСТЬДАТ(&НачалоРВ, &КонецРВ, МИНУТА) * ВЫБОР
        КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, 1), ДЕНЬ), КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, -1), ДЕНЬ), ДЕНЬ) + 1 > 0
            ТОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, 1), ДЕНЬ), КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, -1), ДЕНЬ), ДЕНЬ) + 1
        ИНАЧЕ 0
    КОНЕЦ + ВЫБОР
        КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), &НачалоПериода, МИНУТА) < РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоРВ, ДЕНЬ), &НачалоРВ, МИНУТА)
            ТОГДА РАЗНОСТЬДАТ(&НачалоРВ, &КонецРВ, МИНУТА)
        КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), &НачалоПериода, МИНУТА) < РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&КонецРВ, ДЕНЬ), &КонецРВ, МИНУТА)
            ТОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&КонецРВ, ДЕНЬ), &КонецРВ, МИНУТА) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), &НачалоПериода, МИНУТА)
        ИНАЧЕ 0
    КОНЕЦ + ВЫБОР
        КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&КонецПериода, ДЕНЬ), &КонецПериода, МИНУТА) > РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&КонецРВ, ДЕНЬ), &КонецРВ, МИНУТА)
            ТОГДА РАЗНОСТЬДАТ(&НачалоРВ, &КонецРВ, МИНУТА)
        КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&КонецПериода, ДЕНЬ), &КонецПериода, МИНУТА) > РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоРВ, ДЕНЬ), &НачалоРВ, МИНУТА)
            ТОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&КонецПериода, ДЕНЬ), &КонецПериода, МИНУТА) - РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоРВ, ДЕНЬ), &НачалоРВ, МИНУТА)
        ИНАЧЕ 0
    КОНЕЦ КАК Минуты

(НачалоПериода,КонецПериода) - проверяемый период
(НачалоРВ, КонецРВ) - период рабочего времени (должны быть в одной дате, т.е. отличаться только временем)
11 mistеr
 
04.11.21
13:57
Блин, а я понял "без учета" как "с учетом" :)
12 user4fun
 
04.11.21
14:24
(10) извините не совсем понял есть два реквизита ДатаСоздания 04.11.2021 09:00 и ДатаЗакрытия 05.11.2021 10:00, но есть документы созданные и до 09:00 и их нужно считать только 09:00.
13 Garykom
 
гуру
04.11.21
14:27
(12) >есть документы созданные и до 09:00 и их нужно считать только 09:00

что значит "считать" ?
14 user4fun
 
04.11.21
14:32
(13) время фиксировать только с 09:00, а не с даты созадния.
15 Garykom
 
гуру
04.11.21
14:35
(14) отлично а что значит "фиксировать"?
16 Garykom
 
гуру
04.11.21
14:36
(15)+ вы поймите что телепаты на локдауне все
17 pechkin
 
04.11.21
14:39
(10) зачем так сложно?
почему не достаточно просто
РАЗНОСТЬДАТ(&НачалоРВ, &КонецРВ, МИНУТА)
18 Garykom
 
гуру
04.11.21
14:42
(17) с учетом дат а не только времени
т.е. передается 4 параметра дата-время начала, дата-время окончания всего периода
и время начала и окончания (с начала дня) рабочего времени

но я хз правильно ли там в запросе и явно как то сложновато
19 pechkin
 
04.11.21
14:44
(18) верные параметры проще вычислить ВНЕ запроса
20 Garykom
 
гуру
04.11.21
14:48
(19) угу я тоже так подумал
но может получиться слишком большая ТЗ начала и окончания интервалов по дням
21 mistеr
 
04.11.21
14:59
А почему "желательно в запросе", если из входных данных только две даты и два времени, а из базы никакая информация не нужна?

Или все-таки нужна?
22 Ненавижу 1С
 
гуру
04.11.21
15:03
(21) думается что период берётся из базы
23 серый КТУЛХУ
 
04.11.21
15:11
Макс(0, Окр((НачалоДня(ДатаНач) - НачалоДня(ДатаКон))/(24*60*60),0)-2) * ((21-9)*60) + Макс(0, (КонецДня(ДатаНач) - (24-21)*60*60) - ДатаНач) / 60  + Макс(0, ДатаКон - (НачалоДня(ДатаКон) + 9*60*60)) / 60
24 серый КТУЛХУ
 
04.11.21
15:30
ну или так понятнее:
    ДельтаМинутЦелыхСуток = Макс(0, Окр((НачалоДня(ДатаНач) - НачалоДня(ДатаКон))/(24*60*60),0)-2) * ((21-9)*60);
    МинутНачДатыДоКонСуток = Макс(0, (КонецДня(ДатаНач) - (24-21)*60*60) - ДатаНач) / 60;
    МинутКонДатыОнНачСуток = Макс(0, ДатаКон - (НачалоДня(ДатаКон) + 9*60*60)) / 60;
    ДельтаРабМинут = ДельтаМинутЦелыхСуток + МинутНачДатыДоКонСуток + МинутКонДатыОнНачСуток;
25 PuhUfa
 
04.11.21
15:38
(20)(21) Объясню за ТС. Есть документ ЗаказНаряд в котором идет учет работ и материалов по обслуживанию авто. У документа есть реквизит ДатаСоздания - когда был фактически создан документ. Есть реквизит ДатаЗакрытия - дата когда документ перевели в состояние закрыт. Работы по ЗаказНаряду могут растянуться на несколько дней... Но физически мастера работают с 9 до 21... Вот ТС и извращается... Еще у документа есть реквизит ДатаНачала - это дата начала работ по ЗаказНаряду... еще есть РС "ГрафикРаботыРесурсов" в котором отображаются все интервалы времени работ по ЗаказНаряду уже с учетом начала рабочего дня и его окончания... но ТС видимо не умеет в этот РС или просто хочет свой велосипед.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший