Имя: Пароль:
1C
1С v8
Отображение загрузки выбранного номера в календаре
,
0 JuixyJes
 
15.10.19
12:38
Доброго дня! Пытаюсь вот вывести корректно загруженность номера в календарь, но столкнулась с проблемой неправильного отображения, подскажите пожалуйста, что я делаю не так?

&НаСервере
Функция ПолучитьСведенияОЗанятостиНомера()
     лТекст = "
        |ВЫБРАТЬ
        |    ПП_ЗагруженностьОстатки.Организация КАК Организация,
        |    ПП_ЗагруженностьОстатки.НомерПроживания КАК НомерПроживания,
        |    ПП_ЗагруженностьОстатки.КомнатаПроживания КАК КомнатаПроживания,
        |    ПП_ЗагруженностьОстатки.КойкаПроживания КАК КойкаПроживания,
        |    ПП_ЗагруженностьОстатки.День КАК День,
        |    ПП_ЗагруженностьОстатки.ВидЗанятостиНомера КАК ВидЗанятостиНомера,
        |    ПП_ЗагруженностьОстатки.СостояниеОстаток КАК СостояниеОстаток
        |ИЗ
        |    РегистрНакопления.ПП_Загруженность.Остатки(&ДТ, ) КАК ПП_ЗагруженностьОстатки
        |ГДЕ
        |    ПП_ЗагруженностьОстатки.НомерПроживания = &НомерПроживания
        |
        |УПОРЯДОЧИТЬ ПО
        |    Организация,
        |    НомерПроживания,
        |    КомнатаПроживания,
        |    КойкаПроживания,
        |    День,
        |    ВидЗанятостиНомера
        |";
    лЗапрос = Новый Запрос(лТекст);
    
    ДТ = Объект.Дата;
    НомерПроживания = Объект.НомерПроживания;
    лЗапрос.УстановитьПараметр("ДТ", ДТ);
    лЗапрос.УстановитьПараметр("НомерПроживания", НомерПроживания);
    
    ТЗ = лЗапрос.Выполнить().Выгрузить();
    ТЗ.Колонки.Добавить("ТекущееЗаселение");
    ТЗ.ЗаполнитьЗначения(ЛОЖЬ,"ТекущееЗаселение");
    
    КоличествоДней = (НачалоДня(Объект.ДатаОкончания) - НачалоДня(Объект.ДатаНачала)) / (60 * 60 * 24)+1;     
    
    ТекДата = НачалоДня(Объект.ДатаНачала);
    Для Сч = 1 по КоличествоДней Цикл        
        строкаТЗ = ТЗ.Найти(ТекДата,"День");
        Если строкаТЗ = Неопределено Тогда
            строкаТЗ = ТЗ.Добавить();
            строкаТЗ.Организация = Объект.Организация;
            строкаТЗ.номерПроживания = Объект.НомерПроживания;
            строкаТЗ.КомнатаПроживания = Объект.КомнатаПроживания;
            строкаТЗ.КойкаПроживания = Объект.КойкаПроживания;
            строкаТЗ.День    = ТекДата;
            строкаТЗ.ТекущееЗаселение = ИСТИНА;
        Иначе
            Если строкаТЗ.День>=Объект.ДатаНачала и строкаТЗ.День<=Объект.ДатаОкончания Тогда
                строкаТЗ.ТекущееЗаселение = ИСТИНА;
            КонецЕсли;    
        КонецЕсли;    
        ТекДата = ТекДата+60*60*24;
    КонецЦикла;
    ТЗ.ВыбратьСтроку("Посмотримс");    
    Возврат ТЗ;
КонецФункции    

&НаСервере
Процедура ПолучитьЗнвченияПеречислений(Бронь,Проживание)
    Бронь = Перечисления.ВидЗанятостиНомера.Бронь;
    Проживание = Перечисления.ВидЗанятостиНомера.Проживание;
Конецпроцедуры    

&НаКлиенте
Процедура КалендарьПриВыводеПериода(Элемент, ОформлениеПериода)
    Перем Бронь,Проживание;
     загруженность = ПолучитьСведенияОЗанятостиНомера();
     ПолучитьЗнвченияПеречислений(Бронь,Проживание);
     Для каждого ТекДата Из ОформлениеПериода.Даты Цикл    
         Для каждого стр из загруженность Цикл
             Если (ТекДата.Дата = стр.День) Тогда
                 Если стр.ТекущееЗаселение Тогда
                     ТекДата.ЦветФона = WebЦвета.ХакиТемный;
                 ИначеЕсли стр.ВидЗанятостиНомера = Проживание Тогда
                     ТекДата.ЦветФона = WebЦвета.НейтральноАквамариновый;
                 ИначеЕсли стр.ВидЗанятостиНомера = Бронь Тогда
                     ТекДата.ЦветФона = WebЦвета.Хаки;
                 КонецЕсли;        
             КонецЕсли;    
         КонецЦикла;
     КонецЦикла;
КонецПроцедуры
1 JuixyJes
 
15.10.19
12:38
2 JuixyJes
 
15.10.19
12:39
вот так отображается
3 D_E_S_131
 
15.10.19
13:02
Я бы в условия по цветам еще приписал:
...
Иначе
   ТекДата.ЦветФона = Новый Цвет;
КонецЕсли;
4 D_E_S_131
 
15.10.19
13:19
А вообще конечно "жесть" хранить состояния в регистре накопления. :(
5 JuixyJes
 
15.10.19
15:18
(4) Это допил уже не мой, мне под него надо переписать алгоритм
6 singlych
 
15.10.19
15:30
Как это вообще работает?

&НаСервере
Функция ПолучитьСведенияОЗанятостиНомера()
    ...
    ТЗ = лЗапрос.Выполнить().Выгрузить();
    ...
    Возврат ТЗ;
КонецФункции

&НаКлиенте
Процедура КалендарьПриВыводеПериода(Элемент, ОформлениеПериода)
    ...
    загруженность = ПолучитьСведенияОЗанятостиНомера();
7 JuixyJes
 
15.10.19
15:31
(6) https://priscree.ru/img/94f49b13d58d65.jpg
возвращает вот такую картину
8 Aleksandr N
 
15.10.19
15:38
(6) клиент то толстый небось.
9 JuixyJes
 
15.10.19
15:40
(8) он самый
10 Aleksandr N
 
15.10.19
15:52
(9) Не православно.
11 singlych
 
15.10.19
16:06
(10) я бы сказал, неспортивно
(7) так у вас там в ТЗ на 10е число три строки, оно три раза и красится
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан