|
Разность дат из строк РегистраСведений | ☑ | ||
---|---|---|---|---|
0
Antoshik86
10.05.16
✎
11:42
|
Имеется регистр сведений, содержащий заявки клиентов.
Необходимо получить количество дней обслуживания за искомый период, положим за месяц апрель(04): К примеру : с 01.04 по 30.04 1|21.03.16 ПостановкаНаОсблуж 2|27.03.16 ПриостановкаОбслуж 3|04.04.16 ВозобновлениеОбслуж 4 дняП (тк с 01.04) 4|07.04.16 ПриостановкаОбслуж 3 дняВ 5|10.04.16 ВозобновлениеОбслуж 3 дняП 6|13.04.16 ПриостановкаОбслуж 3 дняВ 7|20.04.16 ВозобновлениеОбслуж 7 днейП 8|29.04.16 ПриостановкаОбслуж 9 днейВ 9|05.05.16 ОтключениеОбслуж 1 деньП (тк по 30.04) Дней обслуживания 3+3+9 = 15 Дней приостановки 4+3+7+1 = 15 Собственно есть РазностьДат (Д1,Д2,День). Вопрос в том как вычислять Д1 и Д2 из строк регистра и учитывать ситуацию с началом и окончанием периода. |
|||
1
hhhh
10.05.16
✎
11:46
|
сгруппируй строки
|
|||
2
Antoshik86
10.05.16
✎
12:47
|
Группировать пробую, в примере я сам посчитал кол-во дней на само дели ничего не записано. Т.е. исходные данные
1|21.03.16 ПостановкаНаОсблуж 2|27.03.16 ПриостановкаОбслуж 3|04.04.16 ВозобновлениеОбслуж 4|07.04.16 ПриостановкаОбслуж 5|10.04.16 ВозобновлениеОбслуж 6|13.04.16 ПриостановкаОбслуж 7|20.04.16 ВозобновлениеОбслуж 8|29.04.16 ПриостановкаОбслуж 9|05.05.16 ОтключениеОбслуж подглядел такой способ на скльформуме правда для акцесса ВЫБРАТЬ УчетЗаявок1.ДатаЗаявки КАК Дата1, МАКСИМУМ(УчетЗаявок2.ДатаЗаявки) КАК Дата2, РАЗНОСТЬДАТ(УчетЗаявок1.ДатаЗаявки, УчетЗаявок2.ДатаЗаявки, ДЕНЬ) ИЗ РегистрСведений.УчетЗаявок1 КАК УчетЗаявок1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.УчетЗаявок1 КАК УчетЗаявок2 ПО УчетЗаявок1.ДатаЗаявки > УчетЗаявок2.ДатаЗаявки СГРУППИРОВАТЬ ПО УчетЗаявок1.ДатаЗаявки РАЗНОСТЬДАТ(УчетЗаявок1.ДатаЗаявки, УчетЗаявок2.ДатаЗаявки, ДЕНЬ) УПОРЯДОЧИТЬ ПО Дата1 |
|||
3
Antoshik86
11.05.16
✎
05:11
|
Только за счет Групировки некорректный результат получается!
|
|||
4
Лефмихалыч
11.05.16
✎
08:26
|
(0) как ты в третьей строчке получил 4 дня?
|
|||
5
Лефмихалыч
11.05.16
✎
08:27
|
и в девятой тоже не понятно, из каких херов это получено.
Пока в таблице не будут все даты, запросом вряд ли что получится. |
|||
6
Мимохожий Однако
11.05.16
✎
08:30
|
Логичнее добавить РН Оборотный "Обслуживание клиентов" с ресурсом КоличествоДней.
|
|||
7
Лефмихалыч
11.05.16
✎
08:31
|
(6) это не избавит от такого РС, т.к. думаю там одна из бизнес-потребностей - получать детализацию с этими началами и возобновлениями. А их из РС легче получать, чем из РН, тупо нагляднее будет.
|
|||
8
Лефмихалыч
11.05.16
✎
08:33
|
Надо обеспечить, чтобы в таблицу были включены и неявные записи (01.04 и 30.04) - без них ни РН, ни РС не помогут и придется все делать тупым перебором с огромным рогатым ЕстиТогдаИначеЕслиТогда
|
|||
9
Лефмихалыч
11.05.16
✎
08:47
|
Это вот, если в таблице есть все записи и она начинается с возобновления
ВЫБРАТЬ ВТ.Событие, ВТ.Дата ПОМЕСТИТЬ События ИЗ &ВТ КАК ВТ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ События.СОбытие, События.Дата, МИНИМУМ(События1.Дата) КАК Дата1 ПОМЕСТИТЬ Интервалы ИЗ События КАК События ВНУТРЕННЕЕ СОЕДИНЕНИЕ События КАК События1 ПО События.Дата < События1.Дата СГРУППИРОВАТЬ ПО События.Дата, События.СОбытие ; ВЫБРАТЬ * из Интервалы где событие = "Возобновление" |
|||
10
ЛучшийПрограммер1С
11.05.16
✎
08:48
|
(6) Да, но в него тогда надо данные каждый день писать +1 по обслуживанию или +1 по простою, не думаю, что это решение нормальное. Да и кто регистратором будет в таком случае?
|
|||
11
Ildarovich
11.05.16
✎
08:50
|
Подход в (2) имеет определенные проблемы с производительностью на больших объемах данных из-за использования неравенства в условиях соединения.
В статье "Быстрое определение интервалов в запросе" http://catalog.mista.ru/public/402534/ приведен быстрый метод, свободный от этого недостатка. С линейной зависимостью трудоемкости от объема данных. В целом нужно определить все интервалы и выбрать те, где событие В ("ПостановкаНаОбслуж", "ВозобновлениеОбслуж") |
|||
12
Лефмихалыч
11.05.16
✎
08:52
|
(10) не обязательно каждый день, можно с той же частотой, что и сейчас. Просто использование РН перенесет момент решения задачи с формирования отчетности на момент записи данных в базу.
|
|||
13
Лефмихалыч
11.05.16
✎
08:53
|
(11) спасибо
|
|||
14
ЛучшийПрограммер1С
11.05.16
✎
08:55
|
(12) понял, спасибо
|
|||
15
ЛучшийПрограммер1С
11.05.16
✎
08:57
|
(11) Что-то тут не так в последней строчке:
Дата НачалоИнтервала КонецИнтервала ------> t1 t1 t2 t2 t2 t3 t3 t3 t4 ... ... ... tn tn-1 tn Надо: ... ... ... tn-1 tn-1 tn tn |
|||
16
Лефмихалыч
11.05.16
✎
09:01
|
(11) что означает вот это троеточие? Объединение 32х таблиц?
http://s018.radikal.ru/i524/1605/f9/6a4dd737c108.png |
|||
17
Лефмихалыч
11.05.16
✎
09:02
|
(15) все норм - для tn нет интервала, там null'ы
|
|||
18
Лефмихалыч
11.05.16
✎
09:03
|
+(17) ну, или есть только начало интервала, но суть не меняется
|
|||
19
ЛучшийПрограммер1С
11.05.16
✎
09:04
|
(17) И я о том же, вообще строчки нет, а не нулы
|
|||
20
Лефмихалыч
11.05.16
✎
09:05
|
(19) нет, строчка есть. Значение tn есть, значит и строчка есть.
|
|||
21
ЛучшийПрограммер1С
11.05.16
✎
09:07
|
(16) Нет, там 30 таблиц временных определяются походу
|
|||
22
ЛучшийПрограммер1С
11.05.16
✎
09:08
|
(20) Нет, там суть в том, что из вектора надо получить матрицу с размерностью на 1 строчку меньше
|
|||
23
Лефмихалыч
11.05.16
✎
09:08
|
(21) вот я чо и спрашиваю... в 30 временных я не верю просто
|
|||
24
ЛучшийПрограммер1С
11.05.16
✎
09:09
|
(23) Там как-то одна через другую вычисляются
|
|||
25
ЛучшийПрограммер1С
11.05.16
✎
09:12
|
(23) Я тоже ничего не понял в этой статье )
|
|||
26
Ildarovich
11.05.16
✎
10:05
|
(16) троеточие означает повторение запросов в этом месте. Всего 32 тура и 32 временный таблицы. Но каждая - в два раза меньше предыдущей, поэтому их общий объем не больше исходной! Действительно, каждая вычисляется из предыдущей. Потом еще все объединяются.
32 тура нужно для секунд. Если у вас дни, то для трех лет хватит 10-ти туров. |
|||
27
Лефмихалыч
11.05.16
✎
10:08
|
(26) если ты слышишь треск, то это мои шаблоны :)
|
|||
28
Лефмихалыч
11.05.16
✎
10:09
|
какие, однако, кровавые иеромантические ритуалы и скатоложеские оргии приходится учинять в погоне за производительностью...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |