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