![]() |
![]() |
![]() |
|
Некорректная работа оператора НЕ В () leonidkorolev, Толич, retrowave, hiddi, banco, tan76, МаленькийВопросик, ttk, lexushka, Timon1405, Bigbro, ДемьянТ, laeg, Hawk_1c, paramedic, PR, Djelf, Rovan, Ногаминебить, privetik, Garykom, SleepyHead, arsik, dmt, calmius, Somebody, minsk1s, Шурик71, shuhard, takefive, Sewace, Terrixus, Михаил Козлов, d4rkmesa, Seriy_Volk, Hmster, php5, mortal, Amra
| ☑ | ||
---|---|---|---|---|
0
rewritello
01.09.25
✎
13:45
|
ВЫБРАТЬ ВТ_ФильтрСубконто.Ссылка КАК Ссылка, ВТ_ФильтрСубконто.СуммаБезНДС КАК СуммаБезНДС, ВТ_ФильтрСубконто.СубконтоБУ КАК СубконтоБУ, ВТ_ФильтрСубконто.Номенклатура КАК Номенклатура, ВТ_ФильтрСубконто.Склад КАК Склад, ВТ_ФильтрСубконто.ДоговорКонтрагентаРегистрационныйНомер КАК ДоговорКонтрагентаРегистрационныйНомер, ВТ_ФильтрСубконто.СуммаВсего КАК СуммаВсего, ВТ_ФильтрСубконто.СчетКт КАК СчетКт, ВТ_ФильтрСубконто.НаименованиеБДПГН КАК НаименованиеБДПГН, ИЗ ВТ_ФильтрСубконто КАК ВТ_ФильтрСубконто ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеБДПГНиНомГрупп КАК СоответствиеБДПГНиНомГрупп по ВТ_ФильтрСубконто.НаименованиеБДПГН = СоответствиеБДПГНиНомГрупп.НаименованиеБДПГН И СоответствиеБДПГНиНомГрупп.Фильтр = "Подразделение в договоре" И НЕ ПОДСТРОКА(ВТ_ФильтрСубконто.ДоговорКонтрагентаРегистрационнныйНомер, 6, 3) В (ВЫБРАТЬ СоответствиеБДПГНиНомГрупп.ЗначениеФильтра ИЗ РегистрСведений.СоответствиеБДПГНиНомГрупп ГДЕ СоответствиеБДПГНиНомГрупп.Фильтр = "Подразделение в договоре") ГДЕ СоответствиеБДПГНиНомГрупп.НаименованиеБДПГН ЕСТЬ NULL ИТОГИ ПО НаименованиеБДПГН, СубконтоБУ Предоставил последний пакет запроса. Регистр сведений - СоответствиеБДПГНиНомГрупп содержит 3 поля - "НаименованиеБДПГН", "Фильтр", "ЗначениеФильтра". В регистре есть 3 записи со значениями: 1) НаименованиеБДПГН - "Услуги электроэнергии", Фильтр - "Подразделение в договоре", "ЗначениеФильтра" = "997" 2) НаименованиеБДПГН - "Услуги электроэнергии", Фильтр - "Подразделение в договоре", "ЗначениеФильтра" = "998" 3) НаименованиеБДПГН - "Услуги электроэнергии", Фильтр - "Подразделение в договоре", "ЗначениеФильтра" = "999" Запросом я пытаюсь получить строки, подразделение в договоре которых содержит подразделения, указанные в РС (по сути условием НЕ В() и проверкой на есть null в секции ГДЕ должен получить строки входящие в фильтр "Подразделение в договоре" и строки, на которые не накладывалось фильтров). В результате получаю строки, на которые не накладывалось фильтров, но не получаю строки, которые должны были отфильтроваться. При выборке строк только с условием В() запрос отрабатывает корректно (то есть при выборке исключительно фильтруемых строк): ВЫБРАТЬ ВТ_ФильтрСубконто.Ссылка КАК Ссылка, ВТ_ФильтрСубконто.СуммаБезНДС КАК СуммаБезНДС, ВТ_ФильтрСубконто.СубконтоБУ КАК СубконтоБУ, ВТ_ФильтрСубконто.Номенклатура КАК Номенклатура, ВТ_ФильтрСубконто.Склад КАК Склад, ВТ_ФильтрСубконто.ДоговорКонтрагентаРегистрационныйНомер КАК ДоговорКонтрагентаРегистрационныйНомер, ВТ_ФильтрСубконто.СуммаВсего КАК СуммаВсего, ВТ_ФильтрСубконто.СчетКт КАК СчетКт, ВТ_ФильтрСубконто.НаименованиеБДПГН КАК НаименованиеБДПГН, ИЗ ВТ_ФильтрСубконто КАК ВТ_ФильтрСубконто ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеБДПГНиНомГрупп КАК СоответствиеБДПГНиНомГрупп по ВТ_ФильтрСубконто.НаименованиеБДПГН = СоответствиеБДПГНиНомГрупп.НаименованиеБДПГН И СоответствиеБДПГНиНомГрупп.Фильтр = "Подразделение в договоре" И ПОДСТРОКА(ВТ_ФильтрСубконто.ДоговорКонтрагентаРегистрационнныйНомер, 6, 3) В (ВЫБРАТЬ СоответствиеБДПГНиНомГрупп.ЗначениеФильтра ИЗ РегистрСведений.СоответствиеБДПГНиНомГрупп ГДЕ СоответствиеБДПГНиНомГрупп.Фильтр = "Подразделение в договоре") ИТОГИ ПО НаименованиеБДПГН, СубконтоБУ почему так отрабатывает НЕ В()? |
|||
1
Garykom
гуру
01.09.25
✎
13:46
|
Какая жопа
Зачем тебе подзапрос? Сделай еще ВТ и соедини с ней |
|||
2
Garykom
гуру
01.09.25
✎
13:49
|
А еще лучше тупо передай параметром в запрос
|
|||
3
maxab72
01.09.25
✎
13:49
|
ЛЕВОЕ СОЕДИНЕНИЕ выдаст все, что в первой таблице, и что найдет во второй, как ее ни фильтруй.
|
|||
4
vicof
01.09.25
✎
13:51
|
Структура регистров - единица.
Текст запроса и наименования - единица. Форматирование - единица, дальше смотреть неинтересно. |
|||
5
rewritello
01.09.25
✎
13:53
|
в этом случае какая разница подзапрос или вт, если мне все равно придется писать подзапрос? мне нужно соединение если подразделение в договоре НЕ В (список подразделений) (1)
|
|||
6
Garykom
гуру
01.09.25
✎
13:57
|
(3) Не совсем
Еще если во второй таблице записей больше подходящих то будет дублирование строк из первой таблицы |
|||
7
H A D G E H O G s
01.09.25
✎
13:58
|
Тебе пою свои я песни.
Я ноты подобрал на слух, Кровь по твоим плечам стекает... Из ух. |
|||
8
Garykom
гуру
01.09.25
✎
14:02
|
(5) Потому что коррелированный подзапрос это жопа
У тебя вроде нет, но лучше так не делать, сильно от СУБД зависит Главное, что подзапросы хреново читаются, как и дорабатываются В твоем случае лучше обойтись банальным параметром (массив или список) Ну и обрати внимание на (3) |
|||
9
rewritello
01.09.25
✎
15:27
|
(8) Да, проблема решилась с помощью использования подзапроса из ВТ или параметра, спасибо
|
|||
10
Маленький Вопросик
01.09.25
✎
16:40
|
Обожаю таких мастеров, соединяющих выборки запросов соединениями напрямую)))
Потом неделя пройдет - сам не может разобраться))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |