|
Из одного поля извлечь данные три раза в запросе | ☑ | ||
---|---|---|---|---|
0
GoStopFan
29.02.16
✎
13:47
|
Добрый день! Только начинаю прогать в 1С. Имеется документ Событие. Я по нему делаю отчет, в который мне надо получить следующие данные: Основной менеджер, К-во встреч, К-во встреч с выявленным интересом, кол-во звонков.
В этом документе Событие есть нужные реквизиты: ОсновнойМенеджер, ВидСобытия (звонок/встреча/письмо и т.д....), Статус(Завершено/Отложено/Выявлен интерес и т.д...). Помогите, как мне одним запросом получить данные во все эти колонки? А то все, что я смог сделать - это одним запросом посчитать либо встречи, либо встречи с интересом, либо звонки. Вот текст процедуры, которую я сделал Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНачала", ЭлементыФормы.ДатаНачала.Значение); Запрос.УстановитьПараметр("ДатаКонца", ЭлементыФормы.ДатаКонца.Значение); Запрос.УстановитьПараметр("VIP", ЭлементыФормы.ПолеВводаVIP.Значение); Запрос.УстановитьПараметр("Область", ЭлементыФормы.ПолеВводаОбласть.Значение); Запрос.УстановитьПараметр("ОснМенеджер", ЭлементыФормы.ПолеВводаОсновнойМенеджер.Значение); Запрос.УстановитьПараметр("Регион", ЭлементыФормы.ПолеВводаРегион.Значение); Запрос.УстановитьПараметр("Контрагент", ЭлементыФормы.ПолеВводаКонтрагент.Значение); Запрос.УстановитьПараметр("Встреча", Перечисления.ВидыСобытий.ЛичнаяВстреча); Запрос.УстановитьПараметр("Статус", Перечисления.СостоянияСобытий.CRM_ВыявленИнтерес); Запрос.Текст= "ВЫБРАТЬ | Событие.ВидСобытия КАК ЛичныеВстречи, | Событие.Контрагент.ОсновнойМенеджерПокупателя КАК ОсновнойМенеджер, | Событие.Контрагент.ОсновнойМенеджерЗапасныеЧасти КАК ОсновнойМенеджерЗапасныеЧасти, | Событие.Контрагент КАК Контрагент, | Событие.СостояниеСобытия, | Событие.Контрагент.ПриоритетВРаботе КАК ПриоритетВРаботе, | Событие.Регион, | Событие.Дата КАК Дата, | Событие.ВидСобытия КАК ВидСобытия |ИЗ | Документ.Событие КАК Событие |ГДЕ | ВЫБОР | КОГДА &Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) | ТОГДА Событие.Контрагент = &Контрагент | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &VIP <> ЗНАЧЕНИЕ(Справочник.ПриоритетРаботы.ПустаяСсылка) | ТОГДА Событие.Контрагент.ПриоритетВРаботе = &VIP | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &ОснМенеджер <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) | ТОГДА Событие.Контрагент.ОсновнойМенеджерПокупателя = &ОснМенеджер | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &Регион <> ЗНАЧЕНИЕ(Справочник.Регионы.ПустаяСсылка) | ТОГДА Событие.Регион = &Регион | ИНАЧЕ ИСТИНА | КОНЕЦ | И Событие.Дата >= &ДатаНачала | И Событие.Дата <= &ДатаКонца | И Событие.ВидСобытия = &Встреча | |СГРУППИРОВАТЬ ПО | Событие.Контрагент.ОсновнойМенеджерПокупателя, | Событие.Контрагент.ОсновнойМенеджерЗапасныеЧасти, | Событие.СостояниеСобытия, | Событие.Контрагент.ПриоритетВРаботе, | Событие.Регион, | Событие.Дата, | Событие.ВидСобытия, | Событие.Контрагент, | Событие.ВидСобытия | |УПОРЯДОЧИТЬ ПО | Контрагент |ИТОГИ | КОЛИЧЕСТВО(ЛичныеВстречи) |ПО | Контрагент ИЕРАРХИЯ, | ОсновнойМенеджер |АВТОУПОРЯДОЧИВАНИЕ"; Выборка = Запрос.Выполнить(); ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; Макет = ПолучитьМакет("Макет"); ОбластьДата = Макет.ПолучитьОбласть("ШапкаДата"); ОбластьНазвание = Макет.ПолучитьОбласть("ШапкаНазвание"); ОбластьОбласть = Макет.ПолучитьОбласть("ШапкаОбласть"); ОбластьVIP = Макет.ПолучитьОбласть("ШапкаVIP"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьДанные = Макет.ПолучитьОбласть("Данные"); ОбластьИтоги = Макет.ПолучитьОбласть("ИТОГИ"); ТабДок.Очистить(); ОбластьДата.Параметры.ДатаОтчета = ТекущаяДата(); ТабДок.Вывести(ОбластьДата); ТабДок.Вывести(ОбластьНазвание); ОбластьОбласть.Параметры.Область = ЭлементыФормы.ПолеВводаОбласть.Значение; Табдок.Вывести(ОбластьОбласть); ОбластьVIP.Параметры.VIP = ЭлементыФормы.ПолеВводаVIP.Значение; ТабДок.Вывести(ОбластьVIP); ТабДок.Вывести(ОбластьШапкаТаблицы); ВыборкаКонтрагент = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ТабДок.НачатьАвтогруппировкуСтрок(); Пока ВыборкаКонтрагент.Следующий() Цикл ОбластьДанные.Параметры.ЛичныеВстречи = 0; ОбластьДанные.Параметры.ВстречиИнтерес = 0; ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры, ВыборкаКонтрагент); ТабДок.Вывести(ОбластьДанные,1); КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); КонецПроцедуры |
|||
1
Tateossian
29.02.16
✎
13:51
|
Вот это убери:
ЭлементыФормы.ДатаНачала.Значение на ДатаНачала, так как это противоречит паттерну MVC |
|||
2
Лефмихалыч
29.02.16
✎
13:51
|
ЯННП.
Зачем в твоем запросе все эти ВЫБОРКОГДАТОГДА? |
|||
3
Rie
29.02.16
✎
13:53
|
(0) Вместо ИТОГИ используй агрегатные функции.
|
|||
4
GoStopFan
29.02.16
✎
13:58
|
(2) В форме есть отбор по критериям. Если поле заполенно, то по нему отбираем. если нет - то пропускаем этот пункт. (3) Так вот я не понимаю как.
|
|||
5
FIXXXL
29.02.16
✎
14:00
|
(4) лучше начинай СКД осваивать
|
|||
6
GoStopFan
29.02.16
✎
14:01
|
(5) Начальник сказал не через СКД делать
|
|||
7
Rie
29.02.16
✎
14:10
|
(4) В секции КОГДА укажи все условия.
Текст запроса можешь формировать программно - и тогда просто не включай в него соответствующее условие, если оно не задано на форме. |
|||
8
GoStopFan
29.02.16
✎
14:15
|
(7) На форме указывается только ВИП, Регион, контрагент, менеджер. Вот в секции КОГДА я вроде как все это и записал. По факту сейчас выводит частично то, что мне надо - это контрагента и его менеджера, исходя из заданных критериев. Тут все норм работает. Вопрос в том, как сделать, чтобы просматривались все значения реквизита ВидСобытия. И если это втреча - то плюсовалось в одну колонку, если звонок - в другую..
|
|||
9
Rie
29.02.16
✎
17:50
|
(8) Что на форме указывается - это дело десятое. Каким-то образом данные получены.
Что касается "в разные колонки" - создай подзапрос. В котором будут два поля в ВЫБОР, превращающие ВидСобытия в 1 или в 0. И потом - СУММА(). |
|||
10
ВРедная
29.02.16
✎
18:00
|
(9) Зачем человека плохому учишь. Подзапросы...
Сделай отдельные колонки полей прямо в запросе, типа: Выбор когда Событие.ВидСобытия = &ПервоеСобытие тогда 1 Иначе 0 конец КАК ПервоеСобытие, Выбор когда Событие.ВидСобытия = &ВтороеСобытие тогда 1 Иначе 0 конец КАК ВтороеСобытие И т.д. А в итогах сложи. Если если нужно сгруппировать - в группировках тоже сложи эти поля. |
|||
11
GoStopFan
01.03.16
✎
10:19
|
(10) Спасибо огромное) Теперь все работает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |