Все не попавшие элементы справочника в запрос

1. Intercititude 21.06.23 21:58 Сейчас в теме
Добрый вечер.
Нужно вывести по каждому физлицу все виды документов которые по которым нету записей отсутствуют в регистре, но есть в справочнике виды документов.. То есть к примеру есть 2 сотрудника то по каждому сотруднику должны попасть условно по 6 видов и всего в запросе будет 12 видов по 6 одинаковых для каждого.

Как это сделать в запросе? Понятно что через есть null, но как корректно соединить.

ФизЛицо ВидДокумента Ссылка
Иванов null Паспорт
Иванов null ИНН
Иванов null ОМС
Иванов null ДМС
Алёхин null Паспорт
Алёхин null ИНН
Алёхин null ОМС
Алёхин null ДМС



ВЫБРАТЬ
	ДокументыСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
	ДокументыСрезПоследних.ВидДокумента КАК ВидДокумента,
	ВидыДокументов.Ссылка КАК Ссылка
ИЗ
	Справочник.ВидыДокументов КАК ВидыДокументов
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыСрезПоследних.СрезПоследних КАК ДокументыСрезПоследних
		ПО (ДокументыСрезПоследних.ВидДокумента = ВидыДокументов .Ссылка)
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. ONLYTILT 20 22.06.23 11:15 Сейчас в теме
ВЫБРАТЬ
	ВложенныйЗапрос.ФизЛицо КАК ФизЛицо,
	ВложенныйЗапрос.ВидДокумента КАК ВидДокумента
ИЗ
	(ВЫБРАТЬ
		ВидыДокументовФизическихЛиц.Ссылка КАК ВидДокумента,
		ФизическиеЛица.Ссылка КАК ФизЛицо
	ИЗ
		Справочник.ВидыДокументовФизическихЛиц КАК ВидыДокументовФизическихЛиц,
		Справочник.ФизическиеЛица КАК ФизическиеЛица) КАК ВложенныйЗапрос
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК ДокументыФизическихЛицСрезПоследних
		ПО ВложенныйЗапрос.ВидДокумента = ДокументыФизическихЛицСрезПоследних.ВидДокумента
			И ВложенныйЗапрос.ФизЛицо = ДокументыФизическихЛицСрезПоследних.Физлицо
ГДЕ
	ДокументыФизическихЛицСрезПоследних.ВидДокумента ЕСТЬ NULL
Показать
user1619761; Intercititude; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. TVA_11 22.06.23 11:27 Сейчас в теме
(1)
ВЫБРАТЬ
	ДокументыФизическихЛицСрезПоследних.Физлицо КАК ФизЛицо,
	ВложенныйЗапрос.ВидДокумента КАК ВидДокумента
ИЗ
	(ВЫБРАТЬ
		ВидыДокументовФизическихЛиц.Ссылка КАК ВидДокумента
	ИЗ
		Справочник.ВидыДокументовФизическихЛиц КАК ВидыДокументовФизическихЛиц) КАК ВложенныйЗапрос
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК ДокументыФизическихЛицСрезПоследних
		ПО ВложенныйЗапрос.ВидДокумента = ДокументыФизическихЛицСрезПоследних.ВидДокумента
ГДЕ
	ДокументыФизическихЛицСрезПоследних.ВидДокумента ЕСТЬ NULL
Показать
6. ONLYTILT 20 22.06.23 11:41 Сейчас в теме
(5)Если у физ лица не будет ни одной записи в регистре то оно не попадет в выборку
7. TVA_11 22.06.23 12:47 Сейчас в теме
8. ONLYTILT 20 22.06.23 12:48 Сейчас в теме
(7)Так я написал ниже запрос в который попадет
2. user1826630 21.06.23 22:37 Сейчас в теме
3. DBV 22.06.23 09:09 Сейчас в теме
,,,,,,,,,,,,,,,,
немного отсыпал Вам запятых
Казнить нельзя помиловать
4. ONLYTILT 20 22.06.23 11:15 Сейчас в теме
ВЫБРАТЬ
	ВложенныйЗапрос.ФизЛицо КАК ФизЛицо,
	ВложенныйЗапрос.ВидДокумента КАК ВидДокумента
ИЗ
	(ВЫБРАТЬ
		ВидыДокументовФизическихЛиц.Ссылка КАК ВидДокумента,
		ФизическиеЛица.Ссылка КАК ФизЛицо
	ИЗ
		Справочник.ВидыДокументовФизическихЛиц КАК ВидыДокументовФизическихЛиц,
		Справочник.ФизическиеЛица КАК ФизическиеЛица) КАК ВложенныйЗапрос
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК ДокументыФизическихЛицСрезПоследних
		ПО ВложенныйЗапрос.ВидДокумента = ДокументыФизическихЛицСрезПоследних.ВидДокумента
			И ВложенныйЗапрос.ФизЛицо = ДокументыФизическихЛицСрезПоследних.Физлицо
ГДЕ
	ДокументыФизическихЛицСрезПоследних.ВидДокумента ЕСТЬ NULL
Показать
user1619761; Intercititude; +2 Ответить
9. Intercititude 22.06.23 13:19 Сейчас в теме
(4) Спасибо!
Но вроде же, если у физ лица будет заведен ОМС, то в выборку два раза попадёт ОМС. Один заполненый,другой пустой..
10. ONLYTILT 20 22.06.23 13:20 Сейчас в теме
(9)Там левая связь не только по физ лицу, но еще и по виду документа, так что нет, не попадет 2 раза, и обратите внимание на условие
11. Intercititude 22.06.23 13:25 Сейчас в теме
(10) Эх мне бы Вашу соображалку :) Благодарю!
12. Intercititude 22.06.23 14:18 Сейчас в теме
(4) Правда не очень красиво наверно тянуть фул справочник и всех физ лиц вложенном. Без вложенного никак?
14. Said-We 22.06.23 15:41 Сейчас в теме
(12)
(4) Правда не очень красиво наверно тянуть фул справочник и всех физ лиц вложенном. Без вложенного никак?
Писал на коленке, синтаксис проверяйте. Так вообще без JOIN, если не считать обязательное для решения этой задачи, декартово перемножение :-). Есть и другие варианты без JOIN, но такие конструкции SQL не поддерживаются в 1С запросах.
В данном случае это простая и стандартная задача вычитания двух множеств т1 EXCEPT т2.
ВЫБРАТЬ
     т1.Ссылка КАК ФизЛицо
    ,т2.Ссылка КАК ВидДокумента
ИЗ
     Справочник.ФизическиеЛица КАК т1
    ,Справочник.ВидыДокументовФизическихЛиц КАК т2
ГДЕ
    НЕ (т1.Ссылка, т2.Ссылка) В 
              (ВЫБРАТЬ т3.ФизЛицо, т3.ВидДокумента ИЗ РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК т3)
Показать
Intercititude; +1 Ответить
16. Intercititude 23.06.23 10:09 Сейчас в теме
(14) Стараюсь не В вообще не использовать. Не оптимально..
Как и в (4) тоже. Надо бы соединениями только обойтись
13. ONLYTILT 20 22.06.23 14:19 Сейчас в теме
(12) Ну если нужно по всем физ лицам то да
15. Said-We 22.06.23 20:14 Сейчас в теме
По сути это такой запрос, но синтаксис 1С так не умеет. UNION 1С умеет, а EXCEPT, INTERSECT не умеет.
ВЫБРАТЬ
     т1.Ссылка КАК ФизЛицо
    ,т2.Ссылка КАК ВидДокумента
ИЗ
     Справочник.ФизическиеЛица КАК т1
    ,Справочник.ВидыДокументовФизическихЛиц КАК т2

EXCEPT ALL

ВЫБРАТЬ
     т3.ФизЛицо
    ,т3.ВидДокумента
ИЗ
     РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК т3
Показать
Intercititude; +1 Ответить
17. Said-We 23.06.23 10:45 Сейчас в теме
(16) В данной задаче самый быстрый вариант наверное будет EXCEPT. Но его в 1С нет.
Но если физических лиц тысяч 20 и видов документов десяток, то все эти запросы всё равно выполнятся слишком быстро (можете проверить и сообщить нам свои результаты), что бы заниматься оптимизацией. На первый план выходит читабельность текста запроса. А тут уже кому как удобнее :-)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот