Всем привет ребята. Интуитивно Я догадываюсь но хотелось бы уточнить.

```1c
    ВЫБРАТЬ
    ВЫБОР
    КОГДА Табл1.Дата < Табл1.Дата2
    ТОГДА Табл2.Ссылка
    КОНЕЦ КАК СсылкаГруз,
    Табл1.Номер КАК Номер
    ИЗ
    Табл1 КАК Табл1
    ЛЕВОЕ СОЕДИНЕНИЕ Табл2 КАК Табл2
    ПО Табл1.Номер = Табл2.Номер
```

В общем подскажите пожалуйста друзья, правильно ли так писать запрос и как обойти эту ситуацию если так не правильно. Что то подсказывает не очень приличный вариант
---
```1c
    Выбрать Вагон, Максимум(Период) Из (Выбрать Вагон, Период Из РС1 Объединить все Выбрать Вагон, Период Из РС2) Сгруппировать по Вагон
```
 это аналог среза последних который строит платформа при формировании SQL запроса, только для двух таблиц. Ну и результат соединить с РС1 и РС2.
---
Правильно. Если в результате выражения будет NULL и это вы предусмотрели, то ничего менять не нужно. Если такие строки вообще не нужны условие можно перенести в ГДЕ.
---
Это вообще оптимальное решение?
---
Если поле Номер проиндексировано (если это стандартное поле документа то проиндексировано), то да.
---
Наводящий вопрос: а что должно содержаться в поле СсылкаГруз, когда Табл1.Дата >= Табл1.Дата2?
---
И сразу второй: что там должно содержаться, если в таблице Табл2 нет строки с Табл1.Номер = Табл2.Номер?
---
Спасибо что откликнулся.
Вот есть 3 таблицы
1)Табл
Дата
Номер
2)Табл
Дата
Номер
СсылкаГрузГруппа
3)Табл
Дата
Номер
СсылкаГруз

Нужно выбрать максимальную дату ну и от этого будет зависить поле ПолеГруз, там или группаГруза или сам Груз
---
Откуда выбирается максимальная дата?
---
```1c
    ВЫБРАТЬ
    ВЫБОР
    КОГДА Таб1.ДатаВвода < Таб2.Регистратор.Дата
    ТОГДА Таб2.ВидТ
    КОНЕЦ КАК Груз1,
    Таб1.Номер КАК Номер,
    ВЫБОР
    КОГДА Таб1.ДатаВвода < Таб2.Регистратор.Дата
    ТОГДА Таб2.Регистратор.Дата
    ИНАЧЕ Таб1.ДатаВвода
    КОНЕЦ КАК Дата1
    ПОМЕСТИТЬ Результат
    ИЗ
    Таб2 КАК Таб2
    ЛЕВОЕ СОЕДИНЕНИЕ Таб1.Ваг КАК Таб1
    ПО Таб2.Ваг = Таб1.Ссылка
    ГДЕ
    Таб1.Номер В(&В)
    И НЕ Таб2.ВидТ = NULL
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Результат.Номер КАК Номер,
    ВЫБОР
    КОГДА Таб3.ДатаП > Результат.Дата1
    ТОГДА Таб3.ПодГруз
    ИНАЧЕ Результат.Груз1
    КОНЕЦ КАК Груз
    ИЗ
    Налив КАК Результат
    ЛЕВОЕ СОЕДИНЕНИЕ Таб3 КАК Таб3
    ПО Результат.Номер = Таб3.Вагон.Номер
```

Вот такой вариант предложили. Не совсем нравится. Что то с ним не так. Но как сделать правильно тоже понять не могу.
---
Звучит странно. А можно в личку продублировать целиком задачу?
---
Он совсем не похож на оригинальный и в нем все плохо. Задачу можно по-людски рассказать? В том числе что за объекты: Таб1, Таб2 и Таб3?
---
Да Я думал немного абстракции добавить так проще понять будет.
Смотрите есть 2 регистра один справочник. Нужно выбрать максимальное последний проведенный документ, ну и из него взять какое то значение. Оригинальный запрос выглядит так

```1c
    ВЫБРАТЬ
    ВЫБОР
    КОГДА Вагоны.ДатаВводаВДислокацию < НаливПродуктаНовСрезПоследних.Регистратор.Дата
    ТОГДА НаливПродуктаНовСрезПоследних.ВидТоплива.НаименованиеДляДислокации
    КОНЕЦ КАК Груз1,
    Вагоны.НомерВагона КАК НомерВагона,
    ВЫБОР
    КОГДА Вагоны.ДатаВводаВДислокацию < НаливПродуктаНовСрезПоследних.Регистратор.Дата
    ТОГДА НаливПродуктаНовСрезПоследних.Регистратор.Дата
    ИНАЧЕ Вагоны.ДатаВводаВДислокацию
    КОНЕЦ КАК Дата1
    ПОМЕСТИТЬ Налив
    ИЗ
    РегистрСведений.НаливПродуктаНов.СрезПоследних КАК НаливПродуктаНовСрезПоследних
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Вагоны КАК Вагоны
    ПО НаливПродуктаНовСрезПоследних.Вагон = Вагоны.Ссылка
    ГДЕ
    Вагоны.НомерВагона В(&Вагоны)
    И НЕ НаливПродуктаНовСрезПоследних.ВидТоплива.Ссылка = NULL
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Налив.НомерВагона КАК НомерВагона,
    ВЫБОР
    КОГДА ПропаркаВагоновСрезПоследних.ДатаПропарки > Налив.Дата1
    ТОГДА ПропаркаВагоновСрезПоследних.ПодГруз
    ИНАЧЕ Налив.Груз1
    КОНЕЦ КАК Груз
    ИЗ
    Налив КАК Налив
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПропаркаВагонов.СрезПоследних КАК ПропаркаВагоновСрезПоследних
    ПО Налив.НомерВагона = ПропаркаВагоновСрезПоследних.Вагон.НомерВагона
```
---
Замечания. Если у вас есть ссылки в обоих регистрах (вагоны), то соединяться нужно по ссылкам, а не номерам вагонов. Если периодичность в регистре сведений по позиции регистратора, то надо дату не из регистратора брать, а Период из РС. С NULL сравнивать нельзя для него свои условия is null и is not null.
---
Сам запрос не Мой. Пока не стоит обращать внимания на косяки ссылками. Пока хотябы понять в правильном направлении двигаемся или нет
---
Я задачи так и не услышал, поэтому что бы хоть что-то написать написал явные ошибки в реализации: Как вы пишите "Нужно найти какой-то последний документ и из него взять какой-то реквизит". Звучит как в русской сказке: Поди туда - незнамо куда, принеси то - незнамо что. Если кто-то задает вопрос по типовому решению, то много из контекста можно понять, а в вашем случае это не так. Вам же самим когда ставили задачу ее не так озвучивали, как вы нам?
В грамотно построенном решении все должно решиться одним запросом к СрезуПоследних.
---
Одним вряд ли. Регистра два.
---
Два регистра это может быть и проектная ошибка, поэтому я и написал "в грамотно". Зачем на каждую операцию с вагоном заводить отдельный регистр? Может правильно было добавить поле Операция или два отдельных поля: ДатаНаливки и ДатаПропарки? Возьмем типовые решения 1С у нас же один регистр СобытияОС, а не отдельные.
---
Задача такая.
Требуется получить последнее значение чем грузился вагон.
Вагон может быть груженный а может быть с пропарки. Если погружен то груз у него справочник НомеклатураСсылка, если Пропарка то груз у него Справочник ГруппыНефтепродуктовСсылка
Нам нужно знать какое последнее состояние вагона прямо сейчас, пропарен или погружен.

Пропарка и отгрузка это разные регистры и разные документы.
В регистрах это одно и тоже измерение Вагон.

Может лучше хранить последнее состояние в справочнике вагона, сделать составное поле на эти справочники и записывать туда в зависимости от операции, или можно еще как нибудь сделать?
---
Из объединения регистров выбрать Максимальный период для каждого вагона. По этой дате еще раз соединиться с обоими РС по Период=МаксПериод, через is null взять значение.
Мое мнение что это должен быть один регистр укрепилось, тогда срезпоследних даст нам сразу результат. И в один регистр могут писать разные документы, если кто-то этого не знал.
---
Я знаю что можно писать из разных документов.
Но не совсем понял ваш подход, вроде бы в голове что начало появляться. Но кажется не до конца понял
---
```1c
    Выбрать Вагон, Максимум(Период) Из (Выбрать Вагон, Период Из РС1 Объединить все Выбрать Вагон, Период Из РС2) Сгруппировать по Вагон
```
 это аналог среза последних который строит платформа при формировании SQL запроса, только для двух таблиц. Ну и результат соединить с РС1 и РС2.
---
создать 2 временные таблицы.
В первой, получить данные из первого РС.
Во второй получить из второго РС.
в итогом запросе выбрать из справочника и соединить левым соединением из обоих временных таблиц.
И уже через ВЫБОР получать необходимые значения.
---
Можно также сделать упорядочивание по Дате и Выбрать первые 1
---
Тоже не плохо, но только там будет много значений. Если бы 1 выбирал ок, а будет 1+
---
Запрос с подзапросом?