|
Выборка данных по нескольким периодам | ☑ | ||
---|---|---|---|---|
0
KoBapeH
21.07.15
✎
12:02
|
Есть периодический (посекундно), независимый регистр сведений "СостояниеНоменклатуры", в котором заносятся изменения состояния номенклатуры и время, когда это было выполнено. Суть вопроса: надо выбрать обороты из регистра партий товаров, когда номенклатура имела определенное состояние. Сложность заключается в том, что промежутков, когда позиция имела конкретное состояние может быть несколько. И не понятно, как связать регистры в одном запросе. А делать циклы для получения оборотов по каждому промежутку не очень хочется.
|
|||
1
palpetrovich
21.07.15
✎
12:08
|
а зачем циклы, объеденить в запросе должно помомь ..наверное :)
|
|||
2
sapphire
21.07.15
✎
12:14
|
(0) В чьом сложност?
1. Формируем диапазоны когда Номенклатура имела нужное состояние и индексируем по Номенклатуре и началу и окончанию периода 2. Левым соединением выбрать обороты из регистра партий товаров период между периодами состояния и номенклатура. Всё. |
|||
3
KoBapeH
21.07.15
✎
16:56
|
(2) не совсем понятно, как это может выглядеть в запросе.
|
|||
4
KoBapeH
21.07.15
✎
17:00
|
(2) это по пункту 1, если что.
|
|||
5
KoBapeH
21.07.15
✎
17:07
|
(2) т.е. вы предлагаете создать таблицу значений с номенклатурой и периодами, где каждой строке будет соответствовать один период, когда номенклатура была в нужном состоянии, а затем через временную таблицу запихнуть в запрос и через левое соединение к ней подвязывать обороты?
|
|||
6
Лефмихалыч
21.07.15
✎
17:09
|
Задача дикая какая-то. На больших объемах нет вариантов ее решить эффективно, не накапливая такие обороты отдельно.
|
|||
7
KoBapeH
21.07.15
✎
17:12
|
(6) да хочется попробовать сделать не допиливая обороты. Тут просто самому интересно стало.
|
|||
8
Лефмихалыч
21.07.15
✎
17:14
|
(7) да даже, если рядом положишь регистр, который будет копить обороты в периоды, когда есть эти состояния, задача все равно нерешабельная, т.к. в независимом регистре в любой момент все может поменяться непредсказуемым способом.
С постановкой у тебя беда бедовая. Тебе, судя по всему, вместо того, чтобы задачу поставить, предложили готовое техническое решение люди, которые в таких решениях не компетентны. |
|||
9
Лефмихалыч
21.07.15
✎
17:15
|
тут задача скорее не в получении оборотов, а в этих состояниях - они реализованы таким способом, который не предполагает требуемого учета.
|
|||
10
palpetrovich
21.07.15
✎
17:50
|
в порядке бреда к концу дня :)
ВЫБРАТЬ СостояниеНоменклатуры.ВремяНачала, СостояниеНоменклатуры.ВремяОкончания, ПартииТоваровНаСкладахОбороты.Номенклатура, ПартииТоваровНаСкладахОбороты.КоличествоОборот ИЗ РегистрСведений.СостояниеНоменклатуры КАК СостояниеНоменклатуры левое СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Обороты( &Дата1, &Дата2, Запись, ) КАК ПартииТоваровНаСкладахОбороты ПО ПартииТоваровНаСкладахОбороты.Номенклатура = СостояниеНоменклатуры.Номенклатура И ПартииТоваровНаСкладахОбороты.Период МЕЖДУ СостояниеНоменклатуры.ВремяНачала И СостояниеНоменклатуры.ВремяОкончания ГДЕ СостояниеНоменклатуры.Активность |
|||
11
Ildarovich
22.07.15
✎
13:54
|
Вопрос не сложный. Есть два пути:
1) из регистра сведений "состояния номенклатуры" получить все интервалы, когда номенклатура имела имела нужные состояния. Это делается соединением состояний с собой по номенклатуре и группировкой с выбором в качестве времени окончания минимума бОльших времен. Далее запрос типа (10). 2) если состояния номенклатуры меняются чаще, чем раз в месяц или примерно столько же, то может быть выгоднее работать не с виртуальной таблицей оборотов, а с реальной таблицей движений регистра. Тогда к каждому движению можно приписать соответствующее ему в данный момент состояние номенклатуры обычным приемом мультисрезов последних. Например, кореллированным запросом как в http://forum.infostart.ru/forum24/topic36354/message1387849/#message1387849. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |