|
Интервальное деление года запросом | ☑ | ||
---|---|---|---|---|
0
Tateossian
08.08.17
✎
20:32
|
Всем привет!
Год нужно разбить на 4-часовые интервалы, т. е. в стуках 6 интервалов. В году 2196 интервалов. Пример работы запроса: указывается &НачалоПериода и &КонецПериода для виртуальной таблицы оборотного регистра. Предположим, первый параметр будет 01.01.2016, а второй - 31.12.2016 23:59:59. Тогда разбивка по интервалам вернет таблицу такого содержания: Тик 0 - 01.01.2016 00:00:00 Тик 1 - 01.01.2016 00:04:00 Тик 2 - 01.01.2016 00:08:00 Тик 2195 - 31.12.2016 23:59:59. Если я сдвину на месяц вперед начало периода и, соответственно, конец, тогда должно получится вот так: Тик 0 - 01.02.2016 00:00:00 Тик 1 - 01.02.2016 00:04:00 Тик 2 - 01.02.2016 00:08:00 Тик 2195 - 31.01.2017 23:59:59 Косяк в моем варианте реализации, что я "отбрасываю" год и у меня получается вот так: Тик 0 - 01.01.2017 00:00:00 Тик 1 - 01.01.2017 00:04:00 Тик 2 - 01.01.2017 00:08:00 Тик 2195 - 31.12.2016 23:59:59 Как корректно произвести сдвиг? |
|||
1
Волшебник
модератор
08.08.17
✎
20:33
|
Зачем всё это?
|
|||
2
Tateossian
08.08.17
✎
20:34
|
(1) Укрупнение данных для аналитических задач.
|
|||
3
Волшебник
модератор
08.08.17
✎
20:35
|
Сделай таблицу значений и закинь её в запрос.
|
|||
4
Tateossian
08.08.17
✎
20:38
|
(3) А запросом никак? Таблицей можно, конечно.
|
|||
5
Волшебник
модератор
08.08.17
✎
20:44
|
(4) религия не позволяет?
|
|||
6
Волшебник
модератор
08.08.17
✎
20:45
|
показал бы запрос что ли...
|
|||
7
vadim777
08.08.17
✎
20:51
|
(0) Запрос - для извлечения данных, а не для расчетов. Тут только ТЗ.
|
|||
8
Tateossian
08.08.17
✎
20:54
|
(5) Дело в том, что это интеграционное решение и таблицу я передать не смогу (простым способом). Вот пример запроса:
" |ВЫБРАТЬ | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг) КАК Регистратор, | ПродажиПоАкциямОбороты.Период КАК Период, | СУММА(ПродажиПоАкциямОбороты.КоличествоОборот) КАК КоличествоРасход, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Склад.ПлощадкаСклада КАК ПлощадкаСклада |ПОМЕСТИТЬ ДвиженияПоРегистру |ИЗ | РегистрНакопления.ПродажиПоАкциям.Обороты( | &НачалоПериода, | &КонецПериода, | Час, | Номенклатура = &Номенклатура | И Акция = ЗНАЧЕНИЕ(Документ.МаркетинговаяАкция.ПустаяСсылка)) КАК ПродажиПоАкциямОбороты | |СГРУППИРОВАТЬ ПО | ПродажиПоАкциямОбороты.Период, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Склад.ПлощадкаСклада, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг), | ПродажиПоАкциямОбороты.Период, | СУММА(-ПродажиПоАкциямОбороты.КоличествоОборот), | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Склад.ПлощадкаСклада |ИЗ | РегистрНакопления.ПродажиПоАкциям.Обороты( | &НачалоПериода, | &КонецПериода, | Регистратор, | Номенклатура = &Номенклатура | И Акция = ЗНАЧЕНИЕ(Документ.МаркетинговаяАкция.ПустаяСсылка)) КАК ПродажиПоАкциямОбороты |ГДЕ | ПродажиПоАкциямОбороты.Регистратор ССЫЛКА Документ.КорректировкаЗаписейРегистров | |СГРУППИРОВАТЬ ПО | ПродажиПоАкциямОбороты.Период, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Склад.ПлощадкаСклада, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг), | ПродажиПоАкциямОбороты.Период, | СУММА(-ПродажиПоАкциямОбороты.КоличествоОборот), | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Склад.ПлощадкаСклада |ИЗ | РегистрНакопления.ПродажиПоАкциям.Обороты( | &НачалоПериода, | &КонецПериода, | Регистратор, | Номенклатура = &Номенклатура | И Акция = ЗНАЧЕНИЕ(Документ.МаркетинговаяАкция.ПустаяСсылка)) КАК ПродажиПоАкциямОбороты |ГДЕ | ПродажиПоАкциямОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации | |СГРУППИРОВАТЬ ПО | ПродажиПоАкциямОбороты.Период, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Склад.ПлощадкаСклада, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг), | ПродажиПоАкциямОбороты.ДокументПродажи.Дата, | СУММА(ПродажиПоАкциямОбороты.КоличествоОборот), | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Склад.ПлощадкаСклада |ИЗ | РегистрНакопления.ПродажиПоАкциям.Обороты( | &НачалоПериода, | &КонецПериода, | Регистратор, | Номенклатура = &Номенклатура | И Акция = ЗНАЧЕНИЕ(Документ.МаркетинговаяАкция.ПустаяСсылка)) КАК ПродажиПоАкциямОбороты |ГДЕ | ПродажиПоАкциямОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации | |СГРУППИРОВАТЬ ПО | ПродажиПоАкциямОбороты.ДокументПродажи.Дата, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Склад.ПлощадкаСклада, | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияПоРегистру.Период КАК Период, | СУММА(ДвиженияПоРегистру.КоличествоРасход) КАК КоличествоРасход, | ДвиженияПоРегистру.ПлощадкаСклада, | ВЫБОР | КОГДА ЧАС(ДвиженияПоРегистру.Период) / 4 < 2 | ТОГДА 1 | КОГДА ЧАС(ДвиженияПоРегистру.Период) / 4 < 3 | ТОГДА 2 | КОГДА ЧАС(ДвиженияПоРегистру.Период) / 4 < 4 | ТОГДА 3 | КОГДА ЧАС(ДвиженияПоРегистру.Период) / 4 < 5 | ТОГДА 4 | КОГДА ЧАС(ДвиженияПоРегистру.Период) / 4 < 6 | ТОГДА 5 | КОГДА ЧАС(ДвиженияПоРегистру.Период) / 4 < 7 | ТОГДА 6 | КОНЕЦ КАК Тик, | ДЕНЬГОДА(ДвиженияПоРегистру.Период) КАК ДеньГода |ПОМЕСТИТЬ ДвиженияПоТикам |ИЗ | ДвиженияПоРегистру КАК ДвиженияПоРегистру | |СГРУППИРОВАТЬ ПО | ДвиженияПоРегистру.Период, | ДвиженияПоРегистру.ПлощадкаСклада |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | &ГУИД GUID, | ВЗ.Тик КАК Tick, | СУММА(ВЗ.КоличествоРасход) КАК Consumption |ИЗ | (ВЫБРАТЬ | ДвиженияПоТикам.Период КАК Период, | ДвиженияПоТикам.КоличествоРасход КАК КоличествоРасход, | ДвиженияПоТикам.ПлощадкаСклада КАК ПлощадкаСклада, | ДвиженияПоТикам.ДеньГода * 6 + ДвиженияПоТикам.Тик - 5 КАК Тик, | ДвиженияПоТикам.ДеньГода КАК ДеньГода | ИЗ | ДвиженияПоТикам КАК ДвиженияПоТикам | ГДЕ | ДвиженияПоТикам.ПлощадкаСклада = &ПлощадкаСклада) КАК ВЗ | |СГРУППИРОВАТЬ ПО | ВЗ.Тик | |УПОРЯДОЧИТЬ ПО | Tick"); Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("ГУИД", Строка(Номенклатура.УникальныйИдентификатор())); Запрос.УстановитьПараметр("ПлощадкаСклада", ПлощадкаСклада); Результат = Запрос.Выполнить().Выгрузить(); |
|||
9
Tateossian
08.08.17
✎
20:55
|
(7) Для расчетов используется совсем другое ПО, в этом проблема.
|
|||
10
Волшебник
модератор
08.08.17
✎
21:03
|
(9) Вот пусть это ПО и занимается интервализацией
|
|||
11
Tateossian
08.08.17
✎
21:13
|
(10) Это уже не по существу вопроса.
|
|||
12
Tateossian
09.08.17
✎
00:37
|
Вот решение данной задачи.
" |ВЫБРАТЬ | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг) Регистратор, | СУММА(ПродажиПоАкциямОбороты.КоличествоОборот) КоличествоРасход, | ПродажиПоАкциямОбороты.Номенклатура, | НАЧАЛОПЕРИОДА(ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Дата, ЧАС) Период |ПОМЕСТИТЬ ДвиженияПоРегистру |ИЗ | РегистрНакопления.ПродажиПоАкциям.Обороты( | , | , | Авто, | Номенклатура = &Номенклатура | И Акция = ЗНАЧЕНИЕ(Документ.МаркетинговаяАкция.ПустаяСсылка) | И (ВЫРАЗИТЬ(ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Дата МЕЖДУ &НачалоПериода И &КонецПериода)) КАК ПродажиПоАкциямОбороты | |СГРУППИРОВАТЬ ПО | ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг), | ПродажиПоАкциямОбороты.Номенклатура, | НАЧАЛОПЕРИОДА(ВЫРАЗИТЬ(ПродажиПоАкциямОбороты.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).Дата, ЧАС) | |ИНДЕКСИРОВАТЬ ПО | Период, | Регистратор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(&НачалоПериода, ЧАС, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) Период |ПОМЕСТИТЬ Периоды |ИЗ | (ВЫБРАТЬ | 0 КАК a | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 1 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 2 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 3 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 4 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 5 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 6 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 7 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 8 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 9) КАК aa, | (ВЫБРАТЬ | 0 КАК b | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 1 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 2 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 3 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 4 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 5 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 6 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 7 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 8 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 9) КАК bb, | (ВЫБРАТЬ | 0 КАК c | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 1 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 2 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 3 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 4 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 5 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 6 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 7 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 8 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 9) КАК cc, | (ВЫБРАТЬ | 0 КАК d | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 1 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 2 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 3 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 4 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 5 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 6 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 7 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 8 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 9) КАК dd |ГДЕ | aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ЧАС) | |ИНДЕКСИРОВАТЬ ПО | Период |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЗ.Период, | ВЗ.НПП КАК НПП, | ВЗ.НПП * 4 КАК НППЧетыре |ПОМЕСТИТЬ РасчетнаяКолонка |ИЗ | (ВЫБРАТЬ | Периоды.Период КАК Период, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Периоды1.Период) - 1 КАК НПП | ИЗ | Периоды КАК Периоды | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Периоды КАК Периоды1 | ПО Периоды.Период >= Периоды1.Период | | СГРУППИРОВАТЬ ПО | Периоды.Период) КАК ВЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | РасчетнаяКолонка.Период КАК Период, | РасчетнаяКолонка.НПП / 4 КАК Тик, | ДОБАВИТЬКДАТЕ(РасчетнаяКолонка.Период, ЧАС, -4) КАК ПериодН |ПОМЕСТИТЬ Тики |ИЗ | РасчетнаяКолонка КАК РасчетнаяКолонка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РасчетнаяКолонка КАК РасчетнаяКолонка1 | ПО РасчетнаяКолонка.НПП = РасчетнаяКолонка1.НППЧетыре | |ИНДЕКСИРОВАТЬ ПО | Период, | ПериодН |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ Периоды |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ РасчетнаяКолонка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СУММА(ДвиженияПоРегистру.КоличествоРасход) КАК Consumption, | ДвиженияПоРегистру.Номенклатура SKU, | Тики.Тик КАК Tick |ИЗ | ДвиженияПоРегистру КАК ДвиженияПоРегистру | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Тики КАК Тики | ПО ДвиженияПоРегистру.Период >= Тики.ПериодН | И ДвиженияПоРегистру.Период < Тики.Период | |СГРУППИРОВАТЬ ПО | ДвиженияПоРегистру.Номенклатура, | Тики.Тик | |УПОРЯДОЧИТЬ ПО | Тик" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |