Странности с отбором в СКД при наличии ДВУХ наборов данных... #458780


#0 by AquaKosh
Приветствую, коллеги. Столкнулся с непонятным поведением СКД при наличии отбора в ОДНОМ из наборов данных (отбор СКДшный, который в {}). Есть основная таблица (первый набор данных - факт) и вспомогательная (второй набор данных - план). Вспомогательная цепляется к основной (план к факту). 1) В самом примитивном варианте это выглядит так: --------------------------------- Товар      |  план    |  факт   | --------------------------------- Мясо       |    5     |   10    | Сало       |    6     |   15    | --------------------------------- 2) Если, к примеру, плана нет, то выводится один факт (в плане 0). --------------------------------- Товар      |  план    |  факт   | --------------------------------- Мясо       |          |   10    | Сало       |          |   15    | --------------------------------- Во вспомогательном наборе данных (ПЛАН) есть отбор по товару, при активизации которого СКД выводит пустую таблицу (шапка и сразу итог), а по идее должна выводить таблицу как в п.2, т.е. должен выводиться как минимум факт. Вся странность в том, что отбор в ПЛАН'е, заданный в запросе через параметр отрабатывает нормально, т.е. фильтруется только план, а если задать отбор в {}, то при активизации его получаю таблицу без строк. Может кто сталкивался? P.S. 1. Сделал маленький отчёт, иллюстрирующий проблему (отчёту не нужны данные из базы, они прописаны в запросах). По-умолчанию отчёт выводит всё правильно, но стоит в настройках поставить активность у отбора - пустота. 2. Два набора данных нужно обязательно. :) 3. Проблему можно обойти через задание отбора параметром в запросе, но это не есть правильный выход... 4. Платформа 8.1.15. На всякий случай пробовал на 12-ой - тоже самое.
#1 by IronDemon
Зачем НоменклатураПлан? Поставь в условиях везде Номенклатура
#2 by AquaKosh
Это пример. В реальном отчёте условие должно накладываться ТОЛЬКО на ПЛАН.
#3 by AquaKosh
+ А "НоменклатураПлан", чтобы СКД не накладывала отбор на факт.
#4 by IronDemon
Я не вижу разницы в отборе номенклатуры.
#5 by AquaKosh
Отбор по номенклатуре стоит только в план'овом наборе данных. И фильтровать этот отбор должен только план'овые данные, а этого не происходит, точнее происходит фигня какая-то - то-ли фильтруется всё, то-ли ещё что-то, но в итоге - пусто. Получал результирующий запрос, который формирует СКД - параметр на отбор стоит только в плане (что собственно и должно быть), но СКД всё равно выводит пустую таблицу.
#6 by AquaKosh
ап
#7 by IronDemon
Какой смысл отбора по Плану если левое соединение с Фактом?
#8 by AquaKosh
Этот пример... это просто пример, имеющий мало общего с реальным отчётом. В реальном же отчёте, конечно никакого отбора но номенклатуре нет. Пример нужен только для того, чтобы показать странность, связанную с работой отбора, которую я не могу победить настройками СКД. А в реальном отчёте плановые суммы будут меняться тоже отбором, но не по номенклатуре, а по плановым сценариям.
#9 by MNS_Ротерта
в статье по переходу на 8.2 с 8.1 на ИТС было скзано что если есть 2 связанных набора данных то если в одном из них накладывается отбор, то при связи что то там гоорилось будут добавляться дополнительные псевдо записи. ну суть в том что получишь неверный результат. может быть у тебя как раз такая ситуация?
#10 by MNS_Ротерта
СКД вообще часто выдает интересные результаты так что не надо удивляться. Там полно глюков
#11 by Garkin
Поправь если ошибаюсь. Соединение наборов данных СКД делает на стороне клиента, причем сначала вытягиваются наборы данных, соединяются, а только потом накладываются отборы. Это не странность, это особенность.
#12 by Garkin
+ Использовать наборы данных в СКД имеет смысл только в трех случаях: 1) При построении иерархии 2) При необходимости хитро считать итоги по группам. 3) Третьего к сожалению еще не знаю. У тебя какой? Зачем тебе 2 набора?
#13 by Garkin
+ Вру, третий тоже знаю.
#14 by AquaKosh
Не-не, дело скорее всего не в этом... В реальном отчёте отбор накладывался на виртуальную таблицу регистра и была такая же фигня... Надо хитро итоги по группа считать.
#15 by Garkin
Как ты умудряешься указать  СКД на какой набор ты отбор накладываешь?
#16 by AquaKosh
Опа! ... Хм... Что-то меня настораживает этот вопрос! :) См. файлик (банальный отбор в {} в конкретном наборе данных).
#17 by IronDemon
Соединение набором в СКД от лукавого. Используйте связи в обычном запросе.  :)
#18 by Defender aka LINN
Месеье знаком с идеей левого соединения?
#19 by Defender aka LINN
Итоги будешь вручную поправлять, когда в наборах строки дублируются? :)
#20 by Garkin
отбор то банальный, но только непонятно из каких соображений ты делаешь вывод что он должен действовать только на один набор а не на все соединение?
#21 by AquaKosh
Делаю вывод из здравого смысла, т.к. указываю отбор только в одном из наборов и имя отбора задаю уникальное. Коллеги, напоминаю, что отбор, указанный вручную в запросе через параметр, к примеру Запрос.Номенклатура = "Блин", отрабатывает правильно, т.е. план по нулям и факт выводится, а такой же отбор, заданный через компоновку приводит к пустой таблице, чего быть по идее не должно.
#22 by AquaKosh
+ По поводу того, что якобы установленный отбор каким-то образом накладывается на другой набор данных: если-бы это было так, то задав отбор как НЕ_РАВНО я бы увидел результат, а получается, что хоть РАВНО, хоть НЕ_РАВНО - без разницы.
#23 by Garkin
Добавь в набор данных "План"  поле "ЛицоСотавившееПлан" и расскажи как сделать отбор в целом по соединению.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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