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