Имя: Пароль:
1C
1С v8
Условие на пустую дату в виртуальной таблице
0 RomanVG
 
16.01.20
17:21
Хочу выгрузить действующих сотрудников (Камин 4.0), накладываю условие на дату увольнения:
    РегистрСведений.КадровыеСведения.СрезПоследних(
            &Дата,
            Фирма = &Фирма И СтатусРаботы = ЗНАЧЕНИЕ(Справочник.СтатусыРаботы.ОсновноеМестоРаботы)
            И (ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)    ИЛИ ДатаУвольнения >= &Дата)) КАК КадровыеСведенияСрезПоследних
условие НЕ срабатывает - выходят все сотрудники!
Когда выношу условие на дату в ГДЕ
ГДЕ (КадровыеСведенияСрезПоследних.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ИЛИ КадровыеСведенияСрезПоследних.ДатаУвольнения >= &Дата)
условие срабатывает, но правильнее условия делать в параметрах виртуальной таблицы.
Почему так?
Кто-то сталкивался?
1 ptiz
 
16.01.20
17:30
(0) Надо включить логику и подумать, что происходит при наложении условия внутри и снаружи виртуальной таблицу.
2 Сияющий в темноте
 
16.01.20
20:27
когда условие накладывается на реальные записи перед формирования м таблицы,то неподходящая запись в таблицу не включается,но на ее место попадает другая,то есть предыдущая.
когда  же фильтруется результат,то предыдущей записи неоткуда взяться,так как ее отфильтровали на садии формирования виртуальной таблицы.
3 RomanVG
 
17.01.20
11:21
(0) когда ставлю условие в виртуальной таблице:
ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
то выходят все уволенные сотрудники
если ставлю:
НЕ (ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
опять выходят все сотрудники - такое ощущение, что система не понимает пустую дату.
поиск по конкретной дате увольнения работает.
Может это специфика реализации виртуальных таблиц .СрезПоследних() и в пустой дате хранится null от левого соединения?
Однако, условие ДатаУвольнения Есть Null тоже не работает.
Или это глюк платформы 8.3.15.1489?
4 Cyberhawk
 
17.01.20
11:23
Твоя ошибка в том, что ты бездумно считаешь "но правильнее условия делать в параметрах виртуальной таблицы"
5 pechkin
 
17.01.20
11:24
нужно не в параметрах ВТ делать а в секции ГДЕ
6 pechkin
 
17.01.20
11:24
в параметрах только по измерениям
7 RomanVG
 
17.01.20
12:26
(4) В этом же запросе планировалось присоединить левым соединением несколько таблиц, поэтому, чем меньше выдаст виртуальная таблица, тем лучше. Что не так?
(6) Учту на будущее, хотя не понимаю почему так. Если бы мне нужны были только уволенные сотрудники, я обошелся бы только параметрами вирт таблицы: ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0).
8 catena
 
17.01.20
12:30
(7)Потому что параметры вирт таблицы накладываются ДО построения среза. А записи с пустой датой увольнения есть абсолютно у всех сотрудников.
9 RomanVG
 
17.01.20
13:08
(7) Спасибо! Непонимание было из-за того, что записи с пустой датой увольнения есть абсолютно у всех сотрудников в регистре.