|   |   | 
| 
 | Помогите с запросом | ☑ | ||
|---|---|---|---|---|
| 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 | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |