|
Можно ли посчитать время в запросе? | ☑ | ||
---|---|---|---|---|
0
Вася Теркин
23.09.14
✎
07:11
|
Есть периодический РС с периодом секунда
Период - стандартно ОсновноеСредство - справочник Используется - число 1,0 неотрицательный Уже есть заполняемый регистр 08:21:43 20.09.2014 Станок8 1 09:04:24 20.09.2014 Станок4 1 09:04:26 20.09.2014 Станок8 0 10:43:11 20.09.2014 Станок6 1 21:21:43 20.09.2014 Станок4 0 03:26:31 21.09.2014 Станок8 1 05:03:21 21.09.2014 Станок6 0 07:45:43 21.09.2014 Станок8 0 Как в запросе посчитать время до секунд сколько станки использовались (значение1). Или все таки лучше выбрать записи РС и в ТЗ просуммировать. Надо получить Дата Станок Втремя |
|||
1
Beduin
23.09.14
✎
07:13
|
Функция предназначена для получения разницы между двумя датами.
Первый параметр — вычитаемая дата, выражение типа ДАТА; Второй параметр — исходная дата, выражение типа ДАТА; Третий параметр – тип разности, одно из: СЕКУНДА, МИНУТа, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД. |
|||
2
Мимохожий Однако
23.09.14
✎
07:15
|
Если это надо постоянно, то заведи регистр накопления.
|
|||
3
shuhard
23.09.14
✎
07:16
|
(0) при переменном числе записей сделать это можно генерацией текста запроса, но гемор того не стоит
|
|||
4
Вася Теркин
23.09.14
✎
07:24
|
Хочу просто циклом в ТЗ складывать и записывать, а не в запросе. А потом ТЗ использовать как источник для СКД. Или в запросе тоже можно?
|
|||
5
Вася Теркин
23.09.14
✎
07:25
|
Просто запрос быстрее выполняется чем обход выборки, но с выборкой легче в десятки раз...
|
|||
6
ДенисЧ
23.09.14
✎
07:49
|
Оборотный регистр лучше заведи
|
|||
7
kosts
23.09.14
✎
08:57
|
(5) Ищи на форуме подобные темы, сотни их было.
|
|||
8
kosts
23.09.14
✎
09:01
|
Вот вроде подходящая тема
forum.infostart.ru/forum26/topic112033/message1160433 |
|||
9
Вася Теркин
23.09.14
✎
09:02
|
(6) Независимый режим записи невозможен. А там надо независимый.
|
|||
10
Вася Теркин
23.09.14
✎
09:06
|
Кроме того обходом легче всякие недоразумения убирать. Например начало в один день, а конец на следующем. Или Забыли внести запись о включении. Или о выключении. Там тоже нужны правила по исправлению этой ошибки. В запросе все это будет тяжело. Потом ещё одно-два правила подсчета изменят и придется ползапроса переделывать как всегда.
|
|||
11
kosts
23.09.14
✎
09:08
|
(10) Все зависит от объемов скорости работы.
>и придется ползапроса переделывать как всегда. Лично мне проще в запросах ковыряться, чем кодом. |
|||
12
Fragster
гуру
23.09.14
✎
09:23
|
ВЫБРАТЬ
1 КАК Период, "А" КАК Станок, 1 КАК Использование ПОМЕСТИТЬ Данные ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5, "А", 0 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 10, "Б", 1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Т1.Период КАК ВремяНачалаИспользования, ЕстьNULL(Т2.Период, &ТекДата) КАК ВремяОкончанияИспользования, //текущая дата ЕстьNULL(Т2.Период, &ТекДата) - Т1.Период КАК ВремяИспользования, // заменить на разностьДат Т1.Станок ИЗ Данные КАК Т1 ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК Т2 ПО Т1.Станок = Т2.Станок И Т1.Использование = 1 И Т2.Использование = 0 И Т2.Период В (ВЫБРАТЬ ПЕРВЫЕ 1 Отбор.Период ИЗ Данные КАК Отбор ГДЕ Отбор.Станок = Т1.Станок И Отбор.Использование = Т1.Использование И Отбор.Период < Т1.Период УПОРЯДОЧИТЬ ПО Отбор.Период УБЫВ)) ГДЕ Т1.Использование = 1 |
|||
13
Fragster
гуру
23.09.14
✎
09:24
|
И Отбор.Использование = Т2.Использование
|
|||
14
Fragster
гуру
23.09.14
✎
09:25
|
И Отбор.Период > Т1.Период
УПОРЯДОЧИТЬ ПО Отбор.Период |
|||
15
Fragster
гуру
23.09.14
✎
09:29
|
еще можно через два этапа - одним получить минимальный период с использованием 0 для каждой записи с использованием 1, а потом соединить. будет быстрее, но не так клево
|
|||
16
боксер
23.09.14
✎
09:32
|
наду через вытеснение делать как в зуп: работает не работает
|
|||
17
Вася Теркин
08.10.14
✎
10:54
|
ВЫБРАТЬ
1 КАК Период, "А" КАК Станок, 1 КАК Использование ПОМЕСТИТЬ Данные ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5, "А", 0 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7, "А", 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 12, "А", 0 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 10, "Б", 1 ; Исходные данные будут такие только |
|||
18
Вася Теркин
08.10.14
✎
10:57
|
И тут он неправильно считает
А 1 12 11 А 7 12 5 Б 10 ... ... а надо А 1 5 4 А 7 12 5 Б 10 ... ... |
|||
19
Вася Теркин
08.10.14
✎
10:58
|
Надо брать максимум ближайший ,а не абсолютный из выборки
|
|||
20
Вася Теркин
08.10.14
✎
11:19
|
Вот так
ВЫБРАТЬ 1 КАК Период, "А" КАК Станок, 1 КАК Использование ПОМЕСТИТЬ Данные ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 12, "А", 0 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7, "А", 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5, "А", 0 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 10, "Б", 1 ; работает если поставить Отбор.Период ВОЗР |
|||
21
Вася Теркин
14.10.14
✎
09:32
|
Неверные параметры "РАЗНОСТЬДАТ"
РАЗНОСТЬДАТ(<<?>>ЕСТЬNULL(Т2.Период, &ТекДата), Т1.Период, ЧАС) КАК ВремяИспользования, |
|||
22
Вася Теркин
14.10.14
✎
09:32
|
Причем построителем запроса сформировал и все ок. А не исполняеься.
|
|||
23
Вася Теркин
14.10.14
✎
09:34
|
А вот тут пишут v8: проверка на null что нет синтаксической ошибки. Как понимать?
|
|||
24
Ненавижу 1С
гуру
14.10.14
✎
09:44
|
что ты передаешь в &ТекДата?
|
|||
25
hhhh
14.10.14
✎
09:46
|
(21) надо наоборот
Т1.Период, Т2.Период |
|||
26
Вася Теркин
14.10.14
✎
09:47
|
(24) Это был правильный вопрос...
|
|||
27
Ненавижу 1С
гуру
14.10.14
✎
09:47
|
(25) но ошибка не в этом
|
|||
28
Вася Теркин
14.10.14
✎
09:47
|
(25) И это тоже.
|
|||
29
hhhh
14.10.14
✎
09:52
|
если запрос в СКД, тогда "ЧАС"
|
|||
30
_fmrlex
14.10.14
✎
10:20
|
(0) Группируешь записи по станкам.
Делаешь вычисляемое поле по типу РазностьДат(Дата,ВычислитьВыражение("Дата",,,"Следующая", "Следующая") , "СЕКУНДА") Это вычисляет разницу текущей записи и следующей в секундах. А дальше сам поймешь. |
|||
31
_fmrlex
14.10.14
✎
10:22
|
+(30) Вернее разницу следующей и текущей
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |