Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Нахождение всего одной строки по одному документу основанию.

Нахождение всего одной строки по одному документу основанию.
Я
   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
 
 
   Crimscon
 
1 - 07.06.19 - 14:46
Да, оно все будет в виде диаграммы, поэтому наличие не совсем точной суммы не важно. Сумма должна суммироваться по виду ремонта.
   singlych
 
2 - 07.06.19 - 14:58
Как ты решил, что заявку 1449 надо убрать, а 1448 оставить?
   Crimscon
 
3 - 07.06.19 - 15:02
(2) Мне не важна сама заявка, мне нужно их количество. Условно должно получиться что есть операторы, которые звонят и зовут на ТО. Человек либо соглашается, либо принимает. Будет диаграмма типа: 500 звонков, 300 заявок. Отдельным графиком будет суммироваться сумма гряда и выводиться что ТО-1 принесло 100к руб, то-2  200к и т.д.
   Crimscon
 
4 - 07.06.19 - 15:04
(2) собирать количество событий я уже могу. Это делает ресурсом через скд. Но количество заявок плывет, потому что к одному документу может быть 2 документа.
   singlych
 
5 - 07.06.19 - 15:05
(3) Тогда тот же вопрос про наряды.
   Crimscon
 
6 - 07.06.19 - 15:07
(5) а с нарядов я вообще только сумму беру. Сами наряды не выводятся. А сумму мне нужно суммировать по ним. Следовательно проблема только в заявках, которые я не знаю как сворачивать.
   vicof
 
7 - 07.06.19 - 15:08
(6) Вообще-то сами наряды у тебя выводятся на скриншотах
   Crimscon
 
8 - 07.06.19 - 15:09
(7) это таблица. Она нужна для понятности информации. По факту будет две диаграммы. В одной соотношение звонков/заявок, в другой только сумма по видами то.
   Crimscon
 
9 - 07.06.19 - 15:10
(7) таким образом мне нужно только узнавать есть заявка по звонку или нет. Если есть, то 1, если нет, то 0. Все остальное работает правильно. Но как это делать то?
   vicof
 
10 - 07.06.19 - 15:13
ВЫБОР КОГДА ЕСТЬNULL(Заявка, 0) = 0 ТОГДА 0 ИНАЧЕ 1 КОНЕЦ
   Crimscon
 
11 - 07.06.19 - 15:16
(10) пробовал. Все равно для одного события считает как 2. Потому что две строки. Будет 1+1.
   vicof
 
12 - 07.06.19 - 15:19
(11) ты СГРУППИРОВАТЬ забыл
   Crimscon
 
13 - 07.06.19 - 15:26
(12) а вот это может сработать. Через полчаса буду около компа, отпишусь
   Ёпрст
 
14 - 07.06.19 - 15:33
(0)   И Событие.ДокументОснование = НЕОПРЕДЕЛЕНО  //это не верное условие
   Crimscon
 
15 - 07.06.19 - 15:47
(14) Но работает ведь. Нужно чтобы документ Событие был первым в дереве подчиненности. Если не секрет, как правильно тогда?
   Crimscon
 
16 - 07.06.19 - 15:55
(12) Хорошо, до меня не доходит как надо сгруппировать. Понимаю, что в последнем запросе. Просто группирую - ничего не меняется. Если суммировать, то как?
   bolobol
 
17 - 07.06.19 - 16:00
(11) Если одну строку считает как 2, то к этой строке есть левое соединение
   bolobol
 
18 - 07.06.19 - 16:04
Событие1 Заявка11 Наряд111
Событие2 Заявка21 Наряд211
Событие2 Заявка22 null
Событие2 Заявка23 Наряд231
Событие2 Заявка23 Наряд232

- Что должно в итоге выводиться?
   Crimscon
 
19 - 07.06.19 - 16:06
(18) Звонков 2, заявок 2.
   bolobol
 
20 - 07.06.19 - 16:07
Почему заявок 2?, если в таблице их 5
   Crimscon
 
21 - 07.06.19 - 16:07
(18) Суть в том, что если клиент согласился на сервисное обслуживание, то дальнейшие звонки по этому человеку уже не интересны. Они уже обговаривают детали. Главное, что если был 1 звонок и по нему пришел человек, то это 1 звонок, 1 заявка. Если человек не пришел, то 1 звонок, 0 заявок.
   bolobol
 
22 - 07.06.19 - 16:09
Это всё совсем не интересно. Таблица как выглядит? В моей - звонков вообще нет
   Crimscon
 
23 - 07.06.19 - 16:09
(20) Потому что в числовом значении мне важно только количество звонков. Количество заявок должно считаться по принципу было/не было. Где было = 1, не было = 0. То есть Из 500 звонков 300 согласились, значит 500 звонков, 300 заявок. Заявок при этом может быть и 600, потому что на одно событие создается не один документ (условно в первый раз поменять стекла, второй колеса, третий салон), но все это после одного события.
   vicof
 
24 - 07.06.19 - 16:13
(16) Смотреть различающиеся "нересурсные" поля по одному звонку и группировать по ним
   Crimscon
 
25 - 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 заявка.
   bolobol
 
26 - 07.06.19 - 16:14
Когда Количество(...) >1 Тогда Истина Иначе Ложь КОНЕЦ КАК ЕстьЗаявка
   bolobol
 
27 - 07.06.19 - 16:15
СГРУППИРОВАТЬ ПО Звонок
   Crimscon
 
28 - 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), и что я делаю не правильно?
   vicof
 
29 - 07.06.19 - 16:23
Оставь в последней таблице только звонок и количество нарядов, сгруппируй, а в следующей соединения делай.
   vicof
 
30 - 07.06.19 - 16:23
Ну и сумму там же можно оставить
 
 Рекламное место пустует
   bolobol
 
31 - 07.06.19 - 16:27
КОЛИЧЕСТВО(ВЫБОР
            КОГДА ЕСТЬNULL(ВсеЗаявки.Заявки, 0) <> 0
                ТОГДА 1
        КОНЕЦ) КАК Заявки


- так считаешь количество заявок, а надо считать их? Ты же писал "если есть хоть одна" - зачем тогда количество заявок?
   bolobol
 
32 - 07.06.19 - 16:29
ВсеНаряды.Сумма при двух левых соединениях увеличится на количество перекрёстных соединений... короче - задвоится-затроится
   Crimscon
 
33 - 07.06.19 - 16:30
(31) Так в том то и дело, что мне не нужно их считать. Либо есть, либо нет.
   vicof
 
34 - 07.06.19 - 16:30
(32) поэтому переходим на (29)
   Crimscon
 
35 - 07.06.19 - 16:30
(32) Сейчас выведено 3 ТО из 7, в двух из них сумма верная, дальше будет двоиться?
   Crimscon
 
36 - 07.06.19 - 16:31
(35) В третьей по нулям. В принципе, тоже верно)
   singlych
 
37 - 07.06.19 - 16:31
на еще подкину

ВЫБРАТЬ 
    ВсеЗвонки.Звонки, 
    ВсеЗвонки.ВидРемонта,
    ВсеЗвонки.ПодразделениеКомпании, 
    ВЫБОР КОГДА МАКСИМУМ(ВсеЗаявки.Заявки) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК Заявки,
    СУММА(ВсеНаряды.Сумма) КАК Сумма
ИЗ 
    ВсеЗвонки КАК ВсеЗвонки 
        ЛЕВОЕ СОЕДИНЕНИЕ ВсеЗаявки КАК ВсеЗаявки 
            ЛЕВОЕ СОЕДИНЕНИЕ ВсеНаряды КАК ВсеНаряды 
            ПО ВсеЗаявки.Заявки = ВсеНаряды.Заявки 
        ПО ВсеЗвонки.Звонки = ВсеЗаявки.Звонки 

СГРУППИРОВАТЬ ПО 
    ВсеЗвонки.Звонки, 
    ВсеЗвонки.ВидРемонта, 
    ВсеЗвонки.ПодразделениеКомпании
   Crimscon
 
38 - 07.06.19 - 16:36
(37) Воо. Я пришел к этому результату в таблице, но в диаграмме не получалось. Спасибо мил человек. Выводит вроде правильно, но выше сказали что будет сумма ломаться. Посмотрю еще.
   Crimscon
 
39 - 07.06.19 - 16:40
Всем спасибо. Нужного результата добился)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.