Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как проверить вхождение времени в интервал?

Как проверить вхождение времени в интервал?
Я
   Глобус
 
22.10.20 - 13:31
Пару раз в квартал приходит статистика работы станков.
Время включения станка и время выключения выглядит так:
13.10.2016 8:51:34;14.10.2016 18:25:06
интервалы разные, от пары минут до нескольких суток.

Ещё есть временный интервал, который меняется редко и выглядит так:
22:50:30;04:45:11
или другое время в пределах одних или двух суток

Надо посчитать для каждой строчки статистики работы станка сколько минут он проработал в пределах временного интервала и сколько вне пределов.
Сейчас это делается очень криво - для каждой минуты интервала есть строчка в регистре
22:50:00
22:51:00
...
04:45:00

Каждая минута рабочего времени станка тупо сравнивается с содержимым регистра.
Хотелось бы упростить. Спасибо.
   mistеr
 
1 - 22.10.20 - 13:38
(0) >22:50:30;04:45:11 или другое время в пределах одних или двух суток

Без указания даты? То есть посчитать вхождения в этот интервал за каждые сутки в течение периода? Или как?
   Глобус
 
2 - 22.10.20 - 13:43
(1) да, без указания даты. Т.е. такой интервал может быть в теч. месяца или двух, потом будет другой интервал.
   mistеr
 
3 - 22.10.20 - 13:51
Ну, навскидку, вместо каждой минуты сгенерировать эти интервалы по суткам, с реальными датами. В запросе сджойнить с интервалами работы станка и посчитать.
   БаксПо90
 
4 - 22.10.20 - 14:23
не проще ли фиксировать результат интервалов когда станки работали и длину этих интервалов когда когда обсчитывается новая порция статистики
   fisher
 
5 - 22.10.20 - 14:28
А в чем проблема? Или хочется именно в запросе считать?
   БаксПо90
 
6 - 22.10.20 - 14:29
(5) проблема в том, что как не странно когда начинаешь решать задачу на пересечение интервалов не правильным способом ..очень быстро затыкается производительнсоть
   БаксПо90
 
7 - 22.10.20 - 14:30
(5) Ты думаешь у тебя в базе объект расчет , просто так присутствует
   Глобус
 
8 - 22.10.20 - 14:37
(4) не проще. Из цеха присылают статистику работы раз в месяц. Ноутбук подключают к станку, нажимают на станке пару кнопок и выгружают. Остальные данные и сама 1ска в офисе в 40км.
   БаксПо90
 
9 - 22.10.20 - 14:40
(8) не, я имею ввиду в 1с хранить именно данные по интервалам - работал или нет и длину этого интрвала
   Глобус
 
10 - 22.10.20 - 14:45
Сейчас в цикле перебираются все минуты интервала.
13.10.2016 8:51:34;14.10.2016 18:25:06

Внутри цикла ещё один цикл, который каждую минуту ищет в регистре
22:50:00
22:51:00
...
04:45:00

Совпадающие считает.
Нет ли функции, которая без перебора сможет показать входит ли минута в интервал?
   Глобус
 
11 - 22.10.20 - 14:46
Секунды обнулены при поиске совпадений
   БаксПо90
 
12 - 22.10.20 - 14:49
Издеваетесь ?  решить задачу (а,б) входит в множество (с,д) трудно что ли ? Я чего то не доганяю
   БаксПо90
 
13 - 22.10.20 - 14:50
хотел что то написать про наркотики .. заглянул в аватарку и решил что тему можно не развивать
   Жан Пердежон
 
14 - 22.10.20 - 14:55
(0) (13) я тоже не вкурил, в чем проблема, в запросе можно использовать: НачалоПериода(), ДобавитьКДате(), РазностьДат()
   trdm
 
15 - 22.10.20 - 15:06
(0) > Надо посчитать для каждой строчки статистики работы станка сколько минут он проработал в пределах временного интервала и сколько вне пределов.

Тебе нужно что-то наподобие unixtime, т.е. дата+время преобразованная в число.
Тогда все операции сведутся к простым сложениям и вычитаниям.
https://ru.wikipedia.org/wiki/Unix-время
Только не обязательно начинать unixtime с 1 января 1970 года.

unixtime - Определяется как количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг); этот момент называют «эпохой Unix»
   mistеr
 
16 - 22.10.20 - 15:10
(15) Внезапно, в 1С дата/время так и хранится. И сложения и вычитания работают.
   trdm
 
17 - 22.10.20 - 15:14
(16) ну так с десяток ифов добавить и дело в шляпе.
   trdm
 
18 - 22.10.20 - 15:15
(16) у дат нет сложения.
   mistеr
 
19 - 22.10.20 - 15:22
(18) Дата с числом
   mistеr
 
20 - 22.10.20 - 15:23
(17) И получится (10)?
   trdm
 
21 - 22.10.20 - 15:37
(20) Смотря у кого.
   fisher
 
22 - 22.10.20 - 17:30
Я бы делал так:
1) для каждого интервала работы станка определяем количество целых суточных интервалов а "хвосты" в первом и последнем дне выделяем как отдельные суточные интервалы (не выходящие за пределы одних суток)
2) заданный интервал, если он переходящий по времени между двумя днями, тоже разбиваем на два суточных интервала. Т.е. в сабжевом случае 22:50:30 - 23:59:59 и 00:00:00 - 04:45:11
3) и дальше единообразно сравниваем попарно интервалы работы станка и заданные интервалы (приводя их при этом к одной дате, чтобы корректно работало сравнение по времени и арифметические операции со временем), определяя их пересечение. В рамках одного дня это просто (банальным сравнением на больше-меньше). Ну время работы - банальная разница в секундах. И накапливаем таким образом общее время работы в заданном временом интервале. Для полных суток просто один раз считаем время работы в заданном интервале, умножаем его на количество полных суток работы и плюсуем к общему времени работы в заданном интервале.
   Кулибин
 
23 - 22.10.20 - 18:01
Да только неделю назад в личной базе, в которую загружаются данные трекеров и биллинг звонков, делал такие вычисления :-) Данных мало - не заморачивался, на больше/меньше прекрасно работает, не думаю, что у станков сильно больше :-). Но, если интервал пересекает сутки - надо разбивать на несколько (хх-23.59.59 + 0.0.0-уу, ну, секунду теряем, конечно :-) ), зато потом сильно проще датой резать множества сравнения. Ну, а потом первый интервал две точки на шкале времени и возможные варианты вхождения второго в первый 11.12.13,22,23,33, там за 5 усоюловий проверяется и высчитывается вхождение четыре я разными способами.
   Кулибин
 
24 - 22.10.20 - 18:04
(22) :-)
   Жан Пердежон
 
25 - 22.10.20 - 21:12
Дата1 = НачалоДня(ДатаВкл)+ВремяНач;
Дата2 = Дата1 + Длительность;
вИнтевале = ?(ДатаВыкл>Дата1 И ДатаВкл<Дата2, МИН(ДатаВыкл, Дата2) - МАКС(ДатаВкл, Дата1), 0);
внеИнтервала = ДатаВыкл - ДатаВкл - вИнтервале;
   Йохохо
 
26 - 22.10.20 - 21:20
ставлю перо из попы совы, что автор не понял что от него хотят)
   D_E_S_131
 
27 - 22.10.20 - 23:22
(2) Без указания даты, чтобы усложнить себе задачу, правильно?
   Кулибин
 
28 - 22.10.20 - 23:22
(25) Молодец, пять
   Глобус
 
29 - 23.10.20 - 09:46
(27) есть дата начала действия действия периода, как и у тюбого периодического рекуизита, курса валюты или тарифа какого-нибудь
   Глобус
 
30 - 23.10.20 - 09:49
(26) от меня ничего не хотят, станки мои. До сих пор был только медицинский (возлемедицинский) бизнес, пару недель назад прикупил небольшой цех по производству изделий из пластмассы. Разбираюсь с учётом.
 
 Рекламное место пустует
   D_E_S_131
 
31 - 23.10.20 - 12:06
(29) Какого-какого реквизита? Мы про v8 вообще гоооворим? :)
   Глобус
 
32 - 23.10.20 - 12:36
(31) периодические регистры сведений, не обязательно к терминологии придираться


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.