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

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

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

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

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

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

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