Имя: Пароль:
1C
1С v8
Проверка на NULL
0 fmq85
 
11.12.14
12:02
Макет = Отчеты.ТренировкаТУРВ.ПолучитьМакет("Макет");
    Запрос = Новый Запрос;                                                      
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Вход.Период,
    |    Вход.Контингент,
    |    Вход.Направление,
    |    МИНИМУМ(Выход.Период) КАК Период1
    |ПОМЕСТИТЬ ТЧ
    |ИЗ
    |    РегистрСведений.ДвиженияКонтингента КАК Вход
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвиженияКонтингента КАК Выход
    |        ПО Вход.Контингент = Выход.Контингент
    |            И Вход.Период < Выход.Период
    |ГДЕ
    |    Вход.Период МЕЖДУ &Период1 И &Период2
    |    И Вход.Направление = &НаправлениеВход
    |    И Выход.Направление = &НаправлениеВыход
    |    И Вход.Контингент ССЫЛКА Справочник.Пользователи
    |СГРУППИРОВАТЬ ПО
    |    Вход.Период,
    |    Вход.Контингент,
    |    Вход.Направление
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    НАЧАЛОПЕРИОДА(ТЧ.Период, ДЕНЬ) КАК Период,
    |    ТЧ.Контингент КАК Контингент,
    |    СУММА(РАЗНОСТЬДАТ(ТЧ.Период, ТЧ.Период1, МИНУТА)) КАК Время
    |ИЗ
    |    ТЧ КАК ТЧ
    |
    |СГРУППИРОВАТЬ ПО
    |    НАЧАЛОПЕРИОДА(ТЧ.Период, ДЕНЬ),
    |    ТЧ.Контингент
    |
    |УПОРЯДОЧИТЬ ПО
    |    Период
    |ИТОГИ ПО
    |    Контингент";
    
    Запрос.УстановитьПараметр("НаправлениеВход", Перечисления.ТипыСобытийПроходной.Вход);
    Запрос.УстановитьПараметр("НаправлениеВыход", Перечисления.ТипыСобытийПроходной.Выход);
    Запрос.УстановитьПараметр("Период1", Дата1);
    Запрос.УстановитьПараметр("Период2", КонецМесяца(Дата2));
    //Запрос.УстановитьПараметр("неопределено", неопределено);
    
    Результат = Запрос.Выполнить();
    
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьКолонтитул = Макет.ПолучитьОбласть("Колонтитул");
    ОбластьОбласть1 = Макет.ПолучитьОбласть("Область1");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");    
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Очистить();
    
    
    ОбластьШапка.Параметры.ИмяОрганизации = Константы.НаименованиеОрганизации.Получить();
    ОбластьШапка.Параметры.ДатаНач = Дата1;
    ОбластьШапка.Параметры.ДатаКон = Дата2;
    ОбластьШапка.Параметры.ДатаЗаполнения = Дата2;
    ТабДок.Вывести(ОбластьШапка);
    ТабДок.Вывести(ОбластьКолонтитул);
    Табл = Результат.Выгрузить();
    
    //ВыборкаПреподаватели = Результат.Выбрать();
    ВыборкаПреподаватели = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    нп=1;
    ИтВремя =0;
    ИтДень=0;
    СуммаПервая = 0;                                                              
    СуммаВторая = 0;                        
    Явка1 = 0;
    Явка2 = 0;
    Часы = 0;
    
    
    Пока ВыборкаПреподаватели.Следующий() Цикл
        //Если ВыборкаПреподаватели.Период = Null   Тогда
        //    Продолжить;        
        //КонецЕсли;
        ОбластьОбласть1.Параметры.Работник = ВыборкаПреподаватели.Контингент;
        ОбластьОбласть1.Параметры.Должность = ВыборкаПреподаватели.Контингент.Должность;
        ОбластьОбласть1.Параметры.НомерПоПорядку = нп;
        нп = нп+1;        
        
        
        Для ии = 1 по 31 Цикл
            ОбластьОбласть1.Параметры["День"+ ии] = "НН";
            ОбластьОбласть1.Параметры["Время"+ ии]= 0;
        
        КонецЦикла;
        
        //ВыборкаДетальныеЗаписи = ВыборкаПреподаватели.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        День = День(ВыборкаПреподаватели.Период);
        Часы = 0;
        
        Часы = Цел(ВыборкаПреподаватели.Время/60);
        Минуты = ВыборкаПреподаватели.Время-Часы * 60;
        
        
        ОбластьОбласть1.Параметры["День"+ День]= "Я";
        ОбластьОбласть1.Параметры["Время"+ День]= Часы;          
        
        Если День < 16 Тогда
            СуммаПервая = СуммаПервая + Часы;
            Явка1 = Явка1+1;
        Иначе
            СуммаВторая = СуммаВторая + Часы;
            Явка2 = Явка2+1;
        КонецЕсли;                  
        
        
        ИтВремя = ИтВремя + Часы;                      
        ИтДень= ИтДень+1;
        
        Если Часы > 48 Тогда
            ОбластьОбласть1.Области["День"+ День].ЦветФона=WebЦвета.КрасноФиолетовый;
        КонецЕсли;
        
        
        //Пока ВыборкаДетальныеЗаписи.Следующий() Цикл        
        //    День = День(ВыборкаДетальныеЗаписи.Период);
        //    
        //    Часы = Цел(ВыборкаДетальныеЗаписи.Время/60);
        //    Минуты = ВыборкаДетальныеЗаписи.Время-Часы * 60;
        //    
        //    
        //    ОбластьОбласть1.Параметры["День"+ День]= "Я";
        //    ОбластьОбласть1.Параметры["Время"+ День]= Часы;          
        //    
        //    Если День < 16 Тогда
        //        СуммаПервая = СуммаПервая + Часы;
        //        Явка1 = Явка1+1;
        //    Иначе
        //        СуммаВторая = СуммаВторая + Часы;
        //        Явка2 = Явка2+1;
        //    КонецЕсли;                  
        //    
        //    
        //    ИтВремя = ИтВремя + Часы;                      
        //    ИтДень= ИтДень+1;
        //    
        //    Если Часы > 48 Тогда
        //        ОбластьОбласть1.Области["День"+ День].ЦветФона=WebЦвета.КрасноФиолетовый;
        //    КонецЕсли;
        //КонецЦикла;
        
        
        //Если ОбластьОбласть1.Параметры["Время"+ День]= "#" Тогда
        
        //КонецЕсли;    
        
        
        ОбластьОбласть1.Параметры.ДМ1 = Явка1;
        ОбластьОбласть1.Параметры.ЧМ1 = СуммаПервая;
        ОбластьОбласть1.Параметры.ДМ2 = Явка2;
        ОбластьОбласть1.Параметры.ЧМ2 = СуммаВторая;
        
        Если СуммаПервая > 200 Тогда
            ОбластьОбласть1.Параметры.ЧМ2 = "#";
        КонецЕсли;
        
        
        Если ОбластьОбласть1.Параметры.ЧМ1 = "#" Тогда
            ОбластьОбласть1.Области["ДПМ1"].ЦветФона=WebЦвета.КрасноФиолетовый;
        КонецЕсли;
        
        Если СуммаВторая > 200 Тогда
            ОбластьОбласть1.Параметры.ЧМ2 = "#";
        КонецЕсли;
        
        Если ОбластьОбласть1.Параметры.ЧМ2 = "#" Тогда
            ОбластьОбласть1.Области["ДПМ2"].ЦветФона=WebЦвета.КрасноФиолетовый;
        КонецЕсли;
        
        ОбластьОбласть1.Параметры.ДМ = ИтДень;
        ОбластьОбласть1.Параметры.ЧМ = ИтВремя;
        
        Если ИтВремя > 400 Тогда
            ОбластьОбласть1.Параметры.ЧМ = "#";
        КонецЕсли;
        
        Если ОбластьОбласть1.Параметры.ЧМ = "#" Тогда
            ОбластьОбласть1.Области["ДМ1"].ЦветФона=WebЦвета.КрасноФиолетовый;
        КонецЕсли;
        
        
        ТабДок.Вывести(ОбластьОбласть1);    
    КонецЦикла;

    ОбластьПодвал.Параметры.ФИООтветственного = ПараметрыСеанса.ТекущийПользователь;
    ОбластьПодвал.Параметры.ДолжностьОтветственного = ПараметрыСеанса.ТекущийПользователь.Должность;
    ТабДок.Вывести(ОбластьПодвал);
    Возврат ТабДок;

Просьба помочь в запросе установить проверку на NULL, Я-новичок в этом версия 8.2
1 vicof
 
11.12.14
12:04
У тебя внутреннее соединение в запросе. Никакаих нуллов там нет.
2 DrZombi
 
гуру
11.12.14
12:06
(1) Где Внутренний? :)
3 vicof
 
11.12.14
12:06
(2) Условия на правую таблицу
4 DrZombi
 
гуру
11.12.14
12:09
(0) Проверка на нуль...

1. <Твое Значение по запросу> Есть Null
2. ЕстьNull(<Твое Значение по запросу>,Значение(<Описание типа>)) = Значение(<Описание типа>)

Значение(<Описание типа>), можно получить через функцию "ПредопределенноеЗначение("")" (Подстановочник от 1С сам тебе предложит, тебе только нужно это вставить в запрос)


(3) Нет там такого :)
5 Ёпрст
 
11.12.14
12:10
(4) есть там такое
6 Ёпрст
 
11.12.14
12:10
И на нулл проверка не нужна.
7 Sammo
 
11.12.14
12:11
(4) И Выход.Направление = &НаправлениеВыход
8 DrZombi
 
гуру
11.12.14
12:12
(5) (7) Спасибо, увидел...
Тогда Автор нужны Нули, наверное. Ведь их итак нет :)
9 DrShust
 
11.12.14
12:14
(0) Откуда NULL?