Условие на пустую дату в виртуальной таблице .СрезПоследних()

1. RomanVG7 17.01.20 11:27 Сейчас в теме
Хочу выгрузить действующих сотрудников (Камин 4.0), накладываю условие на дату увольнения:
РегистрСведений.КадровыеСведения.СрезПоследних( 
            &Дата, 
            Фирма = &Фирма И СтатусРаботы = ЗНАЧЕНИЕ(Справочник.СтатусыРаботы.ОсновноеМестоРаботы) 
            И (ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)    ИЛИ ДатаУвольнения >= &Дата)) КАК КадровыеСведенияСрезПоследних 

условие на дату увольнения НЕ срабатывает - выходят все сотрудники!
Когда выношу условие на дату в ГДЕ
ГДЕ (КадровыеСведенияСрезПоследних.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ИЛИ КадровыеСведенияСрезПоследних.ДатаУвольнения >= &Дата) 

условие срабатывает, но правильнее условия делать в параметрах виртуальной таблицы.

когда ставлю условие в виртуальной таблице:
ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
то выходят все уволенные сотрудники
если ставлю:
НЕ (ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
опять выходят все сотрудники - такое ощущение, что система не понимает пустую дату.
поиск по конкретной дате увольнения работает.
По теме из базы знаний
Найденные решения
11. Lenten 25 17.01.20 12:51 Сейчас в теме
(10) а у вас если
01,01,2015 приняли сотрудника
01,01,2019 уволили

это 1 или 2 записи в регистре?
RomanVG7; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. DJDUH 17 17.01.20 11:46 Сейчас в теме
(1) Фильтр по ресурсам в парамах вирт табл - это классическая ошибка не верных данных!!!
2. VictorRGB2 13 17.01.20 11:38 Сейчас в теме
СрезПоследних\Первых получает данные именно на дату среза и не может отфильтровать их еще по какой-то дате
а вот дальше уже полученные данные можно фильтровать по условию запроса, что вы и наблюдаете

тоже не понимаю, почему так, но для себя решил, что так было задумано ))
3. Lenten 25 17.01.20 11:45 Сейчас в теме
когда ставлю условие в виртуальной таблице:
ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
то выходят все уволенные сотрудники


это правильно. 1с находит строчку, в которой дата увольнения проставлена. Это строка увольнения. Вот их она вам и показывает

если ставлю:
НЕ (ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
опять выходят все сотрудники


тут 1с показывает вам строчки, где датаУвольнения пустая. Думаю при приеме на работу на каждого сотрудника появляется по строчке с пустой датой увольнения. Вот вы всех и видите
10. RomanVG7 17.01.20 12:45 Сейчас в теме
(3) я считал, что условие в ВТ ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) должно вывести только работающих сотрудников, но выводятся все сотрудники в т.ч. уволенные, при этом, если вывести поле ДатаУвольнения - оно будет пустым, хотя у некоторых оно точно не пустое!
11. Lenten 25 17.01.20 12:51 Сейчас в теме
(10) а у вас если
01,01,2015 приняли сотрудника
01,01,2019 уволили

это 1 или 2 записи в регистре?
RomanVG7; +1 Ответить
13. Fril 17.01.20 12:58 Сейчас в теме
(11) есть еще перемещение
14. RomanVG7 17.01.20 12:59 Сейчас в теме
(11) 2 записи! Теперь все понятно, спасибо!
12. Fril 17.01.20 12:51 Сейчас в теме
(10)регистр не тот. В своем регистре "КадровыеСведения" сделай отбор по пустой дате в колонке ДатаУвольнения и увидишь причину
5. Fril 17.01.20 12:04 Сейчас в теме
Доброго дня!
Я использовал регистр "КадроваяИсторияСотрудников"

ВЫБРАТЬ
	КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо КАК Сотрудник,
	КадроваяИсторияСотрудниковСрезПоследних.Период КАК Период,
	КадроваяИсторияСотрудниковСрезПоследних.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
	КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
	КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
	ВЫБОР
		КОГДА КадроваяИсторияСотрудниковСрезПоследних.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.НачальныеДанные)
			ТОГДА ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием)
		ИНАЧЕ КадроваяИсторияСотрудниковСрезПоследних.ВидСобытия
	КОНЕЦ КАК ВидСобытия,
	КадроваяИсторияСотрудниковСрезПоследних.ГоловнойСотрудник.Код КАК ТабельныйНомер
ПОМЕСТИТЬ ВТ_КадрИстория
ИЗ
	РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(, ) КАК КадроваяИсторияСотрудниковСрезПоследних
ГДЕ
	НЕ КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо ЕСТЬ NULL
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо КАК Сотрудник,
	МАКСИМУМ(КадроваяИсторияСотрудниковСрезПоследних.Период) КАК Период
ПОМЕСТИТЬ ВТ_МаксПериод
ИЗ
	РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(, ) КАК КадроваяИсторияСотрудниковСрезПоследних
ГДЕ
	НЕ КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо ЕСТЬ NULL

СГРУППИРОВАТЬ ПО
	КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_КадрИстория.Период КАК Период,
	ВТ_КадрИстория.ВидСобытия КАК ВидСобытия,
	ВТ_КадрИстория.Сотрудник КАК Сотрудник,
	ВТ_КадрИстория.ТабельныйНомер КАК ТабельныйНомер,
	ВТ_КадрИстория.Должность КАК Должность,
	ВТ_КадрИстория.Подразделение КАК Подразделение,
	ВТ_КадрИстория.ГоловнаяОрганизация КАК ГоловнаяОрганизация
ИЗ
	ВТ_МаксПериод КАК ВТ_МаксПериод
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КадрИстория КАК ВТ_КадрИстория
		ПО (ВТ_КадрИстория.Сотрудник = ВТ_МаксПериод.Сотрудник)
			И (ВТ_КадрИстория.Период = ВТ_МаксПериод.Период)
Показать


В первом запросе вытаскиваем все неободимые данные, во втором максимальные периоды, в итоговом все данные по макс периодам.

В самом отчете можно поставить фильтр "Не показывать уволенных"
6. Fril 17.01.20 12:08 Сейчас в теме
Главное сначала понять с какого регистра тянуть данные, а для этого надо промониторить подобные регистры и какие в них данные хранятся...
7. Fox-trot 158 17.01.20 12:22 Сейчас в теме
(6) или открыть документацию...
8. RomanVG7 17.01.20 12:38 Сейчас в теме
(6) У меня Камин 4.0, откуда взять данные я знаю, вопрос был в другом: почему условие в ВТ с конкретной датой отрабатывает, а условие с пустой датой выводит все записи (в примере и уволенных и не уволенных сотрудников). Если это ограничение платформы для ВТ .СрезПоследних(), то принимаю и работаю с секцией ГДЕ.
9. Fril 17.01.20 12:44 Сейчас в теме
(8)Посмотри регистр и посмотри результаты в консоли запросов с датой и без, как оно там в камине устроено...
Камина нет под рукой
Посмотри мой запрос, может тебе и дату указывать не надо!
Выведи последние данные по всем статусам, а потом наложи условие (уже в пользовательском режиме) на неравно "Уволенные"
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот