Добрый день!
Подскажите пожалуйста как написать запрос, что-то голова отказывается соображать.
Есть РС СвязиДокументов, независимый, непериодический, имеет два измерения ОсновнойДокумент, и ПодчиненныйДокумент имеющий определяемый тип.
Есть ДокументОснова который является измерением ОсновнойДокумент.
Есть ДокументДочерний у которого есть реквизит Итоговый. Документ иногда бывает в измерении ПодчиненныйДокумент.
Прямой связи между документами нет.
В общем задача такова, нужно отобрать только такие Документ1, для которых в записях РС СвязиДокументов все связанные Документ2 имеют реквизит Итоговый = Истина, если среди связанных Документ2 есть имеющие Итоговый = Ложь, то такие Документ1 не допускать в выборку.
Пожалуйста укажите в какую сторону посмотреть, заранее благодарен ♥
Подскажите пожалуйста как написать запрос, что-то голова отказывается соображать.
Есть РС СвязиДокументов, независимый, непериодический, имеет два измерения ОсновнойДокумент, и ПодчиненныйДокумент имеющий определяемый тип.
Есть ДокументОснова который является измерением ОсновнойДокумент.
Есть ДокументДочерний у которого есть реквизит Итоговый. Документ иногда бывает в измерении ПодчиненныйДокумент.
Прямой связи между документами нет.
В общем задача такова, нужно отобрать только такие Документ1, для которых в записях РС СвязиДокументов все связанные Документ2 имеют реквизит Итоговый = Истина, если среди связанных Документ2 есть имеющие Итоговый = Ложь, то такие Документ1 не допускать в выборку.
Пожалуйста укажите в какую сторону посмотреть, заранее благодарен ♥
Прикрепленные файлы:

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