Имя: Пароль:
1C
1С v8
Странный результат запроса
,
0 korchak
 
08.11.12
16:08
Есть вот такой код

   Запрос = Новый  Запрос;
   Запрос.УстановитьПараметр("ДатаНач",             ДатаНач);
   Запрос.УстановитьПараметр("ЧислоДней",           ЧислоДней);
   Запрос.УстановитьПараметр("РабочийДень",         Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
   Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
   
   Если ЧислоДней = 0 Тогда
       ТекДата = ДатаНач;
       Возврат ТекДата;        
   Иначе
       Запрос.Текст = "
       |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + ЧислоДней + "
       |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
       |ИЗ
       |    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
       |ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря < &ДатаНач
       |     И (РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
       |      ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень)
       |УПОРЯДОЧИТЬ ПО
       |    ДатаКалендаря УБЫВ
       |";
   КонецЕсли;
   
   Выборка = Запрос.Выполнить().Выбрать();


К примеру параметр ДатаНач = 08.11.12, а ЧислоДней = 2
Почему результат выборки получается 08.11.12 и 07.11.12? А не 07.11.12 и 06.11.12, когда четко условие стоит РегламентированныйПроизводственныйКалендарь.ДатаКалендаря < &ДатаНач
1 Aprobator
 
08.11.12
16:11
имхается мне, что дата со временем не равным нулю в параметр попадает. Другого объяснения не вижу.
2 Лефмихалыч
 
08.11.12
16:12
(0) ты уверен,что тебе не показалось?
3 korchak
 
08.11.12
16:13
ДатаНач = 08.11.2012 23:59:59, это из табло...
4 zladenuw
 
08.11.12
16:15
ну так .ДатаНач = 08.11.2012 11:59:59.
5 Aprobator
 
08.11.12
16:15
(3) ну так, а я что сказал?
6 zladenuw
 
08.11.12
16:15
(3) бери 00:00:00
7 ИльяА
 
08.11.12
16:15
Запрос.УстановитьПараметр("ДатаНач",НачалоДня          (ДатаНач));
8 korchak
 
08.11.12
16:16
Нет, не показалось

   Если Выборка.Количество() = ЧислоДней Тогда
       Пока Выборка.Следующий() Цикл
           ТекДата = Выборка.ДатаКалендаря;
       КонецЦикла;
       Возврат ТекДата;
   КонецЕсли;


Выборка.ДатаКалендаря    08.11.2012 00:00:00 при первом цикле
Выборка.ДатаКалендаря    07.11.2012 00:00:00 при втором цикле
9 Undefined vs NULL
 
08.11.12
16:16
(8) чукча не читатель (1) и (6)
10 korchak
 
08.11.12
16:18
понял, пробую
11 Aprobator
 
08.11.12
16:18
(8) у тебя в условие уходит значение 08.11.2012 23:59:59
08.11.2012 00:00:00 меньше этого значения. Так что все правильно попадает.
2 + 2 = 3.9999999999999999999999999999999...