Доброго времени суток.
Не могу разобраться с запросом.
В выборку попадает несколько значений(одинаковых), хотя на нужную дату в регистре есть только одна запись.
Конечно если указываю "ВЫБРАТЬ РАЗЛИЧНЫЕ, то все ок, но хотелось бы разобраться в чем проблема.
Буду рад за подсказку.
Вот кусок запроса:
Заранее спасибо.
Не могу разобраться с запросом.
В выборку попадает несколько значений(одинаковых), хотя на нужную дату в регистре есть только одна запись.
Конечно если указываю "ВЫБРАТЬ РАЗЛИЧНЫЕ, то все ок, но хотелось бы разобраться в чем проблема.
Буду рад за подсказку.
Вот кусок запроса:
"ВЫБРАТЬ
| СостоянияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
| СостоянияСотрудниковСрезПоследних.Состояние КАК Состояние,
| СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения КАК СотрудникФизическоеЛицоДатаРождения
|ИЗ
| РегистрСведений.СостоянияСотрудников.СрезПоследних(&ТекДата, Состояние <> &Состояние) КАК СостоянияСотрудниковСрезПоследних
|ГДЕ
| МЕСЯЦ(СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения) = &МесяцРождения
| И ДЕНЬ(СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения) = &ДеньРождения";
Запрос.УстановитьПараметр("Состояние", Перечисления.СостоянияСотрудника.Увольнение);
ПоказатьЗаранее спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Не знаю что у тебя за конфигурация но похоже на то что в регистре сведений "СостоянияСотрудников" по факту больше измерений чем ты указал в запросе, тем самым он у тебя заводился.
p.s. Добавь все поля из регистра и ты увидеш где у тебя разные записи. Ну и соответственно ее в условие добавить.
p.s.s. Можно еще сделать группировку по сотруднику и состоянию, а день рождения в максимум.
p.s. Добавь все поля из регистра и ты увидеш где у тебя разные записи. Ну и соответственно ее в условие добавить.
p.s.s. Можно еще сделать группировку по сотруднику и состоянию, а день рождения в максимум.
Может быть из-за этих строк
Хотя сейчас попробую в своей базе
|ГДЕ
| МЕСЯЦ(СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения) = &МесяцРождения
| И ДЕНЬ(СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения) = &ДеньРождения";
Хотя сейчас попробую в своей базе
если Сотрудник и Состояние - это измерения - то срез и выдаст несколько пар последних вариантов. Что надо сделать ? Выбрать последнее состояние выбранного человечка ? тогда временную таблицу и максимум период потом выбрать
Есть еще предположение, в регистре идет по сотрудникам , а сотрудник может быть принят несколько раз на работу и по каждая запись с справочнике "Сотрудники ", будет для регистра разной и соответственно на формально одного и того же человека будет несколько записей
В данном случае выбирайте привязывайтесь к ФизЛицу
В данном случае выбирайте привязывайтесь к ФизЛицу
Я не знаю, почему у вас там двоится, но в запросе есть другая проблема.
Если предположить, что состояние - это ресурс, то на примере условного сотрудника Иванова.
Предположим, есть такие записи в регистре:
01.06.2017 - Иванов - Работает
01.07.2018 - Иванов - Уволен
То в вашу выборку с отбором внутри параметра виртуальной таблицы Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение) попадет запись от 01.06.2017 г., т.е. (01.06.2017 - Иванов - Работает)
Вам надо получать срез по дате, отбор по дате рождения перенести из ГДЕ в параметр временной таблицы, а отбор по Состоянию, наоборот, перенести в условие ГДЕ. Тогда Иванов, уволенный, вообще не попадет в выборку. А вашем случае попадет.
Если предположить, что состояние - это ресурс, то на примере условного сотрудника Иванова.
Предположим, есть такие записи в регистре:
01.06.2017 - Иванов - Работает
01.07.2018 - Иванов - Уволен
То в вашу выборку с отбором внутри параметра виртуальной таблицы Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение) попадет запись от 01.06.2017 г., т.е. (01.06.2017 - Иванов - Работает)
Вам надо получать срез по дате, отбор по дате рождения перенести из ГДЕ в параметр временной таблицы, а отбор по Состоянию, наоборот, перенести в условие ГДЕ. Тогда Иванов, уволенный, вообще не попадет в выборку. А вашем случае попадет.
Доброго всем дня.
На самом деле, что указываю в параметрах виртуальной таблицы "Состояние", что в условии "ГДЕ", все равно в выборку попадаются все записи регистра, где состояние <> УВОЛЕН/А.
Пришлось сделать такой запрос, что бы в выборке не было уволенных сотрудников вовсе:
На самом деле, что указываю в параметрах виртуальной таблицы "Состояние", что в условии "ГДЕ", все равно в выборку попадаются все записи регистра, где состояние <> УВОЛЕН/А.
Пришлось сделать такой запрос, что бы в выборке не было уволенных сотрудников вовсе:
"ВЫБРАТЬ
| СостоянияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
| СостоянияСотрудниковСрезПоследних.Состояние КАК Состояние,
| СостоянияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения КАК СотрудникФизическоеЛицоДатаРождения,
| СостоянияСотрудниковСрезПоследних.Период КАК Период
|ИЗ
| РегистрСведений.СостоянияСотрудников.СрезПоследних(&ТекДата, ) КАК СостоянияСотрудниковСрезПоследних
|ГДЕ
| НЕ СостоянияСотрудниковСрезПоследних.Сотрудник В
| (ВЫБРАТЬ
| СостоянияСотрудниковСрезПоследних.Сотрудник
| ИЗ
| РегистрСведений.СостоянияСотрудников.СрезПоследних(&ТекДата, Состояние = &Состояние) КАК СостоянияСотрудниковСрезПоследних)";
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот