Поле таблицы 1 как условие для поля таблицы 2 в запросе
Всем привет ребята. Интуитивно Я догадываюсь но хотелось бы уточнить.
В общем подскажите пожалуйста друзья, правильно ли так писать запрос и как обойти эту ситуацию если так не правильно. Что то подсказывает не очень приличный вариант
ВЫБРАТЬ
ВЫБОР
КОГДА Табл1.Дата < Табл1.Дата2
ТОГДА Табл2.Ссылка
КОНЕЦ КАК СсылкаГруз,
Табл1.Номер КАК Номер
ИЗ
Табл1 КАК Табл1
ЛЕВОЕ СОЕДИНЕНИЕ Табл2 КАК Табл2
ПО Табл1.Номер = Табл2.Номер
ПоказатьВ общем подскажите пожалуйста друзья, правильно ли так писать запрос и как обойти эту ситуацию если так не правильно. Что то подсказывает не очень приличный вариант
По теме из базы знаний
Найденные решения
(24) это аналог среза последних который строит платформа при формировании SQL запроса, только для двух таблиц. Ну и результат соединить с РС1 и РС2.
Выбрать Вагон, Максимум(Период) Из (Выбрать Вагон, Период Из РС1 Объединить все Выбрать Вагон, Период Из РС2) Сгруппировать по Вагон
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8)
Вот такой вариант предложили. Не совсем нравится. Что то с ним не так. Но как сделать правильно тоже понять не могу.
ВЫБРАТЬ
ВЫБОР
КОГДА Таб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.Вагон.Номер
ПоказатьВот такой вариант предложили. Не совсем нравится. Что то с ним не так. Но как сделать правильно тоже понять не могу.
(12)Да Я думал немного абстракции добавить так проще понять будет.
Смотрите есть 2 регистра один справочник. Нужно выбрать максимальное последний проведенный документ, ну и из него взять какое то значение. Оригинальный запрос выглядит так
Смотрите есть 2 регистра один справочник. Нужно выбрать максимальное последний проведенный документ, ну и из него взять какое то значение. Оригинальный запрос выглядит так
ВЫБРАТЬ
ВЫБОР
КОГДА Вагоны.ДатаВводаВДислокацию < НаливПродуктаНовСрезПоследних.Регистратор.Дата
ТОГДА НаливПродуктаНовСрезПоследних.ВидТоплива.НаименованиеДляДислокации
КОНЕЦ КАК Груз1,
Вагоны.НомерВагона КАК НомерВагона,
ВЫБОР
КОГДА Вагоны.ДатаВводаВДислокацию < НаливПродуктаНовСрезПоследних.Регистратор.Дата
ТОГДА НаливПродуктаНовСрезПоследних.Регистратор.Дата
ИНАЧЕ Вагоны.ДатаВводаВДислокацию
КОНЕЦ КАК Дата1
ПОМЕСТИТЬ Налив
ИЗ
РегистрСведений.НаливПродуктаНов.СрезПоследних КАК НаливПродуктаНовСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Вагоны КАК Вагоны
ПО НаливПродуктаНовСрезПоследних.Вагон = Вагоны.Ссылка
ГДЕ
Вагоны.НомерВагона В(&Вагоны)
И НЕ НаливПродуктаНовСрезПоследних.ВидТоплива.Ссылка = NULL
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Налив.НомерВагона КАК НомерВагона,
ВЫБОР
КОГДА ПропаркаВагоновСрезПоследних.ДатаПропарки > Налив.Дата1
ТОГДА ПропаркаВагоновСрезПоследних.ПодГруз
ИНАЧЕ Налив.Груз1
КОНЕЦ КАК Груз
ИЗ
Налив КАК Налив
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПропаркаВагонов.СрезПоследних КАК ПропаркаВагоновСрезПоследних
ПО Налив.НомерВагона = ПропаркаВагоновСрезПоследних.Вагон.НомерВагона
Показать
(13) Замечания. Если у вас есть ссылки в обоих регистрах (вагоны), то соединяться нужно по ссылкам, а не номерам вагонов. Если периодичность в регистре сведений по позиции регистратора, то надо дату не из регистратора брать, а Период из РС. С NULL сравнивать нельзя для него свои условия is null и is not null.
(18) Я задачи так и не услышал, поэтому что бы хоть что-то написать написал явные ошибки в реализации: Как вы пишите "Нужно найти какой-то последний документ и из него взять какой-то реквизит". Звучит как в русской сказке: Поди туда - незнамо куда, принеси то - незнамо что. Если кто-то задает вопрос по типовому решению, то много из контекста можно понять, а в вашем случае это не так. Вам же самим когда ставили задачу ее не так озвучивали, как вы нам?
В грамотно построенном решении все должно решиться одним запросом к СрезуПоследних.
В грамотно построенном решении все должно решиться одним запросом к СрезуПоследних.
(20) Два регистра это может быть и проектная ошибка, поэтому я и написал "в грамотно". Зачем на каждую операцию с вагоном заводить отдельный регистр? Может правильно было добавить поле Операция или два отдельных поля: ДатаНаливки и ДатаПропарки? Возьмем типовые решения 1С у нас же один регистр СобытияОС, а не отдельные.
(19)
Задача такая.
Требуется получить последнее значение чем грузился вагон.
Вагон может быть груженный а может быть с пропарки. Если погружен то груз у него справочник НомеклатураСсылка, если Пропарка то груз у него Справочник ГруппыНефтепродуктовСсылка
Нам нужно знать какое последнее состояние вагона прямо сейчас, пропарен или погружен.
Пропарка и отгрузка это разные регистры и разные документы.
В регистрах это одно и тоже измерение Вагон.
Может лучше хранить последнее состояние в справочнике вагона, сделать составное поле на эти справочники и записывать туда в зависимости от операции, или можно еще как нибудь сделать?
Задача такая.
Требуется получить последнее значение чем грузился вагон.
Вагон может быть груженный а может быть с пропарки. Если погружен то груз у него справочник НомеклатураСсылка, если Пропарка то груз у него Справочник ГруппыНефтепродуктовСсылка
Нам нужно знать какое последнее состояние вагона прямо сейчас, пропарен или погружен.
Пропарка и отгрузка это разные регистры и разные документы.
В регистрах это одно и тоже измерение Вагон.
Может лучше хранить последнее состояние в справочнике вагона, сделать составное поле на эти справочники и записывать туда в зависимости от операции, или можно еще как нибудь сделать?
(22) Из объединения регистров выбрать Максимальный период для каждого вагона. По этой дате еще раз соединиться с обоими РС по Период=МаксПериод, через is null взять значение.
Мое мнение что это должен быть один регистр укрепилось, тогда срезпоследних даст нам сразу результат. И в один регистр могут писать разные документы, если кто-то этого не знал.
Мое мнение что это должен быть один регистр укрепилось, тогда срезпоследних даст нам сразу результат. И в один регистр могут писать разные документы, если кто-то этого не знал.
(24) это аналог среза последних который строит платформа при формировании SQL запроса, только для двух таблиц. Ну и результат соединить с РС1 и РС2.
Выбрать Вагон, Максимум(Период) Из (Выбрать Вагон, Период Из РС1 Объединить все Выбрать Вагон, Период Из РС2) Сгруппировать по Вагон
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот