|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
IvanVlad1
05.03.22
✎
14:52
|
Помню где-то видел такой запрос, который сворачивает периоды
Есть таблица ТН ДатаНачала ДатаОкончания График 01934000 03.02.2022 03.02.2022 График1 01934000 04.02.2022 13.02.2022 График1 01934000 14.02.2022 16.02.2022 График1 01934000 17.02.2022 21.02.2022 График25 01934000 22.02.2022 31.12.3999 График1 Надо свернуть периоды и получить результат ТН ДатаНачала ДатаОкончания График 01934818 03.02.2022 16.02.2022 График1 01934818 17.02.2022 21.02.2022 График25 01934818 22.02.2022 31.12.3999 График1 |
|||
1
МихаилМ
05.03.22
✎
16:05
|
Ищите по "тэта-соединение"
|
|||
2
МихаилМ
05.03.22
✎
16:06
|
(0) не понял ,как 01934000 у Вас превратилась 01934000 в 01934818
|
|||
3
Homer
05.03.22
✎
16:12
|
Вот для примера
// ВЫБРАТЬ "Отрезок1" КАК Ссылка, ДАТАВРЕМЯ(2021, 10, 1) КАК ДатаНачала, ДАТАВРЕМЯ(2021, 10, 2) КАК ДатаКонца, "+" КАК Аналитика1 ПОМЕСТИТЬ мТаб ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 2), ДАТАВРЕМЯ(2021, 10, 5), "+" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 5), ДАТАВРЕМЯ(2021, 10, 6), "+" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 6), ДАТАВРЕМЯ(2021, 10, 7), "+" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 7), ДАТАВРЕМЯ(2021, 10, 9), "+" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 9), ДАТАВРЕМЯ(2021, 10, 10), "+" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 10), ДАТАВРЕМЯ(2021, 10, 11), "+" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 5), ДАТАВРЕМЯ(2021, 10, 8), "-" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 22), ДАТАВРЕМЯ(2021, 10, 25), "+" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок1", ДАТАВРЕМЯ(2021, 10, 25), ДАТАВРЕМЯ(2021, 10, 26), "+" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Отрезок2", ДАТАВРЕМЯ(2021, 10, 1), ДАТАВРЕМЯ(2021, 10, 7), "+" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Таб.Ссылка КАК Ссылка, Таб.ДатаНачала КАК НачалоДуги, Таб.ДатаКонца КАК КонецДуги, Таб.Аналитика1 ПОМЕСТИТЬ ЗамыканияДлины1 ИЗ мТаб КАК Таб ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги, ВтораяДуга.Ссылка, ВтораяДуга.Аналитика1 ПОМЕСТИТЬ ЗамыканияДлины2 ИЗ ЗамыканияДлины1 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины1 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги И ПерваяДуга.Ссылка = ВтораяДуга.Ссылка И ПерваяДуга.Аналитика1 = ВтораяДуга.Аналитика1 ОБЪЕДИНИТЬ ВЫБРАТЬ Таб.ДатаНачала, Таб.ДатаКонца, Таб.Ссылка, Таб.Аналитика1 ИЗ мТаб КАК Таб ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги, ВтораяДуга.Ссылка, ВтораяДуга.Аналитика1 ПОМЕСТИТЬ ЗамыканияДлины4 ИЗ ЗамыканияДлины2 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины2 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги И ПерваяДуга.Ссылка = ВтораяДуга.Ссылка И ПерваяДуга.Аналитика1 = ВтораяДуга.Аналитика1 ОБЪЕДИНИТЬ ВЫБРАТЬ Таб.ДатаНачала, Таб.ДатаКонца, Таб.Ссылка, Таб.Аналитика1 ИЗ мТаб КАК Таб ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги, ВтораяДуга.Ссылка, ВтораяДуга.Аналитика1 ПОМЕСТИТЬ ЗамыканияДлины8 ИЗ ЗамыканияДлины4 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины4 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги И ПерваяДуга.Ссылка = ВтораяДуга.Ссылка И ПерваяДуга.Аналитика1 = ВтораяДуга.Аналитика1 ОБЪЕДИНИТЬ ВЫБРАТЬ Таб.ДатаНачала, Таб.ДатаКонца, Таб.Ссылка, Таб.Аналитика1 ИЗ мТаб КАК Таб ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗамыканияДлины8.НачалоДуги КАК Предок, МАКСИМУМ(ЗамыканияДлины8.КонецДуги) КАК Потомок, ЗамыканияДлины8.Ссылка, ЗамыканияДлины8.Аналитика1 ПОМЕСТИТЬ м1 ИЗ ЗамыканияДлины8 КАК ЗамыканияДлины8 ГДЕ ЗамыканияДлины8.НачалоДуги <> ЗамыканияДлины8.КонецДуги СГРУППИРОВАТЬ ПО ЗамыканияДлины8.Ссылка, ЗамыканияДлины8.НачалоДуги, ЗамыканияДлины8.Аналитика1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МИНИМУМ(м1.Предок) КАК Предок, м1.Потомок, м1.Ссылка, м1.Аналитика1 ИЗ м1 КАК м1 СГРУППИРОВАТЬ ПО м1.Ссылка, м1.Потомок, м1.Аналитика1 |
|||
4
Kigo_Kigo
05.03.22
✎
16:56
|
а чем
ТЗ= Запрос.Выполнить.Выгрузить() Тз.Свернуть("Колонка1,Колонка2","Количество") не подходит? |
|||
5
hockeyist
05.03.22
✎
18:14
|
(4) Примерно ничем, если внимательно читать вопрос
|
|||
6
Dmitrii
гуру
05.03.22
✎
19:16
|
Походе на историю, когда разработчики решили использовать регистр сведений или справочник там, где надо было сделать простейший регистр расчета с графиком и периодом действия.
|
|||
7
Dmitrii
гуру
05.03.22
✎
19:16
|
(6) *Похоже
|
|||
8
youalex
05.03.22
✎
20:48
|
(6) Разрабы типового ЗУП , насколько я помню, РР тоже не особо балуют, а эмулируют его на РН, и дальше всю логику строят на РН.
И существенный плюс - то что они отказались от рудиментарных семерочных периодических регистров/срезов, а переделали всю основную логику на условно интервальные регистры (хоть и криво) |
|||
9
rsv
05.03.22
✎
21:16
|
(0) выбрать тн, график, min(дн) , max(до) из табличка group by тн, график
Должно помочь |
|||
10
SuperMario
06.03.22
✎
10:06
|
(9) тогда две записи будут.
03.02.2022 31.12.3999 График1 17.02.2022 21.02.2022 График25 |
|||
11
Said_We
18.03.22
✎
14:25
|
(0) Для каждой записи нужно найти ближайшую с другим значением График. Можно как после, так и перед.
Далее уже можно сворачивать. До сих пор не понимаю зачем в РС использовать дату окончания. Запросы по вытаскиванию данных строить сложнее и данные вытаскивать сложнее. Не на много, но сложнее. Запросы получаются длиннее - из пустого в порожнее. |
|||
12
Said_We
18.03.22
✎
15:37
|
(0)
Есть таблица ТН ДатаНачала ДатаОкончания График 01934000 03.02.2022 03.02.2022 График1 01934000 04.02.2022 13.02.2022 График1 01934000 14.02.2022 16.02.2022 График1 01934000 17.02.2022 21.02.2022 График25 01934000 22.02.2022 31.12.3999 График1 Если тут периоды всегда полные, т.е. после даты окончания не равной 31.12.3999 всегда следует запись с датой начала = дата окончания текущей записи +1 день. Можно упростить задачу и дата окончания вообще не нужна. Её можно мотом посчитать. Есть таблица ТН ДатаНачала ДатаОкончания График Предыдущий_График Изменияет_График 01934000 03.02.2022 03.02.2022 График1 NULL Да 01934000 04.02.2022 13.02.2022 График1 График1 Нет 01934000 14.02.2022 16.02.2022 График1 График1 Нет 01934000 17.02.2022 21.02.2022 График25 График1 Да 01934000 22.02.2022 31.12.3999 График1 График25 Да Далее не учитываем все записи, которые график не меняют и дату окончания тоже: ТН ДатаНачала График Изменияет_График 01934000 03.02.2022 График1 Да 01934000 17.02.2022 График25 Да 01934000 22.02.2022 График1 Да А дальше собственно по такой таблице построить период не составляет сложностей. В результате получите требуемую таблицу. |
|||
13
ejikbeznojek
18.03.22
✎
15:41
|
Минимум (ДатаНачала), Максимум(ДатаОкончания)
Сгруппировать по ТН, График |
|||
14
ejikbeznojek
18.03.22
✎
15:47
|
(13)
Выбрать Минимум(ТЗ.ДатаНачала) как ДатаНачала, Максимум(ТЗ.ДатаОкончания) как ДатаОкончания, ТЗ.ТН как ТН, ТЗ.График как График из &ТвояТЗ как ТЗ Сгруппировать по ТН, График |
|||
15
Said_We
18.03.22
✎
15:52
|
(14) Неа. Так не пойдет. Результат будет как в (10), а это неверный результат.
|
|||
16
Said_We
18.03.22
✎
16:11
|
+ к (12) построение периода из последовательностей дат.
8.3 Накопленный итог запросом Часть постов скрыты, например 21 - но можно смотреть по кнопке >>. Там построение периода не в 1С если интересно. В 1С этим всё грустно - километровыми запросами решается. |
|||
17
Said_We
18.03.22
✎
16:15
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |