Срез Последних по регистру сведений

1. datalist 09.08.18 12:29 Сейчас в теме
Доброго времени суток.
Не могу разобраться с запросом.
В выборку попадает несколько значений(одинаковых), хотя на нужную дату в регистре есть только одна запись.
Конечно если указываю "ВЫБРАТЬ РАЗЛИЧНЫЕ, то все ок, но хотелось бы разобраться в чем проблема.
Буду рад за подсказку.
Вот кусок запроса:

   "ВЫБРАТЬ 
		|	СостоянияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
		|	СостоянияСотрудниковСрезПоследних.Состояние КАК Состояние,
		|	СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения КАК СотрудникФизическоеЛицоДатаРождения
		|ИЗ
		|	РегистрСведений.СостоянияСотрудников.СрезПоследних(&ТекДата, Состояние <> &Состояние) КАК СостоянияСотрудниковСрезПоследних
		|ГДЕ
		|	МЕСЯЦ(СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения) = &МесяцРождения
		|	И ДЕНЬ(СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения) = &ДеньРождения";	

	        Запрос.УстановитьПараметр("Состояние", Перечисления.СостоянияСотрудника.Увольнение);
Показать


Заранее спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. _Farsh_ 12 09.08.18 12:51 Сейчас в теме
(1) Не знаю что у тебя за конфигурация но похоже на то что в регистре сведений "СостоянияСотрудников" по факту больше измерений чем ты указал в запросе, тем самым он у тебя заводился.

p.s. Добавь все поля из регистра и ты увидеш где у тебя разные записи. Ну и соответственно ее в условие добавить.
p.s.s. Можно еще сделать группировку по сотруднику и состоянию, а день рождения в максимум.
9. datalist 10.08.18 10:18 Сейчас в теме
(4)Вы были правы (количество измерений)
.
2. SaschaL 09.08.18 12:40 Сейчас в теме
Может быть из-за этих строк
|ГДЕ
| МЕСЯЦ(СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения) = &МесяцРождения
| И ДЕНЬ(СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения) = &ДеньРождения"; 


Хотя сейчас попробую в своей базе
3. Jimbo 13 09.08.18 12:47 Сейчас в теме
если Сотрудник и Состояние - это измерения - то срез и выдаст несколько пар последних вариантов. Что надо сделать ? Выбрать последнее состояние выбранного человечка ? тогда временную таблицу и максимум период потом выбрать
7. datalist 10.08.18 04:52 Сейчас в теме
(3)Сотрудник - измерение.Состояние - ресурс.
8. catena 110 10.08.18 07:05 Сейчас в теме
(7)Обратите внимание на (6), вы не исключаете уволенных своим запросом, вы исключете записи с увольнениями из таблице, из которой потом делается выборка. Результат совершенно не тот, который вы, судя по всему, ожидаете.
5. SaschaL 09.08.18 12:56 Сейчас в теме
Есть еще предположение, в регистре идет по сотрудникам , а сотрудник может быть принят несколько раз на работу и по каждая запись с справочнике "Сотрудники ", будет для регистра разной и соответственно на формально одного и того же человека будет несколько записей
В данном случае выбирайте привязывайтесь к ФизЛицу
6. user774630 09.08.18 13:18 Сейчас в теме
Я не знаю, почему у вас там двоится, но в запросе есть другая проблема.
Если предположить, что состояние - это ресурс, то на примере условного сотрудника Иванова.
Предположим, есть такие записи в регистре:
01.06.2017 - Иванов - Работает
01.07.2018 - Иванов - Уволен

То в вашу выборку с отбором внутри параметра виртуальной таблицы Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение) попадет запись от 01.06.2017 г., т.е. (01.06.2017 - Иванов - Работает)

Вам надо получать срез по дате, отбор по дате рождения перенести из ГДЕ в параметр временной таблицы, а отбор по Состоянию, наоборот, перенести в условие ГДЕ. Тогда Иванов, уволенный, вообще не попадет в выборку. А вашем случае попадет.
catena; Jimbo; +2 Ответить
10. datalist 13.08.18 12:49 Сейчас в теме
Всем спасибо за помощь. Кратко: проблема была в еще одном измерении. Ну и подправил запрос.
11. datalist 13.11.18 08:23 Сейчас в теме
Доброго всем дня.
На самом деле, что указываю в параметрах виртуальной таблицы "Состояние", что в условии "ГДЕ", все равно в выборку попадаются все записи регистра, где состояние <> УВОЛЕН/А.

Пришлось сделать такой запрос, что бы в выборке не было уволенных сотрудников вовсе:

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

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