Здравствуйте. Подскажите, имеется периодический регистр сведений подчинённый регистратору, при перемещении ОС создаётся запись период, ОС, и ФизЛицо. Например: 01.01.2019 Тумба Иванов
                   01.02.2019 Тумба Петров
                   01.03.2019 Тумба Иванов
                   02.03.2019 Тумба Иванов

Необходимо вывести список всех ОС и период последнего изменения состояния, при этом если Физ лицо повторяется, выбрать первого из повторяемых, то есть в примере Тумба 01.03.2019
---
ВЫБРАТЬ
 Рег.МОЛ КАК МОЛ,
 Рег.ОсновноеСредство КАК ОС
ПОМЕСТИТЬ Таб
ИЗ
 РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&КонецПериода, ) КАК Рег
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 Таб.МОЛ,
 Таб.ОС,
 МАКСИМУМ(Рег.Период) КАК Период
ПОМЕСТИТЬ ТабПредел
ИЗ
 Таб КАК Таб
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
  ПО Таб.МОЛ <> Рег.МОЛ
   И Таб.ОС = Рег.ОсновноеСредство

СГРУППИРОВАТЬ ПО
 Таб.МОЛ,
 Таб.ОС
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 Таб.МОЛ,
 Таб.ОС,
 ТабПредел.Период КАК ПериодПредел
ПОМЕСТИТЬ ТабВрем
ИЗ
 Таб КАК Таб
  ЛЕВОЕ СОЕДИНЕНИЕ ТабПредел КАК ТабПредел
  ПО Таб.ОС = ТабПредел.ОС
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ТабВрем.МОЛ,
 ТабВрем.ОС,
 МИНИМУМ(Рег.Период) КАК Период
ИЗ
 ТабВрем КАК ТабВрем
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
  ПО ТабВрем.МОЛ = Рег.МОЛ
   И ТабВрем.ОС = Рег.ОсновноеСредство
   И (ЕСТЬNULL(ТабВрем.ПериодПредел, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) <= Рег.Период)

СГРУППИРОВАТЬ ПО
 ТабВрем.МОЛ,
 ТабВрем.ОС
---
```1c
    ВЫБРАТЬ
    МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ КАК МОЛ,
    МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство,
    МестонахождениеОСБухгалтерскийУчетСрезПоследних.Период
    ПОМЕСТИТЬ ТекМОЛ
    ИЗ
    РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&КонецПериода, ) КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних

    ИНДЕКСИРОВАТЬ ПО
    МОЛ,
    ОсновноеСредство
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МИНИМУМ(МестонахождениеОСБухгалтерскийУчет.Период) КАК Период,
    МестонахождениеОСБухгалтерскийУчет.МОЛ КАК МОЛ,
    МестонахождениеОСБухгалтерскийУчет.ОсновноеСредство КАК ОсновноеСредство
    ПОМЕСТИТЬ МинПериодТекМол
    ИЗ
    ТекМОЛ КАК ТекМОЛ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК МестонахождениеОСБухгалтерскийУчет
    ПО ТекМОЛ.ОсновноеСредство = МестонахождениеОСБухгалтерскийУчет.ОсновноеСредство
    И ТекМОЛ.МОЛ = МестонахождениеОСБухгалтерскийУчет.МОЛ
    ГДЕ
    МестонахождениеОСБухгалтерскийУчет.Период < &КонецПериода

    СГРУППИРОВАТЬ ПО
    МестонахождениеОСБухгалтерскийУчет.ОсновноеСредство,
    МестонахождениеОСБухгалтерскийУчет.МОЛ

    ИНДЕКСИРОВАТЬ ПО
    МОЛ,
    ОсновноеСредство
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МИНИМУМ(МестонахождениеОСБухгалтерскийУчетСрезПоследних.Период) КАК Период,
    МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство,
    МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ
    ПОМЕСТИТЬ БывшМОЛ
    ИЗ
    ТекМОЛ КАК ТекМОЛ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
    ПО ТекМОЛ.ОсновноеСредство = МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
    И (НЕ ТекМОЛ.МОЛ = МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ)

    СГРУППИРОВАТЬ ПО
    МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство,
    МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МинПериодТекМол.ОсновноеСредство КАК ОсновноеСредство,
    МинПериодТекМол.МОЛ КАК МОЛ,
    МАКСИМУМ(БывшМОЛ.Период) КАК ДоЭтогоПериод,
    МАКСИМУМ(МинПериодТекМол.Период) КАК КрайнийПериод
    ПОМЕСТИТЬ ВТ
    ИЗ
    МинПериодТекМол КАК МинПериодТекМол
    ЛЕВОЕ СОЕДИНЕНИЕ БывшМОЛ КАК БывшМОЛ
    ПО МинПериодТекМол.ОсновноеСредство = БывшМОЛ.ОсновноеСредство

    СГРУППИРОВАТЬ ПО
    МинПериодТекМол.ОсновноеСредство,
    МинПериодТекМол.МОЛ

    ИНДЕКСИРОВАТЬ ПО
    МОЛ,
    ОсновноеСредство
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.ОсновноеСредство,
    ВТ.МОЛ,
    МИНИМУМ(ВЫБОР
    КОГДА МестонахождениеОСБухгалтерскийУчет.Период ЕСТЬ NULL
    ТОГДА ВТ.КрайнийПериод
    ИНАЧЕ МестонахождениеОСБухгалтерскийУчет.Период
    КОНЕЦ) КАК Период
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК МестонахождениеОСБухгалтерскийУчет
    ПО ВТ.ОсновноеСредство = МестонахождениеОСБухгалтерскийУчет.ОсновноеСредство
    И ВТ.МОЛ = МестонахождениеОСБухгалтерскийУчет.МОЛ
    И ВТ.ДоЭтогоПериод < МестонахождениеОСБухгалтерскийУчет.Период

    СГРУППИРОВАТЬ ПО
    ВТ.ОсновноеСредство,
    ВТ.МОЛ
```

Сделал так, неужели нельзя проще?
---
срез первых не?
---
Срез первых выдаст 01.01.2019 Тумба Иванов, что неверно
---
Это же 1с ;) иногда хорошо что вообще работает и не важно проще или сложнее)
---
Добрый день!
Вопрос - актуальный ?
---
Добрый день, да, если есть более оптимальный запрос
---
классика, (возможны еще варианты)

```1c
    ВЫБРАТЬ
    Рег.МОЛ КАК МОЛ,
    Рег.ОсновноеСредство КАК ОС
    поместить Таб
    РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&КонецПериода, ) КАК Рег
    ;
    Выбрать
    Таб.МОЛ,
    Таб.ОС,
    Минимум(Рег.Период) как Период
    Из Таб
    левое соединение
    РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
    по Таб.Мол = Рег.Мол
    и Таб.ОС = Рег.ОсновноеСредство
    Сгруппировать по
    Таб.МОЛ,
    Таб.ОС
```
---
Прошу прощения, протестировал, выдаёт неверно, выдаёт 01.01.2019 Тумба Иванов, что неверно.

```1c
    ВЫБРАТЬ
    Рег.МОЛ КАК МОЛ,
    Рег.ОсновноеСредство КАК ОС
    ПОМЕСТИТЬ Таб
    ИЗ
    РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&КонецПериода) КАК Рег
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Таб.МОЛ,
    Таб.ОС,
    МИНИМУМ(Рег.Период) КАК Период
    ИЗ
    Таб КАК Таб
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
    ПО Таб.МОЛ = Рег.МОЛ
    И Таб.ОС = Рег.ОсновноеСредство

    СГРУППИРОВАТЬ ПО
    Таб.МОЛ,
    Таб.ОС
```
---
попробуйте такой пример, данные переидического РС сэмулированы доп запросом, в общем из коментов понятно как все работает

```1c
    //эмуляция периодического РС
    ВЫБРАТЬ "ос1" как ОС, "тест1" как Мол, ДатаВремя(2019,1,1) как Период, 0 как Срез Поместить Таб
    Объединить все ВЫБРАТЬ "ос1", "тест2", ДатаВремя(2019,2,1), 0
    Объединить все ВЫБРАТЬ "ос1", "тест1", ДатаВремя(2019,3,1), 0
    Объединить все ВЫБРАТЬ "ос1", "тест1", ДатаВремя(2019,4,1), 0
    Объединить все ВЫБРАТЬ "ос1", "тест1", ДатаВремя(2019,5,1), 1
    Объединить все ВЫБРАТЬ "ос2", "тест2", ДатаВремя(2019,2,1), 0
    Объединить все ВЫБРАТЬ "ос2", "тест1", ДатаВремя(2019,3,1), 0
    Объединить все ВЫБРАТЬ "ос2", "тест2", ДатаВремя(2019,4,1), 1
    Объединить все ВЫБРАТЬ "ос3", "тест3", ДатаВремя(2019,5,1), 0
    Объединить все ВЫБРАТЬ "ос3", "тест3", ДатаВремя(2019,7,1), 1
    ;
    //эмуляция результата срез последних
    Выбрать Таб.* Поместить Рег где Срез = 1
    ;

    //получаем таб с периодом от предыдущего Мол
    Выбрать
    Рег.Мол,
    Рег.ОС,
    Максимум(Пром.Период) как ПериодОт
    Поместить РегОт
    Из
    Рег

    левое соединение Таб Пром
    по Рег.ОС = Пром.ОС
    и Рег.Мол <> Пром.Мол
    и Рег.Период > Пром.Период
    Сгруппировать по
    Рег.Мол,
    Рег.ОС
    ;

    //получаем результат с минимальным периоодом по текущему Мол
    Выбрать
    Рег.Мол,
    Рег.ОС,
    Минимум(Пром.Период) как ПериодС
    Из
    РегОт Рег
    //подтягиваем другого Мол с макс датой
    левое соединение Таб Пром
    по Рег.ОС = Пром.ОС
    и Рег.Мол = Пром.Мол
    и ЕстьNull(Рег.ПериодОт,Пром.Период) <= Пром.Период
    Сгруппировать по
    Рег.Мол,
    Рег.ОС
```
---
Согласен, Ваш второй, изменённый запрос, на эмуляции данных, выводит верные значения, но в самом запросе происходит соединение дважды с таблицей Таб, которая эмулирует регистр сведений. Необходимо соединятся с регистром сведений в запросе? У меня время запроса показало какие то дикие 54 секунды, против 1.4 мой вариант, я ещё попробую попозже ваш вариант.
---
```1c
    ВЫБРАТЬ
    Рег.МОЛ КАК МОЛ,
    Рег.ОсновноеСредство КАК ОС
    ПОМЕСТИТЬ Таб
    ИЗ
    РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&КонецПериода, ) КАК Рег
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Таб.МОЛ,
    Таб.ОС,
    МАКСИМУМ(Рег.Период) КАК Период
    ПОМЕСТИТЬ ТабПредел
    ИЗ
    Таб КАК Таб
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
    ПО Таб.МОЛ <> Рег.МОЛ
    И Таб.ОС = Рег.ОсновноеСредство

    СГРУППИРОВАТЬ ПО
    Таб.МОЛ,
    Таб.ОС
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Таб.МОЛ,
    Таб.ОС,
    ТабПредел.Период КАК ПериодПредел
    ПОМЕСТИТЬ ТабВрем
    ИЗ
    Таб КАК Таб
    ЛЕВОЕ СОЕДИНЕНИЕ ТабПредел КАК ТабПредел
    ПО Таб.ОС = ТабПредел.ОС
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ТабВрем.МОЛ,
    ТабВрем.ОС,
    МИНИМУМ(Рег.Период) КАК Период
    ИЗ
    ТабВрем КАК ТабВрем
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
    ПО ТабВрем.МОЛ = Рег.МОЛ
    И ТабВрем.ОС = Рег.ОсновноеСредство
    И ТабВрем.ПериодПредел < Рег.Период

    СГРУППИРОВАТЬ ПО
    ТабВрем.МОЛ,
    ТабВрем.ОС
```
---
Протестировал только что, прошу прощения, но если единственная запись по ОС, то запрос период не выводит
---
попробуйте порядок условий связи поменять

ПО Таб.МОЛ <> Рег.МОЛ
И Таб.ОС = Рег.ОсновноеСредство
и
ПО Таб.ОС = Рег.ОсновноеСредство
И Таб.МОЛ <> Рег.МОЛ

это две большие разницы и т.д.
---
ВЫБРАТЬ
 Рег.МОЛ КАК МОЛ,
 Рег.ОсновноеСредство КАК ОС
ПОМЕСТИТЬ Таб
ИЗ
 РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&КонецПериода, ) КАК Рег
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 Таб.МОЛ,
 Таб.ОС,
 МАКСИМУМ(Рег.Период) КАК Период
ПОМЕСТИТЬ ТабПредел
ИЗ
 Таб КАК Таб
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
  ПО Таб.МОЛ <> Рег.МОЛ
   И Таб.ОС = Рег.ОсновноеСредство

СГРУППИРОВАТЬ ПО
 Таб.МОЛ,
 Таб.ОС
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 Таб.МОЛ,
 Таб.ОС,
 ТабПредел.Период КАК ПериодПредел
ПОМЕСТИТЬ ТабВрем
ИЗ
 Таб КАК Таб
  ЛЕВОЕ СОЕДИНЕНИЕ ТабПредел КАК ТабПредел
  ПО Таб.ОС = ТабПредел.ОС
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ТабВрем.МОЛ,
 ТабВрем.ОС,
 МИНИМУМ(Рег.Период) КАК Период
ИЗ
 ТабВрем КАК ТабВрем
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
  ПО ТабВрем.МОЛ = Рег.МОЛ
   И ТабВрем.ОС = Рег.ОсновноеСредство
   И (ЕСТЬNULL(ТабВрем.ПериодПредел, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) <= Рег.Период)

СГРУППИРОВАТЬ ПО
 ТабВрем.МОЛ,
 ТабВрем.ОС
---
вот это
И (ЕСТЬNULL(ТабВрем.ПериодПредел, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) <= Рег.Период)

не правильно!!! (ну что-ж, вы даже из примера не правильно списываете)
---
и для оптимизации, вам же не все данные сразу нужны? какие-то отборы у вас должны же быть, примените их, отберите и поместите во временные таблицы эти данные, по тем же группам ОС или подразделениям и т.д.
и уже складывать временные таблицы а не весь РС
---
мне нужны данные по всем ОС на конец периода
---
это что?

ВЫБРАТЬ
Таб.МОЛ,
Таб.ОС,
МАКСИМУМ(Рег.Период) КАК Период
ПОМЕСТИТЬ ТабПредел
ИЗ
Таб КАК Таб
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
ПО Таб.МОЛ <> Рег.МОЛ
И Таб.ОС = Рег.ОсновноеСредство

в примере - не так!!!
да вы батенька списывать не умеете! (чему вас только в школе учили?)
---
Не понимаю вас
---
Не понимаю вас
Таб КАК Таб
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК Рег
ПО Таб.МОЛ <> Рег.МОЛ
И Таб.ОС = Рег.ОсновноеСредство

и

    Рег
левое соединение Таб Пром
по Рег.ОС = Пром.ОС
и Рег.Мол <> Пром.Мол
и Рег.Период > Пром.Период

если найдете 5 отличий, тогда еще не все потеряно ...