Доброе время суток, уважаемые.

Задача такая.
Есть непериодический регистр сведений . Конкретно "ИсторияИспользованияШтатногоРасписания" (ЗУП 3.1)
Требуется в запросе получить текущую запись, а также ее предшественника и последователя по имеющемуся упорядочиванию (Измерению "Дата"). Аналог функций LEAD и LAG.

Заранее благодарен.
---
Ну, так а мы об том же.

```1c
    ВЫБРАТЬ
    ТекущаяЗапись.Дата КАК Дата,
    МАКСИМУМ(ПредыдущаяЗапись.Дата) КАК ПредыдущаяДата,
    МИНИМУМ(СледующаяЗапись.Дата) КАК СледующаяДата
    ПОМЕСТИТЬ
    Даты
    ИЗ
    МойРегистр КАК ТекущаяЗапись
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК ПредыдущаяЗапись
    ПО
    ТекущаяЗапись.Дата > ПредыдущаяЗапись.Дата
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК СледующаяЗапись
    ПО
    ТекущаяЗапись.Дата < СледующаяЗапись.Дата
    ;

    ВЫБРАТЬ
    ПредыдущаяЗапись.ЗначениеТакоеТо КАК ПредыдущееЗначение,
    ТекущаяЗапись.ЗначениеТакоеТо КАК ТекущееЗначение,
    СледующаяЗапись.ЗначениеТакоеТо КАК СледующееЗначение
    ИЗ
    Даты
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК ТекущаяЗапись
    ПО
    Даты.Дата = ТекущаяЗапись.Дата
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК ПредыдущаяЗапись
    ПО
    Даты.ПредыдущаяДата = ПредыдущаяЗапись.Дата
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК СледующаяЗапись
    ПО
    Даты.СледующаяДата = СледующаяЗапись.Дата
```

Ну, в вт можно всякие измерения еще выбрать, по ним сгруппировать, по ним же соединяться, их же выбрать во втором запросе как текущие, минус одно соединение будет.
---
Пронумеруй все записи Автономизацией. Для каждой записи возьми предыдущую и следующую.
Первые 10, что бы наглядно было и помещался результат наглядно на картинке. В реальности поставить 9999...99.
---
Два соединения, одно по дате меньше текущей (вычисляем максимум даты), другое по дате больше текущей (вычисляем минимум) - получаем таблицу с предыдущей и следующей датой. Дальше еще одно соединение по этим датам.
---
Вы описали методику, похожую на коррелированный запрос. 1с такое не приветствует. Или я чего-то не понял.
---
```1c
    Выбрать *
    ИЗ Регистр
    ГДЕ Дата В (ВЫБРАТЬ Максимум(Дата) ИЗ Регистр ГДЕ Дата < &Дата
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ Минимум(Дата) ИЗ Регистр ГДЕ Дата > &Дата
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ &Дата
    )
```
---
Наверное я недостаточно четко поставил задачу.
Нужно выбрать текущую запись, а также ее предшественника и последователя в смысле упорядочения измерения регистра. В данном случае Дата.
Текущая запись НЕ задается параметром.
---
Ну, так а мы об том же.

```1c
    ВЫБРАТЬ
    ТекущаяЗапись.Дата КАК Дата,
    МАКСИМУМ(ПредыдущаяЗапись.Дата) КАК ПредыдущаяДата,
    МИНИМУМ(СледующаяЗапись.Дата) КАК СледующаяДата
    ПОМЕСТИТЬ
    Даты
    ИЗ
    МойРегистр КАК ТекущаяЗапись
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК ПредыдущаяЗапись
    ПО
    ТекущаяЗапись.Дата > ПредыдущаяЗапись.Дата
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК СледующаяЗапись
    ПО
    ТекущаяЗапись.Дата < СледующаяЗапись.Дата
    ;

    ВЫБРАТЬ
    ПредыдущаяЗапись.ЗначениеТакоеТо КАК ПредыдущееЗначение,
    ТекущаяЗапись.ЗначениеТакоеТо КАК ТекущееЗначение,
    СледующаяЗапись.ЗначениеТакоеТо КАК СледующееЗначение
    ИЗ
    Даты
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК ТекущаяЗапись
    ПО
    Даты.Дата = ТекущаяЗапись.Дата
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК ПредыдущаяЗапись
    ПО
    Даты.ПредыдущаяДата = ПредыдущаяЗапись.Дата
    ЛЕВОЕ СОЕДИНЕНИЕ
    МойРегистр КАК СледующаяЗапись
    ПО
    Даты.СледующаяДата = СледующаяЗапись.Дата
```

Ну, в вт можно всякие измерения еще выбрать, по ним сгруппировать, по ним же соединяться, их же выбрать во втором запросе как текущие, минус одно соединение будет.
---
Попробовал. Теоретически работает, но очень время затратен.
Оно и понятно, для каждой текущей записи просмотр и поиск максимума/минимума по всему регистру...
---
Оно и понятноИндексы не предлагать?
---
Индексы и прочие прибамбасы из конкретных условий задачи буду прикручивать сам. Спасибо. Идея хорошая.
---
Нужно выбрать текущую записьА "текущая запись" - это что вообще? В ней есть признак "ТекущаяЗапись = Истина"?
---
поставил задачуПоставил, значит...

Давай уж тогда и про сроки выполнения и премии рассказывай, штрафами угрожай. Что ты как маленький?
---
Слушаюсь. Больше не повторится. Впредь буду ориентироваться на Ваши оценки.
(8)
---
Пронумеруй все записи Автономизацией. Для каждой записи возьми предыдущую и следующую.
Первые 10, что бы наглядно было и помещался результат наглядно на картинке. В реальности поставить 9999...99.
---
ПЕРВЫЕ 10Ну да, ну да.
---
Примерно к этому варианту и пришел.
---
к этому вариантуТо есть сначала возмущаемся что производительность никакая, а потом хренак - и соединение по вычисляемому полю. Так победим, да!
---
(17) Въедте, наконец, в тему. Это совершенно другой вариант, с предварительной нумерацией записей. И довольно распространенный.
Рекомендую заняться делом.
---
Рекомендую заняться деломНе извольте сумлеваться, барин. Чаго ещё изволите?
---
Можно и так:
Если принять что измерение единственное. В данном примере это Сотрудник и в реальном РС оно не единственное, но предполагаем что оно единственное. У Вас же другой регистр с другой структурой.
Фильтр на код справочника поставил, что бы результат на скрин поместился и взялись сотрудники, по которым движений не много.
---
А вот это уже "коррелированный запрос. 1с такое не приветствует", хехе. См. (2)
---
Но лучше всего, написать гневное письмо в 1С и потребовать срочную реализацию оконных функций, и в том числе "LEAD и LAG". :-)
Думаю, что не только вас задрали эти трёхэтажные запросы на пустом месте. :-)
---
Да Вы правы. Лид и Лаг давно уже должны работать в штатном инструментарии запросов 1С. Как и оконные функции.
Предложенные варианты - это конечно ходьба темным лесом.
Но писать письма в 1с меня отучили уже давно.
---
Но писать письма в 1с меня отучили уже давно. Ну вот.... А я рассчитывал на Вас. :-)