|
Нахождение всего одной строки по одному документу основанию. | ☑ | ||
---|---|---|---|---|
0
Crimscon
07.06.19
✎
14:41
|
Есть запрос вида:
ВЫБРАТЬ Событие.Ссылка КАК Звонки, Событие.ВидРемонта, Событие.ПодразделениеКомпании ПОМЕСТИТЬ ВсеЗвонки ИЗ Документ.Событие КАК Событие ГДЕ Событие.Проведен И Событие.ДокументОснование = НЕОПРЕДЕЛЕНО И Событие.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыСобытий.ТелефонныйЗвонок) И Событие.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаявкаНаРемонт.Ссылка КАК Заявки, ЗаявкаНаРемонт.ДокументОснование КАК Звонки, ЗаявкаНаРемонт.ВидРемонта КАК ВидРемонта ПОМЕСТИТЬ ВсеЗаявки ИЗ Документ.ЗаявкаНаРемонт КАК ЗаявкаНаРемонт ГДЕ ЗаявкаНаРемонт.Проведен И ТИПЗНАЧЕНИЯ(ЗаявкаНаРемонт.ДокументОснование) = ТИП(Документ.Событие) И ЗаявкаНаРемонт.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказНаряд.Ссылка КАК Наряды, ЗаказНаряд.ВидРемонта КАК ВидРемонта, ЗаказНаряд.СуммаДокумента КАК Сумма, ЗаказНаряд.ДокументОснование КАК Заявки, ЗаказНаряд.ДокументОснование.ДокументОснование КАК Звонки ПОМЕСТИТЬ ВсеНаряды ИЗ Документ.ЗаказНаряд КАК ЗаказНаряд ГДЕ ТИПЗНАЧЕНИЯ(ЗаказНаряд.ДокументОснование.Ссылка) = ТИП(Документ.ЗаявкаНаРемонт) И ТИПЗНАЧЕНИЯ(ЗаказНаряд.ДокументОснование.ДокументОснование.Ссылка) = ТИП(Документ.Событие) И ЗаказНаряд.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВсеЗвонки.Звонки, ВсеНаряды.Наряды, ВсеНаряды.Сумма, ВсеЗвонки.ВидРемонта, ВсеЗвонки.ПодразделениеКомпании, ВсеЗаявки.Заявки ИЗ ВсеЗвонки КАК ВсеЗвонки ЛЕВОЕ СОЕДИНЕНИЕ ВсеЗаявки КАК ВсеЗаявки ЛЕВОЕ СОЕДИНЕНИЕ ВсеНаряды КАК ВсеНаряды ПО ВсеЗаявки.Заявки = ВсеНаряды.Заявки ПО ВсеЗвонки.Звонки = ВсеЗаявки.Звонки СГРУППИРОВАТЬ ПО ВсеЗвонки.Звонки, ВсеЗаявки.Заявки, ВсеНаряды.Наряды, ВсеНаряды.Сумма, ВсеЗвонки.ВидРемонта, ВсеЗвонки.ПодразделениеКомпании Задача запроса найти все необходимые данные по дереву: "Документ.Событие" - "Документ.ЗаявкаНаРемонт" - "Документ.ЗаказНаряд". Одно из требований по выводу отчета состоит в том, что на один документ события выводился один документ заявки и соответственно на один документ заявки один документ наряда. Вопрос - как это сделать? Второй день мучаюсь, не могу допереть как вытаскивать его. Если ставить "ПЕРВЫЕ 1", тогда вылезает всего один документ. Если не ставить, то на одно событие вылезает по два документа. Отчет написан на СКД целиком и полностью. Нужно как-то модифицировать запрос, но как я не знаю. То, что выводится если есть "ПЕРВЫЕ 1": https://pp.userapi.com/c851424/v851424362/137752/GoMAZosm_dI.jpg То, что выводится без "ПЕРВЫЕ": https://pp.userapi.com/c851424/v851424362/13774a/rEYsVb12GAo.jpg То, что должно выводиться (сделал в графическом редакторе, не обращайте внимания): https://pp.userapi.com/c851424/v851424362/13776c/p_1D0zwz8pE.jpg |
|||
1
Crimscon
07.06.19
✎
14:46
|
Да, оно все будет в виде диаграммы, поэтому наличие не совсем точной суммы не важно. Сумма должна суммироваться по виду ремонта.
|
|||
2
singlych
07.06.19
✎
14:58
|
Как ты решил, что заявку 1449 надо убрать, а 1448 оставить?
|
|||
3
Crimscon
07.06.19
✎
15:02
|
(2) Мне не важна сама заявка, мне нужно их количество. Условно должно получиться что есть операторы, которые звонят и зовут на ТО. Человек либо соглашается, либо принимает. Будет диаграмма типа: 500 звонков, 300 заявок. Отдельным графиком будет суммироваться сумма гряда и выводиться что ТО-1 принесло 100к руб, то-2 200к и т.д.
|
|||
4
Crimscon
07.06.19
✎
15:04
|
(2) собирать количество событий я уже могу. Это делает ресурсом через скд. Но количество заявок плывет, потому что к одному документу может быть 2 документа.
|
|||
5
singlych
07.06.19
✎
15:05
|
(3) Тогда тот же вопрос про наряды.
|
|||
6
Crimscon
07.06.19
✎
15:07
|
(5) а с нарядов я вообще только сумму беру. Сами наряды не выводятся. А сумму мне нужно суммировать по ним. Следовательно проблема только в заявках, которые я не знаю как сворачивать.
|
|||
7
vicof
07.06.19
✎
15:08
|
(6) Вообще-то сами наряды у тебя выводятся на скриншотах
|
|||
8
Crimscon
07.06.19
✎
15:09
|
(7) это таблица. Она нужна для понятности информации. По факту будет две диаграммы. В одной соотношение звонков/заявок, в другой только сумма по видами то.
|
|||
9
Crimscon
07.06.19
✎
15:10
|
(7) таким образом мне нужно только узнавать есть заявка по звонку или нет. Если есть, то 1, если нет, то 0. Все остальное работает правильно. Но как это делать то?
|
|||
10
vicof
07.06.19
✎
15:13
|
ВЫБОР КОГДА ЕСТЬNULL(Заявка, 0) = 0 ТОГДА 0 ИНАЧЕ 1 КОНЕЦ
|
|||
11
Crimscon
07.06.19
✎
15:16
|
(10) пробовал. Все равно для одного события считает как 2. Потому что две строки. Будет 1+1.
|
|||
12
vicof
07.06.19
✎
15:19
|
(11) ты СГРУППИРОВАТЬ забыл
|
|||
13
Crimscon
07.06.19
✎
15:26
|
(12) а вот это может сработать. Через полчаса буду около компа, отпишусь
|
|||
14
Ёпрст
07.06.19
✎
15:33
|
(0) И Событие.ДокументОснование = НЕОПРЕДЕЛЕНО //это не верное условие
|
|||
15
Crimscon
07.06.19
✎
15:47
|
(14) Но работает ведь. Нужно чтобы документ Событие был первым в дереве подчиненности. Если не секрет, как правильно тогда?
|
|||
16
Crimscon
07.06.19
✎
15:55
|
(12) Хорошо, до меня не доходит как надо сгруппировать. Понимаю, что в последнем запросе. Просто группирую - ничего не меняется. Если суммировать, то как?
|
|||
17
bolobol
07.06.19
✎
16:00
|
(11) Если одну строку считает как 2, то к этой строке есть левое соединение
|
|||
18
bolobol
07.06.19
✎
16:04
|
Событие1 Заявка11 Наряд111
Событие2 Заявка21 Наряд211 Событие2 Заявка22 null Событие2 Заявка23 Наряд231 Событие2 Заявка23 Наряд232 - Что должно в итоге выводиться? |
|||
19
Crimscon
07.06.19
✎
16:06
|
(18) Звонков 2, заявок 2.
|
|||
20
bolobol
07.06.19
✎
16:07
|
Почему заявок 2?, если в таблице их 5
|
|||
21
Crimscon
07.06.19
✎
16:07
|
(18) Суть в том, что если клиент согласился на сервисное обслуживание, то дальнейшие звонки по этому человеку уже не интересны. Они уже обговаривают детали. Главное, что если был 1 звонок и по нему пришел человек, то это 1 звонок, 1 заявка. Если человек не пришел, то 1 звонок, 0 заявок.
|
|||
22
bolobol
07.06.19
✎
16:09
|
Это всё совсем не интересно. Таблица как выглядит? В моей - звонков вообще нет
|
|||
23
Crimscon
07.06.19
✎
16:09
|
(20) Потому что в числовом значении мне важно только количество звонков. Количество заявок должно считаться по принципу было/не было. Где было = 1, не было = 0. То есть Из 500 звонков 300 согласились, значит 500 звонков, 300 заявок. Заявок при этом может быть и 600, потому что на одно событие создается не один документ (условно в первый раз поменять стекла, второй колеса, третий салон), но все это после одного события.
|
|||
24
vicof
07.06.19
✎
16:13
|
(16) Смотреть различающиеся "нересурсные" поля по одному звонку и группировать по ним
|
|||
25
Crimscon
07.06.19
✎
16:13
|
(22) Вот так: https://pp.userapi.com/c848616/v848616085/1b3794/9XTaRTaIJCw.jpg
Это после группировки и того, что посоветовали в (10). Должно при этом быть: ТО-3 1/1 ТО-2 1/0 ТО-0 3/2. Потому что по ТО-3 совершен 1 звонок и 1 заявка. По ТО-2 совершено 1 звонок и нет заявок. По ТО-0 совершено 3 звонка, из них на первый совершено 2 заявки, на второй 0 заявок, на третий 1 заявка. |
|||
26
bolobol
07.06.19
✎
16:14
|
Когда Количество(...) >1 Тогда Истина Иначе Ложь КОНЕЦ КАК ЕстьЗаявка
|
|||
27
bolobol
07.06.19
✎
16:15
|
СГРУППИРОВАТЬ ПО Звонок
|
|||
28
Crimscon
07.06.19
✎
16:20
|
(24) (26) Либо я уже туплю, либо пробовал. Давайте так. Запрос выглядит вот таким образом:
ВЫБРАТЬ Событие.Ссылка КАК Звонки, Событие.ВидРемонта, Событие.ПодразделениеКомпании ПОМЕСТИТЬ ВсеЗвонки ИЗ Документ.Событие КАК Событие ГДЕ Событие.Проведен И Событие.ДокументОснование = НЕОПРЕДЕЛЕНО И Событие.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыСобытий.ТелефонныйЗвонок) И Событие.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаявкаНаРемонт.Ссылка КАК Заявки, ЗаявкаНаРемонт.ДокументОснование КАК Звонки, ЗаявкаНаРемонт.ВидРемонта КАК ВидРемонта ПОМЕСТИТЬ ВсеЗаявки ИЗ Документ.ЗаявкаНаРемонт КАК ЗаявкаНаРемонт ГДЕ ЗаявкаНаРемонт.Проведен И ТИПЗНАЧЕНИЯ(ЗаявкаНаРемонт.ДокументОснование) = ТИП(Документ.Событие) И ЗаявкаНаРемонт.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказНаряд.Ссылка КАК Наряды, ЗаказНаряд.ВидРемонта КАК ВидРемонта, ЗаказНаряд.СуммаДокумента КАК Сумма, ЗаказНаряд.ДокументОснование КАК Заявки, ЗаказНаряд.ДокументОснование.ДокументОснование КАК Звонки ПОМЕСТИТЬ ВсеНаряды ИЗ Документ.ЗаказНаряд КАК ЗаказНаряд ГДЕ ТИПЗНАЧЕНИЯ(ЗаказНаряд.ДокументОснование.Ссылка) = ТИП(Документ.ЗаявкаНаРемонт) И ТИПЗНАЧЕНИЯ(ЗаказНаряд.ДокументОснование.ДокументОснование.Ссылка) = ТИП(Документ.Событие) И ЗаказНаряд.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВсеЗвонки.Звонки, ВсеНаряды.Наряды КАК Наряды, ВсеНаряды.Сумма, ВсеЗвонки.ВидРемонта, ВсеЗвонки.ПодразделениеКомпании, КОЛИЧЕСТВО(ВЫБОР КОГДА ЕСТЬNULL(ВсеЗаявки.Заявки, 0) <> 0 ТОГДА 1 КОНЕЦ) КАК Заявки ИЗ ВсеЗвонки КАК ВсеЗвонки ЛЕВОЕ СОЕДИНЕНИЕ ВсеЗаявки КАК ВсеЗаявки ЛЕВОЕ СОЕДИНЕНИЕ ВсеНаряды КАК ВсеНаряды ПО ВсеЗаявки.Заявки = ВсеНаряды.Заявки ПО ВсеЗвонки.Звонки = ВсеЗаявки.Звонки СГРУППИРОВАТЬ ПО ВсеЗвонки.Звонки, ВсеНаряды.Сумма, ВсеЗвонки.ВидРемонта, ВсеЗвонки.ПодразделениеКомпании, ВсеНаряды.Наряды В СКД Ресурсы выглядят вот так: https://pp.userapi.com/c848616/v848616085/1b37d7/LqN6M9jMcsg.jpg Сама схема вот так: https://pp.userapi.com/c848616/v848616085/1b37ea/cOOFPC-D_c4.jpg Результат вот так: https://pp.userapi.com/c848616/v848616085/1b3794/9XTaRTaIJCw.jpg Результат должен быть как в (25), и что я делаю не правильно? |
|||
29
vicof
07.06.19
✎
16:23
|
Оставь в последней таблице только звонок и количество нарядов, сгруппируй, а в следующей соединения делай.
|
|||
30
vicof
07.06.19
✎
16:23
|
Ну и сумму там же можно оставить
|
|||
31
bolobol
07.06.19
✎
16:27
|
КОЛИЧЕСТВО(ВЫБОР
КОГДА ЕСТЬNULL(ВсеЗаявки.Заявки, 0) <> 0 ТОГДА 1 КОНЕЦ) КАК Заявки - так считаешь количество заявок, а надо считать их? Ты же писал "если есть хоть одна" - зачем тогда количество заявок? |
|||
32
bolobol
07.06.19
✎
16:29
|
ВсеНаряды.Сумма при двух левых соединениях увеличится на количество перекрёстных соединений... короче - задвоится-затроится
|
|||
33
Crimscon
07.06.19
✎
16:30
|
(31) Так в том то и дело, что мне не нужно их считать. Либо есть, либо нет.
|
|||
34
vicof
07.06.19
✎
16:30
|
(32) поэтому переходим на (29)
|
|||
35
Crimscon
07.06.19
✎
16:30
|
(32) Сейчас выведено 3 ТО из 7, в двух из них сумма верная, дальше будет двоиться?
|
|||
36
Crimscon
07.06.19
✎
16:31
|
(35) В третьей по нулям. В принципе, тоже верно)
|
|||
37
singlych
07.06.19
✎
16:31
|
на еще подкину
ВЫБРАТЬ ВсеЗвонки.Звонки, ВсеЗвонки.ВидРемонта, ВсеЗвонки.ПодразделениеКомпании, ВЫБОР КОГДА МАКСИМУМ(ВсеЗаявки.Заявки) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК Заявки, СУММА(ВсеНаряды.Сумма) КАК Сумма ИЗ ВсеЗвонки КАК ВсеЗвонки ЛЕВОЕ СОЕДИНЕНИЕ ВсеЗаявки КАК ВсеЗаявки ЛЕВОЕ СОЕДИНЕНИЕ ВсеНаряды КАК ВсеНаряды ПО ВсеЗаявки.Заявки = ВсеНаряды.Заявки ПО ВсеЗвонки.Звонки = ВсеЗаявки.Звонки СГРУППИРОВАТЬ ПО ВсеЗвонки.Звонки, ВсеЗвонки.ВидРемонта, ВсеЗвонки.ПодразделениеКомпании |
|||
38
Crimscon
07.06.19
✎
16:36
|
(37) Воо. Я пришел к этому результату в таблице, но в диаграмме не получалось. Спасибо мил человек. Выводит вроде правильно, но выше сказали что будет сумма ломаться. Посмотрю еще.
|
|||
39
Crimscon
07.06.19
✎
16:40
|
Всем спасибо. Нужного результата добился)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |