|
Диаграмма Ганта с группировками. | ☑ | ||
---|---|---|---|---|
0
JuixyJes
31.07.19
✎
11:30
|
Доброго времени суток, товаришчи программисты! Какое то время назад создавала тему об отчете с Диаграммой Ганта для отображения загруженности номеров. Она сделана, все хорошо, но встала задача. Нужны группировки! Если до этого мне нужна была загрузка исключительно номеров, то теперь нужна возможность развернуть номер и посмотреть все комнаты в нем, а так же при надобности развернуть комнаты и посмотреть все койки в них. Стоит ли отказаться от диаграммы Ганта и использовать что-то другое, или же как то в диаграмме Ганта можно реализовать то же самое?
|
|||
1
wt
31.07.19
✎
11:49
|
Это хоспис что ли?
|
|||
2
palsergeich
31.07.19
✎
12:13
|
(0) Вполне можно
|
|||
3
palsergeich
31.07.19
✎
13:01
|
https://yadi.sk/d/ir-QUWJ3_7FKGg как пример
|
|||
4
wt
31.07.19
✎
13:33
|
(3) очень наглядно. Когда делал аренду, даже не подумал об этом. Справочник показался более функциональным, тем более, что позволял показывать планировки помещений.
|
|||
5
JuixyJes
01.08.19
✎
08:58
|
Так. Умудрилась вывести все записи номеров с группировкой по комнатам, в которых есть группировки по койкам. Но теперь вопрос, это я вывела из 3х справочников, тоесть отображения загруженности для них нет. Нужно как то добавить туда интервалы загруженности.
отчет.ДГ.Очистить(); ДиаграммаГанта = ДГ; ДиаграммаГанта.АвтоОпределениеПолногоИнтервала = Ложь; ДиаграммаГанта.УстановитьПолныйИнтервал(Отчет.Период.ДатаНачала,Отчет.Период.ДатаОкончания); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номера.Ссылка КАК Ссылка |ИЗ | Справочник.Номера КАК Номера"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ТочкаНомер = ДиаграммаГанта.УстановитьТочку(ВыборкаДетальныеЗаписи.Ссылка); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Комнаты.Ссылка КАК Ссылка |ИЗ | Справочник.Комнаты КАК Комнаты |ГДЕ | Комнаты.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", ВыборкаДетальныеЗаписи.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Выб = РезультатЗапроса.Выбрать(); Пока Выб.Следующий() Цикл ТочкаКомната = ТочкаНомер.Точки.Добавить(); ТочкаКомната.Значение = Выб.Ссылка; ТочкаКомната.Текст = Выб.Ссылка.Наименование; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Койки.Ссылка КАК Ссылка |ИЗ | Справочник.Койки КАК Койки |ГДЕ | Койки.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Выб.Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыбД = РезультатЗапроса.Выбрать(); Пока ВыбД.Следующий() Цикл ТочкаКойка = ТочкаКомната.Точки.Добавить(); ТочкаКойка.Значение = ВыбД.Ссылка; ТочкаКойка.Текст = ВыбД.Ссылка.Наименование; КонецЦикла; КонецЦикла; КонецЦикла; |
|||
6
JuixyJes
09.08.19
✎
12:22
|
ДГ.Очистить();
ДиаграммаГанта = ДГ; ДиаграммаГанта.ОтображатьЛегенду = Ложь; ДиаграммаГанта.АвтоОпределениеПолногоИнтервала = Ложь; ДиаграммаГанта.УстановитьПолныйИнтервал(Отчет.Период.ДатаНачала,Отчет.Период.ДатаОкончания); Серия = ДиаграммаГанта.УстановитьСерию("Серия"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номера.Ссылка КАК Ссылка, | ЗагруженностьНФ.ДатаЗаселения КАК ДатаЗаселения, | ЗагруженностьНФ.ДатаВыезда КАК ДатаВыезда |ИЗ | Справочник.Номера КАК Номера | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженностьНФ КАК ЗагруженностьНФ | ПО Номера.Ссылка = ЗагруженностьНФ.НомерПроживания |ИТОГИ ПО | Ссылка"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСсылка.Следующий() Цикл ТочкаНомер = ДиаграммаГанта.УстановитьТочку(ВыборкаСсылка.Ссылка); ВыборкаДетальныеЗаписи = ВыборкаСсылка.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Значение = ДиаграммаГанта.ПолучитьЗначение(ТочкаНомер,Серия); Если ВыборкаДетальныеЗаписи.ДатаЗаселения <> NULL и ВыборкаДетальныеЗаписи.ДатаВыезда <> NULL Тогда Интервал1 = Значение.Добавить(); Интервал1.Начало = ВыборкаДетальныеЗаписи.ДатаЗаселения; Интервал1.Конец = ВыборкаДетальныеЗаписи.ДатаВыезда; Интервал1.Цвет = WebЦвета.НейтральноАквамариновый; КонецЕсли; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Комнаты.Ссылка КАК Ссылка, | ЗагруженностьНФ.ДатаЗаселения КАК ДатаЗаселения, | ЗагруженностьНФ.ДатаВыезда КАК ДатаВыезда |ИЗ | Справочник.Комнаты КАК Комнаты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженностьНФ КАК ЗагруженностьНФ | ПО Комнаты.Ссылка = ЗагруженностьНФ.КомнатаПроживания |ГДЕ | Комнаты.Владелец = &Владелец |ИТОГИ ПО | Ссылка"; Запрос.УстановитьПараметр("Владелец", ВыборкаСсылка.Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаСсылкаКомнаты = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСсылкаКомнаты.Следующий() Цикл ТочкаКомната = ТочкаНомер.Точки.Добавить(); ТочкаКомната.Значение = ВыборкаСсылкаКомнаты.Ссылка; ТочкаКомната.Текст = ВыборкаСсылкаКомнаты.Ссылка.Наименование; Выб = ВыборкаСсылкаКомнаты.Выбрать(); Пока Выб.Следующий() Цикл Если Выб.ДатаЗаселения <> NULL и Выб.ДатаВыезда <> NULL Тогда Значение = ДиаграммаГанта.ПолучитьЗначение(ТочкаКомната,Серия); Интервал2 = Значение.Добавить(); Интервал2.Начало = Выб.ДатаЗаселения; Интервал2.Конец = Выб.ДатаВыезда; Интервал2.Цвет = WebЦвета.НейтральноАквамариновый; КонецЕсли; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Койки.Ссылка КАК Ссылка, | ЗагруженностьНФ.ДатаЗаселения КАК ДатаЗаселения, | ЗагруженностьНФ.ДатаВыезда КАК ДатаВыезда |ИЗ | Справочник.Койки КАК Койки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженностьНФ КАК ЗагруженностьНФ | ПО Койки.Ссылка = ЗагруженностьНФ.КойкаПроживания |ГДЕ | Койки.Владелец = &Комната |ИТОГИ ПО | Ссылка"; Запрос.УстановитьПараметр("Комната", ВыборкаСсылкаКомнаты.Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаСсылкаКойки = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСсылкаКойки.Следующий() Цикл ТочкаКойка = ТочкаКомната.Точки.Добавить(); ТочкаКойка.Значение = ВыборкаСсылкаКойки.Ссылка; ТочкаКойка.Текст = ВыборкаСсылкаКойки.Ссылка.Наименование; ВыбД = ВыборкаСсылкаКойки.Выбрать(); Пока ВыбД.Следующий() Цикл Если ВыбД.ДатаЗаселения <> NULL и ВыбД.ДатаВыезда <> NULL Тогда Значение = ДиаграммаГанта.ПолучитьЗначение(ТочкаКойка,Серия); Интервал3 = Значение.Добавить(); Интервал3.Начало = ВыбД.ДатаЗаселения; Интервал3.Конец = ВыбД.ДатаВыезда; Интервал3.Цвет = WebЦвета.НейтральноАквамариновый; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; |
|||
7
JuixyJes
09.08.19
✎
12:24
|
Пришла к такому коду, возможно не оптимально, но грузит быстро. Возник вопрос! Мне нужно разнообразие в цветах. Если номер загружен целиком, тогда цвет - Темный, если в номере загружены комнаты в отдельности - светлее, если в комнатах койки - еще светлее, как это можно реализовать?
|
|||
8
НадюшаЯ
09.08.19
✎
12:32
|
(7) Точно неоптимально, множество запросов в цикле, что при большом массиве данных, даст такую нагрузку что, мама не горюй.
Делать функцию определения загруженности номера и в зависимости от нее красить интервал. Но лучше конечно пересмотреть данный алгоритм, чтобы все данные выбирались одним запросом. |
|||
9
palsergeich
09.08.19
✎
12:33
|
(7) разные серии в рамках строки
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |