v7: Все ВошедшиеВЗапрос и 1С++ #658586


#0 by woha
Доброго времени суток! Кто-нибудь пробовал реализовать конструкцию "Все ВошедшиеВЗапрос" с промощью 1с++? Нашел пример: |"; и по нему постоил свой запрос, но он не работает. Спасибо.
#1 by Ёпрст
весьма забавный запрос
#2 by woha
Писатель примера взял за основу ToySQL: На основе статьи с сайта 1csql.ru
#3 by Дык ё
а если cross join вместо запятой? а еще можно забить на эти мутные джойны и написать group by with cube
#4 by woha
Даже ссылка неверно указана
#5 by Ёпрст
я бы вот это пользовал и привет, а получал бы обычную плоскую таблицу
#6 by woha
with cube не помогло
#7 by woha
суть не в итогах по группировкам, а в выводе всех измерений регистра даже если значение ресура 0
#8 by Mikeware
ну и соединяй со справочниками-измерениями..
#9 by woha
для этого в 1с и есть Все ВошедшиеВЗапрос
#10 by Ёпрст
ну, не используй ВТ - напиши запрос руктями + having выкинь оттуда - будут тебе 0
#11 by woha
Это оригинал 1с:
#12 by woha
|    |(
#13 by Ёпрст
зачет, ага. Какое отношение ЭТО имеет к запросу в ?
#14 by woha
это был пример реализации
#15 by Ёпрст
WITH ROLLUP лучше не писать..это устаревший синтаксис
#16 by woha
Что с ним, что без него (разве что строку группировки дает)
#17 by Ёпрст
Ачего не устраивает в запросе ?
#18 by Ёпрст
ну окромя того, что он не оптимальный..
#19 by woha
Все ВошедшиеВЗапрос в запросе 1С++ не реализован
#20 by Ёпрст
:))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
#21 by Ёпрст
Кто тебе сказал такую дурость ?
#22 by woha
в моем запросе не реализован а не вообще
#23 by Ёпрст
1cpp тебе всего лишь предоставляет удобный инструмент доступа к данным и..даже ВТ для твоего удобства слепили. Нужно большее - пиши руктями запрос, получай, всё что угодно
#24 by Ёпрст
что именно в твоём запросе не реализовано ? Тебе может нужно Группировка Клиентос ВСЕ ?
#25 by Ёпрст
Если че, Все ВошедшиеВЗапрос - это только то, что функция считала, т.е только те клиентосы, которые реально есть в выборке, а не все, что в справочнике.
#26 by Ёпрст
Нужны все , что есть в справочнике - велком соединение с табличкой справочника
#27 by woha
не только не все что в справочнике а все которые вошли в запрос
#28 by woha
это разные вещи
#29 by Ёпрст
я как бэ в курсе. Еще раз, чем тебя твой запрос не угодил ? Он сейчас аналогичен Все Вошедшие в запрос
#30 by woha
очтет строится не только добавляя строки, но и колонки.
#31 by woha
совсем не аналогичен.
#32 by woha
по одному товару выдет 20 клиентов а по другому только 2, а надо и там и там по 20
#33 by woha
Это как раз и делает Все ВошедшиеВЗапрос
#34 by Ёпрст
выкини union, используй left join + coalesce либо делай cross join + group by самим с собой
#35 by Ёпрст
в твоём случае, примерно так: from _1sjourn as Жур (nolock) left join $Документ.Расходная as РасхШ (nolock) on РасхШ.iddoc = Жур.iddoc left join $ДокументСтроки.Расходная as Расх (nolock) on Расх.iddoc = Жур.iddoc left join $Документ.Приходная as ПрихШ (nolock) on ПрихШ .iddoc = Жур.iddoc ..... where Жур.iddocdef in ($ВидДокумента.Приходная,$ВидДокумента.Расходная,$ВидДокумента.Возвратик) and Жур.Date_Time_IDDoc between :НачДата AND :КонДата~
#36 by Ёпрст
ну и воткнуть туды sum и uhjeg,fq
#37 by Ёпрст
group by
#38 by woha
Из описания: Это очень опасно для таблиц, содержащих большое количество данных. То есть получаются ВСЕ возможные комбинации, включая все Null-null строчки. сейчас в запросе около 15000 строк а с cross join скольбо будет? 15000 в квадрате. мне не нужны строки типа null-null. достаточно значение - null
#39 by woha
Спасибо, это попробую.
#40 by toypaul
чтобы сделать правильный запрос, надо подучить теорию множеств. одним из видов языков работы с множествами является SQL.
#41 by toypaul
для начала надо сделать временную таблицу фактов через UNION. а потом по ссылке указанном на моем сайте, сделать уже основной запрос - там в конце статьи полностью аналогичный запрос.
#42 by woha
Да, ToySQL это делает намного лучше. :)
#43 by ADirks
Вот я в очередной раз поражаюсь... Далось вам это ВсеВошедшие. 1С смешало в кучу получение данных и отображение их, и у всех моск набок. Если надо показать что данных нет - сделай это при выводе в отчёт, не парь моск серверу.
#44 by woha
мне как раз для вывода отчета и нужно "Все ВошедшиеВЗапрос".
#45 by ADirks
ну так получи этих всех на клиенте, какие проблемы?
#46 by woha
На клиенте долго это получать. Запрос написанный под ToySQL это делает намного быстрее.
#47 by ADirks
Долго?  Каков же размер набора строк результата? И потом, не нужно забывать, что SQL-сервер конечно эффективнее в работе с табличными данными, но ему потребуются дополнительные ресурсы для такой операции. 1С-клиенту _дополнительных_ ресурсов потребуется меньше.
#48 by woha
15000
#49 by woha
Клиент вообще все делает без ресуров, в цикле тупо перебирая строки.
#50 by ADirks
Даже тупо загрузить в другую ТЗ и свернуть по нужной колонке - фигня, по сравнению с формированием собственно печатной формы.
#51 by woha
Печатная форма меня вообще не интересует, что в отчете с запросом 1С что в 1С++  она формируется одинаковое время. А вот запрос 1С формирует результат несколько десятков минут.
#52 by ADirks
ну конечно, когда запрос 10мин, а печать 30 сек - не интересует. А вот когда запрос 1сек - то задумаешься и про печать. А вообще я говорил про сравнительные затраты на разные операции. Оптимизировать надо в первую очередь наиболее затратные. А если затраты различаются в порядки - глупо вообще ими (мелкозатратными) заниматься.
#53 by woha
Таки получилось. Не остаточный вариант, но Все ВошедшиеВЗапрос  делает. Не знаю, правда, где лучше применить фильтры, в каждом подзапросе или уже в самом верхнем обрезать лишнее.
#54 by woha
Это окончательный вариант:
#55 by Ёпрст
какой то неправильный мёд
#56 by woha
Но работает. Ищу оптимальный вариант размещения фильтров.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям