Имя: Пароль:
1C
1С v8
Запросом вытянуть не только данные по койкам, но и по номерам и по комнатам
0 JuixyJes
 
22.08.19
11:51
ВЫБРАТЬ
    Койки.Владелец.Владелец.Ссылка КАК Номер,
    Койки.Владелец.Ссылка КАК Комната,
    Койки.Ссылка КАК Койка,
    ЗагруженностьНФ.ДатаЗаселения КАК ДатаЗаселения,
    ЗагруженностьНФ.ДатаВыезда КАК ДатаВыезда
ИЗ
    Справочник.Койки КАК Койки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженностьНФ КАК ЗагруженностьНФ
        ПО Койки.Ссылка = ЗагруженностьНФ.КойкаПроживания

УПОРЯДОЧИТЬ ПО
    Комната,
    Койка
ИТОГИ ПО
    Номер,
    Комната,
    Койка
1 JuixyJes
 
22.08.19
11:52
Проблема в том, что если есть записи, где заполнен только владелец(комната) или только ВладелецВладелец(Номер), они не попадут в результат запроса.
2 JuixyJes
 
22.08.19
11:54
https://priscree.ru/img/83c5ec3ae8d5ba.jpg

Скрин результатов запроса.
3 unenu
 
22.08.19
11:56
4 hhhh
 
22.08.19
11:58
(1) попадут.

Только пиши по нормальному

ВЫБРАТЬ
    Койки.Владелец.Владелец КАК Номер,
    Койки.Владелец КАК Комната,


нахрена это дерьмо присобачиваешь?  ".Ссылка"     Выкинь, это дерьмо, от него куча бед.
5 gSha
 
22.08.19
11:58
тут проблема такая - когда 1с сделало иерархию это расценивалось как достижение. А по факту любая иерархия это произвол того порядка который ее устанавливает ..
6 JuixyJes
 
22.08.19
11:58
(4) и как попадут?
7 gSha
 
22.08.19
12:00
Никак ты это не решишь. Допустим если у тебя есть этаж и комнаты , а койку поставили в коридоре, то тебе нужен признак того что запись имеет признак койки, что бы он отобразился , а у тебя этот признак скрыт иерархией неявно.
8 hhhh
 
22.08.19
12:00
(6) должны как пустые строчки если нет владельца
9 gSha
 
22.08.19
12:01
У меня такая же байда. Но у меня база без отчетов ) Но какая зарплата, такая и база)))
10 hhhh
 
22.08.19
12:01
(6) но ввобще-то ты чудишь. Если нет владельца, то ты ведь не можешь задать владелец-владельца. Как ты его определила?
11 JuixyJes
 
22.08.19
12:02
(4) это убрала ".Ссылка", но все же, у меня есть записи, где "загруженность" есть у Номера или Комнаты, в отчет не попадают. (2) вот тут есть результат запроса.
12 JuixyJes
 
22.08.19
12:03
У меня идет заполнение ДиаграммыГанта, используя сие творенье (запрос)



Процедура ПосмотретьНаСервере(ДГ)
    ДГ.Очистить();    
    ДиаграммаГанта = ДГ;
    ДиаграммаГанта.ОтображатьЛегенду = Ложь;
    ДиаграммаГанта.АвтоОпределениеПолногоИнтервала = Ложь;
    ДиаграммаГанта.УстановитьПолныйИнтервал(Отчет.Период.ДатаНачала,Отчет.Период.ДатаОкончания);
    Серия = ДиаграммаГанта.УстановитьСерию("Серия");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Койки.Владелец.Владелец.Ссылка КАК Номер,
    |    Койки.Владелец.Ссылка КАК Комната,
    |    Койки.Ссылка КАК Койка,
    |    ЗагруженностьНФ.ДатаЗаселения КАК ДатаЗаселения,
    |    ЗагруженностьНФ.ДатаВыезда КАК ДатаВыезда
    |ИЗ
    |    Справочник.Койки КАК Койки
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженностьНФ КАК ЗагруженностьНФ
    |        ПО Койки.Ссылка = ЗагруженностьНФ.КойкаПроживания
    |
    |УПОРЯДОЧИТЬ ПО
    |    Комната,
    |    Койка
    |ИТОГИ ПО
    |    Номер,
    |    Комната,
    |    Койка";
    
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаНомер = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаНомер.Следующий() Цикл
        // Вставить обработку выборки ВыборкаНомер
        ТочкаНомер = ДиаграммаГанта.УстановитьТочку(ВыборкаНомер.Номер);
        ВыборкаКомната = ВыборкаНомер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Пока ВыборкаКомната.Следующий() Цикл
            Если ВыборкаКомната.ДатаЗаселения <> NULL и ВыборкаКомната.ДатаВыезда <> NULL  Тогда
                Значение1 = ДиаграммаГанта.ПолучитьЗначение(ТочкаНомер,Серия);
                Интервал1 = Значение1.Добавить();
                Интервал1.Начало = ВыборкаКомната.ДатаЗаселения;
                Интервал1.Конец = ВыборкаКомната.ДатаВыезда;
                Интервал1.Цвет = WebЦвета.ЦветМорскойВолны;
            КонецЕсли;
            ТочкаКомната = ТочкаНомер.Точки.Добавить();
            ТочкаКомната.Значение = ВыборкаКомната.Комната;
            ТочкаКомната.Текст = ВыборкаКомната.Комната.Наименование;
            
            ВыборкаКойка = ВыборкаКомната.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            
            Пока ВыборкаКойка.Следующий() Цикл
                Если ВыборкаКойка.ДатаЗаселения <> NULL и ВыборкаКойка.ДатаВыезда <> NULL  Тогда
                    Значение1 = ДиаграммаГанта.ПолучитьЗначение(ТочкаНомер,Серия);
                    Интервал1 = Значение1.Добавить();
                    Интервал1.Начало = ВыборкаКойка.ДатаЗаселения;
                    Интервал1.Конец = ВыборкаКойка.ДатаВыезда;
                    Интервал1.Цвет = WebЦвета.Бирюзовый;
                    
                    Значение2 = ДиаграммаГанта.ПолучитьЗначение(ТочкаКомната,Серия);
                    Интервал2 = Значение2.Добавить();
                    Интервал2.Начало = ВыборкаКойка.ДатаЗаселения;
                    Интервал2.Конец = ВыборкаКойка.ДатаВыезда;
                    Интервал2.Цвет = WebЦвета.ЦветМорскойВолны;
                КонецЕсли;
                ТочкаКойка = ТочкаКомната.Точки.Добавить();
                ТочкаКойка.Значение = ВыборкаКойка.Койка;
                ТочкаКойка.Текст = ВыборкаКойка.Койка.Наименование;
                
                ВыборкаДетальныеЗаписи = ВыборкаКойка.Выбрать();
                
                Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                    // Вставить обработку выборки ВыборкаДетальныеЗаписи
                    Если ВыборкаДетальныеЗаписи.ДатаЗаселения <> NULL и ВыборкаДетальныеЗаписи.ДатаВыезда <> NULL  Тогда
                        Значение1 = ДиаграммаГанта.ПолучитьЗначение(ТочкаНомер,Серия);
                        Интервал1 = Значение1.Добавить();
                        Интервал1.Начало = ВыборкаДетальныеЗаписи.ДатаЗаселения;
                        Интервал1.Конец = ВыборкаДетальныеЗаписи.ДатаВыезда;
                        Интервал1.Цвет = WebЦвета.БледноБирюзовый;
                        
                        Значение2 = ДиаграммаГанта.ПолучитьЗначение(ТочкаКомната,Серия);
                        Интервал2 = Значение2.Добавить();
                        Интервал2.Начало = ВыборкаДетальныеЗаписи.ДатаЗаселения;
                        Интервал2.Конец = ВыборкаДетальныеЗаписи.ДатаВыезда;
                        Интервал2.Цвет = WebЦвета.Бирюзовый;
                        
                        Значение3 = ДиаграммаГанта.ПолучитьЗначение(ТочкаКойка,Серия);
                        Интервал3 = Значение3.Добавить();
                        Интервал3.Начало = ВыборкаДетальныеЗаписи.ДатаЗаселения;
                        Интервал3.Конец = ВыборкаДетальныеЗаписи.ДатаВыезда;
                        Интервал3.Цвет = WebЦвета.ЦветМорскойВолны;
                    КонецЕсли;
                КонецЦикла;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    
    
    
КонецПроцедуры
13 gSha
 
22.08.19
12:04
Ответь на простой вопрос - Что такое владелец койки и твоя жизнь станет лучше.
14 JuixyJes
 
22.08.19
12:04
Но отладчиком прошла, кроме как в последнее условие не проваливается ни в одно другое
15 JuixyJes
 
22.08.19
12:05
(13) Владелец койки - комната, владелец комнаты - номер
16 hhhh
 
22.08.19
12:06
(13) это такой мужик, который в отельном бизнесе.
17 hhhh
 
22.08.19
12:12
(15) много лишнего у тебя. Про ссылку я сказал. Вот это еще

           Если ВыборкаКомната.ДатаЗаселения <> NULL и ВыборкаКомната.ДатаВыезда <> NULL  Тогда
                Значение1 = ДиаграммаГанта.ПолучитьЗначение(ТочкаНомер,Серия);
                Интервал1 = Значение1.Добавить();
                Интервал1.Начало = ВыборкаКомната.ДатаЗаселения;
                Интервал1.Конец = ВыборкаКомната.ДатаВыезда;
                Интервал1.Цвет = WebЦвета.ЦветМорскойВолны;
            КонецЕсли;


ВыборкаКомната.ДатаЗаселения всегда = NULL, потому что в итогах ее нет. Она только в детальных записях у тебя. Поэтому эти строчки можешь спокойно выбросить в помойку.
18 gSha
 
22.08.19
12:12
Когда у койки не заполнен владелец у нее нет комнаты .. а раз нет комнаты то все проверки в циклах бесмыслены ..
Если ВыборкаКомната.ДатаЗаселения <> NULL и ВыборкаКомната.ДатаВыезда <> NULL  Тогда
но я то понимает конечно что жить с этим тяжело ..
у нас вот тут все до биз нес идеи ночлежки не дойдут ..
19 gSha
 
22.08.19
12:14
А вообще проще попросить заполнять владельца у коей .. это что бы работало без изменения кода, ну а если на будущее, то не вестись на красоту иерархии.
20 JuixyJes
 
22.08.19
12:18
(17) Так, я вроде поняла это, тогда как заполнение сделать?
21 gSha
 
22.08.19
12:24
Просто заполни владельца чем нибудь .. все остальное само появится. Хотя не очень понятно как владелец может быть пустым.
22 JuixyJes
 
22.08.19
12:29
(21) https://priscree.ru/img/ba0d2f18bfa569.jpg при полном соединении есть нужные мне данные, но  они вообще без ничего, только 2 даты
23 gSha
 
22.08.19
12:38
Слушай. Заполни просто владельца. Любым значением. Единственное чего я не понимаю как владелец оказался пустым.
24 gSha
 
22.08.19
12:39
Можешь даже у одной койки заполнить и посмотри как изменится результат.
25 JuixyJes
 
22.08.19
12:48
(24) в какой момент у койки заполнить владельца то?
26 gSha
 
22.08.19
12:51
Вот сейчас взять и заполнить у тех коей у которых нет владельца. Отчет у вас будет работать только если данных хватает ..
Т.е. указан номер- комната и койка.
Где они там заполняются не знаю .. я кроме запроса ничего не вижу , да и вглядываться него особо не охота.
27 JuixyJes
 
22.08.19
13:01
(26) в том то и дело, что у каждой койки есть владелец, нет ни одной койки без владельца
28 hhhh
 
22.08.19
13:10
(22) а что не так здесь?
29 gSha
 
22.08.19
13:24
(27) тогда теряюсь в догадках.
30 JuixyJes
 
22.08.19
13:30
(28) то что вот эта раскрытая строчка должна быть с №2
31 JuixyJes
 
22.08.19
16:57
решила проблему
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн