Запрос с условием по нескольким комбинациям измерений регистра сведений #732820


#0 by nikitaz
Есть регистр сведений ФотоотчетыЗначенияФильтров. В нем есть три измерения: Фотоотчет, ФильтрФотоотчета, ЗначениеФильтра. Мне нужно получить все фотоотчеты, в которых соблюдается условие: ФильтрФотоотчета = "Раздел сайта", ЗначениеФильтра = "Брендирование интерьеров" И ФильтрФотоотчета = "Вид работ", ЗначениеФильтра = "Вывеска интерьерная" Вот это, естественно, не работает. Помогите, завис. ВЫБРАТЬ     ФотоотчетыЗначенияФильтров.Фотоотчет ИЗ     РегистрСведений.ФотоотчетыЗначенияФильтров КАК ФотоотчетыЗначенияФильтров     И ФотоотчетыЗначенияФильтров.ЗначениеФильтра = "Брендирование интерьеров"     И ФотоотчетыЗначенияФильтров.ФильтрФотоотчета = "Вид работ"     И ФотоотчетыЗначенияФильтров.ЗначениеФильтра = "Вывеска интерьерная" СГРУППИРОВАТЬ ПО     ФотоотчетыЗначенияФильтров.Фотоотчет
#1 by Крошка Ру
>>Мне нужно получить все фотоотчеты, в которых соблюдается условие: ФильтрФотоотчета = "Раздел сайта", ЗначениеФильтра = "Брендирование интерьеров" И ФильтрФотоотчета = "Вид работ", ЗначениеФильтра = "Вывеска интерьерная" Может все-таки ИЛИ? Не думаю, что измерение может принимать одновременно два значения...
#2 by nikitaz
Нет, мне нужны фотоотчеты, в которых встречается и та, и та комбинация. Если поставить ИЛИ, то будут выведены фотоотчеты, в которых есть первая комбинация ИЛИ вторая комбинация.
#3 by Dmitrii
Какова структура регистра? Как может один отчет иметь одновременно две комбинации фильтров?
#4 by Крошка Ру
Ну так поподробней надо структуру РС описывать. И что у фотоотчета может быть несколько описаний фильтров. Хорошо ещё, что я свой telepat.dll пока не отключил. Выбирай в одну ВТ с одной комбинацией, в другую - с другой, потом - внутренне соединение.
#5 by Dmitrii
ГДЕ (ФильтрФотоотчета = "Раздел сайта" ИЛИ ФильтрФотоотчета = "Вид работ") И (ЗначениеФильтра = "Брендирование интерьеров" ИЛИ ЗначениеФильтра = "Вывеска интерьерная")
#6 by Крошка Ру
Неа. Надо, чтоб у одного и того же фильтра, в одной строке РС встречалась одна комбинация, а в другой - другая.
#7 by nikitaz
В регистре есть три измерения, больше ничего нет: Фотоотчет (документссылка), ФильтрФотоотчета (планвидовхарактеристик), ЗначениеФильтра (множество типов).  Один фототоотчет имеет много комбинаций фильтров и значений. Близко, спасибо. Вертелось в голове, не мог выразить человеческим языком. Может лучше сделать рекурсией? Вначале получаем ТЗ1, потом уходим в рекурсию с источником ТЗ1 и получаем ТЗ2? Не подходит. Крошка права.
#8 by nikitaz
Еще вариант - рекурсия с НайтиСтроки
#9 by Dmitrii
Сделать ТЗ из двух колонок и двух строк. ТЗ передать в запрос. ИЗ Что-то типо этого. Набирал вручную, синтаксис может хромать.
#10 by Dmitrii
+ к преимущество в том, что будут искаться именно комбинации пар.
#11 by nikitaz
Да, только мне нужно запрос формировать на лету. Количество комбинаций фильтр - значение может меняться. Видимо, рекурсия меня спасет.
#12 by Dmitrii
>> Количество комбинаций фильтр - значение может меняться. Ну и заполняй ТЗ, которая передается в качестве параметра запроса теми комбинациями ,которые тебе нужны. Не понял проблемы... А вообще неплохо бы видеть всю задачу.
#13 by nikitaz
Есть куча документов "Фотоотчет", в каждой из которых есть табличная часть "Фильтры". В табличной части "Фильтры" есть такие реквизиты - ФильтрФотоотчета и ЗначениеФильтра. Имеем фотоотчет #1 ("Вывеска Адидас"). В нем в тч Фильтры 2 строки: 1. ФильтрФотоотчета = "Раздел сайта", ЗначениеФильтра = "Брендирование интерьеров" 2. ФильтрФотоотчета = "Вид работ", ЗначениеФильтра = "Вывеска интерьерная" При проведении это все записыватся в регистр сведений с тремя измерениями: Фотоотчет, ФильтрФотоотчета, ЗначениеФильтра. Имеем фотоотчет #2 ("Табличка Сони"). тч Фильтры: 1. 1. ФильтрФотоотчета = "Раздел сайта", ЗначениеФильтра = "Брендирование интерьеров" И т.д. Мне нужно написать обработку, которая ищет по списку комбинаций фильтр - значение фильтра необходимые фотоотчеты.
#14 by ktvladimir
а кто мешает сделать условие ГДЕ (ФотоотчетыЗначенияФильтров.ФильтрФотоотчета = "Раздел сайта"     И ФотоотчетыЗначенияФильтров.ЗначениеФильтра = "Брендирование интерьеров")     ИЛИ (ФотоотчетыЗначенияФильтров.ФильтрФотоотчета = "Вид работ"     И ФотоотчетыЗначенияФильтров.ЗначениеФильтра = "Вывеска интерьерная") всего лишь скобки а как влияет на приоритет условия
#15 by nikitaz
Будут найдены фотоотчеты, которые имеют или первую или вторую комбинацию. А мне нужны фотоотчеты, в которых встречаются обе комбинации, а не одна из них.
#16 by Escander
Налицо ошибка проектирования! При нормальном проектировании выбирают не измерения а ресурсы.
#17 by ktvladimir
ну тогда ВЫБРАТЬ    ФотоотчетыЗначенияФильтров.Фотоотчет ИЗ       И ФотоотчетыЗначенияФильтров.ЗначениеФильтра = "Брендирование интерьеров"       2     ИЗ ИМЕЮЩИЕ ну так к примеру
#18 by Крошка Ру
Вот не поверишь... В данном случае - ну никак не влияют.
#19 by Крошка Ру
Это ты разработчикам типовых скажи, у которых настройки пользователя именно так устроены
#20 by ktvladimir
ФотоотчетыЗначенияФильтров.Фотоотчет ИЗ     ИЗ
#21 by ktvladimir
не поверю по сравнение с у меня выдаст варианты где либо й набор либо второй в случае с ничего не выдаст
#22 by nikitaz
А если элегантней, чтобы запрос красиво формировать на лету или еще как? ))) Циклом обходить все комбинации фильтр - значение и из ТЗ выбирать ТЗ? Мой вариант нифига не выдает. Это правда. Само условие бредовое.
#23 by ktvladimir
а если элегантней чтоб из тз ок ВЫБРАТЬ   ФильтрФотоотчета,   ЗначениеФильтра ИЗ ТЗВРем)
#24 by ktvladimir
на синтаксиси мне пофиг) идею я толкнул реализация твоя. мне влом 1с открывать чтоб рисовать красиво
#25 by Крошка Ру
У условия И приоритет выше, чем у ИЛИ, так что скобки в ни на что не влияют. А про сравнение с никто и не говорил.
#26 by ktvladimir
че правда? а я думал у скобок высший приоритет и будет выполнено условие И в первых скобках, условие И во вторых скобках а потом уже результаты соединяться по ИЛИ иди учи матчасть
#27 by ktvladimir
программисты...
#28 by nikitaz
Курю, не понимаю полностью. Сильно мудрёный... Если не сложно, объясните, плиз, логику.
#29 by ktvladimir
ну первый пакет это просто я тз загоняю во временную таблицу второй когдла я с регистра выбираю все записи удовлетворяющие данным из тз в данном случае такое условие двойное это когда оба реквизита соответсвуют записи ис тз ну и последнее свертка количество таких записей должно быть равным количеству строк в тз, то есть фотоотчет соответсвует ВСЕМ условиям из тз
#30 by ktvladimir
ВЫБРАТЬ   Фотоотчеты.Фотоотчет ИЗ   (Фотоотчеты.ФильтрФотоотчета, Фотоотчеты.ЗначениеФильтра) В (ВЫБРАТЬ ТЗВРем.ФильтрФотоотчета,   ТЗВРем.ЗначениеФильтра ИЗ ТЗВРем) так немножко понятнее чтоб не путаться
#31 by Escander
там другой случай и там есть допиндексы, мне что-то подсказывает что допиндексов тут нет
#32 by nikitaz
Спасибо, пока вкуриваю с большим скрипом.
#33 by ktvladimir
просто по кускам делайте сперва без СГРУППИРОВАТЬ ПО   Фотоотчет посмотрите что будет выбрано из регистра по такому условию далее добавьте группировку СУММА И   Фотоотчеты.Фотоотчет ну и окончательно условие ИМЕЮЩИЕ
#34 by nikitaz
Извините меня извращенца и спасибо за идею. Сделал циклом. 1. Первый проход - формируем ТЗ 1 из всего регистра по первой связке "фильтр - значение" 2. Второй проход - формируем ТЗ 2 по второй связке "фильтр - значение" из ТЗ 1 3. Третий проходе - ТЗ 3 из ТЗ 2 Ну и т.е., пока не кончатся искомые связки "фильтр-значение"
#35 by Escander
вам-бы про запросы чего почитать... 1.загружаем переданную параметром ТЗ во временную таблицу. там правда ошибка и вместо из ТЗВрем должно быть из &ТЗВрем 2.собираем все записи из РС у которых ключевые измерения из набора и считаем сколько раз Фотоотчеты.Фотоотчет там встречается.... но опять ошибка, в предложеном варианте отберёт Фотоотчеты.Фотоотчет только 1 раз, тут нужно не ГДЕ   (Фотоотчеты.ФильтрФотоотчета, Фотоотчеты.ЗначениеФильтра) В а внутреннее соединение и уже результат группировать. 3.Финальное условие ИМЕЮЩИЕ отрабатывает на то, что было уже получено после выполнения группировки (а не до как это с ГДЕ). PS конструкция вида ИЗ РС.ФотоотчетыЗначенияФильтров КАК Фотоотчеты, СУММА выглядит забавно но вполне может нормально отработать - нужно проверить
#36 by ktvladimir
Приношу свои извинения таки да скобки в принципе лишние, видимо перед сном уже плохо думалось ну про синтаксис я сразу предупреждал что ошибки имеют место быть) так как пишу от руки, по сути это алгоритм а не решение проблемы насчет неправильности где НЕ согласен. отберутся ВСЕ записи удовлетворяющие условию признака выбирать различные нет те до использовани ИМЕЮЩИЕСЯ будет табличка типа фотоочет 1 фотоочет 1 фотоочет2 1 итд
#37 by nikitaz
Спасибо! Начинаю стремительно въезжать. Heaving (имеющие)  рулит. Я не профессиональный программист, просто хобби такое странное. Книжку по sql бросил на середине - времени не было )) Сегодня попробую, отпишусь.
#38 by nikitaz
ТЗВрем в первом пакете - это таблица значений с комбинациями "ФильтрФотоотчета - ЗначениеФильтра"?
#39 by nikitaz
КолЗаписейИЗТЧ - количество записей в ТЗВрем?
#40 by nikitaz
Что такое "ИЗ СУММА"? ИЗ   РС.ФотоотчетыЗначенияФильтров КАК Фотоотчеты,   СУММА
#41 by nikitaz
Так, накалякал я запрос по вашим подсказкам. В результат попадают фотоотчеты, в которых есть одна (любая) из связок "фильтр - значение". А мне нужно обе. Не могу разобраться с СУММА ((( ИЗ     РегистрСведений.ФотоотчетыЗначенияФильтров КАК Фотоотчеты             ИЗ
#42 by nikitaz
Офигеть. Работает. Спасибо всем! ВЫБРАТЬ
#43 by nikitaz
Мне кажется вариант с ГДЕ более правильным. Т.к. в этом случае можно проверять один и тот же фильтр на несколько значений. Т.е. если в фотоотчете допускается повторение фильтра. Например: "Материал изготовления = Пластик" или "Материал изготовления = Металл". Теперь думаю, что делать с условиями больше и меньше. Т.е. проверять не только равенство, но и больше/меньше
#44 by ktvladimir
а чтоб исключить повторы фильтров нужно предварительно сделать выборку по таблице РС с условие РАЗЛИЧНЫЕ к примеру
#45 by ktvladimir
вру в подзапросе Различные нельзя делать. вывести подзапрос во временную таблицу по поводу меньше больше, а какая в принципе разница? ИМЕЮЩИЕ     СУММА > 2 те все фотоочеты имеющие более 2 фильтров
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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