Как запросом определить пересекаются ли два множества НЕ ИСПОЛЬЗУЯ АГРЕГАТНЫЕ ФУНКЦИИ #460306


#0 by ЭЦ
ГОСПОДА! Имеется 1 документ ПриемНаРаботуВОрганизацию в документе имеется таб. часть с полем Сотрудник у которого имеется реквизит Подразделение. 2 Список запрещенных подразделений - СписЗП Требуется написать запрос который выдастт все документы в ТЧ которых нет запрещенных сотрудников. Причем СписЗП не должен быть внутри агрегатной функции. Как это реализовать? прошу подсказать.
#1 by 73
НЕ В(&СписЗП) ?
#2 by Gamm
А в чем проблема возникла? Выбрать * из Док.ТЧ Где Док.Тч.Сотрудник.Подразделение не в (&СПИСЗП)
#3 by Ненавижу 1С
соедини внутренне ТЧ со списком, получишь те доки, у кого есть запрещенные, это подзапрос соедини селва доки с подзапросом, повесь условие ЕСТЬ NULL на доки в подзапросе
#4 by Ненавижу 1С
доки надо, так пройдут и те доки, в которых есть как запрещенные так и не запрещенные
#5 by Tashiro
можно еще формировать запрос и забивать его "И имяРек <> условиеN..." но в - изящно и более верно
#6 by Gamm
Не вчитался в задачу. Тогда твой способ с соединениями верный.
#7 by 73
Это если к ТЧ обращаться. Попробуй: ВЫБРАТЬ    ПриемНаРаботуВОрганизацию.Ссылка ИЗ    Документ.ПриемНаРаботуВОрганизацию КАК ПриемНаРаботуВОрганизацию ГДЕ    ПриемНаРаботуВОрганизацию.ТАБЧАСТЬ.Сотрудник.Подразделение Не В(&СПИСЗП)
#8 by Ненавижу 1С
какой то анти-SQL, но работает подозреваю, что парсится все равно в подобное
#9 by Ненавижу 1С
+ какая-то неоднозначная для понимания логика выходит
#10 by 73
Но ведь работает)
#11 by Ненавижу 1С
ИЗ    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг выдает все документы, для которых выполняется условие ХОТЯ БЫ ДЛЯ ОДНОГО ЗНАЧЕНИЯ из ТЧ в списке ИЗ    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ    РеализацияТоваровУслуг.Товары.Номенклатура НЕ В (&Номенклатура) выдает все документы, для которых выполняется условие ДЛЯ ВСЕХ ЗНАЧЕНИЙ из ТЧ в списке
#12 by 73
Посчитай количество доков там и там и общее. Получается кво(без НЕ) + кво(С НЕ) = общему количеству документов. Т.е. каждый документ учтен 1 раз. Кстати, критерии отбора по ТЧ аналогично работают со списками. Понятно, что это решение не отличается наглядностью, логикой и т.д. Но оно работает. И логику надо искать в постановке задачи в : например:<запрос который выдастт все документы в ТЧ которых нет запрещенных сотрудников> - не правда ли, звучит как <ДЛЯ ВСЕХ ЗНАЧЕНИЙ из ТЧ в списке>. или:<запрос который выдастт все документы в ТЧ которых встречаются запрещенные сотрудники> - звучит как <все документы, для которых выполняется условие ХОТЯ БЫ ДЛЯ ОДНОГО ЗНАЧЕНИЯ из ТЧ >.
#13 by Ненавижу 1С
"Получается кво(без НЕ) + кво(С НЕ) = общему количеству документов." что и подтверждает сделанный мной вывод неадекватное поведение 1С, как я ее ненавижу!
#14 by ЭЦ
А зачем еще левое соединение с условием ? Наверное проще ГДЕ НЕ Доки В (ВложеныйЗапрос.ЗапрещенныйДок) ?
#15 by Ненавижу 1С
так надо, но проще в
#16 by ЭЦ
В получим список документов в которых есть хотя бы одно разрешенное подразделение.
#17 by 73
Это если НЕ убрать. А в том виде как там - :<запрос который выдастт все документы в ТЧ которых нет запрещенных сотрудников>
#18 by Ненавижу 1С
я тоже так думал, потом проверил и вывод написал в . Однако так и есть
#19 by Ненавижу 1С
Вообще складывается впечатление, что однажды эта фича перестанет работать - разработчики в очередном релизе платформы могут все переписать
#20 by 73
Тогда я тоже ненавижу)
#21 by ЭЦ
Но вроде дожно работать железобетонно. только еще один вложенный запрос надо
#22 by Ненавижу 1С
идея в вот: Только там списком был подзапрос, а у тебя проще, потому:    РеализацияТоваровУслуг.Ссылка ИЗ    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ            РеализацияТоваровУслугТовары.Ссылка КАК Ссылка        ИЗ ГДЕ    Плохие.Ссылка ЕСТЬ NULL
#23 by ЭЦ
Это мы щас испробуем. Но почему такая странная любофь к левому соединению? заместо НЕ ... В ... ?
#24 by Ненавижу 1С
просто НЕ В (именно так, а не как в ) даст отбор тех доков, у которых есть "хорошие" строки, но там ведь и "плохие" могут быть!
#25 by ЭЦ
да не я попробовал - отбирает как надо. Думал мож соединение работает быстрее или мож вложенность запросов повышать нехорошо.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С