1.
program345
141
30.06.26 20:20
Сейчас в теме
Привет!
Можно сделать условие в Где (скрин 1),
а можно в По (скрин 2). Почему результат разный?
Можно сделать условие в Где (скрин 1),
а можно в По (скрин 2). Почему результат разный?
Прикрепленные файлы:
По теме из базы знаний
- XPath в 1С - как с этим работать.
- Правила запроса. Выдержки из книги "Настольная книга 1С:Эксперта по технологическим вопросам"
- Как мы загружаем данные в "Центр управления кассами Магнита"
- Зачем и как читать чужой код? Какой результат ожидаем получить? Основные подходы
- Как правильно писать запросы для СКД. Фундаментальное исследование
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Потому что условия разные.
Условие в ГДЕ применяется на выборку - то есть остаются только контрагенты, по которым не было поступлений.
Условие в ПО - соединение с документом, где документ Null.
То есть выбрать всех контрагентов и присоединить данные документа, где документ Null.
И это вообще бред, если честно.
Если документа по этим контрагентам нет, какой смысл брать что-то в выборку из полей этого документа?
Условие в ГДЕ применяется на выборку - то есть остаются только контрагенты, по которым не было поступлений.
Условие в ПО - соединение с документом, где документ Null.
То есть выбрать всех контрагентов и присоединить данные документа, где документ Null.
И это вообще бред, если честно.
Если документа по этим контрагентам нет, какой смысл брать что-то в выборку из полей этого документа?
4.
_user2207618
30.06.26 20:51
Сейчас в теме
(3)
И это вообще бред, если честно.
Ты на кого батон крошишь? У чувака рейтинг выше, чем у тебя! И компетенций по разработке больше! Сам убедись:
Прикрепленные файлы:
8.
program345
141
30.06.26 20:56
Сейчас в теме
(3)
тз вывести всех контрагентов по которым не было оплат.
какой смысл брать что-то в выборку из полей этого документа?
тз вывести всех контрагентов по которым не было оплат.
10.
_user2207618
30.06.26 21:01
Сейчас в теме
(8)
Да еще и ИИ в свою аферу втягиваешь. Тебе его совсем не жаль?
тз вывести всех контрагентов по которым не было оплат.
У тебя же офигенный скилл по разработке, а ты не можешь справиться с тестовым заданием для выпускников двухнедельных курсов?
Да еще и ИИ в свою аферу втягиваешь. Тебе его совсем не жаль?
(1) В первом случае, стоит условие соединения,
по контрагенту из документа, и отсутсвующую ссылку в документе одновременно, чего быть не может.
Соответсвенно, к контрагентам ничего не присоединяется вообще, даже если было. И видите просто выборку контрагентов без документов.
Во втором случае, у вас присоединяется по контрагенту, если оно было..соединение сработает.
но в итоговом условии, вы отсекаете полезные записи условием естьnull - и в итоге получаете контрагентов у которых не было оплат. Получаете только контрагентов без оплат.
Чтобы понять как работает, во втором запросе - оставьте только соединение таблиц по контрагенту, а общее условие уберите.
И выведите в результат ссылку. Увидите, что по 3м контрагентам присоединились документы, а по двум - null.
И все станет понятно как это работает.
по контрагенту из документа, и отсутсвующую ссылку в документе одновременно, чего быть не может.
Соответсвенно, к контрагентам ничего не присоединяется вообще, даже если было. И видите просто выборку контрагентов без документов.
Во втором случае, у вас присоединяется по контрагенту, если оно было..соединение сработает.
но в итоговом условии, вы отсекаете полезные записи условием естьnull - и в итоге получаете контрагентов у которых не было оплат. Получаете только контрагентов без оплат.
Чтобы понять как работает, во втором запросе - оставьте только соединение таблиц по контрагенту, а общее условие уберите.
И выведите в результат ссылку. Увидите, что по 3м контрагентам присоединились документы, а по двум - null.
И все станет понятно как это работает.
2.
_user2207618
30.06.26 20:37
Сейчас в теме
Почему результат разный?
Потом что во втором случае нет никаких условий, накладываемых на результат.
Как вы делаете условия в запросах?
Сначала учим матчасть, потом думаем как её применить, а потом делаем.
// Дяденька, а ты точно программист?
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), но сам товар в списке останется.Краткое правило для разработчикаИспользуйте фильтры в ПО, если нужно управлять тем, как таблицы соединяются (например, отсечь только нужные записи дочерней таблицы, сохранив все записи главной).Используйте фильтры в ГДЕ, если вам нужно отфильтровать уже готовый, итоговый результат запроса.
9.
_user2207618
30.06.26 20:57
Сейчас в теме
(5)
(например, отсечь только нужные записи дочерней таблицы, сохранив все записи главной)
Ты же это тоже прочитал, правда?
18.
_user2207618
01.07.26 08:15
Сейчас в теме
(17) Ну даже если он появится ДО - то как это повлияет на главную таблицу?
20.
_user2207618
01.07.26 10:36
Сейчас в теме
(19)
С автором такое не прокатит, ты ж понимаешь.
есть результат соединения
А, ну понял. Твоя логика правильна, но без дополнения немного "недоозвучена". Нужен ум, чтобы дополнить её парой последствий, и понять смысл.
С автором такое не прокатит, ты ж понимаешь.
(17) Ваше объяснение отталкивается от частного случая. Да, NULL возникает только по результату соединения и использовать условие по нему в соединении нет смысла. Но глобально это не объясняет разницу использования условий в "ПО" и "ГДЕ".
28.
_user2207618
01.07.26 13:25
Сейчас в теме
(25)
Вы сможете ему по доброму объяснить, в чем его заблуждение?
Блин вы так агрессивно
Представь, что у вас с мужиками в гаражах некое автосообщество. И вот приходит к вам некий чувак в форме с надписью "Автосервис №1" и спрашивает - мужики, подскажите в чм дело: я поменял в салоне местами левую и правую педали, чтобы левой ногой газовать, а машина все равно тормозит от левой педали, а от правой газует...
Вы сможете ему по доброму объяснить, в чем его заблуждение?
33.
_user2207618
01.07.26 14:48
Сейчас в теме
(32)
Лучше уж пригласить его на обучение
Где-то сейчас икнул один там Слава Карзуничев...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот