Как вы делаете условия в запросах?

1. program345 141 30.06.26 20:20 Сейчас в теме
Привет!
Можно сделать условие в Где (скрин 1),
а можно в По (скрин 2). Почему результат разный?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Sashares 34 30.06.26 20:44 Сейчас в теме
(1) Потому что условия разные.
Условие в ГДЕ применяется на выборку - то есть остаются только контрагенты, по которым не было поступлений.
Условие в ПО - соединение с документом, где документ Null.
То есть выбрать всех контрагентов и присоединить данные документа, где документ Null.
И это вообще бред, если честно.
Если документа по этим контрагентам нет, какой смысл брать что-то в выборку из полей этого документа?
Bukaska; dehro; +2 Ответить
4. _user2207618 30.06.26 20:51 Сейчас в теме
(3)
И это вообще бред, если честно.
Ты на кого батон крошишь? У чувака рейтинг выше, чем у тебя! И компетенций по разработке больше! Сам убедись:
Прикрепленные файлы:
orakool2; Sashares; +2 Ответить
7. dehro 15 30.06.26 20:55 Сейчас в теме
(4)
Чины людьми даются...

(с) Грибоедов А.С.
Lyalin_Vladimir; +1 Ответить
11. Sashares 34 30.06.26 21:06 Сейчас в теме
8. program345 141 30.06.26 20:56 Сейчас в теме
(3)
какой смысл брать что-то в выборку из полей этого документа?

тз вывести всех контрагентов по которым не было оплат.
10. _user2207618 30.06.26 21:01 Сейчас в теме
(8)
тз вывести всех контрагентов по которым не было оплат.
У тебя же офигенный скилл по разработке, а ты не можешь справиться с тестовым заданием для выпускников двухнедельных курсов?
Да еще и ИИ в свою аферу втягиваешь. Тебе его совсем не жаль?
12. Sashares 34 30.06.26 21:08 Сейчас в теме
(8) Соединение с таблицей документа, только там, где документа нет.
Соединение, а не отбор.
Это тоже самое как не соединяться с таблицей документа вообще.
Результат аналогичный.
13. _user2207618 30.06.26 21:10 Сейчас в теме
(12) Вот только не надо тут про суслика шутить!
36. Boneman 302 02.07.26 10:40 Сейчас в теме
(1) В первом случае, стоит условие соединения,
по контрагенту из документа, и отсутсвующую ссылку в документе одновременно, чего быть не может.
Соответсвенно, к контрагентам ничего не присоединяется вообще, даже если было. И видите просто выборку контрагентов без документов.

Во втором случае, у вас присоединяется по контрагенту, если оно было..соединение сработает.
но в итоговом условии, вы отсекаете полезные записи условием естьnull - и в итоге получаете контрагентов у которых не было оплат. Получаете только контрагентов без оплат.

Чтобы понять как работает, во втором запросе - оставьте только соединение таблиц по контрагенту, а общее условие уберите.
И выведите в результат ссылку. Увидите, что по 3м контрагентам присоединились документы, а по двум - null.
И все станет понятно как это работает.
2. _user2207618 30.06.26 20:37 Сейчас в теме
Почему результат разный?
Потом что во втором случае нет никаких условий, накладываемых на результат.
Как вы делаете условия в запросах?
Сначала учим матчасть, потом думаем как её применить, а потом делаем.

// Дяденька, а ты точно программист?
Bukaska; homer_; orakool2; Lyalin_Vladimir; dehro; Sashares; +6 Ответить
5. program345 141 30.06.26 20:54 Сейчас в теме
В платформе 1С:Предприятие разница в результатах между условиями, заданными в секции ГДЕ (виртуальной таблицы или запроса) и в секции ПО (при соединении таблиц), возникает из-за логики обработки соединений и фильтрации данных.Вот как работают эти условия:1. Условие в секции ГДЕ (Фильтрация)Секция ГДЕ применяется после того, как все таблицы (включая соединенные) были объединены и сформирован итоговый набор данных.Как работает: Если запись не удовлетворяет условию, она просто отсекается из конечного результата запроса.Пример: Если вы используете Левое соединение (LEFT JOIN) и ставите условие в ГДЕ, 1С сначала соединит таблицы (добавив NULL для пустых связей), а затем удалит строки, которые не подошли под условие ГДЕ.2. Условие в секции ПО (Связь таблиц)Условие в секции ПО применяется непосредственно в момент соединения таблиц.Как работает: Оно определяет, как именно нужно связывать строки.Для Левого соединения (LEFT JOIN): Если условие в ПО не выполняется, строка из левой таблицы все равно попадет в результат, но все поля правой таблицы будут заполнены значениями NULL.Главный пример: В чем подвох?Представьте, что вы соединяете справочник Номенклатура (левая таблица) и регистр Цены (правая таблица, левое соединение).Вариант с ГДЕ:ГДЕ Цены.Цена > 100Результат: В отчет попадут только те товары, у которых цена больше 100. Товары без цен (где цена равна NULL или меньше 100) полностью исчезнут из отчета, так как условие ГДЕ отсекает все несовпадения.Вариант с ПО:ЛЕВОЕ СОЕДИНЕНИЕ Регистр.Цены КАК Цены ПО Номенклатура.Ссылка = Цены.Номенклатура И Цены.Цена > 100Результат: В отчет попадет вся номенклатура. Для товаров с ценой > 100 цена подтянется. Для товаров без цены или с ценой меньше 100 поля цены будут пустыми (NULL), но сам товар в списке останется.Краткое правило для разработчикаИспользуйте фильтры в ПО, если нужно управлять тем, как таблицы соединяются (например, отсечь только нужные записи дочерней таблицы, сохранив все записи главной).Используйте фильтры в ГДЕ, если вам нужно отфильтровать уже готовый, итоговый результат запроса.
NicolasCage; +1 Ответить
9. _user2207618 30.06.26 20:57 Сейчас в теме
(5)
(например, отсечь только нужные записи дочерней таблицы, сохранив все записи главной)
Ты же это тоже прочитал, правда?
15. Sashares 34 30.06.26 21:14 Сейчас в теме
(9) =))
Прикрепленные файлы:
program345; Bukaska; aka Любитель XML; muskul; Lyalin_Vladimir; _user2207618; +6 Ответить
6. program345 141 30.06.26 20:55 Сейчас в теме
скрин
Прикрепленные файлы:
14. SlavaKron 30.06.26 21:11 Сейчас в теме
(6) После "В чем подвох?" идёт неплохое объяснение на примере. Оно вас не устроило?
_user2207618; Sashares; +2 Ответить
16. _user2207618 30.06.26 21:16 Сейчас в теме
(14)
Оно вас не устроило?
Думаешь, реально читал?
program345; orakool2; Lyalin_Vladimir; +3 Ответить
17. ktibomail 30 01.07.26 03:28 Сейчас в теме
Потому что NULL появляется ПОСЛЕ соединения. А в момент соединения, в секции ПО, отбираться по нему бессмысленно.
18. _user2207618 01.07.26 08:15 Сейчас в теме
(17) Ну даже если он появится ДО - то как это повлияет на главную таблицу?
19. ktibomail 30 01.07.26 10:32 Сейчас в теме
(18) ДО соединения не может появиться, это же как раз и есть результат соединения, т.е. отсутствие значения в правой таблице.
20. _user2207618 01.07.26 10:36 Сейчас в теме
(19)
есть результат соединения
А, ну понял. Твоя логика правильна, но без дополнения немного "недоозвучена". Нужен ум, чтобы дополнить её парой последствий, и понять смысл.
С автором такое не прокатит, ты ж понимаешь.
21. ktibomail 30 01.07.26 10:42 Сейчас в теме
(20) Я не знаю автора вопроса, но у вас с ним похоже что-то личное
22. _user2207618 01.07.26 10:45 Сейчас в теме
(21) Да тут у всех со мной что-то личное ;-)
orakool2; starik-2005; Sashares; +3 Ответить
23. SlavaKron 01.07.26 10:47 Сейчас в теме
(17) Ваше объяснение отталкивается от частного случая. Да, NULL возникает только по результату соединения и использовать условие по нему в соединении нет смысла. Но глобально это не объясняет разницу использования условий в "ПО" и "ГДЕ".
24. ktibomail 30 01.07.26 11:00 Сейчас в теме
(23) Согласен, глобально не объясняет. Но у меня не было такой цели, я лишь дополнил существующие ответы, может автору будет так понятнее.
25. SamPoSebe 01.07.26 12:39 Сейчас в теме
Блин вы так агрессивно на него напали) Но я посмеялся, спасибо)
Bukaska; Amirrrrrr; +2 Ответить
26. Bukaska 157 01.07.26 13:08 Сейчас в теме
(25) Тоже... Про "батон крошишь" ржууууууу.
27. _user2207618 01.07.26 13:23 Сейчас в теме
(26) Что еще тебе рассказать про "страшные 90-е"?
29. Bukaska 157 01.07.26 13:53 Сейчас в теме
(27) На Меня тут в давнишние времена(лет 10 назад) - нападали еще агрессивнее, хотя благо хоть сейчас не трогают)))
28. _user2207618 01.07.26 13:25 Сейчас в теме
(25)
Блин вы так агрессивно
Представь, что у вас с мужиками в гаражах некое автосообщество. И вот приходит к вам некий чувак в форме с надписью "Автосервис №1" и спрашивает - мужики, подскажите в чм дело: я поменял в салоне местами левую и правую педали, чтобы левой ногой газовать, а машина все равно тормозит от левой педали, а от правой газует...

Вы сможете ему по доброму объяснить, в чем его заблуждение?
30. SamPoSebe 01.07.26 14:06 Сейчас в теме
(28) Смогу) После того как высмею и мысленно обматерю) В гаражах тяжко со стендапом, а тут такая возможность появится)
31. Bukaska 157 01.07.26 14:07 Сейчас в теме
(30) и потом сказать. Давай кати к чертям, ты больше не мастер)))
32. SamPoSebe 01.07.26 14:27 Сейчас в теме
(31) Лучше уж пригласить его на обучение в наш сервис) скидку ему на обучение сделаем, как "коллеге по цеху"
33. _user2207618 01.07.26 14:48 Сейчас в теме
(32)
Лучше уж пригласить его на обучение
Где-то сейчас икнул один там Слава Карзуничев...
Bukaska; orakool2; +2 Ответить
34. Bukaska 157 01.07.26 15:43 Сейчас в теме
(32) Пнуть бы его на курсы по 1с РФ, там точно эту тему разжуют и в рот положат)))
35. koln 01.07.26 15:50 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация

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