![]() |
|
Запрос с условием по нескольким комбинациям измерений регистра сведений | ☑ | ||
---|---|---|---|---|
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 фильтров |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |