Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ЗУП. Запрос к РегистрСведений.СостоянияСотрудников

ЗУП. Запрос к РегистрСведений.СостоянияСотрудников
Я
   Target1025
 
23.03.21 - 10:37
В ЗУП есть регистр сведений "состояния сотрудников", из которого срезом мы хотим выдрать всех работающих на нужную дату. У уволенных в срезе последняя запись будет "увольнение". И вот тут у меня вопрос. ЗАпрос такого плана не работает:

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

Он вкидывает уволенных, и при этом даже не записью увольнение. Такое ощущение, что запрос смотрит срез, видет "увольнение", и начинает смотреть еще раньше, пока не найдет нечто не-"увольнение"

А вот этот отфильтровывает нормально, уволенные не попадают в выборку вообщ:

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

Я правильно понимаю между ними разницу?
   youalex
 
1 - 23.03.21 - 10:42
Это нормальное поведение "среза"
В первом случае срез строится по  записям с  Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение)

во втором - из уже построенного среза исключаются записи с Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение)
   Йохохо
 
2 - 23.03.21 - 10:47
"видет "увольнение"" не, не видет "И Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение"
   Жан Пердежон
 
3 - 23.03.21 - 13:23
"видет" не "видет";
в первом случае ты задаешь параметры формирования виртуальной таблицы (срез последних) - строка с увольнением не попадает в срез;
во втором - фильтруешь из сформированного среза
   SleepyHead
 
4 - 23.03.21 - 14:03
(0) КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудников, "Состояние", ДатаАктуальности)

Список тем форума
 
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.